• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Изобрел велосипед, точнее снятие показаний счетчиков воды на Wemos D1 mini :))

Slacky

Member
Сразу хочу предупредить - я не программист, я просто любитель. Потому все неконструктивные критики идут в сад.

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

В общем сделал свой вариант.

Подробнее.

Понадобится аппаратное устранение дребезга контактов. Легко делается на микросхеме SN74HC14N пары кондеров и 4 сопротивлений.

Конфиг записывается или на SD (если есть) или в EPPROM.

Данные отсылаются на mqtt сервер, где mqttwarn их складывает в базу sqlite3 (ну не сам конечно, а с помощью скрипта на Perl). mqttwarn в процедуре execute пришлось немного доработать, добавив одну строку, чтобы топик передавался вторым аргументом.

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

На самом устройстве можно просто посмотреть кол-во куболитров :))

Сервер у меня локально крутится на базе роутера Zyxel с opkg.

Все подробности GitHub - slacky1965/watermeter: The water counter on ESP8266 for Arduino IDE

Да, спасибо этому форуму, что отвечали на мои глупые вопросы :)))

indications .jpg mobile.jpg monitor.jpg statistics.jpg uptime.jpg
 
Последнее редактирование:

NeoroN

Member
Автор забыл указать общую суть проекта - подсчет импульсов со счетчика. А то я было подумал что он с электросчетчика по последовательному порту снимает показания.
 

Slacky

Member
Автор забыл указать общую суть проекта - подсчет импульсов со счетчика. А то я было подумал что он с электросчетчика по последовательному порту снимает показания.
Какая фраза навела Вас на мысль про электросчетчик? :)
 

Slacky

Member
Дополнение по поводу устранения дребезга контактов.

Изначально я все сделал на микросхеме SN74HC14N, но у нее минимальное питание 2 вольта, а номинал 5. Видимо при питании 3.3 вольта ей что-то там не хватает и иногда триггер срабатывал странным образом.

Для пробы была взята другая микросхема из наличия в чипдипе - 74LVC14AD.118. У нее минимальное питание 1.2 вольта, максимальное 3.6. Вот с ней все заработало отлично. Правда пришлось применить макетную плату-переходник SO14-DIP, так как сама микросхема слишком мелкая.

 

igrushkin

Member
Очень полезная штука. У меня такой работает уже год, только данные отсылает в Domoticz
 

Slacky

Member
Внес изменения.

Убрал шилд питания и добавил шилд зарядки. Прикрутил АКБ. Теперь при пропадании внешнего питания модуль переходит в режим light_sleep с малым потреблением. При восстановлении питания и при очередном срабатывании счетчика, модуль просыпается и работает в штатном режиме. Если в режиме сна питание не восстановилось, то при срабатывании счетчика это учитывается и модуль опять засыпает.

Шилды все от Wemos. Шилд зарядки нужно доработать, припаяв сопротивление порядка 12 кОм между входным напряжением +5в и пином D0.

Да, устранение дребезга собрал на микросхеме MC14490, триггер Шмидта иногда все-таки лажает.

Все подробности GitHub - slacky1965/watermeter: The water counter on ESP8266 for Arduino IDE
 

Evgeny D

Member
Ого! Вполне отличная реализация! И код читаемый.

Сам хочу сделать счетчик. Но нахожусь в начале познания ESP...
Я бы хотел видеть автономный счетчик. Для этого хочу соединить ATTINY85 и ESP8266.
ATTINY85 спит и прерываниями считает импульсы. Раз в N дней подает питание на ESP8266, та ее спрашивает "сколько насчитала?" и отправляет на сервер. После чего ATTINY85 опять ее отключает.

Возможно про "дребезг" вы сможете ответить: насколько реально его побороть без доп. микросхем?
 

kab

New member
Ого! ...
Возможно про "дребезг" вы сможете ответить: насколько реально его побороть без доп. микросхем?
Ну, если:
устранение дребезга собрал на микросхеме MC14490
- если на микросхеме реализована какая-то логика, то почему эту же логику нельзя реализовать программным путём?
@Slacky, если Вы объясните, что там микросхема делает с дребезгом - попытаюсь представить, как это реализуется программно.
 

