Подключение счетчика воды

Собираем данные со счетчиков воды

Цель

Организовать беспроводной сбор данных от счетчиков воды

Немного теории

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

Что потребуется

  • Модуль MBee-868-2.0 или MBee-868-3.0 – 2 шт
  • Антенны 868 МГц с разъемом SMA - 2 шт
  • Плата USB-UART MB-USBridge – 1 шт
  • Плата MB-Tag – 1 шт
  • Батарейка CR2032 – 1 шт
  • USB-провод – 1 шт
  • Компьютер с терминальной программой

Что делаем

Модуль на плате MB-USBridge

  1. Устанавливаем оба модуля на платы MB-USBridge, в соответствии с изображением.
  2. Предполагаем, что ПО SerialStar в модуль уже загружено. Если нет, то посмотрите, как это сделать здесь. Не забываем сбросить все настройки к заводским значениям. Там рассказано, как это сделать.
  3. Запускаем терминальную программу, выбираем номер порта и устанавливаем для него 9600 8N1 CTS/RTS.
  4. Входим в командный режим («+++» или «SYSTEMBUTTON»).
  5. Решаем, с какой периодичностью нам бы хотелось получать данные о температуре. Если интервал 15 секунд, установленный «по умолчанию» Вас устраивает, то переходим к следующему пункту. Если нет, то печатаем, например, AT SP 500⏎ (здесь и далее  ⏎ означает нажатие клавиши «ENTER»). Период задается в десятках миллисекунд, поэтому мы с Вами только что сделали его равным 5 секундам. Понятно, что можете установить свой собственный интервал в пределах от 10 мс до 8 дней. За подробной информацией по настройке режимов сна, Вы всегда можете обратиться к основному документу по проекту – sw_SerialStar.pdf.
  6. Теперь надо включить режим периодического сна. Вводим AT SM 4⏎ и затем применяем сделанные изменения с одновременным выходом из командного режима, напечатав AT CN⏎. На этом этапе у нас готов модуль, который будет подключаться к счетчику воды.
  7. Определяем, к каким выводам модуля будем присоединять провода от счетчиков. Надеемся, что из документа Техническое руководство ПО «SerialStar» или из главы Линии ввода/вывода Вам уже известно, что программное обеспечение SerialStar поддерживает два 32-х разрядных счетчика импульсов. Оба они «по умолчанию» включены. Вводим AT HV⏎ и видим, что «Сount 1 input» находится на выводе №34 (линия R1) модуля, а «Сount 2 input» на выводе №6 (линия L3). Эти выводы подключены к контактам X3 и X4 платы MB-Tag, соответственно. А чтобы Вам было удобно, вторым контактом этих разъемов является земля.
  8. Устанавливаем подготовленный модуль на плату MB-Tag, как показано на Рисунке 2, вставляем батарейку и подаем питание, замкнув перемычку JP1. Модуль на плате MB-TAG
  9. Смотрим на светодиоды RF TX и RF RX. Если до сих пор все шло правильно, то они должны загораться с периодом 5 секунд. Если Вам интересно, какой ток будет потреблять этот модуль, то его измерить можно сняв JP1 и подключив вместо нее микроамперметр. Ток потребления модуля между выходами в эфир не будет превышать 3-5 мкА.
  10. Берем второй модуль и вставляем его в MB-USBridge.
  11. Если Вы проводите эксперимент на столе, то антенну достаточно прикрутить на один модуль. Если же планируете установить счетчик на большем расстоянии, то антенны надо иметь на обоих модулях.
  12. Переключаем терминал на режим отображения 16-тиричных чисел, и пытаемся принять данные от нашего счетчика.
  13. Если все хорошо, то с периодом 5 секунд вы должны получать пакеты, длиной 28 байт и содержащих приблизительно следующее:
    18 98 04 83 06 0E 00 00 
    00 00 09 04 1D 02 FF FF 
    1F 04 21 02 FF FF 22 0D 
    00 00 00 00
  14. Получили? Значит все хорошо. Теперь надо определить, где в этом наборе цифр находится число подсчитанных импульсов. В пакете содержится информация о состоянии всех активных линиях ввода/вывода. А их достаточно много. Ищем в полученном пакете код настройки линии для работы в качестве первого счетного входа – 13 или 0D в 16-тиричном виде (коды настроек можно уточнить в главе Линии ввода/вывода или в pdf-руководстве SerialStar_IO_Control ). Это пятый байт справа. Слева от него находится номер вывода, на который он назначен на модуле, приславшем пакет. Как мы и ожидали это номер 34 (22 в 16-тиричном виде). А справа от кода режима, очевидно, находятся текущее значение счетчика. Аналогично находим и второй счетный вход по его коду 14 (0E).
  15. Кстати, первые два байта, тоже несут в себе достаточно полезную информацию – о температуре в месте установки MB-Tag и о напряжении питания. Как с ними разобраться подробно изложено в главе Автономный температурный датчик. Поэтому здесь мы не будем на них останавливаться.
  16. Если все устраивает, то можно переходить к проверке.

