Оглавление:

Датчик уровня водосборника с батарейным питанием: 7 шагов (с изображениями)
Датчик уровня водосборника с батарейным питанием: 7 шагов (с изображениями)

Видео: Датчик уровня водосборника с батарейным питанием: 7 шагов (с изображениями)

Видео: Датчик уровня водосборника с батарейным питанием: 7 шагов (с изображениями)
Видео: Автоматизация садовой бочки. Датчик уровня воды для полива огорода. 2024, Ноябрь
Anonim
Датчик уровня водосборника с батарейным питанием
Датчик уровня водосборника с батарейным питанием
Датчик уровня водосборника с батарейным питанием
Датчик уровня водосборника с батарейным питанием

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

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

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

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

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

Части:

  • 1x ESP8266 ESP-12F.
  • 1x адаптерная пластина ESP-12F.
  • 1x FT232RL FTDI: переходник с USB на последовательный.
  • 1x HC-SR04-P: ультразвуковой модуль измерения расстояния. Обратите внимание, что P важен, поскольку это версия с низким минимальным рабочим напряжением 3 В.
  • 1x BME280 3.3V версия: датчик температуры, давления и влажности.
  • 1x IRL2203N: n-канальный MOSFET-транзистор.
  • 1x MCP1700-3302E 3.3V версия: регулятор напряжения.
  • 3 аккумулятора AA, например 2600 мАч.
  • 1x батарейный отсек на 3 батареи.
  • 1x макет.
  • Резисторы: 1x 470K, 1x 100K, 4x10K.
  • Конденсаторы: 2 керамических по 1 мкФ.
  • Тумблер 3x.
  • П-образные макетные провода.
  • Провода перемычки.
  • Пластиковая емкость для супа 1л.
  • Крепежное кольцо для контейнера.

Я сделал код доступным на GitHub.

Шаг 1. Знакомство с ультразвуковым датчиком расстояния

Знакомство с ультразвуковым датчиком расстояния
Знакомство с ультразвуковым датчиком расстояния
Знакомство с ультразвуковым датчиком расстояния
Знакомство с ультразвуковым датчиком расстояния

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

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

Но подождите минутку! Фактически, скорость звука зависит от температуры и, в меньшей степени, от влажности. Я придираюсь или это актуально? Используя инструмент расчета, мы находим, что зимой (при -5 ° C) мы могли иметь скорость 328,5 м / с, а летом (при 25 ° C) 347,1 м / с. Итак, предположим, мы нашли время прохождения в одну сторону 3 мс. Зимой это будет 98,55 см, а летом 104,13 см. Это большая разница! Таким образом, чтобы получить достаточную точность в любое время года и даже днем и ночью, мы должны добавить в нашу установку термометр. Я решил включить BME280, который измеряет температуру, влажность и давление. В коде, который я использовал в функции speedOfSound, формулу, которая вычисляет скорость звука по всем трем параметрам, хотя температура действительно является наиболее важным фактором. Влажность по-прежнему оказывает меньшее влияние, но влияние давления незначительно. Мы могли бы использовать более простую формулу, учитывающую только температуру, которую я реализовал в speedOfSoundSimple.

Есть еще один важный момент относительно HC-SR04. Доступны две версии: стандартная версия работает при 5 В, а HC-SR04-P может работать в диапазоне напряжений от 3 до 5 В. Поскольку 3 аккумуляторные батареи AA обеспечивают примерно 3x1,25 В = 3,75 В, важно приобрести P-версию. Некоторые продавцы могут отправить не тот. Так что взгляните на картинки, если купите один. Две версии выглядят по-разному сзади и спереди, как описано на этой странице. На задней панели P-версии все три микросхемы расположены горизонтально, а в стандартной версии - вертикально. В передней части стандартной версии есть дополнительная серебряная деталь.

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

Шаг 2: выбор платы ESP8266

Выбор платы ESP8266
Выбор платы ESP8266

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

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

Сначала я попробовал удобную плату разработки NodeMCU, но облом, в глубоком сне она все еще потребляла около 9 мА, что дает нам максимум 12 дней чистого глубокого сна без учета интервалов пробуждения. Важным виновником является стабилизатор напряжения AMS1117, который потребляет энергию, даже если вы пытаетесь обойти его, подключив батарею напрямую к контакту 3,3 В. На этой странице объясняется, как снять регулятор напряжения и USB UART. Однако мне никогда не удавалось сделать это, не разрушив мою доску. Более того, после удаления USB UART вы больше не можете подключаться к ESP8266, чтобы выяснить, что пошло не так.

