Azotirovanie.ru

Инженерные системы и решения
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Датчик расхода воды, 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.

Подключение датчика зависит от выбранного Вами алгоритма подсчета его импульсов:

  1. Если Вы будете подсчитывать количество импульсов с датчика используя внешнее прерывание, то информационный вывод датчика нужно подключить только к тому выводу Arduino, который используют внешние прерывание. Преимуществом данного метода является то, что все импульсы датчика будут, гарантированно, подсчитаны и для этого не требуется приостанавливать выполнение скетча. Недостаток данного метода заключается в том, что не все выводы Arduino используют внешние прерывания.
  2. Если Вы будете подсчитывать количество импульсов с датчика измеряя длительность импульсов (пауз), то информационный вывод датчика можно подключить к любому выводу Arduino. Преимуществом данного метода является то, что количество подключаемых датчиков ограничено количеством свободных выводов Arduino. Еще одним преимуществом является то, что расчёт скорости происходит в режиме реального времени, после каждого импульса (паузы). Недостаток данного метода заключается в том, что в зависимости от выбранного алгоритма, либо возникнет риск пропустить импульс (паузу), либо потребуется приостанавливать выполнение скетча на время измерения длительности импульса (паузы).

Питание

Входное напряжение 5 . 18 В постоянного тока, подаётся на красный (Vcc) и чёрный (GND) провода датчика.

Подробнее о датчике

Датчик расхода воды YF-S201 состоит из пластикового корпуса, водяного ротора с магнитами и датчика Холла. Скорость вращения ротора прямо пропорциональна скорости водяного потока. Чем выше скорость, тем чаще магниты проходит рядом с датчиком Холла, тем больше импульсов на информационном выводе датчика.

Формула для расчёта импульсов и скорости потока воды: F = 7,5 Q => Q = F / 7,5

  • F — частота импульсов (Гц)
  • Q — скорость потока воды (л/мин)

Примеры

Скорость потока воды зависит от количества импульсов.

Определение скорости потока воды, используя внешнее прерывание.

Определение скорости потока воды, методом подсчёта длительности импульсов:

Подключаем Arduino к счетчику электроэнергии

Подключаем Arduino к счетчику электроэнергии

2014-10-11 в 10:48, admin , рубрики: arduino, diy или сделай сам

Нет, эта статья не об очередном способе обмануть этот злосчастный прибор. Здесь пойдет речь о том, как с помощью Arduino и среды LabView превратить свой счетчик электроэнергии в средство мониторинга потребляемой мощности или даже в амперметр!

Подключаем Arduino к счетчику электроэнергии

Самый первый счетчик электроэнергии был индукционным. Принцип его работы до смешного прост — по сути это электродвигатель, ротором которого является алюминиевый диск, вращающий циферблат. Чем больше потребляемый ток- тем быстрее крутится диск. Устройство чисто аналоговое.

Подключаем Arduino к счетчику электроэнергии

Однако сегодня индукционные счетчики сдают свои позиции, уступая место своим более дешевым электронным собратьям. И как раз один такой и станет подопытным:

Подключаем Arduino к счетчику электроэнергии

Принцип работы не сильно изменился — в данном случае диск заменен электроникой, которая генерирует импульсы в соответствии с величиной потребляемой электроэнергии. Как правило, в большинстве приборов эти импульсы показывает светодиодный индикатор. Соответственно, чем быстрее мигает эта лампочка — тем больше сжигается драгоценных кВт.
Кроме того, на лицевой панели любого устройства есть передаточное соотношение счетчика А — число импульсов на 1 кВт*ч. Как видно из фото, у подопытного А=12800. Из этой информации можно сделать следующие выводы:

— С каждым импульсом счетчик фиксирует потребление, равное 1/12800 части от 1 кВт*ч. Если включить к счетчику нагрузку и начать просто считать импульсы, то потом легко получить потребленное ею количество электроэнергии (кВт*ч), разделив количество импульсов на передаточное соотношение.

— Так как индикатор изменяет скорость своего моргания, то можно вывести зависимость между мощностью (кВт) и временем одного импульса счетчика, что позволит получить данные о мощности/токе.
Не будем загружать статью расчетами, но если нужно то

Подключаем Arduino к счетчику электроэнергии

Здесь X — неизвестная мощность, а t — время одного импульса. Выражаем отсюда неизвестную мощность и вот оно:

Читайте так же:
За водоснабжение начислили не по счетчику

Подключаем Arduino к счетчику электроэнергии

Ток считается с применением следующей пропорции передаточных соотношений и токов известных и неизвестных при нагрузке X.:

