Датчик расхода воды и Arduino
Мы используем датчик расхода воды для измерения расхода воды. Расход воды — это объем жидкости, который проходит в единицу времени. Люди часто используют датчик расхода воды для автоматического управления водонагревателем, самодельных кофемашин, торговых автоматов и т.д. Существует множество датчиков потока с разными принципами действия, но для производителей, использующих Arduino или Raspberry Pi, наиболее распространенный датчик потока основан на устройстве Холла. Например, самые классические датчики расхода воды YF-S402 и YF-S201 полагаются на датчики Холла.
Итак, как работает датчик расхода воды Холла?
3. К ножке D13 arduino я подключил светодиод индикации с последовательным резистором на GND, который будет дублировать светодиод на счётчике.
К ножке D10 arduino подключил буззер (пьезо-пищалку с генератором частоты), который будет пищать при высоком уровне на этой ножке для сигнализации слишком высокого потребления.
4. Фоторезистор ФСК-1 я подключил к аналоговому входу A1 и к +5в. При этом, прижав ножку входа A1 к GND резистором 10k.
Без этого резистора потенциал на входе спадал очень медленно, что мешало снимать показания.
Подключение Arduino к датчику
Соединения, необходимые для этого датчика расхода воды относительно Arduino, очень минимальны. От датчика расхода идет только три провода. Линия 5 В VCC (красный провод), GND (черный провод) и линия сигнал/импульс (signal/pulse, обычно желтый). Подключите VCC и GND расходомера к VCC и GND Arduino. Импульсная линия датчика расхода соединена с цифровым выводом Arduino 2. Цифровой вывод 2 Arduino служит внешним выводом прерывания (вывод прерывания 0). И это всё, вы подключили свой расходомер к Arduino!
Краткие выводы
Ультразвуковые датчики расстояния достаточно универсальны и точны, что позволяет их использовать для большинства любительских проектов. В статье рассмотрен крайне популярный датчик HC SR04, который легко подключается к плате ардуино (для этого следует сразу предусмотреть два свободных пина, но есть вариант подключения и с одним пином). Для работы с датчиком существуют несколько бесплатных библиотек (в статье рассмотрена лишь одна из них, NewPing), но можно обойтись и без них – алгоритм взаимодействия с внутренним контроллером датчика достаточно прост, мы показали его в этой статье.
Исходя из собственного опыта, можно утверждать, что датчик HC-SR04 показывает точность в пределах одного сантиметра на расстояниях от 10 см до 2 м. На более коротких и дальних дистанциях возможно появление сильных помех, что сильно зависит от окружающих предметов и способа использования. Но в большинстве случаев HC-SR04 отлично справлялся со своей работой.
Код программы достаточно простой, надеюсь, он не вызовет у вас затруднений. Дополнительные пояснения к нему даны выше в статье.
const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
int val=0;
void setup() <
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), test, CHANGE);
Serial.begin(9600);
>
void loop() <
digitalWrite(ledPin, state);
Serial.println(val/2);
>
void test() <
state = !state;
val++;
>
Подключение купюроприемника CashCode SM к Arduino
Так сложилось, что моя основная работа связана с вендинговым оборудованием (терминалы самообслуживания, кофейники и так далее), вот и решил описать подключение купюроприемника CashCode SM к Arduino.
Технические параметры CashCode SM
► Обработка купюр: продольная
► Ширина купюр: 67-71 мм
► Вместимость кассеты: 200 / 400 / 1000 / 1500
► Скорость обработки купюры: 3 секунды
► Поддержка протоколов: Pulse / ccNet / ID003
► Напряжение питания: 12В
Общие сведения
Немного теории, для всех существующих купюропреимниках производитель выпускает прошивки, в которых защиты параметры купюр и реализована микропрограмма для передачи данных «Протокол работы». Существует разные протоколы работы, одни из популярных CCnet, MDB, ID003, ID004, Pulse, обычно производитель реализует от одного до трех (бывают и больше) протоколов работы на устройство. В этой статье, для взаимодействия буду использовать протокол «Pulse», существует два вида протокола:
Виды протокола Pulse
► последовательный — передача данных осуществляется с помощью одного вывода (пример: 10 руб — 1 импульс, 50 руб — 5 импульса и так далее);
► параллельный — передача данный осуществляется с помощью несколько выводов (пример: 10 руб — 1-й вывод, 50 руб — 2-й вывод и так далее).
Все зависит от используемого оборудования, например компания CashCode (SM, MVU) использует последовательный протокол работы, а ITL (NV9 и NV10) параллельный. Так как в качестве купюроприемника использую CashCode SM 2073, а он поддерживает протокол «Pulse» (последовательный), скетч будет написан именно для него.
Примечание: протокол работы «Pulse» унифицирован, следовательно вместо CashCode SM 2073 можно использовать например ICT A7, A7, BS7, L70 и так далее.
Кстати, позже добавлю монетоприемник EU9, он отлично подходит, запоминает 12 видов монет и есть функция суммирования, то есть может послать один импульс, при наборе заданной сумме, например: если настроили 10 руб — 1 импульс, то он может принять 5 руб + 5 руб — 1 импульс, 2 руб + 2 руб + 2 руб + 2 руб + 2 руб — 1 импульс, в общем суть поняли и он по сравнению не дорогой (по сравнению цена качество)
А как же выбрать купюроприемник?
Для сравнения, возьму два популярных моделей купюроприемников ICT V7 и CashCode SM:
ICT V7
► плюсы — дешевый, поддерживает сразу три протокола Pulse, ID004 и MDB (меняется с помощью дипов).
► минусы — обновление программы через компьютер, нужен программатор, периодически необходимо калибровка с помощью калибровочной бумаги.
CashCode SM 2073
► плюсы — прошивка через карты SmartStick, поддержка протоколов Pulse, ID003, CCNet (меняется с помощью прошивки), не надо калибровать.
► минусы — дорогой, с картой SmartStick можно прошить до 100 купюроприемников (саму карту, можно обновить только у официальных представителей в России их не более 10).
В общем, в двух словах, если в день оборот всех купюр составляет порядка 100 шт, выбирайте ICT если оборот более 100 шт, выбирайте CashCode.
Подключение купюроприемниика CashCode и Arduino
Вернемся к Arduino, как говорил ранее, в примере использую CashCode SM (прошитый под Pulse, прошивка SM-RU7620) и плату Arduino. Информация о принятых купюрах, будет отображаться на LCD дисплее и в мониторинге порта, среды разработки IDE Arduino.
Для подключения, советую использовать разъем 3х3 (MFB-3×3), для быстрой замены на другой купюроприемник.
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► CashCode SM 2073 с кассетой x 1 шт.
► LCD-дисплей 1602A (2×16, 5V, Синий) x 1 шт.
► Интерфейсный модуль IIC, I2C, TWI для LCD x 1 шт.
► Блок питания DC 12В, 2А x 1 шт.
► Резистор 4кОм, 0,125Вт x 1 шт.
Подготовка
Производитель позаботился и дал возможность пользователю менять параметры, передаваемого импульса, сигнала inhibit (сигнал запрета) так далее. Для изменения параметром, необходимо изменить состояние DIP переключателя (всего их два 8 и 4), что находится на центральной плате, для работы в моем примере. необходимо установить:
SW1 — первый линейка переключателей
► 1 — ON — цена одного импульса 1 импульс — 10 руб или 1 импульс — 50 руб.
► 2 — ON — запрет 50 руб.
► 3 — ON — запрет 100 руб.
► 4 — ON — запрет 200 руб.
► 5 — ON — запрет 500 руб.
► 6 — ON — запрет 1000 руб.
► 7 — OFF — положительный или отрицательный импульс
► 8 — OFF — сигнал запрета, Inhibit можно переключить в положение ON и не подключать 3-й вывод к Arduino
SW2 — вторая линейка переключателей
► 1 — ON — запрет 2000 и 5000 руб.
► 2 — OFF — настройка импульса
► 3 — ON — включение усиленного распознавания купюр
► 4 — ON — переключение в сервисный режим
Для более подробной информации, можно скачать мануал по прошивке или посмотреть на фото ниже. Управление Inhibit реализовано в скетче (хотя можно было и не использовать), необходим он, для отключения приема купюр, например изза ошибки или кончился размен, в общем, все зависит от вас. Чтобы Inhibit работал, необходимо в разъем 2х8, установить перемычку между 3 и 4 контактом.
Подключение
Схему подключения можно посмотреть на рисунке ниже использовался разъем MFB-3×3.
Назначение выводов на купюроприемнике CashCode SM-2073
После того как вы собрали схему, необходимо залить скетч в плату Arduino UNO, LCD дисплей подключаю с помощью интерфейса I2C, для нее необходимо установить библиотеку.
ESP32 и ESPhome
Под рукой со старых поделок лежало несколько плат разработчика ESP32. Так как это мой домашний пет-проект, можно и пренебрегать промышленными масштабами подхода к делу. Возьмём просто плату, к ней подключим питание по MicroUSB и установим.
ESPHome является прошивкой, тесно интегрированной в Home Assistant. Её плюсы:
- Небольшой размер кода программы;
- Всё программирование — в yaml файле (не нужно уметь кодить, только писать настройки);
- Обновление OTA (по воздуху);
- Прямой протокол для управления из Home Assistant;
- Стабильность работы прошивки.
Да, никто не запрещает использовать Tasmota, ESPEasy, голый код в Arduino IDE, но мне показалось это весьма изящным и быстрым решением.
Небольшие пояснения по коду. В ESPHome есть встроенный тип платформы «pulse counter», который считает импульсы. Но максимально возможное время по замеру количества импульсов — 13 микросекунд согласно документации. Поэтому пришлось прибегнуть к хитрости, так как счётчик всегда выдавал то 15, то 45, то 32 импульса — сплошной рандом. Я сделал lambda-фильтр по замерам. Если вода в этот момент текла, и был импульс, то он вернёт 10 (литров), а если нет — 0. И замер оставил раз в 30 секунд. То есть, если за эти 30 секунд был импульс, он засчитает его за один. Казалось бы, такая ситуация может привести к проблеме, когда будет два импульса за такой интервал, но этого удалось исключить чисто физический. Максимального потребления в доме я добился 970 литров в час, а это 16 литров в ми нуту. Поэто му , двух и мп ульсов удалось избежать благодаря интервалу в 30 секунд.
Так выглядит момент сопряжения устройства в Home Assistant. Для того, чтобы устройство нашлось, мне потребовалось перезагрузить ядро, зайти в раздел Integrations и добавить появившееся устройство оттуда (введя пароль от api)
Так выглядит интерфейс и графики отчета устройства. Планирую скрыть Water Meter House, так как сложно привязать потребление ко времени с таким рваным приходом показаний.
Вот такую коробочку я собрал. ESP32 просто подключил к телефонной зарядке, которую, в свою очередь, подключил в сеть 220. Да, колхоз, но для старта пойдёт.