Slacky

Member
Ну, если:

- если на микросхеме реализована какая-то логика, то почему эту же логику нельзя реализовать программным путём?
@Slacky, если Вы объясните, что там микросхема делает с дребезгом - попытаюсь представить, как это реализуется программно.
Разбирайтесь :)))

http://www.west-l.ru/uploads/tdpdf/oh646060.pdf
 

kab

New member
Теория по этому случаю простая:
- обычно считается, что "дребезг" затихает быстрее, чем ожидается следующий импульс. И в ожидаемый интервал "дребезга" после информативного импульса состояние контактов попросту игнорируется. Так что вопрос к @Slacky был не по теории устранения дребезга, а, в частности, по значению минимального интервала между информативными импульсами в этом конкретном случае. Чтобы оценить, не пропустим ли мы вместе с "дребезгом" и информативный импульс.

Написал подробно, т.к. @Evgeny D интересует конкретный вопрос.

ЗЫ. Но может у @Slacky на микросхеме реализована какая-то более сложная, продвинутая логика? С микросхемами у меня опыт не очень - разбираться по схеме как-то не в ...
 
Последнее редактирование:

Slacky

Member
ЗЫ. Но может у @Slacky на микросхеме реализована какая-то более сложная, продвинутая логика? С микросхемами у меня опыт не очень - разбираться по схеме как-то не в ...
Да я как бы тоже не сильный специалист. Просто есть аппаратное решение в виде микросхемы, которая специально разработана для подавления дребезга. На просторах интернета ее хвалят. К тому же обвес минимальный в виде одного кондера. Большая частота нажатий, кондер поменьше (в даташите 100 пик), меньшая - побольше ...
 

kab

New member
Да я как бы тоже не сильный специалист. Просто есть аппаратное решение в виде микросхемы, которая специально разработана для подавления дребезга. На просторах интернета ее хвалят. К тому же обвес минимальный в виде одного кондера. Большая частота нажатий, кондер поменьше (в даташите 100 пик), меньшая - побольше ...
ОК, с микросхемой понятно. А не обращали внимание, какая максимальная частота срабатывания контактов датчика расхода воды?
 

Slacky

Member
ОК, с микросхемой понятно. А не обращали внимание, какая максимальная частота срабатывания контактов датчика расхода воды?
Замыкание происходит с переходом на последнем сегменте с 9 на 0, а размыкание где-то на цифре 3. Если кран открыть на полную, то от 0 до 3 проходит секунды 3 ...
 

kab

New member
Замыкание происходит с переходом на последнем сегменте с 9 на 0, а размыкание где-то на цифре 3. Если кран открыть на полную, то от 0 до 3 проходит секунды 3 ...
:) Ну, с такими "таймингами" - думаю, дребезг лечится программным способом с "ходу".
Я еще не экспериментировал с прерываниями - но вроде особых проблем не должно быть. Как я представляю сейчас - из функции прерывания надо запретить это прерывание на несколько мсек. И "дребезг будет не страшен"...
 

kab

New member
:) Ну, с такими "таймингами" - думаю, дребезг лечится программным способом с "ходу".
Я еще не экспериментировал с прерываниями - но вроде особых проблем не должно быть. Как я представляю сейчас - из функции прерывания надо запретить это прерывание на несколько мсек. И "дребезг будет не страшен"...
Нет, так не получается. Надо делать по другому:
- При каждом прерывании от контактов - надо запоминать время срабатывания контакта (время вызова функции прерывания - millis) во внешней переменной (их надо завести две - для холодной и горячей воды). А перед инкрементированием счетчика срабатывания контактов необходимо проверить, что с момента предыдущего срабатывания контактов прошло больше 100 (например) мсек.
 

kab

New member
Здесь предлагается альтернативный (по сравнению со скетчем @Slacky) подход - не на прерываниях, а на непосредственном анализе состояния пинов в loop. Наверно, так тоже можно, но переделки более существенные, чем предлагаемые мной.
 

Evgeny D

Member
Супер! Я боялся, что Slacky нашел неведомую особенность счетчиков, которая вынудила к такому решению. ))
Да, kab, верно написал.
 
Сверху Снизу