Устройство для отслеживания уровня воды в резервуаре и передачи данных по беспроводной сети




На участке у автора этой самоделки есть резервуар с дождевой водой стекающей с крыши во время осадков. Эта вода используется для различных бытовых нужд стирки, полива растений в саду и т.д. Последние три года в данной местности лето было очень засушливым и приходилось постоянно следить за уровнем воды в резервуаре. Обычно мастер делал это с помощью длинной палки, но в наш век электроники глупо было бы не воспользоваться ее плодами.

Инструменты и материалы:
-ESP8266 ESP-12F;
-Плата расширения ESP-12F;
-Модуль последовательного адаптера FT232RL FTDI;
-Ультразвуковой модуль HC-SR04-P;Обратите внимание, что буква P важна, так как это версия с низким минимальным рабочим напряжением 3 В.
-BME280 3.3V версия: датчик температуры, давления и влажности;
-n-канальный MOSFET-транзистор IRL2203N;
-Регулятор напряжения MCP1700-3302E 3.3V;
-3 аккумулятора AA;
-Батарейный отсек на 3 батареи;
-Макетная плата;
Резисторы: 1шт.- 470K, 1шт. — 100K, 4шт. — 10K;
-Два керамических конденсатора по 1 мкФ;
-Тумблер — 3 шт;
-U-образные макетные провода;

Шаг первый: об устройстве
Идея состоит в том, чтобы установить ультразвуковой датчик в верхней части резервуара. Этот датчик работает как локатор, излучающий звуковые волны, которые затем отражаются от поверхности воды. По времени, необходимому для возвращения волн, и скорости звука, можно рассчитать расстояние до поверхности воды и определить, насколько заполнен резервуар.

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

Для передачи данных мастер решил использовать встроенный Wi-Fi микрочипа ESP8266. Хотя Wi-Fi довольно энергоемкий, у него есть преимущество перед другим типом радиосвязи: пользователь может напрямую подключаться к беспроводной сети.

Для экономии энергии большую часть времени ESP8266 находится в режим сна, а выполняет измерения только раз в час. Для данной задачи такого интервала более чем достаточно. После сканирования данные отправляются в ThingSpeak (облачное хранилище), а затем их можно будет прочитать на смартфоне через приложение.

Скорость звука, используемая в алгоритме работы устройства, зависит от температуры и, в меньшей степени, от влажности. Для точных наружных измерений в разные сезоны мастер добавил датчик BME280, который измеряет температуру, влажность и давление. В качестве бонуса это делает данное устройство еще и мини-метеостанцией.

Шаг второй: ультразвуковой датчик
Устройство будет измерять расстояние до поверхности воды с помощью ультразвукового датчика HC-SR04-P. Как и в случае с летучей мышью, этот датчик использует локатор. Он посылает звуковой импульс с частотой, слишком высокой для человеческого уха, т.е. ультразвуковой, и ждет, пока он ударится об объект, отразится и вернется.

Конкретно, если триггерный вывод находится в высоком положении в течение не менее 10 мкс, датчик отправляет пакет из 8 импульсов с частотой 40 Гц. Ответ затем получается на выводе Echo в виде импульса с длительностью, равной времени между отправкой и получением ультразвукового импульса. Затем нужно разделить на 2, так как ультразвуковой импульс идет вперед и назад, и нужно время прохождения в одном направлении умножить на скорость звука, которая составляет около 340 м / с.