Подключаем Arduino к счетчику электроэнергии
Что в общем-то приводит к идентичной формуле, но для тока (ток измеряется в Амперах а индексы означают нагрузку, при которой будет данный ток):

Подключаем Arduino к счетчику электроэнергии

Тут можно заметить подводный камень — нужно знать ток при идеальной нагрузке в 1 кВт. Если необходима хорошая точность — лучше его измерить самостоятельно, а если нет- то приблизительно можно посчитать по формуле (напряжение и мощность известны), но будет более грубо, так как не учитывается коэффициент мощности.

Таким образом, все упирается в измерение времени одного импульса (моргания индикатора). В своих изысканиях я опирался на этот отличный проект. Некий итальянец сделал в среде Labview интерфейс для мониторинга мощности и придумал схему для измерения импульсов. Но в его проекте красовалась огромная недоработка — он подходил только лишь для счетчиков с передаточным соотношением 1000 имп/кВт*ч.

Подключаем Arduino к счетчику электроэнергии

Верхний график — средняя мощность за 5 минут, нижний — в реальном времени. Интерфейс довольно гибкий и легко модифицируется под свои нужды. Если Вы еще не имели дела со средой LabView — рекомендую познакомиться.

Чтобы все заработало, оказалось достаточно внести один единственный блок в алгоритм программы, в соответствии с формулой выше.

Подключаем Arduino к счетчику электроэнергии
Казалось бы просто, но до этого надо еще додуматься!

Итак, если Вы все-таки решите реализовать мониторинг мощности, то есть два варианта:

1. Ваш счетчик закрыт и запломбирован по самое не балуйся. А значит, считывать импульсы можно только с помощью фоторезистора, реагирующего на моргание лампочки. Его необходимо прикрепить синей изолентой напротив светодиодного индикатора на лицевой панели счетчика.
Схема будет выглядеть следующим образом:

Подключаем Arduino к счетчику электроэнергии

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

2. У Вас есть доступ к импульсному выходу счетчика. На многих моделях имеется импульсный выход, который дублирует мигания лапочки. Это сделано для того, чтобы была возможность подключать прибор к системе автоматизированного учета. Представляет собой транзистор, открывающийся при горящем индикаторе и закрывающийся при погасшем. Подключиться напрямую к нему не составляет труда — для этого потребуется всего один подтягивающий резистор. Однако прежде чем делать это, удостоверьтесь что это именно импульсный выход, а не что-либо иное! (в паспорте всегда есть схема)

Подключаем Arduino к счетчику электроэнергии

В моем случае — доступ полный, поэтому заморачиваться я особо не стал. Устанавливаем LabView и вперед измерять! Все графики представляют собой мощность (Вт) в реальном времени.
Первым под раздачу попал многострадальный чайник. Крышечка гласит что мощность у него 2,2 кВт, однако судя по графику, исправно потребляет лишь 1700 Вт. Обратите внимание, что потребление более-менее постоянно во времени. Это означает что нагревательный элемент (скорее всего нихром) очень слабо изменяет свое сопротивление в течении всего процесса вскипячивания.

Подключаем Arduino к счетчику электроэнергии

Совсем другое дело клеевой пистолет — заявленная мощность 20 Вт.Он ведет себя в соответствии с законами физики — при нагреве сопротивление нагревателя увеличивается, а ток соответственно уменьшается. Проверял мультиметром — все так и есть.

Подключаем Arduino к счетчику электроэнергии

Старый радиоприемник «Весна». Здесь график ушел вверх в начале из-за того, что я запустил измерение во время импульса, соответственно это повлияло на данные. Горки на графике показывают, как я крутил ручку громкости. Чем громче — тем больше радио кушает.

Подключаем Arduino к счетчику электроэнергии

Перфоратор с заявленной мощностью 700 Вт. Нажал на кнопку до упора, чуть чуть подождал и отпустил, но не плавно. На графике хорошо видно бросок тока при пуске двигателя. Именно поэтому моргает свет, когда добрый сосед начинает долбить свою любимую стену.

Подключаем Arduino к счетчику электроэнергии

А теперь самое интересное. Я провел небольшой эксперимент со своим стареньким ноутбуком, результат которого приведен на картинке:

Подключаем Arduino к счетчику электроэнергии

Оранжевой точкой отмечено время, когда я запустил сразу несколько «тяжелых» программ. Как видите, графики загрузки процессора и возросшее потребление имеют нечто общее между собой. Недавно была одна интересная статья которая наталкивает на некоторые мысли. Не уверен что с помощью мониторинга мощности можно слить ключи шифрования, однако факт налицо.
(Трепещите параноики!)