Большинство плат для разработки ESP8266, похоже, используют расточительный регулятор напряжения AMS1117. Единственным исключением является WEMOS D1 mini (рисунок слева), который поставляется с более экономичным ME6211. Действительно, я обнаружил, что WEMOS D1 mini потребляет около 150 мкА в глубоком сне, что больше похоже на него. Большая часть этого, вероятно, связана с USB UART. Однако с этой платой вам придется самостоятельно припаять разъемы для контактов.

Однако мы можем добиться большего, используя простую плату, такую как ESP-12F (рисунок справа), у которой нет USB UART или регулятора напряжения. Подавая питание на вывод 3,3 В, я обнаружил, что потребление в режиме глубокого сна составляет всего 22 мкА!

Но чтобы заставить ESP-12F работать, приготовьтесь к пайке и немного сложнее его программировать! Кроме того, если батареи напрямую не обеспечивают правильное напряжение, которое составляет от 3 В до 3,6 В, нам необходимо предоставить собственный регулятор напряжения. На практике оказывается сложно найти аккумуляторную систему, которая обеспечивала бы напряжение в этом диапазоне в течение полного цикла разряда. Помните, что нам также необходимо запитать датчик HC-SR04-P, который теоретически может работать при напряжении всего 3 В, но работает более точно, если напряжение выше. Более того, на моей схеме HC-SR04-P включается транзистором, который вызывает небольшое дополнительное падение напряжения. Мы будем использовать регулятор напряжения MCP1700-3302E. Максимальное входное напряжение составляет 6 В, поэтому мы питаем его от 4 батареек АА. Решил использовать 3 батарейки АА.

Шаг 3. Создайте канал ThingSpeak

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

  • Поле 1: уровень воды (см)
  • Поле 2: уровень заряда батареи (В)
  • Поле 3: температура (° C)
  • Поле 4: влажность (%)
  • Поле 5: давление (Па)

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

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

Шаг 4: Как запрограммировать ESP-12F

Как программировать ESP-12F
Как программировать ESP-12F
Как программировать ESP-12F
Как программировать ESP-12F

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

Мы будем использовать IDE Arduino. Есть и другие инструкции, объясняющие, как его использовать, поэтому я буду краток. Чтобы подготовить его к работе с ESP8266, выполните следующие действия:

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

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

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

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

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

  • Программирование: GPIO0: низкий, CH-PD: высокий, GPIO2: высокий, GPIO15: низкий
  • Вспышка: GPIO0: высокий, CH-PD: высокий, GPIO2: высокий, GPIO15: низкий

Плата адаптера уже позаботится о подтягивании CH-PD и опускании GPIO15 с резисторами 10K.

Так что в нашей электронной схеме нам все еще нужно подтянуть GPIO2. Мы также предоставляем переключатель для перевода ESP8266 в режим программирования или флэш-памяти и переключатель для его сброса, который выполняется путем подключения RST к земле. Кроме того, убедитесь, что вы подключили вывод 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, который выдает сигнал пробуждения.

Шаг 5: загрузка эскиза

Я сделал код доступным на GitHub, это всего лишь один файл: Level-Sensor-Deepsleep.ino. Просто скачайте его и откройте в Arduino IDE. Или вы можете выбрать File - New и просто скопировать / вставить код.

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

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

Изучая код, вы видите, что в отличие от другого кода Arduino большая часть действий происходит в функции настройки, а не в функции цикла. Это связано с тем, что ESP8266 переходит в режим глубокого сна после завершения функции настройки (если мы не запустили режим OTA). После того, как он просыпается, это похоже на новый перезапуск, и он снова запускает настройку.

