Ничего не найдено :(
    В гостях у Самоделкина! » С сайтов » Спец » Устройство для отслеживания уровня воды в резервуаре и передачи данных по беспроводной сети

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




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

    Инструменты и материалы:
    -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 обеспечивают примерно 3x1,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)
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Устройство для мониторинга CO2 в помещении

    Большой аккумулятор для игрового джойстика

    10
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    8
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    9
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 9.0 из 10 (голосов: 1 / История оценок)

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

    9 комментариев
    sergeyp
    Цитата: Korolev
    Про 100-ваттную лампочку за сутки я уже спрашивал!

       Думал, что и так понятно: 0,1 х 24 = 2,4 кВт.. Или не? Заряд электрический Ксек нужно умножать, чтобы получить в час, а величина тока (в данном случае) постоянна, и никак не изменяется, хоть мксек, хоть час... или точнее это разные единицы измерения... не, лучше в следующий раз.. )))  Или всё-же 3600 Кчас и 1 Ачас равны? Тогда о чём мы? )))
    Korolev
    sergeyp,
    Вот и Вы путаете Кулоны с Амперами! По-Вашему при токе в 1 А за час протечёт 3600 А
    Чёт не складывается! В проводнике протекают электроны, заряженные частицы, а не Амперы или Кулоны! И амперметр (условно) регистрирует количество зарядов в секунду! А Кулон - это общий заряд протекший за некоторое время! И при токе в 1 А за час пройдёт 3600 Кулон!
    Один ампер - это сила такого постоянного электрического тока, при котором через поперечное сечение проводника за одну секунду проходит заряд, равный одному кулону: 1 А = 1 Кл/с ... Кулон — это величина заряда, прошедшего через проводник при силе тока 1 А за время 1 с, 1 Кл = 1 А·с = 1/3600 ампер-часа. 
    Какое количество электричества (какой заряд) пройдёт за час притоке 1 А? Про 100-ваттную лампочку за сутки я уже спрашивал! Ну или, если по-простому, как тут уже сравнивалось с водой. Если из цистерны вытекает 1 литр в секунду, то сколько выльется за час? scratch
    sergeyp
    Цитата: Korolev
    Прошу пояснить подробнее.

       Вот и Вы путаете Кулоны с Амперами! По-Вашему при токе в 1 А за час протечёт 3600 А, зачем Вы умножали на 3600? Ампер за час он и есть Ачас микроампер за час он и будет мкАчас! )))
    Korolev
    sergeyp,
    Расчёт-таки неправильный... 
    Прошу пояснить подробнее.
    1 ампер – это такая сила тока, когда за каждую секунду через поперечник проводника проходит количество электричества, равное 1 кулону (6,241·10¹⁸ электронов). 
    Соответственно будет справедливо утверждать, что за час будет в 3600 раз больше? scratch 
    sergeyp
    Цитата: Korolev
    0,022 мА Х 3600 с = 79,2 mAh. Предположим, что ёмкость АКБ 3000 mAh, тогда 3000 mAh / 79,2 mAh = 37,8 часов, 1,5 суток.

       Расчёт-таки неправильный... По-Вашему будет при потреблении 79,2 мА! А он таки 22 микро в СНЕ... )))
    Korolev
    Kesha,
    Я думаю, что 0.022 мА за час даст нам ровно 0.022 мАч. И никак иначе. 
    Ну, Вы-то можете думать всё, что Вам заблагорассудится, но правильно будет:
     1 ампер-час — это электрический заряд в 3600 Кл, проходящий через поперечное сечение проводника за один час и обеспечивающий в течение одного часа ток в один ампер. 1 А = 1 Кл/с.  1 Ah = 3600 As   
    Не надо путать ток и заряд:
    Сила тока — физическая величина, равная отношению количества заряда Delta Q, прошедшего за некоторое время Delta t через поперечное сечение проводника, к величине этого промежутка времени. 
    Да и чисто логически, если по-Вашему: "0.022 мА за час даст нам ровно 0.022 мАч", то сколько это будет за секунду, минуту, вечность? Иными словами, сколько "намотает" 100-ваттная лампочка за месяц? smile 

    Гость Валерий
    Плохо что от влаги ультразвуковые датчики быстро окисляются, думаю на сезон должно хватить.
    Kesha
    ESP8266 ... Потребление в режиме глубокого сна у нее составляет всего 22 мкА.
    0,022 мА Х 3600 с = 79,2 mAh. Предположим, что ёмкость АКБ 3000 mAh, тогда 3000 mAh / 79,2 mAh = 37,8 часов, 1,5 суток. И это только один компонент, и в режиме сна.

    Я думаю, что 0.022 мА за час даст нам ровно 0.022 мАч. И никак иначе.
    Поэтому полученные 1,5 суток можно смело увеличить примерно в 3600 раз. Практически останется только саморазряд батареи.
    Korolev
    Обычно мастер делал это с помощью длинной палки 
    А палка-то понадёжней будет! Можно и отметки нарисовать. smile
    ESP8266 ... Потребление в режиме глубокого сна у нее составляет всего 22 мкА.
    0,022 мА Х 3600 с = 79,2 mAh. Предположим, что ёмкость АКБ 3000 mAh, тогда 3000 mAh / 79,2 mAh = 37,8 часов, 1,5 суток. И это только один компонент, и в режиме сна. dontknow

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии