В прошлой статье я рассказывал как снимал показания со счетчиков воды. С тех пор прошло уже несколько лет. Устройство так и продолжает работать и за все это время я его не трогал. Но мне этого показалось мало, т.к. в доме были другие устройства, с которых необходимо было снимать показания. Об этом я и хочу поговорить.
Счетчик электроэнергии
В каждой квартире есть счетчик электроэнергии и его показания тоже необходимо вовремя сдавать. У нас с этим была такая же проблема, что и со счетчиками воды — мы постоянно вспоминали про него, когда находились довольно далеко. Необходимо было как-то решить данную проблему. Вот такой счетчик у меня установлен в щитке на лестничной площадке.
На каждом счетчике указано какое кол-во импульсов он совершает на 1кВт*ч. У меня установлен старый счетчик электроэнергии и у него нет специальных выводов для подсчета этих импульсов. Но у него есть светодиод, который мигает в такт этим импульсам. Значит нам надо как-то определять, что светодиод мигнул. Для этого я решил использовать фототранзистор, который меняет свое сопротивление в зависимости от его освещенности. Чтобы он реагировал только на светодиод, фототранзистор был установлен во фрагмент квадратного деревянного бруска и приклеен скотчем к счетчику. Как получилось видно на фото ниже.
Еще во время ремонта в квартире, в общем щитке я установил плинт и провел от него витую пару в квартирный щиток со слаботочкой. Устройство я установил в этот щиток(в нем есть и розетка для питания) и через плинт соединил фототранзистор со своим устройством. И в таком виде все работает уже больше полугода.
Датчик протечки воды
В качестве образца взял обычный датчик протечки GIDROLOCK WSP. Его принцип работы схож с фототранзистором, только он меняет свое сопротивление от попадания на него воды.
Доработка платы
Я немного доработал старую плату. Теперь схема выглядит следующим образом
Были сделаны следующие изменения:
- В схему добавлена микросхема CP2102, чтобы к плате можно было подключаться напрямую без переходников
- Увеличено кол-во выводов до 4(М1, М2, М3, М4), что позволяет одновременно подключить большее кол-во счетчиков
- Добавлены вспомогательные резисторы(R1..R8), что позволило конфигурировать выводы как необходимо
Теперь каждый вывод можно настроить для:
- подключения светодиода
- подключения кнопки
- подключение счетчиков(датчиков)
При использовании фототранзистора и датчика протечки их минимального сопротивления может быть недостаточно, чтобы напряжение опустилось до уровня логического нуля. Для этого к каждому выводу был добавлен делитель напряжения.
Давайте на примере датчика протечки рассчитаем делитель напряжения. Допустим датчик подключен к выводу M1. У него вспомогательные резисторы R1 и R2. Напряжение питания(U) ESP 3.3V. Сопротивление датчика протечки(Rd) при попадании на него воды становится 10кОм. Нам необходимо добиться, чтобы напряжение было ниже напряжения уровня логического нуля. Для ESP это 0.8V, возьмем 0.6V. нам не нужно, соответственно примем равным 0. Формула для расчета напряжения :
Выделим :
, где — это сопротивление датчика
Подставим известные значения в формулу
, округляем до ближайшего большего и получаем 47кОм.
Для фототранзистора расчет делается аналогично, только Rd равно сопротивлению фототранзистора при освещении его светодиодом.
Прошивка
Как и раньше, прошивка собрана при помощи online-конструктора. Старый скрипт был модифицирован под 2 режима работы: снятие показаний счетчиков воды и снятие показаний электросчетчика. Соответственно есть 2 окна настройки:
При желании можно все объединить и добавить что-то свое. При отладке у меня одновременно были подключены 2 счетчика воды, датчик протечки и светодиод.
В режиме снятия показаний счетчиков воды, данные передаются каждые 60 секунд при условии если были какие-либо изменения в показаниях. В режиме снятия показаний счетчика электроэнергии, данные передаются каждые 20 секунд без каких либо условий. Данные по-прежнему передаются на thingspeak.com
Т.к. в новой схеме отсутствует кнопка для перехода в режим настроек, было принято решение при загрузке переводить устройство в режим настройки на 60 секунд. Если в течение 60 секунд никто не подключился к устройству, то дальше стартуем режим снятия показаний. Если кто-то подключился, то выход из режима настроек либо по сохранению данных на странице либо перезагрузив устройство.
Доработка приложения
Показания счетчика электроэнергии необходимо было передавать в отдельный канал, поэтому в новой версии приложения я добавил возможность добавлять несколько каналов. Все данные хранятся в локальной SQL базе, чтобы можно было легко и быстро строить графики. Т.к. данные по электросчетчику я отправлял каждые 20 сек это отразилось на кол-ве данных, а следовательно, и скорости их получения. Для сравнения, за все время снятия показаний по водосчетчикам накопилось около 72000 записей, а по электросчетчику примерно за 7 месяцев около 2,6 млн. После оптимизации запросов в базу, удалось увеличить скорость выборки в несколько тысяч раз(сам не ожидал такого прироста).
В новой версии были добавлены:
- виджет электросчетчика
- линейные графики
- возможность поделиться виджетом или графиком с другими людьми
- возможность работы с несколькими каналами
- оптимизация скорости работы
Итого
После всех доработок, я могу получить следующую информацию:
- текущее показание счетчика
- текущее потребление
- информацию по потреблению и расходу электроэнергии за какой-то промежуток времени
Конечно, напрашивается вопрос почему я не сделал устройство автономным(на хабре есть несколько статей на эту тему). Если делать устройство автономный, то необходимо передавать данные несколько раз в день, а я же хотел видеть данные почти в режиме реального времени.
Приложение можно использовать не только с моим устройством, но и просто как клиент к thingspeak.com для отображения каких либо графиков или значений. На данный момент приложение красиво отображает показания счетчиков воды и электроэнергии, если у кого-то будут другие идеи, что можно добавить, то пишите мне в личку.
Полезные ссылки
Автор: LAVElek