Но, скорость звука зависит так же от температуры и, в меньшей степени, от влажности. Насколько это актуально в данном случае? Зимой, при -5 ° C, скорость составляет 328,5 м / с, а летом,при 25 ° C, 347,1 м / с. Предположим, что время прохождения в одну сторону 3 мс. Значит, зимой расстояние будет 98,55 см, а летом 104,13 см. Это большая разница. Значит необходимо установить термометр для отслеживания и корректировки согласно его показаниям. Мастер решил установить датчик BME280, который измеряет температуру, влажность и давление. В коде, который он использовал в функции speedOfSound, есть формула, которая вычисляет скорость звука учитывая все три параметра.
Есть еще один важный нюанс относительно HC-SR04. На рынке представлены две версии: стандартная версия работает от 5 В, а HC-SR04-P может работать в диапазоне напряжений от 3 до 5 В. Поскольку 3 аккумуляторные батареи AA обеспечивают примерно 3×1,25 В = 3,75 В, нужна именно P-версия.


Шаг третий: выбор платы ESP8266
Чтобы датчик работал от батареи как можно дольше, нужно сэкономить на энергопотреблении. Хотя Wi-Fi ESP8266 обеспечивает очень удобный способ подключения датчика к облаку, он также довольно энергоемкий. В процессе работы ESP8266 потребляет около 80 мА. Таким образом, с батареями на 2600 мАч устройство сможет проработать не более 32 часов.

К счастью, у ESP8266 есть режим глубокого сна, в котором почти все функции выключены. Идея состоит в том, чтобы большую часть времени помещать ESP8266 в глубокий сон и периодически будить его, чтобы провести измерения и отправить данные по Wi-Fi в облако. Согласно этого руководства, максимальное время глубокого сна у ESP8266 составляло около 71 минуты, но с момента выхода ядра ESP8266 Arduino 2.4.1 оно увеличилось примерно до 3,5 часов. Мастер установил интервал в один час.

Большинство плат для ESP8266, используют регулятор напряжения AMS1117, который потребляет много энергии. Единственным исключением является WEMOS D1 mini, который поставляется с более экономичным ME6211. WEMOS D1 mini потребляет около 150 мкА в глубоком сне.
Еще экономичней в этом плане ESP-12F. У этой платы нет USB UART или регулятора напряжения. Потребление в режиме глубокого сна у нее составляет всего 22 мкА.

Шаг четвертый: облачная служба
Для хранения данных мастер будет использовать ThingSpeak, облачную службу Интернета вещей. Переходим на https://thingspeak.com/ и создаем учетную запись. После входа в систему кликаем кнопку «New Channel». В настройках канала вводим название и описание. Затем мы называем поля каналов и активируем их, устанавливая флажки справа.

Авторские настройки полей следующие:
Field 1: water level (cm) — (уровень)
Field 2: battery level (V) — (батарея)
Field 3: temperature (°C) — (Температура)
Field 4: humidity (%) — (влажность)
Field 5: pressure (Pa) — (давление)

Для дальнейшего использования нужно записать идентификатор канала , ключ API чтения и ключ API записи, которые можно найти в меню ключей API.

В дальнейшем можно считать данные из облака на смартфоне с помощью приложения. На телефоне с Android мастер использует виджет IoT ThingSpeak Monitor.

Шаг четвертый: программирование ESP-12F
Для программирования мастер будет использовать IDE Arduino.Чтобы подготовить его к работе с ESP8266, выполните следующие действия:
Загружаем IDE Arduino.

Далее в меню File — Preferences — Settings добавляем URL http://arduino.esp8266.com/stable/package_esp8266com_index.json к дополнительным URL-адресам Board Manager. Далее в меню Tools — Board — Boards Manager устанавливаем esp8266.
Выбираем в качестве платы : Generic ESP8266 Module.

Для работы с ESP-12F мастер использовал плату расширения. Он припаял микросхему к плате, а затем припаял разъемы к пластине. После монтажа он обнаружил, что плата расширения слишком широка для стандартной макетной платы. Сбоку не остается свободных контактов для подключения.

Решение, которое он выбрал, — использовать U-образные провода и соединить их, как на фото ниже. Таким образом, GND и VCC подключаются к направляющим на макетной плате, и оставшиеся контакты становятся доступными. Недостатком является то, что макетная плата, после монтажа устройства будет вся оплетена проводами.

