Однажды мне надоело снимать показания счётчиков воды. Можно было поселить рядом со счетчиком магнит и на этом успокоиться, но этот путь я счёл неспортивным.
Мой путь оказался непростым и витиеватым. Но в результате получилось устройство, передающее показания воды по Wi-Fi на телефон. Простое и понятное в использовании и настройке хоть школьнику, хоть
Итак, у нас есть немного денег и большое, но честное желание упростить себе жизнь, не нарушая Уголовный Кодекс. И чтобы никаких этих ваших 220В, серверов и кучи кнопок! Показания смотрим на смартфоне в приложении Blynk или аналогичном сервисе.
Теперь устройтесь в кресле поудобнее, съешьте ещё этих мягких французских булочек да выпейте чаю. Смотрите красивые фотографии и слушайте мой рассказ о том, что надо учитывать при создании автономных устройств. Но сначала краткое описание Вотериуса.
Требования
- счетчик с проводом (выход «сухой контакт»)
- Wi-Fi роутер с интернетом
Характеристики
- Питание: 3 батарейки АА
- время работы 4 года или дольше
- 2 счётчика воды
- одна-единственная кнопка для настройки
- энергонезавимая память для показаний и сетевых настроек
Ежедневная передача по Wi-Fi
- текущих показаний
- потребления воды за сутки
- напряжения питания
- эл. письма (тело и заголовок можно менять)
Реализована поддержка TCP сервера и приложения Blynk. Добавляйте протоколы HTTP, MQTT, Modbus TCP, облака Cayenne, IFTTT и т.п. (тут даётся место для проявления вашего творческого гения).
Настройка
При нажатии на кнопку Вотериус включает Wi-Fi точку доступа. Подключаетесь, заполняете форму, трижды кланяетесь на восток и говорите «спасибо» разработчикам WiFiManager. Можно мысленно.
Занимательная электроника
Россыпь радиоэлементов для сборки Вотериуса
Единственный способ достичь единиц микроампер потребления во время подсчета импульсов — использовать экономичный микроконтроллер, а не то, что вы подумали. Сердце Вотериуса — микроконтроллер 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 сек — что по исследованиям британских учёных гораздо быстрее, чем вы обычно добираетесь вручную до этих самых счетчиков.
На фото хорошая 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 батарейки АА. В крышке вырезается дырка под разъем, сбоку для светодиода и кнопки.
Можно распаячную коробку использовать (с 3D-принтером и прочим шаманизмом экспериментируйте сами, если ннннада).
В github лежит однослойная плата для ЛУТа и двухслойная для фабричного производства. Вотериус может изготовить даже школьник! Правда, если он не имеет гироскутера и никогда не крутил спиннер.
Идеальная плата сразу не получается. Первый прототип выглядел так:
А вот постройневшая четвертая версия, почти «идеальна»:
Я не смог устоять и заказал пачку плат в Резоните. Это кайф!
Питание
В Вотериусе стоит стабилизатор 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 (они экономичнее и больше пинов)
- наглядную проверку наличия контакта со счетчиками при подключении
- указание периода отправки эл. письма
- поддержку выходов «намур» у счетчика
- датчик протечки
- управление кранами
- поддержку электросчетчиков
Благодарности
Спасибо Ивану Коваленко и Иван Ганжа за консультации по электротехнике, Лапину Е.Н. за правильный подход к жизни и папе за то, что я умею не только программировать, но и паять, а вам — за внимание!
Буду рад любым предложениям, пул реквестам и критике!
Разогреваем паяльник! Проект на github
Комментарии (119)
FGV
29.07.2018 20:18Реализация подсчета импульсов на прерываниях не подходит, т.к. вода может быть перекрыта в момент замыкания геркона (зона ~3л), и ток будет утекать через подтягивающие резисторы.
а если RC цепь вкрутить?
dontsov Автор
29.07.2018 23:06Приведите, пожалуйста пример =). Я не совсем электронщик, я программирую промышленную автоматизацию…
Andy_Big
29.07.2018 23:26В линию счетчика — последовательно конденсатор, между ним и микроконтроллером — резистор на землю. Ток будет определяться током утечки конденсатора, то есть очень низкое значение :)
FGV
30.07.2018 07:453.3V-(R=1M||C=1nF)-gerkon-(R=10K)-gnd.
забирать сигнал с R=10K. Ток утечки конечно будет приблизительно 3мкА. И ограничится максимальная частота импульсов + импульс на выходе будет довольно коротким.sim31r
30.07.2018 17:13Если ограничится частота импульсов это и хорошо, получается антидребезг встроенный. А забирать только прерыванием, длительность импульса 10 микросекунд.
Можно поставить конденсатор хотя бы на 1 микрофарад, геркон медленный достаточно.FGV
30.07.2018 17:351M*1nF=1мс, т.е. до 3мс период между импульсами. а для 1мкф уже 3секунды, мне кажется многовато это.
да и если уж увеличивать то резюк, для уменьшения тока утечки при замкнутом герконе.dontsov Автор
31.07.2018 02:01Я тут посовещался: RC цепочка позволяет детектировать 1 импульс. Софтовое устранение дребезга не будет работать. А оно нужно, т.к. дребезг будет при размыкании геркона и может прийти помеха по длинным проводам счетчиков. Она будет расценена как импульс.
smart_alex
29.07.2018 20:47Что-то я не уловил принцип работы «кольцевого буфера с кольцевой меткой». Если сохранять ссылку на текущее положение метки в EEPROM, то ресурс также будет расходоваться, а если не сохранять, то после рестарта система не будет знать где находятся актуальные данные. Кто-нибудь может объяснить сам принцип работы «кольцевого буфера с кольцевой меткой»?
FDA
29.07.2018 21:46+1Блок данных маркируется идентификатором, который увеличивается на единицу при каждой записи. При перезапуске МК ищет блок с максимальным значением идентификатора и считает этот блок последним. Максимальное значение идентификатора должно быть не меньше общего кол-ва блоков. Таким образом мы равномерно используем всю EEPROM.
Andy_Big
29.07.2018 23:21Только не с просто максимальным, а максимальным в непрерывной последовательности :)
Andy_Big
29.07.2018 23:04Я не знаю что имел в виду автор под кольцевой меткой, но вот один из вариантов кольцевого буфера, не требующего хранить где-то отдельно адрес последней записи:
— в каждой записи содержится ее порядковый номер, размерность которого гарантированно превышает максимальное количество записей в буфере. То есть если буфер, например, может содержать до 100 записей, то для номера можно отвести 7 бит (128 значений).
— когда нужно найти последнюю запись просто пробегаемся по записям, ища нарушение непрерывной последовательности (с учетом перехода к нулю после максимального значения — "..., 126, 127, 0, 1, ...").
Trumanbaz
29.07.2018 23:06+1Однажды мне тоже надоело снимать показания счетчика воды, и я просто взял среднегодовой расход, поделил на 12 месяцев и передаю каждый месяц фиксированное количество кубов воды, а потом в конце года просто устраняю образовавшуюся неточность
dontsov Автор
29.07.2018 23:17Сам не знаю, зачем людям сдавать точные показания. Я делал не только для себя, но и для нескольких друзей, часть из которых старшего поколения, а оно сдавать не точно не умеет.
Его можно использовать при сдаче квартир в аренду для отслеживания количества проживающих людей.
Но, конечно, хочется датчик протечки…adson
30.07.2018 10:32+1мой недавний неприятный опыт показал, что протечка может быть не только после ввода горячей/холодной воды, но и по стояку (батарее отопления), где расход ничем не считается
Avach
30.07.2018 14:32+1Решающим аргументом в наших с женой спорах о том, кто пойдёт снимать показания счётчиков, является её фраза «Я тогда
от балдыприблизительно напишу». После этого я как миленький поднимаюсь и иду. Так уж некоторые из нас устроены…dontsov Автор
30.07.2018 14:34В общем, я рад, что Вотериус сможет помочь семьям =).
Когда я узнал КУДА лезут каждый месяц мои взрослые знакомые, разработка ускорилась. Из-под раковины торчали только мои ноги, когда я подключал им Вотериус.
balexa
30.07.2018 19:41Старшее поколение сдает точные показания не потому что не умеет по другому, а потому что квартплата дорогая. Это для вас квартплата несущественна в контексте вашего дохода, и 500 рублей в месяц туда-сюда для вас совершенно незаметны. Если бы у вас был доход в виде средней пенсии в размере 13 тысяч, то вы бы как миленький каждый месяц считали все до копеечки.
dontsov Автор
30.07.2018 19:46Хм… да, некорректно прозвучало. Но и устройство они не будут покупать, т.к. им несложно посмотреть показания и у них нет Wi-Fi.
Carburn
30.07.2018 01:24Почему нельзя было использовать только ESP?
dontsov Автор
30.07.2018 01:51+1низкого потребления не добиться. необходима низкоуровневая работа с ESP, эта микросхема даже для специалистов является чёрным ящиком.
e_butcher
01.08.2018 09:13Не добиться? Если использовать 2 батарейки АА и отправлять данные раз в день, то ESP проработает больше года!
dontsov Автор
01.08.2018 11:16А считать импульсы кто будет? Просто спать и просыпаться это экономичнее, да.
e_butcher
01.08.2018 11:55Ну не знаю, думаю годик можно из него выжать. Мне удалось протянуть 10 дней на 2х литиевых 18650 с опросом счетчиков каждые 4 секунды и отправкой данных (с довольно посредственным уровнем сигнала Wi-Fi) каждый полчаса.
Если учесть, что отправка занимала секунд по 10, и сделать отправку раз в сутки, то думаю реально. Во всяком случае сейчас как раз буду в таком режиме пробовать. Через год могу отписаться о результатах)
sim31r
30.07.2018 01:29Если купить две литиевые батарейки АА 1.5В 3 А*ч, Вотериус будет работать до 10 лет и при низкой температуре, а там — глядишь — и коммунизм построим.
У обычных литиевых батарей саморазряд 40% в течение года. Особенно у мощных. Подойдут вот эти.
Можно было ставить обычную Atmega328, потребление выше, но не намного, зато возможностей больше, можно датчик протечки ставить и много чего еще
Active Mode: 0.2мА
Power-down Mode: 0.1мкА
Power-save Mode: 0.75мкАdontsov Автор
30.07.2018 02:05да, заводские решения обычно на подобных элементах питания. с саморазрядом нет исследований. видел график, что алкалиновые разряжаются до 20% при 0 или при +40. При комнатной меньше 10%.
Надо смотреть потребление с включенным watchdog.
Про то, что Attiny328 имеет такие же крутые характеристики, что и Attiny85 я узнал слишком поздно =). надо на Ардуино UNO попробовать, вытащив контроллер с платы.sim31r
30.07.2018 02:27Периферию только нужно отключить, она по умолчанию включена, библиотека даже для этого есть
dontsov Автор
30.07.2018 14:43Я находил один единственный обширный пост с примерами без библиотек, постараюсь найти и добавить в GitHub.
Мне только не понятно, почему со словом энергосбережение все советуют Attiny использовать, ощущение, что старшие линейки раньше не были экономичными и вышли обновленные версии. Я вижу странные слова picoPower, намекающие на это.sim31r
30.07.2018 17:07Attiny все же меньше потребляют, хотя бы из-за меньшей памяти, но по моим впечатлениям разница потеряется на фоне саморазряда батареек, сеансов связи по WiFi и работе WDT, который нельзя отключать.
PendalFF
30.07.2018 10:20Всё-таки щелочные. Алкалиновые оставьте пожалуйста для журналистов, которых насилуют ученые.
REPISOT
30.07.2018 06:10-1Однажды мне надоело снимать показания воды
Только когда увидел «Требования: счетчик с проводом» понял, что автор имел в виду «показания счетчика воды». А не показания качества воды или температуры, или уровня…littorio
30.07.2018 09:47Полностью согласен. Надо добавить «счётчика» в название статьи. А то я уже подумал, что очередная «память воды» на Хабр пролезла…
Javian
30.07.2018 08:12Можно попробовать еще уменьшить токи утечки используя TPS22860
habr.com/post/386735
dontsov Автор
30.07.2018 14:52Да, спасибо. Она специально сделана, чтобы по своему радиоканалу передавать. Очень полезно изучать схемотехнику delelopment board. Пока критерий — оперативность разработки, а не гонка за техническим прогрессом. Сейчас отладим бизнес-логику и в путь! =)
gopotyr
30.07.2018 09:01Самый экономичный вариант: полное отключение ESP8266, но понадобятся полевые транзисторы, которые боятся статического электричества, так-то.
Да ладно!
Например: krs.terraelectronica.ru/product/2000619
Сопротивление сток-исток открытого транзистора (Rds): 0.054 Ohm
Для защиты внутри транзистора даже на затвор-исток стоит шотки…
electronus
30.07.2018 09:33Вопрос, почему привязались к 3.3В? Когда ESP и МК могут работать от 3.0В
На картинке у Вас линейник на 3.0В, а на схеме 3.3?
Так всё-же, какой пошел в серию?
ProstoUser
30.07.2018 11:061. Очень круто!
2.Я реализовал периодический опрос каждые 250мс и инкрементирую (красивое слово, правда?) значение только при повторном замыкании.
не вполне понял, что значит «при повторном замыкании»? Типа если два раза подряд состояние «замкнуто», то фиксируем замыкание геркона? А зачем такая логика?
3. По моему скромному мнению, частоту опроса можно спокойно уменьшить уменьшить раз в 10. Задача — не пропустить замкнутое состояние. Замкнутое состояние длится у вас 3 литра (в моем счетчике 2 литра). Принимаем меньшее — два литра. Если два литра протекают за 250 мс, то за минуту должно выливаться 480 литров. Это совершенно нереальный расход. Полностью открытый кран в идеальных условиях дает порядка 10 литров в минуту. Если таких кранов 2, то 20. То есть можно сэкономить на потреблении МК посредством уменьшения частоты пробуждений.
4. Из идей (сам думал такую штуку делать, но пока руки не доходят). Если прибор показывает постоянный и небольшой расход на протяжении длительного времени, то это может быть какая-то утечка — подтекающий кран, унитаз и т.п. Вполне можно обратить на это внимание. Все, конечно, зависит от настройки параметров, выделенных жирным. И полезность для меня не так, чтобы очевидна.adson
30.07.2018 11:14Если два литра протекают за 250 мс, то за минуту должно выливаться 480 литров. Это совершенно нереальный расход
Кстати, это способ засечь аварийную утечку. В моем горьком опыте десятилетней давности был случай срыва шланга с бачка унитаза с последующим добровольным проливом трех этажей. Понятно, что вероятность такого события крайне мала, но, тем не менее, цена лишней батарейки на несколько порядков дешевле ремонта трех квартир (или даже добровольного страхования гражданской ответственности)ProstoUser
30.07.2018 12:22От такого должен защищать датчик протечки.
Когда что-то течет — уже не важно, большой расход, или нет. Три этажа запросто зальет даже при очень небольшом (вполне обычном) расходе.
dontsov Автор
30.07.2018 14:04- Спасибо!
- Защита от дребезга контактов.
- Всё верно. Я ещё не занимался сильной оптимизацией. Минимально: надо от pinMode, digitalRead отказаться. Уже в 6 раз меньше бодрствовать будем.
- Всё верно, но всё же датчик протечки сильно эффективнее, поэтому быстрее и проще его добавить в Вотериус.
ProstoUser
31.07.2018 11:38Под 4 я имел ввиду не протечку, а утечку.
Например, если в унитазе не герметично затыкается сливное отверстие, то никакой протечки не будет (вода-то течет в канализацию), но постоянная маленькая утечка будет. Типа подтекающего крана, только если из закрытого крана капает, это хорошо видно, а когда немного подтекает унитаз, это можно довольно долго не замечать.
А датчик протечки (и не один) в такой дивайс добавить — святое дело!
ittakir
30.07.2018 12:09Все-таки датчик протечки нужно делать именно как датчик протечки, срабатывающий при попадании на него воды. Потому как вариантов протечки может быть множество, расход воды при этом — разный. Даже нулевой — это когда вас топят соседи. Но нужно всегда обязательно сработать и оповестить человека. Например, недавно я проснулся в 2 часа ночи от звука текущей воды. Вода бежала через стояки отопления от соседа сверху. Побежал к нему, стучал, но он не просыпался. Только через полчаса он наконец проснулся и перекрыл воду. Все это время я самоотверженно вытирал пол, дабы вода на пошла дальше по этажам.
electronus
30.07.2018 12:35Нашел логгер импульсов с будильником: PCF8583
dontsov Автор
30.07.2018 14:59Да, возможно такое решение, правда надо подумать, что делать с дребезгом контактов. Потребление 2мкА при 1В и нужно несколько штук.(PDF).
sim31r
30.07.2018 17:54RC цепочка решает все проблемы с дребезгом. И это не логгер, а просто счетчик. Для того, чтобы раз в сутки передавать значения, все равно нужен микроконтроллер и RTC, в итоге от отдельного счетчика теряется смысл.
dontsov Автор
31.07.2018 01:55Вот не уверен, что решает: RC цепочка позволяет детектировать 1 импульс. Софтовое устранение дребезга не будет работать. А оно нужно, т.к. дребезг будет при размыкании геркона. Также может прийти помеха по длинным проводам счетчиков. Она будет расценена как импульс.
ProstoUser
31.07.2018 12:18У нас есть текущее состояние геркона. Появилось прерывание — поставили таймер на 100мс, закрыли прерывания от входа и спать. Через 100мс проснулись и смотрим текущее состояние входа. Если поменялось — фиксируем импульс. Не поменялось — значит проскочила помеха. После такого анализа открываем прерывания и опять спать.
А если делать опрос, то можно, наверное, на время сна снимать напряжение с геркона и не разряжать батарейку. А на время измерения подавать достаточно большой ток, на который не будут оказывать влияния разные помехи.
Хотя я не электронщик — чисто дилетантски рассуждаю. Может это все бред.
Iv38
31.07.2018 02:10Там же есть ESP8266, она может сама себя разбудить и снять показания. Но в целом да толку по сравнению с тинькой почти никакого, да еще и защита от затупов ESP пропадает.
doom369
30.07.2018 13:03сервер, где пользователь мог бы загрузить свой скрипт для отправки показаний воды.
Блинк поддерживает СМС на локальном сервере (Blynk.sms(«hello»)), но надо подключать смс гейт. Как вариант — можно использовать email, а в почтовом клиенте настроить форвардинг на смс. Сейчас все операторы поддерживают email->sms.dontsov Автор
30.07.2018 15:27Спасибо! В текущей реализации E-mail каждый день приходит. У Вотериуса нет календаря, хотя его можно с Blynk получить.
Unknown007
30.07.2018 13:23Не знал, что есть официальный API ЕМП для передачи показаний счетчиков воды… Хотя вроде гуглил, но не находил такого, поэтому написал скрипт для передачи показаний через парсинг сайта my.mos.ru и отправку значений. Там же есть и передача показаний электросчетчиков, но почему-то после передачи значений электросчетчиков, новые показатели отображаются не сразу, а только на следующий день, хотя на сайте мосэнергосбыта они отображаются сразу. Поэтому пишу сейчас скрипт для передачи показаний электросчетчиков, разбирая запросы-ответы мобильного приложения мосэнергосбыта. Может и для него есть какое-то открытое API, которое я не нашёл?
p.s. спасибо за статью, тоже хотел прикрутить ESP8266 к счетчикам, чтобы в итоге автоматически передавать показания, но не думал, что ради экономии питания стоит использовать другой микроконтроллер
FGV
30.07.2018 15:17Кстати, можно еще посмотреть в сторону ESP32. У нее уже есть встроенный ULP (Ultra-Lower-Power Co-processor). Судя по даташитам (ESP32 Series Datasheet л.20) с работающим ULP обещают потребление 150мкА:
Power mode: Deep-sleep,
Description: The ULP co-processor is powered on,
Power consumption: 150 µA.dontsov Автор
30.07.2018 16:31А зачем нам ESP32 с 150мкА? У нас ESP8266 во сне потребляет 0-10 мкА. А на подсчет импульсов уходит ~7 мкА.
FGV
30.07.2018 16:40+11) вместо связки attiny+esp8266 будет стоять одна esp32 (с кучей свободных пинов);
2) 150мкА кушает встроенный ULP сопроцессор в режиме работы, но его тоже можно вгонять в сон, в этом случае работает только встроенный таймер который будит ULP и кушает он — 5µA;
3) потребление esp32 при CHIP_PU=0 — 0.1 µA.dontsov Автор
30.07.2018 16:42Да, отличный вариант, спасибо!
FGV
30.07.2018 17:02О! у них даже в примерах уже счетчик импульсов на ULP есть:
# ULP Pulse Counting Example
examples/system/ulp/ вот что пишут:
With the default configuration (20ms ULP wakeup period), average current consumption in deep sleep mode is 16uA.
Т.е. если я правильно понимаю, то при 250мс периоде пробуждения кушать оно будет приблизительно: =16*20/250 = 1.28мкА.dontsov Автор
31.07.2018 01:48Вау! На это стоит обратить внимание =).
Не очевидно, что они за потребление берут, поэтому надо брать микросхему и тестить. Владельцы ESP32! Соберите Вотериус 2.0! =)
p0gank
30.07.2018 15:37+1Ножка для датчика протечки у Вас есть, сконфигурируйте вместо reset входной пин. И настройте BOD, он умеет включать контроллер с небольшой задержкой после подачи питания. Еще ногу можно взять переведя протокол обмена между микроконтроллером и esp на onewire, или использовать сигнал SCL через RC цепочку для включения ESP, в таком случае после прекращения обмена по I2C ESP выключится самостоятельно после разряда конденсатора.
dontsov Автор
30.07.2018 16:29Класс! Спасибо! Я закину идею в github, вдруг кто раньше меня доберется до экспериментов!
Вопрос:
1. какая обвязка пина reset должна быть?
2. BOD для чего понадобится задерживать?
3. Да, кроме onewire есть еще PJON .
Решение с SCL отличное =), я бы запасся осциллографом для отладки.p0gank
31.07.2018 13:401. Обвязка как для обычного пина, фьюзы выключают функционал reset и ножка становится одним из портов как и остальные, без специальных разрешений. Но как сказали ниже, перепрограммировать после выключения резета можно только при наличии высоковольтного программатора.
2. Задержка запуска процессора нужна чтобы переждать переходные процессы при появлении питающего напряжения, это программируется тоже fuse битами при включении BOD.
divanus
30.07.2018 17:18Реализовывал коммерческий проект на базе AIU аддакс матрица. Постоянно была грёбаная проблема поверки по импульсам, т.к. через этот контроллер воду слали и газ. Газовые счетчики — это была отдельная история. Каждый производитель счетчиков: кто во что горазд :)
проект надо повторить в новом доме уже — поставил в главные закладки на реализациюdontsov Автор
31.07.2018 01:46Здорово, что у вас есть практический опыт подключения к счетчикам. Я бы хотел собрать список совместимого оборудования, туда можно включить и подводные камни интеграции.
ebragim
30.07.2018 17:55Сделайте, пожалуйста, герберы для jlcpcb.com — чтобы не приходилось ставить другой софт и разбираться с экспортом.
lewchenko
30.07.2018 19:47Лучше сообщите REM платы в Резоните, чтобы можно было их там заказать. Ну, если только Вы не хотите ими барыжить:-)
dontsov Автор
30.07.2018 19:49А где это смотреть? Там пластина на 21шт, проще мне в личку написать.
lewchenko
31.07.2018 09:12На Резонитовском пакете с пупыркой наклейка, там есть строка «внутренний» или «заводской» номер. Формат его такой: REM XXXXXX — если это серийное или TIM XXXXXX — если это опытное/срочное производство.
Dark_Rider
30.07.2018 22:32-стоит ли повторять в этом виде проект?
-какой счетчик подойдёт? Не в курсе этой темы, подскажет кто?maxvit
30.07.2018 23:05Счетчик любой с импульсным выходом
dontsov Автор
31.07.2018 01:29типа «сухой контакт»
Dark_Rider
31.07.2018 06:50А без замены счётчика, отдельно сам датчик бывает?
Javian
31.07.2018 10:47Можно так «Оптическое распознавание символов на микроконтроллере»
habr.com/post/330936
12val12
31.07.2018 11:31круто а осциллограф возможно?
мечта не прикручивать к контролеру экран а передавать на мобилку
желательно таким тупым байтовым протоколом
{1,254,2,253} {Umax b1 b2 } {Umin b3 b4} {800 байтов значения по y}
первая последовательность это маркер начала кадра (сбой маловероятен )
далее 2 байта макс напряжение встерченное в осциллограмме 2 байта минимальное
800 точек у на картинку.
в приципе мне бы хватило
smallghost
01.08.2018 09:19Отличный опус! Читал с упоением. Ещё раз убедился что всё что ты только задумал кем-то уже реализовано :-)
dontsov Автор
01.08.2018 11:15Спасибо =). Я сам много лет ждал этого решения, но пришлось взять паяльник. Не жалею, знаний вагон и тележка хайпа.
e_butcher
01.08.2018 09:28Москвичи отправляют показания по СМС, значит, достаточно веб-сервера для приема данных Вотериуса и страницы с СМС (github).
dontsov А можно поподробнее, что имеется в виду под страницей с СМС? Из описания на github не очень понятно… Спасибо.dontsov Автор
01.08.2018 11:14Максимально упростить можно генерируя СМСку с нужными цифрами. Т.е. Вотериус может слать на вебсервер показания, а на веб странице может быть ссылка, при нажатии на которую сразу СМСка формируется. Зайдите на github библиотеки с телефона и нажмите на примеры.
e_butcher
01.08.2018 11:56Я правильно понял, что на веб-странице генерируется ссылка, при нажатии на которую с мобильного телефона, формируется СМС?
SergeyMax
Не совсем понял, как между собой связаны прерывания и утечка тока через подтягивающие резисторы.
Tutanhomon
батарейка будет через замкнутый геркон разряжаться на подтягивающий резистор, если у меня в голове все нарисовалось верно.
AlanDrakes
Насколько я вижу, разъём датчика подключается между ножками контроллера, и не подтягивается к земле напрямую.
Если на выходную ножку подать ноль, а на ответной стороне (после геркона) будет слабая подтяжка вниз — на входе будет ноль и тока в цепи не будет. А в момент измерения выходная ножка переводится в «1», по цепи течёт ток (или не течёт, если датчик разомкнут) и входной пин определяет, есть ли импульс.
Простое и в то же время энергоэффективное решение.
SergeyMax
Я не особо специалист по ардуинам, но у меня чёткое ощущение, что у автора оба пина сконфигурены как входы)
dontsov Автор
Нет, счетчик между пином и GND подключен. Электрическая схема.
SergeyMax
Тогда тем более непонятно, как автору помешали прерывания.
dontsov Автор
Чтобы прерывание срабатывало при замыкании (по GND), мне надо подтягивать вход МК к питанию резистором. Высока вероятность, что геркон останется в замкнутом положении после перекрытия воды.
foxel
Делал подобную сторию с ATTiny85 в передатчике для передачи изменения состояния классического выключателя, что в стены для освещения вставляют, т.е. примерно по четверти суток оно замкнуто.
Встроенная подтяжка, естественно, не вариант. Использую подтяжку внешнюю 470 КОм на VCC. При трех вольтах и замкнутом выключателе ток течет приемлемо малый (~6мкА). На CR2032 работает уже год :).
Не скажу, что этот комментарий — рекомендация. Но как вариант.
Arcanum7
Мегаом тоже подходит.
dontsov Автор
Я решил не медитировать на помехи от замыкания длинных проводов, да и 6 * 2 = 12мА… хотелось меньше, да и код с watchdog проще читается.
А что детектирует смену положения выключателя?
CR2032 плохо для ESP.
foxel
Смена положения детектируется прерыванием по смене уровня на tiny85. Она спит постоянно, и просыпается по этому прерыванию.
В моем случае дальше происходит отправка сообщения через 433 MHz передатчик.
По поводу батарейки, это просто для примера, у меня ESP не используется, мне хватает одного tiny85.
2000vif
Для связи у Вас только только то, что в профиле на Гитхаб? Уменя нет таких аккаунтов. Можно ли у Вас приобрести пару плат, для повторения такого нужного и полезного девайса?
dontsov Автор
В Хабрахабр есть личные сообщения.
AlanDrakes
На микромощных схемах (а у автора как раз микромощная схема) у контроллеров, работающих с пинами настроеными на вход, могут возникать наводки от внешних помех, что может вызвать некорректное поведение / ошибки счёта / сброс / зависание. Именно по этой причине добавлены подтягивающие резисторы. Обычно они соединяются между пином и рецессивным уровнем на линии. Чаще всего — подтягивают как раз к общему проводу, а активный сигнал в этом случае будет положительным.
SergeyMax
удалено