Автоматический дозатор воды для отслеживания расхода: 6 шагов
Автоматический дозатор воды для отслеживания расхода: 6 шагов
Автоматический дозатор воды для отслеживания расхода
Автоматический дозатор воды для отслеживания расхода
Автоматический дозатор воды для отслеживания расхода
Автоматический дозатор воды для отслеживания расхода

Всем привет!

Пару месяцев назад я сидел в своей комнате и думал о том, какой проект я хочу сделать для школьного задания. Я хотел сделать что-то, что подошло бы мне и принесло бы пользу в будущем. Внезапно в комнату вошла мама и стала жаловаться на то, что не пьет достаточно воды. Меня сразу осенило. Мне пришла идея сделать автоматический дозатор воды (как в кинотеатре), который ежедневно отслеживает ваше потребление воды.

С Raspberry Pi, несколькими датчиками, помпой и небольшими знаниями я попытался сделать это как можно лучше.

В конце всех шагов у вас будет работающий дозатор воды, который наполняет вашу бутылку с водой и который соединяется и взаимодействует с вашим Raspberry Pi. Вы не только сможете отслеживать потребление воды в процентах, но также сможете просматривать температуру и уровень воды в емкости для воды. Наконец, вы сможете проверить свою статистику. Если это звучит для вас интересно, обязательно ознакомьтесь с этим и попробуйте сами!

Репозиторий GitHub:

Запасы

Микроконтроллеры

Raspberry Pi 4

Датчики и модули

Я использовал 4 датчика:

2xHC-SR04Ультразвуковой датчик

Ультразвуковые датчики измеряют расстояние с помощью ультразвуковых волн. Головка датчика излучает ультразвуковую волну и принимает волну, отраженную от цели. Ультразвуковые датчики измеряют расстояние до цели, измеряя время между излучением и приемом. Я использовал два из них, чтобы проверить, есть ли поблизости бутылка, и измерить расстояние до воды в резервуаре.

Техническая спецификация

1x датчик температуры DS18B20

DS18B20 - это программируемый 1-проводной датчик температуры от компании Maxim со встроенным датчиком температуры. Он широко используется для измерения температуры в жестких условиях окружающей среды, таких как химические растворы, шахты, почва и т. Д. Я использовал его для измерения температуры воды в резервуаре для воды.

Техническая спецификация

1x RFID-модуль RC522

RC522 - это RFID-модуль 13,56 МГц, основанный на контроллере MFRC522 от NXP semiconductors. Модуль может поддерживать I2C, SPI и UART и обычно поставляется с картой RFID и брелоком. Он обычно используется в системах посещаемости и других приложениях для идентификации человека / объекта. В этом проекте он используется для системы идентификации / входа в систему.

Техническая спецификация

И 2 исполнительных механизма:

1x перистальтический насос 12-24В

Я использовал перистальтический насос, чтобы перелить воду из бака в бутылку с водой. Большинство насосов работали слишком медленно, поэтому я выбрал версию на 24 В, которую я питаю от адаптера питания на 24 В.

1x ЖК-дисплей

ЖК-дисплей используется для отображения IP-адреса и важных сообщений. Жидкокристаллический дисплей (ЖКД) - это плоский дисплей или другое оптическое устройство с электронной модуляцией, в котором используются светомодулирующие свойства жидких кристаллов в сочетании с поляризаторами.

Техническая спецификация

Кожух

Говоря о корпусе, я сделал самодельную работу с расходными материалами с домашнего склада (в моем случае это Brico в Бельгии). Я использовал фанеру, которую обрезал до нужного размера. Я расскажу о том, как я обосновал свою позицию на следующем этапе, но вот вещи, которые вам понадобятся:

  • 3x фанерные доски
  • 1x маленькая воронка
  • 1x резервуар для воды (вы можете выбрать, какой объем вы хотите, я выбрал 10 л)
  • 1x поддон для сбора капель

Вы можете найти все материалы и цены в прилагаемой спецификации.

Шаг 1: Подключение всей электроники

Подключение всей электроники
Подключение всей электроники
Подключение всей электроники
Подключение всей электроники

Теперь, когда мы собрали всю электронику, самое время их подключить. Я сделал две схемы Фритцинга, одну макетную плату и одну схему, чтобы показать вам, как и где должна быть подключена вся электроника. Вы можете найти ссылку для загрузки Fritzing здесь: https://fritzing.org/download/. Как упоминалось ранее, я использовал Raspberry Pi и подключил RFID-сканер, два ультразвуковых датчика, один датчик температуры, ЖК-дисплей и перистальтический насос для воды.

Я приложил две схемы в PDF-файле, если вы хотите взглянуть на него поближе.