Другое решение — соединить две макетные платы вместе, как показано в этом видео.

Далее, чтобы запрограммировать ESP-12F через USB-порт компьютера, нужен переходник. Мастер использовал программатор FT232RL FTDI. У программатора есть перемычка для выбора напряжения между 3,3 В или 5 В. В данном случае нужно установить 3,3 В. Установка драйверов должна быть автоматической, но если программирование не получится можно попробовать установить их вручную с этой страницы.

ESP8266 имеет режим программирования для загрузки новой прошивки во флэш-память и режим флэш-памяти для запуска текущей прошивки из нее. Для выбора между этими режимами контакты должны принимать определенное значение во время загрузки:
Программирование: GPIO0: low, CH-PD: high, GPIO2: high, GPIO15: low
Память: high, CH-PD: high, GPIO2: high, GPIO15: low
Кроме того, убедитесь, что вы подключили вывод TX FT232RL к выводу RXD ESP8266.

Последовательность программирования следующая:
Установите GPIO2 на низкий уровень, закрыв переключатель программирования.
Выполните сброс ESP8266, закрыв, а затем снова открыв переключатель сброса. ESP8266 теперь загружается в режиме программирования.
Установите GPIO2 обратно на высокий уровень, открыв переключатель программирования.
Загрузите новую прошивку из Arduino IDE.

Перезагрузите ESP8266 еще раз, замкнув и снова открыв переключатель сброса. ESP8266 теперь загружается во флэш-режиме и запускает новую прошивку.

Теперь можно проверить, работает ли программирование, загрузив скетч Blink.
С помощью скетча проверяются контакты GND, VCC, GPIO2, RST, TXD и RXD.

Прежде чем продолжить, он бы рекомендовал также проверить другие контакты с помощью мультиметра. Для этого нужно использовать этот скетч, который устанавливает все контакты в высокий уровень один за другим на 5 секунд, а затем переводит ESP8266 в глубокий сон на 20 секунд. Чтобы ESP8266 проснулся, необходимо подключить RST к GPIO16.


Шаг пятый: загрузка эскиза
Код можно скачать здесь.
В начале файла необходимо ввести некоторую информацию: имя и пароль используемой WLAN, данные статического IP -адреса, а также идентификатор канала и ключ API канала ThingSpeak.

Следуя совету в этом блоге, вместо DHCP, где маршрутизатор динамически назначает IP-адрес, нужно использовать статический IP-адрес. При такой настройке обмен данными намного быстрее и следовательно, мы экономим активное время и энергию аккумулятора. Поэтому мы должны установить доступный статический IP-адрес, а также IP-адрес маршрутизатора (шлюза), маску подсети и DNS-сервер. Если вы не знаете, что вводить, прочтите о настройке статического IP-адреса в руководстве к вашему роутеру. На компьютере с Windows, подключенном через Wi-Fi к вашему маршрутизатору, запустите оболочку ( кнопка Windows-r , cmd ) и введите ipconfig / all. Вы найдете большую часть необходимой информации в разделе Wi-Fi.

Вот основные особенности кода:
После пробуждения код устанавливает для switchPin (по умолчанию GPIO15) высокий уровень. Это действие включает транзистор, который, в свою очередь, включает датчик HC-SR04-P. Перед тем, как погрузиться в глубокий сон, он снова устанавливает на контакте низкий уровень, выключая транзистор и HC-SR04-P.

Если modePIN (по умолчанию GPIO14 ) низкий, код переходит в режим OTA вместо режима измерения. С помощью OTA (обновление по воздуху) мы можем обновлять прошивку через Wi-Fi, а не через последовательный порт. В данном случае это довольно удобно, так как не нужно подключать последовательный порт к USB-адаптеру. Просто установите GPIO14 на низкий уровень (с помощью переключателя OTA в электронной схеме), сбросьте ESP8266 (с помощью переключателя сброса).

