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

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

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

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

Требования


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

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


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

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


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

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

Настройка


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

Настройка Вотериуса с помощью 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)


  1. SergeyMax
    29.07.2018 19:11

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

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


    1. Tutanhomon
      29.07.2018 19:18
      +1

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


      1. AlanDrakes
        29.07.2018 19:32
        +1

        Насколько я вижу, разъём датчика подключается между ножками контроллера, и не подтягивается к земле напрямую.
        Если на выходную ножку подать ноль, а на ответной стороне (после геркона) будет слабая подтяжка вниз — на входе будет ноль и тока в цепи не будет. А в момент измерения выходная ножка переводится в «1», по цепи течёт ток (или не течёт, если датчик разомкнут) и входной пин определяет, есть ли импульс.
        Простое и в то же время энергоэффективное решение.


        1. SergeyMax
          29.07.2018 20:32

          Я не особо специалист по ардуинам, но у меня чёткое ощущение, что у автора оба пина сконфигурены как входы)


        1. dontsov Автор
          29.07.2018 22:47

          Нет, счетчик между пином и GND подключен. Электрическая схема.


          1. SergeyMax
            30.07.2018 00:06

            Тогда тем более непонятно, как автору помешали прерывания.


            1. dontsov Автор
              30.07.2018 00:10

              Чтобы прерывание срабатывало при замыкании (по GND), мне надо подтягивать вход МК к питанию резистором. Высока вероятность, что геркон останется в замкнутом положении после перекрытия воды.


              1. foxel
                30.07.2018 08:00

                Делал подобную сторию с ATTiny85 в передатчике для передачи изменения состояния классического выключателя, что в стены для освещения вставляют, т.е. примерно по четверти суток оно замкнуто.
                Встроенная подтяжка, естественно, не вариант. Использую подтяжку внешнюю 470 КОм на VCC. При трех вольтах и замкнутом выключателе ток течет приемлемо малый (~6мкА). На CR2032 работает уже год :).

                Не скажу, что этот комментарий — рекомендация. Но как вариант.


                1. Arcanum7
                  30.07.2018 11:03

                  Мегаом тоже подходит.


                1. dontsov Автор
                  30.07.2018 14:30

                  Я решил не медитировать на помехи от замыкания длинных проводов, да и 6 * 2 = 12мА… хотелось меньше, да и код с watchdog проще читается.
                  А что детектирует смену положения выключателя?
                  CR2032 плохо для ESP.


                  1. foxel
                    30.07.2018 17:14

                    Смена положения детектируется прерыванием по смене уровня на tiny85. Она спит постоянно, и просыпается по этому прерыванию.
                    В моем случае дальше происходит отправка сообщения через 433 MHz передатчик.

                    По поводу батарейки, это просто для примера, у меня ESP не используется, мне хватает одного tiny85.


          1. 2000vif
            30.07.2018 16:51

            Для связи у Вас только только то, что в профиле на Гитхаб? Уменя нет таких аккаунтов. Можно ли у Вас приобрести пару плат, для повторения такого нужного и полезного девайса?


            1. dontsov Автор
              30.07.2018 16:57

              В Хабрахабр есть личные сообщения.


    1. AlanDrakes
      29.07.2018 19:29

      На микромощных схемах (а у автора как раз микромощная схема) у контроллеров, работающих с пинами настроеными на вход, могут возникать наводки от внешних помех, что может вызвать некорректное поведение / ошибки счёта / сброс / зависание. Именно по этой причине добавлены подтягивающие резисторы. Обычно они соединяются между пином и рецессивным уровнем на линии. Чаще всего — подтягивают как раз к общему проводу, а активный сигнал в этом случае будет положительным.


      1. SergeyMax
        29.07.2018 19:48

        удалено


  1. FGV
    29.07.2018 20:18

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

    а если RC цепь вкрутить?


    1. dontsov Автор
      29.07.2018 23:06

      Приведите, пожалуйста пример =). Я не совсем электронщик, я программирую промышленную автоматизацию…


      1. Andy_Big
        29.07.2018 23:26

        В линию счетчика — последовательно конденсатор, между ним и микроконтроллером — резистор на землю. Ток будет определяться током утечки конденсатора, то есть очень низкое значение :)


        1. sim31r
          30.07.2018 01:43

          Мне кажется нужно резистор для разрядки конденсатора, в несколько мегаом… Иначе конденсатор сработает 1 раз, зарядится и всё.


          1. Andy_Big
            30.07.2018 02:10

            Да, в этой схеме резистор понадобится, я не подумал про него :)


      1. FGV
        30.07.2018 07:45

        3.3V-(R=1M||C=1nF)-gerkon-(R=10K)-gnd.
        забирать сигнал с R=10K. Ток утечки конечно будет приблизительно 3мкА. И ограничится максимальная частота импульсов + импульс на выходе будет довольно коротким.


        1. sim31r
          30.07.2018 17:13

          Если ограничится частота импульсов это и хорошо, получается антидребезг встроенный. А забирать только прерыванием, длительность импульса 10 микросекунд.
          Можно поставить конденсатор хотя бы на 1 микрофарад, геркон медленный достаточно.


          1. FGV
            30.07.2018 17:35

            1M*1nF=1мс, т.е. до 3мс период между импульсами. а для 1мкф уже 3секунды, мне кажется многовато это.
            да и если уж увеличивать то резюк, для уменьшения тока утечки при замкнутом герконе.


            1. dontsov Автор
              31.07.2018 02:01

              Я тут посовещался: RC цепочка позволяет детектировать 1 импульс. Софтовое устранение дребезга не будет работать. А оно нужно, т.к. дребезг будет при размыкании геркона и может прийти помеха по длинным проводам счетчиков. Она будет расценена как импульс.


              1. FGV
                31.07.2018 07:26

                Ну это смотря какой дребезг. Для 30-20мкс устранять уже нечего:
                image


  1. smart_alex
    29.07.2018 20:47

    Что-то я не уловил принцип работы «кольцевого буфера с кольцевой меткой». Если сохранять ссылку на текущее положение метки в EEPROM, то ресурс также будет расходоваться, а если не сохранять, то после рестарта система не будет знать где находятся актуальные данные. Кто-нибудь может объяснить сам принцип работы «кольцевого буфера с кольцевой меткой»?


    1. FDA
      29.07.2018 21:46
      +1

      Блок данных маркируется идентификатором, который увеличивается на единицу при каждой записи. При перезапуске МК ищет блок с максимальным значением идентификатора и считает этот блок последним. Максимальное значение идентификатора должно быть не меньше общего кол-ва блоков. Таким образом мы равномерно используем всю EEPROM.


      1. Andy_Big
        29.07.2018 23:21

        Только не с просто максимальным, а максимальным в непрерывной последовательности :)


        1. FDA
          29.07.2018 23:23

          Да, совершенно верно!


        1. dontsov Автор
          29.07.2018 23:48

          У меня везде нули, а в текущей crc8 соответствующего блока.
          |xxxx|xxxx|xxxx|xxxx|crc|0|0|0|


          1. Andy_Big
            30.07.2018 00:44

            А если какая-то запись как раз даст CRC с нулями? :)



          1. pt200
            30.07.2018 10:44

            Кстати в данной реализации удвоенный износ в области хранения CRC( VAL > 0 > VAL2 > 0....)


    1. Andy_Big
      29.07.2018 23:04

      Я не знаю что имел в виду автор под кольцевой меткой, но вот один из вариантов кольцевого буфера, не требующего хранить где-то отдельно адрес последней записи:
      — в каждой записи содержится ее порядковый номер, размерность которого гарантированно превышает максимальное количество записей в буфере. То есть если буфер, например, может содержать до 100 записей, то для номера можно отвести 7 бит (128 значений).
      — когда нужно найти последнюю запись просто пробегаемся по записям, ища нарушение непрерывной последовательности (с учетом перехода к нулю после максимального значения — "..., 126, 127, 0, 1, ...").


  1. koldyr
    29.07.2018 21:17

    Скажите, что будет, если на момент передачи данных WiFi недоступен?


    1. dontsov Автор
      29.07.2018 23:14

      1. Есть таймаут подключения. ESP пошлет команду «спать», Attiny85 снимет питание.
      2. Если ESP «затупит» и что-то пойдет не так, Attiny85 снимет насильно питание через 15 секунд.


  1. Trumanbaz
    29.07.2018 23:06
    +1

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


    1. dontsov Автор
      29.07.2018 23:17

      Сам не знаю, зачем людям сдавать точные показания. Я делал не только для себя, но и для нескольких друзей, часть из которых старшего поколения, а оно сдавать не точно не умеет.
      Его можно использовать при сдаче квартир в аренду для отслеживания количества проживающих людей.
      Но, конечно, хочется датчик протечки…


      1. adson
        30.07.2018 10:32
        +1

        мой недавний неприятный опыт показал, что протечка может быть не только после ввода горячей/холодной воды, но и по стояку (батарее отопления), где расход ничем не считается


      1. Avach
        30.07.2018 14:32
        +1

        Решающим аргументом в наших с женой спорах о том, кто пойдёт снимать показания счётчиков, является её фраза «Я тогда от балды приблизительно напишу». После этого я как миленький поднимаюсь и иду. Так уж некоторые из нас устроены…


        1. dontsov Автор
          30.07.2018 14:34

          В общем, я рад, что Вотериус сможет помочь семьям =).

          Когда я узнал КУДА лезут каждый месяц мои взрослые знакомые, разработка ускорилась. Из-под раковины торчали только мои ноги, когда я подключал им Вотериус.


      1. balexa
        30.07.2018 19:41

        Старшее поколение сдает точные показания не потому что не умеет по другому, а потому что квартплата дорогая. Это для вас квартплата несущественна в контексте вашего дохода, и 500 рублей в месяц туда-сюда для вас совершенно незаметны. Если бы у вас был доход в виде средней пенсии в размере 13 тысяч, то вы бы как миленький каждый месяц считали все до копеечки.


        1. dontsov Автор
          30.07.2018 19:46

          Хм… да, некорректно прозвучало. Но и устройство они не будут покупать, т.к. им несложно посмотреть показания и у них нет Wi-Fi.


  1. Carburn
    30.07.2018 01:24

    Почему нельзя было использовать только ESP?


    1. dontsov Автор
      30.07.2018 01:51
      +1

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


      1. e_butcher
        01.08.2018 09:13

        Не добиться? Если использовать 2 батарейки АА и отправлять данные раз в день, то ESP проработает больше года!


        1. dontsov Автор
          01.08.2018 11:16

          А считать импульсы кто будет? Просто спать и просыпаться это экономичнее, да.


          1. e_butcher
            01.08.2018 11:55

            Ну не знаю, думаю годик можно из него выжать. Мне удалось протянуть 10 дней на 2х литиевых 18650 с опросом счетчиков каждые 4 секунды и отправкой данных (с довольно посредственным уровнем сигнала Wi-Fi) каждый полчаса.
            Если учесть, что отправка занимала секунд по 10, и сделать отправку раз в сутки, то думаю реально. Во всяком случае сейчас как раз буду в таком режиме пробовать. Через год могу отписаться о результатах)


  1. 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мкА


    1. dontsov Автор
      30.07.2018 02:05

      да, заводские решения обычно на подобных элементах питания. с саморазрядом нет исследований. видел график, что алкалиновые разряжаются до 20% при 0 или при +40. При комнатной меньше 10%.


      Надо смотреть потребление с включенным watchdog.
      Про то, что Attiny328 имеет такие же крутые характеристики, что и Attiny85 я узнал слишком поздно =). надо на Ардуино UNO попробовать, вытащив контроллер с платы.


      1. sim31r
        30.07.2018 02:27

        Периферию только нужно отключить, она по умолчанию включена, библиотека даже для этого есть


        1. dontsov Автор
          30.07.2018 14:43

          Я находил один единственный обширный пост с примерами без библиотек, постараюсь найти и добавить в GitHub.
          Мне только не понятно, почему со словом энергосбережение все советуют Attiny использовать, ощущение, что старшие линейки раньше не были экономичными и вышли обновленные версии. Я вижу странные слова picoPower, намекающие на это.


          1. sim31r
            30.07.2018 17:07

            Attiny все же меньше потребляют, хотя бы из-за меньшей памяти, но по моим впечатлениям разница потеряется на фоне саморазряда батареек, сеансов связи по WiFi и работе WDT, который нельзя отключать.


            1. dontsov Автор
              31.07.2018 01:58

              Даташит говорит, что столько же, причем здесь память? Надо считать.


      1. PendalFF
        30.07.2018 10:20

        Всё-таки щелочные. Алкалиновые оставьте пожалуйста для журналистов, которых насилуют ученые.


    1. klirichek
      30.07.2018 11:16

      Наверное имелись в виду Energizer Lithium (т.е. обычные щелочные батареи на основе лития), а не аккумуляторы.
      У них паспортный срок хранения (когда просто лежат в блистере, и вы их не собираетесь использовать) — 10 лет.


      1. dontsov Автор
        31.07.2018 01:56

        Да, именно они, спасибо!


  1. REPISOT
    30.07.2018 06:10
    -1

    Однажды мне надоело снимать показания воды
    Только когда увидел «Требования: счетчик с проводом» понял, что автор имел в виду «показания счетчика воды». А не показания качества воды или температуры, или уровня…


    1. littorio
      30.07.2018 09:47

      Полностью согласен. Надо добавить «счётчика» в название статьи. А то я уже подумал, что очередная «память воды» на Хабр пролезла…


    1. dontsov Автор
      30.07.2018 19:46

      добавил, спасибо =)


  1. Javian
    30.07.2018 08:12

    Можно попробовать еще уменьшить токи утечки используя TPS22860
    habr.com/post/386735
    image


    1. dontsov Автор
      30.07.2018 14:52

      Да, спасибо. Она специально сделана, чтобы по своему радиоканалу передавать. Очень полезно изучать схемотехнику delelopment board. Пока критерий — оперативность разработки, а не гонка за техническим прогрессом. Сейчас отладим бизнес-логику и в путь! =)


  1. gopotyr
    30.07.2018 09:01

    Самый экономичный вариант: полное отключение ESP8266, но понадобятся полевые транзисторы, которые боятся статического электричества, так-то.

    Да ладно!
    Например: krs.terraelectronica.ru/product/2000619
    Сопротивление сток-исток открытого транзистора (Rds): 0.054 Ohm
    Для защиты внутри транзистора даже на затвор-исток стоит шотки…


    1. synka
      30.07.2018 09:27

      Это ограничитель напряжения. Не диод Шоттки.


  1. electronus
    30.07.2018 09:33

    Вопрос, почему привязались к 3.3В? Когда ESP и МК могут работать от 3.0В
    На картинке у Вас линейник на 3.0В, а на схеме 3.3?
    Так всё-же, какой пошел в серию?


    1. dontsov Автор
      30.07.2018 10:28

      На схеме не переправил компонент. На 3В использую.


  1. ProstoUser
    30.07.2018 11:06

    1. Очень круто!

    2.

    Я реализовал периодический опрос каждые 250мс и инкрементирую (красивое слово, правда?) значение только при повторном замыкании.

    не вполне понял, что значит «при повторном замыкании»? Типа если два раза подряд состояние «замкнуто», то фиксируем замыкание геркона? А зачем такая логика?

    3. По моему скромному мнению, частоту опроса можно спокойно уменьшить уменьшить раз в 10. Задача — не пропустить замкнутое состояние. Замкнутое состояние длится у вас 3 литра (в моем счетчике 2 литра). Принимаем меньшее — два литра. Если два литра протекают за 250 мс, то за минуту должно выливаться 480 литров. Это совершенно нереальный расход. Полностью открытый кран в идеальных условиях дает порядка 10 литров в минуту. Если таких кранов 2, то 20. То есть можно сэкономить на потреблении МК посредством уменьшения частоты пробуждений.

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


    1. adson
      30.07.2018 11:14

      Если два литра протекают за 250 мс, то за минуту должно выливаться 480 литров. Это совершенно нереальный расход


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


      1. ProstoUser
        30.07.2018 12:22

        От такого должен защищать датчик протечки.

        Когда что-то течет — уже не важно, большой расход, или нет. Три этажа запросто зальет даже при очень небольшом (вполне обычном) расходе.


    1. dontsov Автор
      30.07.2018 14:04

      1. Спасибо!
      2. Защита от дребезга контактов.
      3. Всё верно. Я ещё не занимался сильной оптимизацией. Минимально: надо от pinMode, digitalRead отказаться. Уже в 6 раз меньше бодрствовать будем.
      4. Всё верно, но всё же датчик протечки сильно эффективнее, поэтому быстрее и проще его добавить в Вотериус.


      1. ProstoUser
        31.07.2018 11:38

        Под 4 я имел ввиду не протечку, а утечку.

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

        А датчик протечки (и не один) в такой дивайс добавить — святое дело!


  1. ittakir
    30.07.2018 12:09

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


  1. electronus
    30.07.2018 12:35

    Нашел логгер импульсов с будильником: PCF8583


    1. dontsov Автор
      30.07.2018 14:59

      Да, возможно такое решение, правда надо подумать, что делать с дребезгом контактов. Потребление 2мкА при 1В и нужно несколько штук.(PDF).


      1. sim31r
        30.07.2018 17:54

        RC цепочка решает все проблемы с дребезгом. И это не логгер, а просто счетчик. Для того, чтобы раз в сутки передавать значения, все равно нужен микроконтроллер и RTC, в итоге от отдельного счетчика теряется смысл.


        1. dontsov Автор
          31.07.2018 01:55

          Вот не уверен, что решает: RC цепочка позволяет детектировать 1 импульс. Софтовое устранение дребезга не будет работать. А оно нужно, т.к. дребезг будет при размыкании геркона. Также может прийти помеха по длинным проводам счетчиков. Она будет расценена как импульс.


          1. ProstoUser
            31.07.2018 12:18

            У нас есть текущее состояние геркона. Появилось прерывание — поставили таймер на 100мс, закрыли прерывания от входа и спать. Через 100мс проснулись и смотрим текущее состояние входа. Если поменялось — фиксируем импульс. Не поменялось — значит проскочила помеха. После такого анализа открываем прерывания и опять спать.

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

            Хотя я не электронщик — чисто дилетантски рассуждаю. Может это все бред.


        1. Iv38
          31.07.2018 02:10

          Там же есть ESP8266, она может сама себя разбудить и снять показания. Но в целом да толку по сравнению с тинькой почти никакого, да еще и защита от затупов ESP пропадает.


  1. doom369
    30.07.2018 13:03

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


    Блинк поддерживает СМС на локальном сервере (Blynk.sms(«hello»)), но надо подключать смс гейт. Как вариант — можно использовать email, а в почтовом клиенте настроить форвардинг на смс. Сейчас все операторы поддерживают email->sms.


    1. dontsov Автор
      30.07.2018 15:27

      Спасибо! В текущей реализации E-mail каждый день приходит. У Вотериуса нет календаря, хотя его можно с Blynk получить.


  1. Unknown007
    30.07.2018 13:23

    Не знал, что есть официальный API ЕМП для передачи показаний счетчиков воды… Хотя вроде гуглил, но не находил такого, поэтому написал скрипт для передачи показаний через парсинг сайта my.mos.ru и отправку значений. Там же есть и передача показаний электросчетчиков, но почему-то после передачи значений электросчетчиков, новые показатели отображаются не сразу, а только на следующий день, хотя на сайте мосэнергосбыта они отображаются сразу. Поэтому пишу сейчас скрипт для передачи показаний электросчетчиков, разбирая запросы-ответы мобильного приложения мосэнергосбыта. Может и для него есть какое-то открытое API, которое я не нашёл?

    p.s. спасибо за статью, тоже хотел прикрутить ESP8266 к счетчикам, чтобы в итоге автоматически передавать показания, но не думал, что ради экономии питания стоит использовать другой микроконтроллер


    1. dontsov Автор
      31.07.2018 01:53

      Вот. После регистрации Вам дадут доступ к описанию API. Посмотрите на приложение Госуслуги Москвы, оно также умеет добавлять электросчетчик клиенту и слать его показания. Буду рад пул реквесту в github.

      Там куча нюансов с этими счётчиками…


  1. GarryC
    30.07.2018 13:31

    CC1350?


    1. dontsov Автор
      31.07.2018 01:50

      Классная микросхема, но мы передаем по Wi-Fi, поэтому полезность нивелируется. Но с нее можно взять минимум схемотехнику development board.


  1. 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.


    1. dontsov Автор
      30.07.2018 16:31

      А зачем нам ESP32 с 150мкА? У нас ESP8266 во сне потребляет 0-10 мкА. А на подсчет импульсов уходит ~7 мкА.


      1. FGV
        30.07.2018 16:40
        +1

        1) вместо связки attiny+esp8266 будет стоять одна esp32 (с кучей свободных пинов);
        2) 150мкА кушает встроенный ULP сопроцессор в режиме работы, но его тоже можно вгонять в сон, в этом случае работает только встроенный таймер который будит ULP и кушает он — 5µA;
        3) потребление esp32 при CHIP_PU=0 — 0.1 µA.


        1. dontsov Автор
          30.07.2018 16:42

          Да, отличный вариант, спасибо!


          1. 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мкА.


            1. dontsov Автор
              31.07.2018 01:48

              Вау! На это стоит обратить внимание =).
              Не очевидно, что они за потребление берут, поэтому надо брать микросхему и тестить. Владельцы ESP32! Соберите Вотериус 2.0! =)


  1. p0gank
    30.07.2018 15:37
    +1

    Ножка для датчика протечки у Вас есть, сконфигурируйте вместо reset входной пин. И настройте BOD, он умеет включать контроллер с небольшой задержкой после подачи питания. Еще ногу можно взять переведя протокол обмена между микроконтроллером и esp на onewire, или использовать сигнал SCL через RC цепочку для включения ESP, в таком случае после прекращения обмена по I2C ESP выключится самостоятельно после разряда конденсатора.


    1. dontsov Автор
      30.07.2018 16:29

      Класс! Спасибо! Я закину идею в github, вдруг кто раньше меня доберется до экспериментов!

      Вопрос:
      1. какая обвязка пина reset должна быть?
      2. BOD для чего понадобится задерживать?
      3. Да, кроме onewire есть еще PJON .

      Решение с SCL отличное =), я бы запасся осциллографом для отладки.


      1. sim31r
        30.07.2018 17:57

        И высоковольтным программатором, без пина RESET иначе ни как…


      1. p0gank
        31.07.2018 13:40

        1. Обвязка как для обычного пина, фьюзы выключают функционал reset и ножка становится одним из портов как и остальные, без специальных разрешений. Но как сказали ниже, перепрограммировать после выключения резета можно только при наличии высоковольтного программатора.
        2. Задержка запуска процессора нужна чтобы переждать переходные процессы при появлении питающего напряжения, это программируется тоже fuse битами при включении BOD.


  1. divanus
    30.07.2018 17:18

    Реализовывал коммерческий проект на базе AIU аддакс матрица. Постоянно была грёбаная проблема поверки по импульсам, т.к. через этот контроллер воду слали и газ. Газовые счетчики — это была отдельная история. Каждый производитель счетчиков: кто во что горазд :)
    проект надо повторить в новом доме уже — поставил в главные закладки на реализацию


    1. dontsov Автор
      31.07.2018 01:46

      Здорово, что у вас есть практический опыт подключения к счетчикам. Я бы хотел собрать список совместимого оборудования, туда можно включить и подводные камни интеграции.


  1. ebragim
    30.07.2018 17:55

    Сделайте, пожалуйста, герберы для jlcpcb.com — чтобы не приходилось ставить другой софт и разбираться с экспортом.


    1. lewchenko
      30.07.2018 19:47

      Лучше сообщите REM платы в Резоните, чтобы можно было их там заказать. Ну, если только Вы не хотите ими барыжить:-)


      1. dontsov Автор
        30.07.2018 19:49

        А где это смотреть? Там пластина на 21шт, проще мне в личку написать.


        1. lewchenko
          31.07.2018 09:12

          На Резонитовском пакете с пупыркой наклейка, там есть строка «внутренний» или «заводской» номер. Формат его такой: REM XXXXXX — если это серийное или TIM XXXXXX — если это опытное/срочное производство.


  1. andy_by
    30.07.2018 22:26

    А покажите, пожалуйста, фото установленного в продакшн :) девайса


    1. dontsov Автор
      01.08.2018 02:28
      +1

      Надо просить народ с хэштегом выкладывать =).
      Фотоаппарат к такому варианту дотянулся:
      image

      Сбоку сверлится дырка и можно на стяжке подвесить.


  1. Dark_Rider
    30.07.2018 22:32

    -стоит ли повторять в этом виде проект?
    -какой счетчик подойдёт? Не в курсе этой темы, подскажет кто?


    1. maxvit
      30.07.2018 23:05

      Счетчик любой с импульсным выходом


      1. dontsov Автор
        31.07.2018 01:29

        типа «сухой контакт»


        1. Dark_Rider
          31.07.2018 06:50

          А без замены счётчика, отдельно сам датчик бывает?


          1. Javian
            31.07.2018 10:47

            Можно так «Оптическое распознавание символов на микроконтроллере»
            habr.com/post/330936


            1. maxvit
              31.07.2018 11:54

              Дешевле и проще поменять на счетчик с импульсным выходом


              1. Javian
                01.08.2018 08:23

                Это универсальное решение без замены какого либо счетчика. Наприимер можно на газовый подвесить.

                Использованная в статье камера OV7670 на али стоит около 200 руб. ESP8266 около 150 руб.


          1. dontsov Автор
            31.07.2018 11:29

            Не встречал =(. Счетчик формально опломбирован, т.к. является измерительным устройством… Надо делать датчик положения стрелки, но в эту сторону вообще никто не думал…


          1. hobbyte
            31.07.2018 14:25

            В качестве идеи, возможно, подойдёт.
            Как существо ленивое и не обременённое знаниями, первый опыт с esp8266(NodeMCU), взял «сенсор линии» с компаратором. Считал обороты крыльчатки маленькой, у меня 6 лепестков было. «Посчитал количество ног и поделил на 4.»(ц)
            Писал на lua, прерывания брал по нарастающему фронту, дребезга или ложных импульсов на 5м витой пары не заметил.
            Данные на обороты есть в паспорте счётчика, емнип.
            Так 2 года отработало.
            Естественно, ни о каких батарейках и экономии на питании речи не идёт.


  1. 12val12
    31.07.2018 11:31

    круто а осциллограф возможно?
    мечта не прикручивать к контролеру экран а передавать на мобилку
    желательно таким тупым байтовым протоколом
    {1,254,2,253} {Umax b1 b2 } {Umin b3 b4} {800 байтов значения по y}
    первая последовательность это маркер начала кадра (сбой маловероятен )
    далее 2 байта макс напряжение встерченное в осциллограмме 2 байта минимальное
    800 точек у на картинку.
    в приципе мне бы хватило


    1. dontsov Автор
      31.07.2018 11:32

      ээ… вы сейчас что прокомментировали?


  1. smallghost
    01.08.2018 09:19

    Отличный опус! Читал с упоением. Ещё раз убедился что всё что ты только задумал кем-то уже реализовано :-)


    1. dontsov Автор
      01.08.2018 11:15

      Спасибо =). Я сам много лет ждал этого решения, но пришлось взять паяльник. Не жалею, знаний вагон и тележка хайпа.


  1. e_butcher
    01.08.2018 09:28

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


    dontsov А можно поподробнее, что имеется в виду под страницей с СМС? Из описания на github не очень понятно… Спасибо.


    1. dontsov Автор
      01.08.2018 11:14

      Максимально упростить можно генерируя СМСку с нужными цифрами. Т.е. Вотериус может слать на вебсервер показания, а на веб странице может быть ссылка, при нажатии на которую сразу СМСка формируется. Зайдите на github библиотеки с телефона и нажмите на примеры.


      1. e_butcher
        01.08.2018 11:56

        Я правильно понял, что на веб-странице генерируется ссылка, при нажатии на которую с мобильного телефона, формируется СМС?