Шаг 2: настройка Raspberry Pi

Мы будем использовать Raspberry Pi для запуска и управления всем: серверной частью, интерфейсом и базой данных.

Raspberry Pi не запускается автоматически. Нам нужно будет выполнить несколько шагов, чтобы начать его использовать.

Шаг 1: Распбиан

Если вы используете новый Raspberry Pi, вам понадобится raspbian. Ссылку для скачивания и руководство можно найти здесь.

Шаг 2: Запись образа на SD

Теперь, когда у вас есть образ Raspbian, вам понадобится программа для записи образов (я рекомендую win32diskimager) для записи файла образа на SD-карту. Полное руководство можно найти здесь.

Шаг 3: вход в Raspberry Pi

Откройте «Powershell» и введите «ssh [email protected]». Если все пойдет хорошо, они попросят вас ввести пароль (пароль по умолчанию - всегда raspberry). Обычно при этом вы должны войти в Raspberry Pi. Теперь нам нужно внести некоторые изменения в наши настройки. Введите в терминале sudo raspi-config и нажмите Enter. Перейдите к параметрам локализации> изменить часовой пояс и установите его на свой часовой пояс. Вы также должны изменить страну своего Wi-Fi на свое местоположение. Наконец, перейдите к параметрам интерфейса и включите SPI, I2C и 1-wire. Это будет важно для правильного использования датчиков.

Шаг 4: Настройка подключения к Интернету

Мы будем использовать сеть Wi-Fi. Вы можете добавить свою домашнюю сеть через:

wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Вам придется перезагрузить Pi, чтобы установить соединение. Чтобы проверить, работает ли он, вы можете использовать ifconfig, чтобы проверить, есть ли IP-адрес.

Шаг 5: Настройка веб-сервера и базы данных

Во-первых, лучше всего обновить и обновить систему с помощью следующей последовательности команд:

  1. sudo apt dist-upgrade --auto-remove -y
  2. sudo apt upgrade
  3. sudo apt update
  4. sudo apt autoremove

Как только это будет сделано, нам потребуются следующие пакеты для нашего веб-сервера и базы данных:

Apache

sudo apt install apache2 -y

PHP

sudo apt install php

sudo apt установить phpMyAdmin -y

Не забудьте установить безопасный пароль MySQL, когда он просит установить пароль.

MariaDB

sudo apt установить mariadb-server mariadb-client -y

sudo apt установить php-mysql -y

sudo systemctl перезапустить apache2.service

Шаг 6: Установка библиотек Python

Для бэкэнда нам понадобятся библиотеки для Python. Мы установим их с помощью pip3, потому что мы используем python3.

pip3 установить mysql-connector-python

pip3 установить flask-socketio

pip3 установить flask-cors

pip3 установить gevent

pip3 установить gevent-websocket

sudo apt установить python3-mysql.connector -y

pip3 установить mfrc522! (нам понадобится это, чтобы использовать сканер RFID)

Шаг 7. Подготовка кода Visual Studio

Для запуска кода я рекомендую использовать Visual Studio Code для подключения Raspberry Pi к. Ссылку для загрузки для установки VSC можно найти здесь.

Если у вас еще не установлена удаленная разработка с использованием SSH, вы можете найти шаги, чтобы сделать это здесь.

Шаг 3: Создание базы данных

Создание базы данных
Создание базы данных

Мы будем хранить все данные наших датчиков и пользовательские данные в базе данных.

Моя база данных состоит из 5 таблиц:

Устройство

Таблица Device имеет DeviceID, который ссылается на само устройство. DeviceName дает имя устройства, в данном случае ультразвуковой датчик, датчик температуры,… DeviceType указывает тип устройства (датчик или исполнительный механизм).

История

Таблица History содержит всю историю датчиков, вместе с датой (HistoryDate), когда история была добавлена, и значением момента в истории. У него также есть два внешних ключа:

  • DeviceID, чтобы связать конкретный журнал с устройством.
  • UserID, чтобы связать конкретного пользователя с журналом (это потому, что мы используем RFID, и мы хотим добавить журнал истории для одного конкретного пользователя)

Пользователь

Таблица User используется для создания системы входа в систему со сканером RFID. Он состоит из псевдонима, имени, фамилии, пароля и RFID (это номер RFID метки). Каждый пользователь привязан к контейнеру (резервуар для воды), а также имеет идентификатор контейнера в качестве внешнего ключа.

Контейнер

Table Container состоит из различных контейнеров. У него есть идентификатор, ContainerLocation (это может быть предприятие, дом или что-то еще). Наконец, у него есть MaxLevel, который означает максимальный объем контейнера.

