Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек)

в 15:08, , рубрики: arduino, Blynk, DIY, diy или сделай сам, IoT, жкх, Интернет вещей, умный дом

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 1

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

Мой путь оказался непростым и витиеватым. Но в результате получилось устройство, передающее показания воды по Wi-Fi на телефон. Простое и понятное в использовании и настройке хоть школьнику, хоть гуманитарию пенсионеру. А знакомым со словом «Ардуино» — ещё и несложное для изготовления. Девайс способен работать от батареек четыре года (дольше, чем длились отношения с вашей бывшей). Это ещё и первый открытый проект с такими характеристиками. Заводские аналоги я выписал, их мало, да и ладно с ними.

Итак, у нас есть немного денег и большое, но честное желание упростить себе жизнь, не нарушая Уголовный Кодекс. И чтобы никаких этих ваших 220В, серверов и кучи кнопок! Показания смотрим на смартфоне в приложении Blynk или аналогичном сервисе.

Теперь устройтесь в кресле поудобнее, съешьте ещё этих мягких французских булочек да выпейте чаю. Смотрите красивые фотографии и слушайте мой рассказ о том, что надо учитывать при создании автономных устройств. Но сначала краткое описание Вотериуса.

Требования

  • счетчик с проводом (выход «сухой контакт»)
  • Wi-Fi роутер с интернетом

Характеристики

  • Питание: 3 батарейки АА
  • время работы 4 года или дольше
  • 2 счётчика воды
  • одна-единственная кнопка для настройки
  • энергонезавимая память для показаний и сетевых настроек

Ежедневная передача по Wi-Fi

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

Реализована поддержка TCP сервера и приложения Blynk. Добавляйте протоколы HTTP, MQTT, Modbus TCP, облака Cayenne, IFTTT и т.п. (тут даётся место для проявления вашего творческого гения).

Настройка

При нажатии на кнопку Вотериус включает Wi-Fi точку доступа. Подключаетесь, заполняете форму, трижды кланяетесь на восток и говорите «спасибо» разработчикам WiFiManager. Можно мысленно.

Настройка Вотериуса с помощью Wifimanager

Занимательная электроника

Россыпь радиоэлементов для сборки Вотериуса

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 3

Единственный способ достичь единиц микроампер потребления во время подсчета импульсов — использовать экономичный микроконтроллер, а не то, что вы подумали. Сердце Вотериуса — микроконтроллер Attiny85 (аналоги — MSP430, STM8L). Прошивается без проблем любой платой Ардуино любыми руками, растущими выше пояса. Attiny85 работает на частоте 1МГц от внутреннего генератора и считает импульсы, проверяя периодически 2 входа на замыкание и кнопку. Ток сна 4 мкА при 3В. Сказка.

В качестве Wi-Fi я использую ESP8266-01. Потребления во время работы 75мА, импульсами до 250мА. Общаются два микроконтроллера по шине i2c. Правильность выбора подтвердил проект метеостанции. ESP8266 постоянно во сне: пин EN подтянут к GND через резистор. Ток потребления меньше 10мкА (мне попадались экземпляры с 0мкА). Раз в сутки Attiny85 подает HIGH, ESP8266 просыпается, получает показания от Attiny85, подключается к домашнему Wi-Fi и отправляет данные за ~4 сек — что по исследованиям британских учёных гораздо быстрее, чем вы обычно добираетесь вручную до этих самых счетчиков.

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 4На фото хорошая ESP, потребление прыгает 7-11мкА. Обычно цифры 19-23мкА.

Другие типы сна Вотериусу не подойдут, хоть обсыпьте его мелатонином под звуки колыбельной: Бесконечный deepsleep с мгновенным пробуждением по импульсу на External reset потребляет 20мкА и подходит для частой отправки данных. Самый экономичный вариант: полное отключение ESP8266, но понадобятся полевые транзисторы, которые боятся статического электричества, так-то.

Кнопка настройки расположена на линии SCL. Все пины Attiny85 заняты! По этой причине Вотериус не поддерживает выходы счётчиков «намур» и не имеет датчика протечки.
Светодиод подключен к TX пину ESP и горит, когда ESP работает. Подключите TTL-USB переходник, чтобы видеть лог (интересно же!). В начале разработки я считал, что для индикации ошибки нужно моргать светодиодом, но обойдётесь — это только усложнит код.
При успешном подключении к Wi-Fi роутеру через 3-10 секунд светодиод погаснет, а если продолжит гореть — подключитесь телефоном к Вотериусу заново. Сложная техника, нанотехнологии, наработки НАСА, учения Древнего Китая.

Любой из нас знает: особенность устройств с низким потреблением заключается в подверженности электромагнитным помехам. Поэтому я обратился к знакомому электронщику и изучил литературу (+красивейший курс Murata). Все пины у ESP и Attiny подтянуты к питанию или GND. Установлены конденсаторы по питанию. «Грязная» земля счётчиков подключена к «чистой» через резистор 300 ом, а сами выходы через резистор 3к3. Всем бы так!

