Как я воду дома считал. Железо: передатчик показаний.

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

Поскольку основную задача решена – данные передаются, копятся и отображаются, то надо переходить к реализации рабочего образца передатчика с учетом требования “Устройство помещаемое в стояк должно быть энергонезависимым от электросети помещения.” С помещением в стояк проблем нет, а вот с энергонезависимостью проблемы.

Первый прототип.

Прототип передатчика состоит из следующих элементов:

components_001
  • Arduino UNO;
  • Шилд Funduino Extension Board for Arduino Nano;
  • радио модуль nRF24L01+;
  • самодельный разъем для подключения контактов от водосчетчиков.
Схема подключения

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

В основной разъем вставляем Arduino Nano. Радио модуль подключаем с помощью гибких перемычек по схеме:

nRF24L01+Arduino
1 GNDGND
2 VCC3.3V
3 CED7
4 CSND8
5 SCKD13
6 MOSID11
7 MISOD12
8 IRQ

Необходимые библиотеки для радио модуля nRF24L01+ можно скачать на GitHub.

Для подключения контактов от водосчетчиков собрал небольшую платку с клемниками. Необходимость взять паяльник в руки возникла, когда пришло понимание об организации корректной схемы подключения. Фактически в водосчетчике стоит “кнопка”, которая то замыкает, то размыкает выходные контакты. А это значит, что подключать нужно через сопротивление, их как раз видно на фото выше.

Изначально контакты от водосчетчиков подключал к цифровым разъемом D5 и D4.

Собранная схема потребляла очень много энергии. Основная причина – это не использование спящего режима, а так же наличие на плате Arduino схемы питания, которая потребляет очень много.  Как итог, передатчик жил 2.5 дня от трех батареек типа АА.

wpid-20150118_212921_partizanskaya-ul..jpg.jpeg

Второй прототип.

wpid-20150301_122547_partizanskaya-ul..jpg.jpeg

В процессе изучения вопроса работы микроконтроллера в спящем режиме обнаружил, что цифровые вывод D2 и D3 являются так же выводами прерывания, т.е. выводом микроконтроллера из спящего режима. Причем есть разные варианты отслеживания статуса изменения: с 0 на 1, с 1 на 0 и любое изменение. Это то, что надо! Ведь наша задача считать количество изменений на входе.

Самым интересным моментом стало избавление от всей лишней обвязки и сборки прототипа на голом микроконтроллере. Оказывается в Atmega328 есть внутренний тактовый генератор, который позволяет работать микроконтроллеру на 8MHZ. А рабочий диапазон напряжения достаточно широкий, а это значит, что можно работать без дополнительной схемы питания и внешнего кварца.  Этими и другой полезной информацией по теме со мной периодически делится Евгений Орлянский, за что ему огромное спасибо!

С  точки зрения подключения ничего особо не поменялось, только собрано на макетной плате. Единственно что надо сделать, это закачать новый загрузчик в микроконтроллер, что бы он мог работать на внутреннем генераторе. Достаточно подробно это описано на сайте Arduino, см. раздел Minimal Circuit (Eliminating the External Clock).

Алгоритм получился следующий: пока на входах нет изменения микроконтроллер находится в спящем режиме, радиомодуль переведен в режим пониженного энергопотребления. Если сработало прерывание, то выходим из режима пониженного энергопотребления. Считаем воду, отправляем раз в 30 секунд (перед отправкой включаем радиопередатчик на максимум).

Для управления режимами энергопотребления Atmega328 используется библиотека LowPower. Управление энергопотреблением радиомодуля входит в упоминавшейся библиотеке в предыдущем посте.

Более глубоко по энергопотребление можно найти здесь.

Тестирование показало, что всё работает как требуется. Правда, в результате теста всплыл баг кода, если приемник по каким-то причинам не принимал данные, то передатчик не уходил в сон. Что стоило довольно-таки ощутимой потере. Из-за простоя более чем в 10 часов на полной мощности батарея стала выдавать на пол вольта меньше.

bug

Кстати, обратите внимание, что с такой схемой подключения нужно всего 2 батареи типа АА.

Третий прототип. Пора остановиться.

И вот оно! Поскольку все работает, то можно наконец-то развести и протравить плату! Яху.

Благо схема простейшая, развел её руками в Sprint Layout. И с помощью лазерно-утюжной технологии получаем готовую плату.

wpid-20150314_161330_ul.-1812-goda.jpg.jpeg

Следующий шаг – это насверлить кучу дырок. Хорошо, что у бати есть стойка с мини-дрелью.

На самом деле плат получилась немного избыточной, т.к. я на всякий случай сделал выводы под аналоговые входы (никогда не знаешь какой еще датчик вздумается прикрутить), и контакты для загрузки нового скетча без извлечения микроконтроллера из колодки.

Смонтировал все детали и… не заработало. Оказалось, что ошибся в одном контакте при разводке контактной площадки для радиомодуля. Хорошо, что нужный контакт был рядом, обрезал дорожку и припаял куда требуется.

wpid-20150315_195453_partizanskaya-ul..jpg.jpeg

Размеры платы примерно 5х5 см. К задней стенки прикручен контейнер с двумя батарейками.

Итог: с учетом бага с энергопотреблением схема продержалась чуть меньше месяца.

2015_03

Три пика в середине месяца – это те дни когда кому-то захотелось полежать долго в ванной. :)

Крайний правый пик – это вручную внесенная компенсация за пропущенные дни между 28 марта и 5 апреля.