Проверяем

Замыкаем несколько раз металлическим предметом между собой контакты X3 или X4 на плате MB-Tag и ждем очередной пакет. Поскольку мы уже знаем где искать данные, то, если все делалось правильно, фиксируем увеличение подсчитанного числа импульсов.

Для тех кому требуется нечто большее

Приведем вопросы, которые обычно возникают в этой точке повествования.

А как избавиться от лишней информации в пакете?

Очень правильный вопрос. Главное почему это надо сделать – чтобы увеличить время автономной работы датчика. Ведь понятно, чтобы передать информацию, требуется энергия. А если информация не нужна, то и энергия расходуется зря. В нашем случае из 28 байт, нас интересуют только 2. Значит от ненужных данных надо избавиться. Делаем это, отключая соответствующие входы. Для этого, переставив модуль датчика опять в MB-USBridge и войдя в командный режим, последовательно отдаем команды

AT L2 0
AT L5 0
AT R2 0
AT R4 0
AT R6 0
AT CN

Смысл этих действий вы можете понять из документа «app_SerialStar_IO_Control.pdf». После того, как Вы вернете модули на свои места, Вы увидите, что от 28 байт осталось только 2 с температурой и батарейкой и 12 байт с информацией о счетчиках.

А если датчик расположен далеко?

Можно увеличить выходную мощность с помощью соответствующей AT-команды или, воспользуйтесь программой SysmcBootLoader. Помните только о пагубном влиянии излишне высокой выходной мощности на время автономной работы и о требованиях ГКРЧ.

Мой сосед, который тоже осваивает SerialStar, жалуется, что у него в терминал валятся неизвестные пакеты. Что делать?

Ничего удивительного. Ведь на модуле счетчика адрес для передачи оставлен нами «по умолчанию». А он установлен как широковещательный 0xFFFF. Вот данные о количестве потребленной Вами воды, а заодно о температуре и батарейке всем вокруг и передаются. Меняем адрес командой «AT TX» на собственный адрес модуля, подключенного к терминалу. Будет лучше, если Вы предварительно поменяете и его командой «AT MY» со значения «по умолчанию» 0x0001 на что-нибудь более экзотическое. А еще можно перейти на другой частотный канал, изменить битовую скорость, идентификатор сети или системы. Словом, средств, которые предоставляет SerialStar, достаточно, чтобы не толкаться в эфире и не засорять эфир своими личными данными.

У меня в квартире два независимых стояка и, соответственно, две пары счетчиков. Что мне делать?

В этом случае на модуле концентратора без пакетного режима не обойтись. Кроме этого, потребуется каждому модулю счетчика присвоить свой собственный уникальный адрес. Иначе, разобрать от кого чего пришло, будет непросто. А как пакетный режим включить и как в нем существовать можно с помощью основного документа по проекту – «sw_SerialStar.pdf».

А можно как-нибудь дистанционно установить требуемое значение счетчиков?

Нельзя. ПО SerialStar не имеет для этого никаких команд. Счетчики можно только сбросить в 0 с помощью удаленной команды программного RESET-а.

Все это прекрасно, но что ж мне надо постоянно включать компьютер, чтобы узнать, сколько воды утекло?

Нет, есть много более интересных способов отображать информацию. Очень многие предпочитают использовать для этого платформу Arduino. Для этого берется самый обычный двухстрочный ЖКИ-индикатор, присоединенный к любой Arduino-плате. К ней же подключается модуль MBee, выполняющий роль концентратора. Поскольку передача данных будет идти только в одну сторону от модуля к Arduino, то никаких дополнительных деталей обычно не требуется, даже если Ваша Arduino питается от 5 вольт. Но, грамотнее будет все же поставить резистор 1 Ком между выходом TX модуля и входом RX Arduino. А дальше пишется элементарный скетч, разбирающий пакет от концентратора и выводящий полученные от него данные на индикатор. Более современным решением, будет, конечно, отображение данных на экране Вашего смартфона. Это делается гораздо быстрее и проще, чем Вам казалось до этого момента. А как именно мы постараемся рассказать в наших очередных документах.

Что-то не работает

Модули разнесены хотя бы на полметра? А светодиод RF TX на MB-Tag загорается с установленным периодом? На MB-USBridge горит светодиод RF RX? Терминал часом «не отъехал» после того, как Вы случайно отключили от компьютера плату MB-USBridge?

Появились вопросы?

Пишите на форум. Вам обязательно ответят.