Датчик расхода воды, G1/2 для Arduino
Датчик расхода воды, G1/2 для Arduino
Датчик расхода воды YF-S201 — позволяет измерять скорость потока воды.
Характеристики
- Рабочее напряжение: 5 . 18 В
- Потребляемый ток: до 15 мА (при Vcc = 5 В)
- Измеряемый диапазон расхода воды: 1 . 30 л/мин
- Погрешность измерений: ±3%
- Рабочее давление: до 1,75 Mpa =17,5 бар = 17,27ст. атм.
- Рабочая температура: 0 . 80 °C
- Температура жидкости: до 120 °C
- Влажность воздуха: 35 . 90 %
- Размер патрубка: ∅20 мм (внешний), ∅10 мм (внутренний)
- Размер трубной резьбы: G1/2'' (1/2 трубного дюйма)
(внешний ∅20,955 мм / внутренний ∅18,631 мм / шаг 1,814 мм) - Габариты: 65x36x36 мм
- Вес: 43 г
Подключение
Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield, Motor Shield или Trema Set Shield.
Подключение датчика зависит от выбранного Вами алгоритма подсчета его импульсов:
- Если Вы будете подсчитывать количество импульсов с датчика используя внешнее прерывание, то информационный вывод датчика нужно подключить только к тому выводу Arduino, который используют внешние прерывание. Преимуществом данного метода является то, что все импульсы датчика будут, гарантированно, подсчитаны и для этого не требуется приостанавливать выполнение скетча. Недостаток данного метода заключается в том, что не все выводы Arduino используют внешние прерывания.
- Если Вы будете подсчитывать количество импульсов с датчика измеряя длительность импульсов (пауз), то информационный вывод датчика можно подключить к любому выводу Arduino. Преимуществом данного метода является то, что количество подключаемых датчиков ограничено количеством свободных выводов Arduino. Еще одним преимуществом является то, что расчёт скорости происходит в режиме реального времени, после каждого импульса (паузы). Недостаток данного метода заключается в том, что в зависимости от выбранного алгоритма, либо возникнет риск пропустить импульс (паузу), либо потребуется приостанавливать выполнение скетча на время измерения длительности импульса (паузы).
Питание
Входное напряжение 5 . 18 В постоянного тока, подаётся на красный (Vcc) и чёрный (GND) провода датчика.
Подробнее о датчике
Датчик расхода воды YF-S201 состоит из пластикового корпуса, водяного ротора с магнитами и датчика Холла. Скорость вращения ротора прямо пропорциональна скорости водяного потока. Чем выше скорость, тем чаще магниты проходит рядом с датчиком Холла, тем больше импульсов на информационном выводе датчика.
Формула для расчёта импульсов и скорости потока воды: F = 7,5 Q => Q = F / 7,5
- F — частота импульсов (Гц)
- Q — скорость потока воды (л/мин)
Примеры
Скорость потока воды зависит от количества импульсов.
Определение скорости потока воды, используя внешнее прерывание.
Определение скорости потока воды, методом подсчёта длительности импульсов:
Подключаем Arduino к счетчику электроэнергии
2014-10-11 в 10:48, admin , рубрики: arduino, diy или сделай сам
Нет, эта статья не об очередном способе обмануть этот злосчастный прибор. Здесь пойдет речь о том, как с помощью Arduino и среды LabView превратить свой счетчик электроэнергии в средство мониторинга потребляемой мощности или даже в амперметр!
Самый первый счетчик электроэнергии был индукционным. Принцип его работы до смешного прост — по сути это электродвигатель, ротором которого является алюминиевый диск, вращающий циферблат. Чем больше потребляемый ток- тем быстрее крутится диск. Устройство чисто аналоговое.
Однако сегодня индукционные счетчики сдают свои позиции, уступая место своим более дешевым электронным собратьям. И как раз один такой и станет подопытным:
Принцип работы не сильно изменился — в данном случае диск заменен электроникой, которая генерирует импульсы в соответствии с величиной потребляемой электроэнергии. Как правило, в большинстве приборов эти импульсы показывает светодиодный индикатор. Соответственно, чем быстрее мигает эта лампочка — тем больше сжигается драгоценных кВт.
Кроме того, на лицевой панели любого устройства есть передаточное соотношение счетчика А — число импульсов на 1 кВт*ч. Как видно из фото, у подопытного А=12800. Из этой информации можно сделать следующие выводы:
— С каждым импульсом счетчик фиксирует потребление, равное 1/12800 части от 1 кВт*ч. Если включить к счетчику нагрузку и начать просто считать импульсы, то потом легко получить потребленное ею количество электроэнергии (кВт*ч), разделив количество импульсов на передаточное соотношение.
— Так как индикатор изменяет скорость своего моргания, то можно вывести зависимость между мощностью (кВт) и временем одного импульса счетчика, что позволит получить данные о мощности/токе.
Не будем загружать статью расчетами, но если нужно то
Здесь X — неизвестная мощность, а t — время одного импульса. Выражаем отсюда неизвестную мощность и вот оно:
Ток считается с применением следующей пропорции передаточных соотношений и токов известных и неизвестных при нагрузке X.:
Что в общем-то приводит к идентичной формуле, но для тока (ток измеряется в Амперах а индексы означают нагрузку, при которой будет данный ток):
Тут можно заметить подводный камень — нужно знать ток при идеальной нагрузке в 1 кВт. Если необходима хорошая точность — лучше его измерить самостоятельно, а если нет- то приблизительно можно посчитать по формуле (напряжение и мощность известны), но будет более грубо, так как не учитывается коэффициент мощности.
Таким образом, все упирается в измерение времени одного импульса (моргания индикатора). В своих изысканиях я опирался на этот отличный проект. Некий итальянец сделал в среде Labview интерфейс для мониторинга мощности и придумал схему для измерения импульсов. Но в его проекте красовалась огромная недоработка — он подходил только лишь для счетчиков с передаточным соотношением 1000 имп/кВт*ч.
Верхний график — средняя мощность за 5 минут, нижний — в реальном времени. Интерфейс довольно гибкий и легко модифицируется под свои нужды. Если Вы еще не имели дела со средой LabView — рекомендую познакомиться.
Чтобы все заработало, оказалось достаточно внести один единственный блок в алгоритм программы, в соответствии с формулой выше.
Казалось бы просто, но до этого надо еще додуматься!
Итак, если Вы все-таки решите реализовать мониторинг мощности, то есть два варианта:
1. Ваш счетчик закрыт и запломбирован по самое не балуйся. А значит, считывать импульсы можно только с помощью фоторезистора, реагирующего на моргание лампочки. Его необходимо прикрепить синей изолентой напротив светодиодного индикатора на лицевой панели счетчика.
Схема будет выглядеть следующим образом:
Программа просто сравнивает значение сопротивления на фоторезисторе и потенциометре. Причем последний позволяет выставить чувствительность такого датчика во избежание ложного срабатывания и настроиться под яркость индикатора.
2. У Вас есть доступ к импульсному выходу счетчика. На многих моделях имеется импульсный выход, который дублирует мигания лапочки. Это сделано для того, чтобы была возможность подключать прибор к системе автоматизированного учета. Представляет собой транзистор, открывающийся при горящем индикаторе и закрывающийся при погасшем. Подключиться напрямую к нему не составляет труда — для этого потребуется всего один подтягивающий резистор. Однако прежде чем делать это, удостоверьтесь что это именно импульсный выход, а не что-либо иное! (в паспорте всегда есть схема)
В моем случае — доступ полный, поэтому заморачиваться я особо не стал. Устанавливаем LabView и вперед измерять! Все графики представляют собой мощность (Вт) в реальном времени.
Первым под раздачу попал многострадальный чайник. Крышечка гласит что мощность у него 2,2 кВт, однако судя по графику, исправно потребляет лишь 1700 Вт. Обратите внимание, что потребление более-менее постоянно во времени. Это означает что нагревательный элемент (скорее всего нихром) очень слабо изменяет свое сопротивление в течении всего процесса вскипячивания.
Совсем другое дело клеевой пистолет — заявленная мощность 20 Вт.Он ведет себя в соответствии с законами физики — при нагреве сопротивление нагревателя увеличивается, а ток соответственно уменьшается. Проверял мультиметром — все так и есть.
Старый радиоприемник «Весна». Здесь график ушел вверх в начале из-за того, что я запустил измерение во время импульса, соответственно это повлияло на данные. Горки на графике показывают, как я крутил ручку громкости. Чем громче — тем больше радио кушает.
Перфоратор с заявленной мощностью 700 Вт. Нажал на кнопку до упора, чуть чуть подождал и отпустил, но не плавно. На графике хорошо видно бросок тока при пуске двигателя. Именно поэтому моргает свет, когда добрый сосед начинает долбить свою любимую стену.
А теперь самое интересное. Я провел небольшой эксперимент со своим стареньким ноутбуком, результат которого приведен на картинке:
Оранжевой точкой отмечено время, когда я запустил сразу несколько «тяжелых» программ. Как видите, графики загрузки процессора и возросшее потребление имеют нечто общее между собой. Недавно была одна интересная статья которая наталкивает на некоторые мысли. Не уверен что с помощью мониторинга мощности можно слить ключи шифрования, однако факт налицо.
(Трепещите параноики!)
В общем, из обычного счетчика и дешевой Arduino, можно сделать довольно простое и интересное решение для самодельного «умного дома». Кроме, собственно, мониторинга потребления электроэнергии есть вполне неплохая возможность организовать систему контроля включенных приборов, которая по изменению потребления и его характеру будет угадывать что включили. Без каких-либо дополнительных датчиков.
Исходники скетча для Arduino и файл LabView можно скачать на странице автора. После установки доработать напильником добавить блок в соответствии с описанием выше.
Урок 16. Таймеры STM32 в режиме счетчиков. Генерация циклических прерываний от таймеров.
В уроке познакомимся с таймерами микроконтроллера, научимся конфигурировать их в режиме счетчика и организовывать циклические прерывания.
В предыдущем уроке я рассказывал о выполнении задач параллельными процессами. Для реализации такого способа необходимо формировать циклические прерывания с заданным периодом. Опять же в предыдущем уроке было сказано, что логичнее и проще это делать с помощью аппаратных таймеров.
В этом уроке мы будем рассматривать таймеры в качестве именно такого функционального применения. Т.е. будем использовать их для генерации циклических прерываний.
Таймеры STM32.
У нашего микроконтроллера STM32F103C8T6 есть 4 таймера:
- TIM1 – расширенный таймер, ориентированный на управление электродвигателем.
- TIM2 … TIM4 – таймеры общего назначения.
Все таймеры имеют одинаковую архитектуру. Расширенный таймер отличается наличием дополнительных аппаратных узлов для формирования противофазных сигналов ШИМ. В результате его можно конфигурировать на работу в режиме 6-канального ШИМ и управлять им тремя полумостовыми усилителями мощности.
Но сейчас нас это не интересует. Для нашей задачи — формирования циклических прерываний, все таймеры имеют одинаковую архитектуру.
Таймеры STM32 — многофункциональные устройства. С помощью каждого из них можно реализовать:
- Счетчик импульсов, а значит и времени с автоматической перезагрузкой.
- Захват входного сигнала (4 канала).
- Обнаружение фронта входного сигнала, запоминание времени, генерация события.
- Измерение временных параметров входного ШИМ-сигнала: периода и длительности импульсов.
- Интерфейс энкодера. Измерение параметров импульсов энкодера.
- Генерация события по совпадению кода таймера с заданным значением.
- Формирование ШИМ-сигнала.
- Формирование одиночных импульсов, режим одновибратора.
У таймеров большой выбор источников тактирования, есть предделители, обеспечивается цифровая фильтрация входных сигналов, возможна синхронизация между собой и много еще чего.
Но сейчас нас интересует исключительно режим счетчика с перезагрузкой. Именно в этом режиме удобнее всего формировать циклические прерывания.
Функциональная схема таймера достаточно сложная. Я выделил только необходимую нам часть.
Собственно отсчет импульсов или времени происходит на 16-ти разрядном счетчике CNT. Когда код счетчика достигает значения регистра перезагрузки, счетчик сбрасывается в 0. Таким образом, счетчик считает по циклу от 0 до значения регистра перезагрузки.
Частота сигнала тактирования таймера может быть уменьшена с помощью 16-ти разрядного предделителя PSC.
Перезагрузка счетчика формирует событие (прерывание). Частота его появления также может быть уменьшена счетчиком повторов (8 разрядов). Коэффициент деления задается в регистре повторов.
Код счетчика используется другими узлами таймера, например, для формирования ШИМ. Но об этом в других уроках.
В качестве источника тактирования могут быть выбраны:
- Внутренние синхросигналы шин APB1 иAPB2, про которые мы говорили в уроке 5 (система тактирования микроконтроллера).
- Для таймера TIM1 используется синхросигнал шины APB2;
- Для таймеровTIM2- TIM4 используется синхросигнал шины APB1.
Сейчас мы будем использовать только внутренний источник тактирования.
Режимы счета таймера.
При использовании таймера в качестве счетчика импульсов можно выбрать один из режимов:
- прямой счет;
- обратный счет;
- двунаправленный.
При прямом счете содержимое счетчика с каждым импульсом тактирования увеличивается на 1. Когда оно достигает значения регистра перезагрузки, то счетчик сбрасывается. Таким образом,таймер считает по циклу от 0 до значения перезагрузки. В момент перезагрузки формируется прерывание.
В режиме обратного (реверсивного) счета с каждым входным импульсом содержимое счетчика уменьшается на 1. При достижении 0 в счетчик загружается значение регистра перезагрузки и реверсивный счет продолжается. Таймер считает по циклу от значения перезагрузки до 0. В момент перезагрузки формируется прерывание.
Двунаправленный режим означает, что счетчик считает в прямом направлении от 0 до значения перезагрузки, а затем переходит в реверсивный режим и счет ведется до 0. При изменении направления счета и сбросе генерируется прерывание.
Установка конфигурации таймера с помощью STM32CubeMX.
Давайте научимся конфигурировать таймеры через STM32CubeMX. Заодно в строгой форме перечислим регистры, задающие режимы таймера и выясним, что конкретно в них загружать.
Создадим проект Lesson16_1. Настроим конфигурацию системы тактирования. Обратим внимание на то, что частота тактирования таймеров на шинах APB1 и APB2 задана 72 мГц.
- PC13 – активный выход;
- PB13 – активный выход;
- PB12 – вход с подтягивающим резистором.
Теперь будем конфигурировать таймер 1. В нашем микроконтроллере он самый многофункциональный.
Открываем вкладку Timers ->TIM1.
Выбираем в качестве источника тактирования внутреннее тактирование: Clock Source -> Internal Clock.
Ниже появилось поле Parameter Settings.
Давайте подробно разберем, что в нем.
Prescaler (PSC).
Это регистр предделителя. Предделитель делит частоту тактирования таймера, поступающую на основной счетчик. По сути, он, вместе с входной частотой, определяет разрешающую способность таймера.
Счетчик предделителя считает входные импульсы от 0 до значения этого регистра. При равенстве кода счетчика и регистра счетчик сбрасывается и начинает считать заново. В момент сброса формируется импульс тактирования основного счетчика таймера. Таким образом, значение регистра предделителя определяет коэффициент деления частоты входного сигнала.
Счетчик и регистр предделителя 16-ти разрядные. Т.е. максимальный коэффициент деления 65536.
Надо помнить, что реальный коэффициент деления на 1 больше, чем значение регистра предделителя. Например:
Значение регистра предделителя Коэффициент деления 1 999 1000 65535 (максимальное значение) 65536 Регистр предделителя имеет буферный регистр. Поэтому его значение можно устанавливать в любой момент. Реальное изменение коэффициента деления произойдет при перезагрузке буферного регистра в момент перезагрузки основного счетчика таймера.
Counter mode.
Режим счетчика, определяет в какую сторону считать.
- Up – прямой счет.
- Down – реверсивный счет.
- Center Aligned mode 1 – двунаправленный счет, прерывание генерируется в момент, когда счетчик считает в обратную сторону и доходит до 0.
- Center Aligned mode 2 – двунаправленный счет, прерывание генерируется, когда счетчик считает в прямом направлении и достигает значения перезагрузки.
- Center Aligned mode 3 – двунаправленный счет, прерывание генерируется, в обоих случаях — при достижении 0 и значения перезагрузки.
Counter Period (Auto Reload Register).
Регистр перезагрузки. Его значение задает период работы таймера. Конечно, на время периода влияет еще режим счета.
Счетчик 16-ти разрядный. Значит, для однонаправленного счета период может длиться от 1 до 65536 длительностей импульсов предделителя. Реальная длительность периода на 1 больше значения регистра перезагрузки. Все как для регистра предделителя.
Internal Clock Division (CKD).
Делитель входной частоты для внутренних нужд таймера.
Частота используется при фильтрации внешних сигналов, формировании “мертвого времени” ШИМ и т.п. Сейчас это нам не интересно.
Repetition Counter (RCR).
Регистр счетчика повторов. Присутствует не во всех таймерах. Счетчик повторов считает импульсы событий на выходе таймера и при достижении значения регистра повторов сбрасывается и формирует реальное событие. Т.е. он делит частоту генерации событий (прерываний) таймера.
Счетчик 8-ми разрядный. Коэффициент деления на 1 больше значения регистра повторов и может быть в диапазоне 1 — 256. Регистр буферизирован, можно изменять его значения в любой момент.
Auto-reload preload.
Регистр перезагрузки буферизирован. Разработчики микроконтроллера предоставляют программисту выбор — при записи значения перезагрузки передавать его в регистр моментально или дождаться крайнего состояния счетчика.
Управляет режимом перезагрузки специальный бит, а в STM32CubeMX выбор делается в выпадающем меню.
Вкладка NVIC Settings позволяет выбрать нужный тип прерывания, связанного с таймером.
Пример конфигурации таймера и реализации программы.
Сделаем практическую задачу. Установим конфигурацию таймера 1, обеспечивающую циклические прерывания с периодом 0,5 секунд. В обработчике прерывания будем инвертировать состояние светодиода. В результате получим мигающий светодиод, но с использованием таймера и прерывания.
Частота тактирования у нас 72 мГц. Превратим ее с помощью предделителя в круглое значение.
Например, если задать 720 – 1 = 719, то частота после предделителя будет 72 000 000 / 720 = 100 000 Гц, или период 10 мкс.
Если в регистр перезагрузки задать значение 50 000, то получим требуемый период 0,5 секунд.
Во вкладке NVIC Settings выберем прерывание по перезагрузке счетчика.
Создаем проект и открываем его в Atollic TrueStudio.
В папке Src проекта создан файл stm32f1xx_it.c. Он существовал и во всех предыдущих проектах. Просто мы на него до времени не обращали внимания.
Это файл обработчиков прерываний. Хороший стиль размещать функции обработки прерываний в нем.
В самом конце файла появилась функция:
void TIM1_UP_IRQHandler(void) <
/* USER CODE BEGIN TIM1_UP_IRQn 0 */
/* USER CODE END TIM1_UP_IRQn 0 *//* USER CODE BEGIN TIM1_UP_IRQn 1 */
/* USER CODE END TIM1_UP_IRQn 1 */
>Это и есть обработчик прерывания таймера 1. Код, который мы поместим в функцию, будет вызываться с периодом 0,5 секунд.
Вызовем в обработчике прерывания функции инверсии состояния для обоих светодиодов.
void TIM1_UP_IRQHandler(void) <
/* USER CODE BEGIN TIM1_UP_IRQn 0 */
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_13);Мы установили конфигурацию таймера, но не запустили его. Сделаем это HAL-функцией в файле main.c.
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim1); // запуск таймера
Функция запускает таймер в режиме генерации прерываний.
Все. Компилируем, загружаем, проверяем. Оба светодиода мигают раз в секунду.
Полностью проект можно загрузить по ссылке:
Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!
Основной цикл у нас пустой. Программа просто крутится в нем.
while (1) <
/* USER CODE END WHILE */
По отношению к нему светодиоды мигают в фоновом режиме, сами по себе. Если мы будем выполнять в цикле какие-либо действия, это никак не скажется на равномерном мигании светодиодов. Единственное условие – надолго не запрещать прерывания.
В следующем уроке будем разрабатывать программу, обрабатывающую сигнал кнопки параллельным процессом. Научимся связывать переменные разных файлов одной программы. Разберемся в специфике использования функций обработки прерываний.
Интегрируем электросчетчик в систему умного дома
Метод измерения количества импульсов контрольного светодиода счетчика, на котором основано это устройство, не позволяет определить никакие другие параметры электросети — ни силу тока, ни напряжение, ни текущую мощность, а только количество потреблённой энергии.
Для обмена данными с системой домашней автоматизации устройство использует беспроводную сеть WiFi и протокол MQTT.
MQTT-счетчик отличается элементарной конструкцией и очень простым программным кодом. Для сборки и прошивки не требуется никаких специальных навыков, а при наличии особых умений можно обойтись даже без паяльника.
Принцип работы
Возможность получения данных о потреблённой энергии обусловлена наличием на типовых электросчетчиках контрольного индикатора — светодиода, мигающего чаще или реже, в зависимости от интенсивности потребления электрической энергии. Так называемое передаточное число счётчика указано рядом с индикатором и сообщает количество импульсов, которые выдаст светодиод за время потребления определенного количества энергии.
Например, надпись 3200 и мп / кВт·ч (3200 imp/kWh) обозначает, что за время потребления 1 киловатт- часа энергии (который эквивалентен работе нагрузки мо щностью 1кВт в течение 1 часа), светодиод на счетчике загорится и погаснет 3200 раз. На практике это займет больше или меньше времени, в зависимости от количества и мощности включенных в данный момент электроприборов.
Зная время измерения, мы также можем посчитать что-то типа мощности — значение расхода энергии за заданный промежуток.
Для реализации подобной схемы измерения нам потребуется датчик, чувствительный к уровню освещенности и микроконтроллер, способный сосчитать количество импульсов и передать их в систему домашней автоматизации.
Конструкция
MQTT-счетчик состоит из двух компонентов:
- Недорогой платформы Wemos D1 Miniна базе микроконтроллера ESP8266.
- Аналогового датчика уровня освещенности TEMT6000 (по сути — фототранзистора).
Датчик освещенности закрепляется поверх светодиода домового электросчетчика (напри ме р, скотче м ), сигнальный выход датчика подключается к аналоговому входу Wemos.
Платформа получает питание для работы по порту MicroUSB, при старте подключается к домашней сети WiFi 2,4 ГГц, далее к указанному MQTT-брокеру (серверу) передает данные о подсчитанном количестве импульсов.
Особенности работы
Конкретно эта версия MQTT-счетчика была разработана специально для сообщества sprut.ai, состоящего из множества людей с разны ми условиями энергопотребления, счетчиками, схема м и тарификации, да и к то м у же, использующих различные программные платформы домашней автоматизации (Home Assistant, Node-Red и т. д.).
Поэтому в приведенном варианте счётчик выполняет всего две функции:
- Подсчет количества импульсов светодиода.
- Отправка этих данных по сети WiFi на MQTT-сервер, интегрированный в систему умного дома.
При этом, сам счетчик не имеет фиксированного временного периода выдачи количества импульсов, что крайне нетипично для подобных решений. Периодичностью выдачи счётчиком данных и их первичным разделением управляет система домашней автоматизации.
Каким образом это работает?
MQTT-счетчик при включении выполняет следующие действия:
- Соединяется с заданной сетью WiFi.
- Соединяется с заданным MQTT-сервером.
- Подписывается на входной топик, определяющий его дальнейшие действия, назовем его топиком конфигурации.
- Начинает считать импульсы, фиксируемые датчиком освещенности.
При получении сообщения из топика конфигурации, MQTT-счетчик выдает в ответ подсчитанное им на момент получения сообщения количество импульсов и обнуляет внутренний счетчик, начиная новый цикл отсчета.
- Настроить нужную частоту снятия данных, отправляя сообщения в топик конфигурации с заданной в системе автоматизации периодичностью — н у, например, вы можете отправлять счетчику сообщения раз в минуту, раз в пять минут, раз в час, или один раз в сутки.
- Произвести первичное разделение данных. Вы можете отправлять сообщение счетчику всего два раза в сутки — в момент смены временных тарифных зон. При это м , если в сообщении будут указаны соответствующие адреcа, счетчик вернет количество импульсов, посчитанных для каждой тарифной зоны в свой топик. Остается пересчитать эти импульсы в киловатт-часы и умножить на тарифную ставку.
В моем же случае реализована следующая схе ма:
- Счетчик получает сообщение от системы автоматизации в топик конфигурации раз минуту.
- Во время действия разных тарифных зон адрес топика в сообщении разный.
- Для получения сквозных суточных данных по энергопотреблению в системе автоматизации существует сущность, суммирующая данные с этих двух топиков.
- Для расчета общей стоимости электроэнергии в системе автоматизации полученные импульсы суммируются каждый по своему топику и умножаются на тариф.
Сборка
Ко мпоненты для MQTT-счетчика можно заказать на алиэкспрессе или купить в России. Общая стоимость
350 рублей. Вместо Wemos D1 Mini можно использовать любой другой ESP8266, почему я использую именно эту платформу, я писал в предыдущей статье.
Прошивка
Прошивать Wemos мы будем с помощью Arduino IDE.
Подробно описывать процесс я не буду, можно воспользоваться инструкцией по прошивке из предыдущей статьи (раздел «Прошивка часов»). Но в этот раз нам понадобится только одна внешняя библиотека — PubSubClient — для работы с MQTT-протоколом.
После того, как все библиотеки установлены и отредактированы, загружаем скетч для MQTT-счетчика и открываем файл .ino в Arduino.
В начале скетча Вам надо будет заменить название и пароль к Wi-FI сети, а также адрес и параметры подключения к MQTT-серверу на свои. Плюс нужно указать топик конфигурации, откуда счетчик будет получать данные.
Сохраняем скетч, выбираем в платах свой Wemos и прошиваем его.
Осталось только подать на нее питание, закрепить датчик на светодиоде счетчика и . настроить систему домашней автоматизации для работы с полученными данными.
Пример интеграции с Home Assistant
Сразу скажу, что пример далеко не идеальный, но это все же только пример возможного использования полученных со счетчика данных.
Итак, я собираю данные по двум тарифным временным зонам, и у меня в configuration.yaml создан логический переключатель для этого, который на всякий случай выведен и в интерфейс HA:
Далее переходим к автоматизациям.
Тарифная зона переключается по времени. В топик неактивной после переключения временной зоны принудительно публикуется ноль.
Ниже пример автоматизации для публикации сообщения в топик конфигурации MQTT-счетчика. У меня она происходит раз в минуту, при изменении системного таймера. Топик, куда счетчик вернет количество импульсов, зависит от положения логического переключателя.
Для обработки полученных от счетчика в ответ сообщений надо создать сенсоры в файле configuration.yaml:
Сенсоры входящих MQTT-сообщений для двух топиков (параметр force_update: true обязателен)
Плюс сенсоры статистики для сбора данных с этих сенсоров:
Первые два считают статистику за год (525600 минут), вторые два — только за месяц. (Обратите внимание — не с начала текущего месяц, а просто за месяц назад от текущего момента. Да, такая статистика актуальна только к концу месяца).
Также я добавляю сенсоры на базе шаблонов для суммирования импульсов по дневной и ночной зоне для построения общего графика расхода, сенсоры для извлечения из сенсоров статистики су мм арных количеств импульсов и перевода их в более привычные величины, сенсоры для вычисления стоимости электроэнергии и текущих значения показаний квартирного электросчетчика:
Ну и вот что в итоге получается:
При мер вывода полученных данных в Home Assistant
Вместо заключения
В статье был рассмотрен принцип из мерения и передачи в систему умного дома данных о потребленной домашней электросетью энергии, а также была приведена схема сборки и прошивки устройства, реализующего его. Похожую схему можно применить и для решения других задач, например, подсчета расхода горячей и холодной воды со счетчиков с импульсным выходом.