Настройки

Table Settings имеет SettingsID и отслеживает DailyGoal каждого пользователя + дату добавления DailyGoal пользователем. Это объясняет UserID внешнего ключа.

Дамп базы данных можно найти в моем репозитории GitHub в разделе База данных.

Шаг 4: Настройка серверной части

Нет проекта без работающего бэкэнда.

Бэкэнд состоит из 4 разных вещей:

помощники

Помощники - это все классы, используемые для различных датчиков и исполнительных механизмов. Есть помощник для датчика температуры (DS18B20), для ультразвуковых датчиков (HCSR05), которые могут измерять расстояние, и для ЖК-дисплея, чтобы иметь возможность писать сообщения на экран.

хранилища

В папке репозиториев вы найдете 2 файла Python:

  • Database.py - помощник для извлечения строк из вашей базы данных. Это упрощает выполнение и чтение базы данных.
  • DataRepository.py, который содержит все запросы SQL, которые используются в основном коде (app.py). Они используются для получения, обновления или удаления данных из базы данных.

app.py

Это основной бэкэнд-код проекта. Он выполняет настройку, определяя все контакты и режимы, и содержит код для работы насоса, получения температуры, получения доступа к пользователю и т. Д. Он также содержит маршруты, используемые для получения данных из базы данных и всех файлов socketio.on. Для каждой HTML-страницы свой socketio.on, чтобы каждая функция работала в нужное время.

config.py

У нас остался один файл: config.py. Это файл с параметрами конфигурации для подключения к вашей базе данных. Не забудьте указать учетные данные своей базы данных.

Бэкэнд можно найти в моем репозитории в разделе Backend.

Шаг 5: Настройка внешнего интерфейса

Настройка внешнего интерфейса
Настройка внешнего интерфейса
Настройка внешнего интерфейса
Настройка внешнего интерфейса

Что касается Frontend, я начал с создания дизайна того, как мой веб-сервер должен выглядеть в AdobeXD. Я использовал цвета своего логотипа: оранжевый и два разных оттенка синего. Я постарался сделать дизайн как можно более простым и создал водяную каплю, которая показывает процент того, насколько вы достигли своей цели дня.

В моем репозитории GitHub вы найдете мой Frontend в разделе Code> Frontend. Важно, чтобы вы вставили это в свою папку / var / html вашего Raspberry Pi, чтобы сделать его доступным с веб-сервера.

Он состоит из пары файлов HTML, которые ведут на разные страницы. Вы также найдете мой screen.css со всем необходимым CSS, чтобы он выглядел как мой проект. Наконец, в скриптах у вас будут разные файлы JavaScript. Эти скрипты связываются с моим сервером, чтобы отображать данные из моей базы данных или серверной части.

Бэкэнд можно найти в моем репозитории под Frontend.

Шаг 6: Создание обсадной колонны

Создание корпуса
Создание корпуса
Создание корпуса
Создание корпуса
Создание корпуса
Создание корпуса

Если мы говорим о моем случае, то есть две основные части:

Внешний корпус

Я построил корпус с нуля. Я использовал фанерные доски и распилил их нужных размеров. Я скрутил все доски вместе и просверлил отверстия для ЖК-дисплея, кнопки и ультразвукового датчика, чтобы определить, есть ли там бутылка с водой, и воронка для распределения воды. Я разделил свой корпус на разные секции, чтобы вода и электроника были разделены, и я использовал кабельный лоток, чтобы защитить кабели от утечки воды. В прилагаемом видео вы можете увидеть большинство аспектов моей оболочки и то, как я ее сделал. Я также напечатал на 3D-принтере кнопку, которая приклеена к обычной кнопке. Наконец, я использовал поддон для сбора капель, чтобы собрать всю пролитую воду. Я также использовал петли, чтобы открывать и закрывать боковую панель, чтобы посмотреть на свою электронику. Вы всегда можете использовать подержанный диспенсер или использовать другие материалы.

Для точных измерений моей сборки я приложил PDF-файл со всеми размерами пластин, используемых в кейсе.

Водный танк

Резервуар для воды был непростой задачей. У меня есть резервуар для воды с отверстием на дне, поэтому мне пришлось заклеить его изолентой, чтобы предотвратить утечку. Вам понадобится четыре отверстия: одно для датчика температуры, другое для трубки помпы. один для трубки для наполнения резервуара и один для ультразвукового датчика. Для последнего я напечатал на 3D-принтере футляр, который можно найти здесь. Это дает датчику большую защиту от воды. Затем я просверлил прямоугольник в верхней части резервуара, чтобы установить датчик.

Рекомендуемые: