• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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, верно написал.
 
Сверху Снизу