Корпус

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

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 5

Можно распаячную коробку использовать (с 3D-принтером и прочим шаманизмом экспериментируйте сами, если ннннада).

В github лежит однослойная плата для ЛУТа и двухслойная для фабричного производства. Вотериус может изготовить даже школьник! Правда, если он не имеет гироскутера и никогда не крутил спиннер.

Идеальная плата сразу не получается. Первый прототип выглядел так:

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 6

А вот постройневшая четвертая версия, почти «идеальна»:

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 7

Я не смог устоять и заказал пачку плат в Резоните. Это кайф!

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 8

Питание

В Вотериусе стоит стабилизатор MCP1700 на 3В с очень низким минимальным потреблением (несколько мкА). Три алкалиновые батарейки АА 1.5В смогут разрядиться почти полностью до 3.2 В. Плюс на Attiny85 будет стабильное напряжение (и меньше плавать частота, что есть гуд, хотя в этом проекте не принципиально).

Схема будет работать и без стабилизатора от двух батареек АА. Attiny85 следует купить версии V (питание до 1.8В). ESP работала «в интернетах» до 2.5В. Мы сможет воспользоваться 40% ёмкости батареек (не верите — см. тестирование А. Надежина). Если купить две литиевые батарейки АА 1.5В 3 А*ч, Вотериус будет работать до 10 лет и при низкой температуре, а там — глядишь — и коммунизм построим.

Отсутствие инструментов не позволяет мне точно измерить потребление Вотериуса. Дома он работает уже 45 дней, отправляя показания каждые 30 мин (для ускорения разряда). Напряжение питания упало на 0.17В с 4.68В до 4.51В. Если так пойдет дальше, то батареек хватит на 1.5 года. Отправка показаний раз в сутки в 3 раза экономичнее, поэтому 4 года работы. Да, я знаю про саморазряд батареек. Даташит energizer и срок годности на упаковках говорят, что не сильно.

Вот расчет потребления батареек и стоимость компонентов для самых любопытных (гуглтаблица).

Программистские подробности (для тех, кто не устал)

Реализация подсчета импульсов на прерываниях не подходит, т.к. вода может быть перекрыта в момент замыкания геркона (зона ~3л), и ток будет утекать через подтягивающие резисторы. Потребуется защита от дребезга контактов: микросхема или задержка в коде. Я реализовал периодический опрос каждые 250мс и инкрементирую (красивое слово, правда?) значение только при повторном замыкании. Ничего не надо паять, хотя если очень хочется, то можно.

Для защиты от перезагрузки Attiny я сохраняю все значения в ее память EEPROM. Для превышения ограничения в 100к записей я написал кольцевой буфер с кольцевой меткой текущей ячейки. Теперь сплю спокойно, чего и вам желаю. В коде предусмотрено включение логирования для отладки. Подключите TTL-USB в разъём второго счётчика.

Экспорт данных

Сначала я написал Телеграм бота, но Роскомнадзор заблокировал Телеграм. Пришлось отказаться от этого решения, чтобы не запускать прокси-сервер и не раскачивать лодку. Использование Blynk оказалось оптимальным (бесстрашные разработчики борются с блокировками). Вот QR код проекта. Кроме него приложение для телефона есть у проекта Cayenne.

Автоматическая отправка в Мосводоканал не реализована, т.к. проект некоммерческий, но какие наши годы. Или ваши. У меня нет средств содержать свой сервер и «узаконивать» процедуру отправки, но вы поспрашивайте по знакомым, вдруг… Буду рад вашей помощи и бесплатным мыслям.

Москвичи отправляют показания по СМС, значит, достаточно веб-сервера для приема данных Вотериуса и страницы с СМС (github). Московским знатокам программы Fiddler, кто пользуется приложением Госуслуги Москвы, должен быть интересен мой Python скрипт отправки показаний воды.

Развитие

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

Путь к перфекционизму лежит через

  • Обновление прошивки ESP и Attiny через интернет
  • поддержку HTTPS или шифрования
  • сервер, где пользователь мог бы загрузить свой скрипт для отправки показаний воды.
  • использование STM8L/MSP430 (они экономичнее и больше пинов)
  • наглядную проверку наличия контакта со счетчиками при подключении
  • указание периода отправки эл. письма
  • поддержку выходов «намур» у счетчика
  • датчик протечки
  • управление кранами
  • поддержку электросчетчиков

Благодарности

Спасибо Ивану Коваленко и Иван Ганжа за консультации по электротехнике, Лапину Е.Н. за правильный подход к жизни и папе за то, что я умею не только программировать, но и паять, а вам — за внимание!

Вотериус: Передача показаний воды на телефон по Wi-Fi (4 года от батареек) - 9

Буду рад любым предложениям, пул реквестам и критике!

Разогреваем паяльник! Проект на github

Автор: dontsov

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js