Вот основные особенности кода:

  • После пробуждения код устанавливает для switchPin (по умолчанию GPIO15) высокий уровень. Это включает транзистор, который, в свою очередь, включает датчик HC-SR04-P. Перед тем, как погрузиться в глубокий сон, он снова устанавливает на контакте низкий уровень, выключая транзистор и HC-SR04-P, чтобы убедиться, что он не потребляет больше драгоценной энергии батареи.
  • Если modePIN (по умолчанию GPIO14) низкий, код переходит в режим OTA вместо режима измерения. С помощью OTA (обновление по воздуху) мы можем обновлять прошивку через Wi-Fi, а не через последовательный порт. В нашем случае это довольно удобно, так как нам больше не нужно подключать последовательный порт к USB-адаптеру для дальнейших обновлений. Просто установите GPIO14 на низкий уровень (с помощью переключателя OTA в электронной схеме), сбросьте ESP8266 (с помощью переключателя сброса), и он должен стать доступным в Arduino IDE для загрузки.
  • На аналоговом PIN (A0) измеряем напряжение АКБ. Это позволяет нам выключить наше устройство, или постоянный глубокий сон, если напряжение станет слишком низким, ниже минимального напряжения, чтобы защитить батареи от чрезмерной разрядки. Аналоговое измерение не очень точное, мы измеряем numMeasuresBattery (по умолчанию 10) и берем среднее значение для повышения точности.
  • Измерение расстояния датчика HC-SR04-P выполняется в функции DistanceMeasurement. Для повышения точности измерение повторяется numMeasuresDistance (по умолчанию 3) раза.
  • Есть функция для расчета скорости звука на основе измерений температуры, влажности и давления датчиком BME280. Адрес I2C BME280 по умолчанию - 0x76, но если он не работает, вам может потребоваться изменить его на 0x77: bool bme280Started = bme280.begin (0x77);
  • Мы будем использовать BME280 в принудительном режиме, что означает, что требуется одно измерение и он снова переходит в спящий режим для экономии энергии.
  • Если вы устанавливаете емкость (л), полное расстояние (см) и площадь (м2), код вычисляет оставшийся объем резервуара для воды по измеренному расстоянию: двойной оставшийся объем = емкость + 10,0 * (полное расстояние-расстояние) * площадь; и загрузите это в ThingSpeak. Если вы сохраните значения по умолчанию, он загружает расстояние до поверхности воды в сантиметрах.

Шаг 6: построение электронной схемы

Создание электронной схемы
Создание электронной схемы

Выше представлена схема электронной схемы. Он довольно велик для одной макетной платы, особенно с учетом негабаритной переходной пластины и хитрости с 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 через делитель напряжения подключен к входному напряжению. Это позволяет измерить входное напряжение для проверки заряда батарей. Вывод ADC может измерять напряжения от 0 до 1 В. В качестве делителя напряжения мы выбрали резисторы 100К и 470К. Это означает, что напряжение на выводе АЦП определяется выражением: V_ADC = 100K / (100K + 470K) V_in. Принимая V_ADC = 1V, это означает, что мы можем измерять входные напряжения до V_in = 570/100 V_ADC = 5,7V. Что касается энергопотребления, то через делитель напряжения также наблюдается утечка тока. При V_in = 3,75V от батарей мы находим I_leak = 3,75V / 570K = 6,6 мкА.

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

Для всей схемы я измерил потребление тока 50 мкА в режиме глубокого сна при работе от батарей. Это включает в себя ESP8266, BME280, ультразвуковой датчик (отключенный транзистором) и утечку через делитель напряжения и, возможно, другие утечки. Так что это не так уж плохо!

Я обнаружил, что общее время активности составляет около 7 секунд, из которых 4,25 секунды для подключения к Wi-Fi и 1,25 секунды для отправки данных в ThingSpeak. Итак, при активном токе 80 мА я нашел 160 мкАч в час для активного времени. Добавив 50 мкАч в час для состояния глубокого сна, мы получим 210 мкАч в час. Это означает, что аккумуляторов на 2600 мАч теоретически хватает на 12400 часов = 515 дней. Это абсолютный максимум, если бы мы могли использовать полную емкость батарей (что не так) и не было бы утечек, которых я не обнаружил с помощью моих текущих измерений. Так что мне еще предстоит увидеть, действительно ли это работает.

Шаг 7: Завершение работы датчика

Завершение сенсора
Завершение сенсора
Завершение сенсора
Завершение сенсора
Завершение сенсора
Завершение сенсора

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

Удачи с проектом!

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