В общем, из обычного счетчика и дешевой Arduino, можно сделать довольно простое и интересное решение для самодельного «умного дома». Кроме, собственно, мониторинга потребления электроэнергии есть вполне неплохая возможность организовать систему контроля включенных приборов, которая по изменению потребления и его характеру будет угадывать что включили. Без каких-либо дополнительных датчиков.

Читайте так же:
Водомерный узел со счетчиком ду50

Исходники скетча для Arduino и файл LabView можно скачать на странице автора. После установки доработать напильником добавить блок в соответствии с описанием выше.

Урок 16. Таймеры STM32 в режиме счетчиков. Генерация циклических прерываний от таймеров.

Уроки STM32

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

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

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

Таймеры STM32.

У нашего микроконтроллера STM32F103C8T6 есть 4 таймера:

  • TIM1 – расширенный таймер, ориентированный на управление электродвигателем.
  • TIM2 … TIM4 – таймеры общего назначения.

Все таймеры имеют одинаковую архитектуру. Расширенный таймер отличается наличием дополнительных аппаратных узлов для формирования противофазных сигналов ШИМ. В результате его можно конфигурировать на работу в режиме 6-канального ШИМ и управлять им тремя полумостовыми усилителями мощности.

Но сейчас нас это не интересует. Для нашей задачи — формирования циклических прерываний, все таймеры имеют одинаковую архитектуру.