На аналоговом PIN ( A0 ) измеряется напряжение АКБ. Это позволяет выключить устройство, если напряжение станет слишком низким и заменить батарею.

Измерение расстояния датчика HC-SR04-P выполняется в функции DistanceMeasurement. Для повышения точности измерение повторяется numMeasuresDistance (по умолчанию 3 раза).

Здесь есть функция для расчета скорости звука на основе измерений температуры, влажности и давления датчиком BME280. По умолчанию I2C адрес BME280 является 0x76, но если он не работает, потребуется изменить его на 0x77: BOOL bme280Started = bme280.begin (0x77);
Мастер будет использовать BME280 в принудительном режиме, что означает, что производится одно измерение и он снова переходит в спящий режим для экономии энергии.

Если пользователь устанавливаете емкость (л), полное расстояние (см) и площадь (м2), код вычисляет оставшийся объем резервуара по измеренному расстоянию: двойной оставшийся объем = емкость + 10,0 * (полное расстояние) * площадь; и загружает данные в Tоблако. Если вы сохраните значения по умолчанию, он загружает расстояние до поверхности воды в сантиметрах.

Шаг шестой: схема

Выше представлена схема. Она довольно велика для одной макетной платы, особенно с учетом негабаритной платы расширения и U-образными проводами.

Для питания устройства используется напряжение от батареи (около 3,75 В) и 3,3 В, которые питают ESP8266 и BME280. Мастер спланировал 3,3 В на левую сторону платы, а 3,75 В на правую. Регулятор напряжения преобразует 3,75 В в 3,3 В. Он добавил конденсаторы 1 мкФ на вход и выход регулятора напряжения для повышения стабильности.

GPIO15 ESP8266 подключается к затвору транзистора. Это позволяет ESP8266 включать транзистор и, следовательно, ультразвуковой датчик, когда он активен, и выключать его при погружении в глубокий сон.

GPIO14 подключается к переключателю OTA. Замыкание переключателя подает сигнал ESP8266, что мы хотим запустить следующий режим в режиме OTA, то есть после того, как мы нажмем (закроем и откроем) переключатель RESET и загрузим новый скетч по беспроводной сети.
Контакты RST и GPIO2 подключаются, как показано на схеме программирования. Вывод RST теперь также подключен к GPIO16, чтобы позволить ESP8266 выйти из глубокого сна.

Контакты TRIG и ECHO ультразвукового датчика подключены к GPIO12 и GPIO13, а контакты SCL и SDA BME280 подключены к GPIO5 и GPIO4.
Наконец, аналоговый вывод АЦП через делитель напряжения подключен к входному напряжению. Это позволяет измерить входное напряжение для проверки заряда батарей. Вывод ADC может измерять напряжение от 0 до 1В. В качестве делителя напряжения мастер выбрал резисторы 100К и 470К.

Даже когда схема работает от батарей, можно подключить USB к последовательному адаптеру. Просто не забудьте отключить VCC адаптера и подключить GND, RX и TX, как показано на схеме программирования. Это позволяет открыть Serial Monitor в Arduino IDE, чтобы прочитать отладочные сообщения и убедиться, что все работает должным образом.

Для всей схемы потребление тока в режиме глубокого сна при работе от батарей 50 мкА.
Общее время активности составляет около 7 секунд, из которых 4,25 секунды для подключения к Wi-Fi и 1,25 секунды для отправки данных в облако. После ряда вычислений он пришел к результату, что аккумулятора 2600 мАч теоретически хватает на 12400 часов = 515 дней.

Шаг седьмой: корпус
Мастер поместил датчик в пластиковый контейнер емкостью 1 литр. Внизу проделал два отверстия под «глазки» датчика HC-SR04-P. Помимо отверстий, емкость должна быть водонепроницаемой. Затем устройство крепится к стене резервуара.



Источник (Source)

Источник: usamodelkina.ru

Добавить комментарий