Таймеры STM32 — многофункциональные устройства. С помощью каждого из них можно реализовать:

  • Счетчик импульсов, а значит и времени с автоматической перезагрузкой.
  • Захват входного сигнала (4 канала).
    • Обнаружение фронта входного сигнала, запоминание времени, генерация события.
    • Измерение временных параметров входного ШИМ-сигнала: периода и длительности импульсов.
    • Интерфейс энкодера. Измерение параметров импульсов энкодера.
    • Генерация события по совпадению кода таймера с заданным значением.
    • Формирование ШИМ-сигнала.
    • Формирование одиночных импульсов, режим одновибратора.

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

    Но сейчас нас интересует исключительно режим счетчика с перезагрузкой. Именно в этом режиме удобнее всего формировать циклические прерывания.

    Функциональная схема таймера достаточно сложная. Я выделил только необходимую нам часть.

    Функциональная схема TIM1

    Собственно отсчет импульсов или времени происходит на 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 мГц.

      STM32CubeMX

      • PC13 – активный выход;
      • PB13 – активный выход;
      • PB12 – вход с подтягивающим резистором.

      Установка выводов в STM32CubeMX

      Теперь будем конфигурировать таймер 1. В нашем микроконтроллере он самый многофункциональный.

      Открываем вкладку Timers ->TIM1.

      Выбираем в качестве источника тактирования внутреннее тактирование: Clock Source -> Internal Clock.

      Выбор источника тактирования

      Ниже появилось поле Parameter Settings.

      Установка параметров

      Давайте подробно разберем, что в нем.

      Prescaler (PSC).

      Это регистр предделителя. Предделитель делит частоту тактирования таймера, поступающую на основной счетчик. По сути, он, вместе с входной частотой, определяет разрешающую способность таймера.

      Счетчик предделителя считает входные импульсы от 0 до значения этого регистра. При равенстве кода счетчика и регистра счетчик сбрасывается и начинает считать заново. В момент сброса формируется импульс тактирования основного счетчика таймера. Таким образом, значение регистра предделителя определяет коэффициент деления частоты входного сигнала.

      Счетчик и регистр предделителя 16-ти разрядные. Т.е. максимальный коэффициент деления 65536.

      Надо помнить, что реальный коэффициент деления на 1 больше, чем значение регистра предделителя. Например:

      Значение регистра предделителяКоэффициент деления
      1
      9991000
      65535 (максимальное значение)65536

      Регистр предделителя имеет буферный регистр. Поэтому его значение можно устанавливать в любой момент. Реальное изменение коэффициента деления произойдет при перезагрузке буферного регистра в момент перезагрузки основного счетчика таймера.

      Counter mode.

      Режим счетчика, определяет в какую сторону считать.

      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).

      Делитель входной частоты для внутренних нужд таймера.

      Internal Clock Division (CKD)

      Частота используется при фильтрации внешних сигналов, формировании “мертвого времени” ШИМ и т.п. Сейчас это нам не интересно.

      Repetition Counter (RCR).

      Регистр счетчика повторов. Присутствует не во всех таймерах. Счетчик повторов считает импульсы событий на выходе таймера и при достижении значения регистра повторов сбрасывается и формирует реальное событие. Т.е. он делит частоту генерации событий (прерываний) таймера.

      Счетчик 8-ми разрядный. Коэффициент деления на 1 больше значения регистра повторов и может быть в диапазоне 1 — 256. Регистр буферизирован, можно изменять его значения в любой момент.

      Auto-reload preload.

      Регистр перезагрузки буферизирован. Разработчики микроконтроллера предоставляют программисту выбор — при записи значения перезагрузки передавать его в регистр моментально или дождаться крайнего состояния счетчика.

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

      Auto-reload preload

      Вкладка 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-счетчик состоит из двух компонентов:

      1. Недорогой платформы Wemos D1 Miniна базе микроконтроллера ESP8266.
      2. Аналогового датчика уровня освещенности TEMT6000 (по сути — фототранзистора).

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

      Платформа получает питание для работы по порту MicroUSB, при старте подключается к домашней сети WiFi 2,4 ГГц, далее к указанному MQTT-брокеру (серверу) передает данные о подсчитанном количестве импульсов.

      Особенности работы

      Конкретно эта версия MQTT-счетчика была разработана специально для сообщества sprut.ai, состоящего из множества людей с разны ми условиями энергопотребления, счетчиками, схема м и тарификации, да и к то м у же, использующих различные программные платформы домашней автоматизации (Home Assistant, Node-Red и т. д.).

      Поэтому в приведенном варианте счётчик выполняет всего две функции:

      1. Подсчет количества импульсов светодиода.
      2. Отправка этих данных по сети WiFi на MQTT-сервер, интегрированный в систему умного дома.

      При этом, сам счетчик не имеет фиксированного временного периода выдачи количества импульсов, что крайне нетипично для подобных решений. Периодичностью выдачи счётчиком данных и их первичным разделением управляет система домашней автоматизации.

      Каким образом это работает?

      MQTT-счетчик при включении выполняет следующие действия:

      1. Соединяется с заданной сетью WiFi.
      2. Соединяется с заданным MQTT-сервером.
      3. Подписывается на входной топик, определяющий его дальнейшие действия, назовем его топиком конфигурации.
      4. Начинает считать импульсы, фиксируемые датчиком освещенности.

      При получении сообщения из топика конфигурации, MQTT-счетчик выдает в ответ подсчитанное им на момент получения сообщения количество импульсов и обнуляет внутренний счетчик, начиная новый цикл отсчета.

      1. Настроить нужную частоту снятия данных, отправляя сообщения в топик конфигурации с заданной в системе автоматизации периодичностью — н у, например, вы можете отправлять счетчику сообщения раз в минуту, раз в пять минут, раз в час, или один раз в сутки.
      2. Произвести первичное разделение данных. Вы можете отправлять сообщение счетчику всего два раза в сутки — в момент смены временных тарифных зон. При это м , если в сообщении будут указаны соответствующие адреcа, счетчик вернет количество импульсов, посчитанных для каждой тарифной зоны в свой топик. Остается пересчитать эти импульсы в киловатт-часы и умножить на тарифную ставку.

      В моем же случае реализована следующая схе ма:

      1. Счетчик получает сообщение от системы автоматизации в топик конфигурации раз минуту.
      2. Во время действия разных тарифных зон адрес топика в сообщении разный.
      3. Для получения сквозных суточных данных по энергопотреблению в системе автоматизации существует сущность, суммирующая данные с этих двух топиков.
      4. Для расчета общей стоимости электроэнергии в системе автоматизации полученные импульсы суммируются каждый по своему топику и умножаются на тариф.

      Сборка

      Ко мпоненты для MQTT-счетчика можно заказать на алиэкспрессе или купить в России. Общая стоимость

      350 рублей. Вместо Wemos D1 Mini можно использовать любой другой ESP8266, почему я использую именно эту платформу, я писал в предыдущей статье.

      o01-1.jpg

      Прошивка

      Прошивать 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 минут), вторые два — только за месяц. (Обратите внимание — не с начала текущего месяц, а просто за месяц назад от текущего момента. Да, такая статистика актуальна только к концу месяца).

      Также я добавляю сенсоры на базе шаблонов для суммирования импульсов по дневной и ночной зоне для построения общего графика расхода, сенсоры для извлечения из сенсоров статистики су мм арных количеств импульсов и перевода их в более привычные величины, сенсоры для вычисления стоимости электроэнергии и текущих значения показаний квартирного электросчетчика:

      Ну и вот что в итоге получается:

      o01-1.jpg

      При мер вывода полученных данных в Home Assistant

      Вместо заключения

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

      голоса
      Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector