Выводим счетчик электроэнергии в интернет

в 20:06, , рубрики: diy или сделай сам, python, stm8, микроконтроллеры, Программинг микроконтроллеров, роутер, умный дом, Электроника для начинающих, метки: , , , ,

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

С чего все началось

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

Как можно получить данные о мощности

  • Поскольку счетчик цифровой, то первое, что приходит в голову — использовать имеющиеся в нем интерфейсы. Из инструкции к счетчику следует, что в нем есть интерфейс RS-485, поверочный выход и оптопорт на передней панели. Однако воспользоваться ими не удастся — проводные интерфейсы находятся под опломбированной крышкой, и попасть туда нельзя, оптопорт активности не проявляет. Если поверочный выход еще и можно было бы использовать, то цифровые интерфейсы нигде не документированы, и скорее всего защищены паролем.
  • Вообще не использовать счетчик, и измерять величину тока в фазовом проводе. Такой метод используется здесь: habrahabr.ru/post/168783/. Однако для таких измерений нужен специальный датчик, который еще нужно где-то взять. Кроме того датчик — аналоговый, а где аналоговый сигнал, там и наводки, которых в электрощите можно наловить немало. Для точного измерения мощности нужно знать значение напряжения в сети, что тоже создает определенные проблемы.
  • Еще один метод, которым я и воспользовался — измерять период вспышек светодиода, находящегося на передней панели счетчика. Этот светодиод напрямую связан с микросхемой, измеряющей ток, протекающей через счетчик. Как я понимаю, этот светодиод связан с вышеупомянутым поверочным выходом. Рядом со светодиодом написано так называемое передаточное число: 2000 имп/кВт*ч, зная которое при достаточно точном измерении периода вспышек можно легко определить потребляемую мощность.

Техническая реализация

Вся обработка сигнала от фотодатчика ведется очень простым устройством на микроконтроллере STM8S105. STM8 был выбран по причине его наличия, а также поскольку для его программирования достаточно 3 выводов.

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

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

Данные от контроллера нужно каким-то образом передать на устройство, которое будет их обрабатывать, в данном случае это роутер WL-500gp. Можно было бы использовать беспроводные соединения, однако между роутером и контроллером несколько бетонных стен и стальная дверь. Также в таком случае контроллеру нужно будет обеспечить питание, а пытаться подключать блок питания к силовой проводке в щите не хотелось.
Более простым является проводное подключение. Поскольку данные должны передаваться на роутер, то можно воспользоваться уже проложенным кабелем, соединяющем роутер с провайдером — этот кабель проходит через электрощит. В кабеле для организации сети используются только 4 жилы из 8, так что оставшиеся 4 можно использовать для своих нужд.
Одну пару проводов можно использовать для передачи питания на контроллер, другую — для передачи данных на роутер. Однако мне захотелось реализовать передачу данных и питания только по одной паре проводов. Для этого я использовал цифровую токовую петлю.

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

При подаче на базу транзистора напряжения высокого уровня он открывается, и через линию связи начинает идти определенный ток. В результате этого на токоизмерительном резисторе (3 Ом) возникает падение напряжения, которое усиливается операционным усилителем. Усиленное напряжение подается на компаратор, и если оно больше определенного порога (Vref), то на выходе компаратора устанавливается высокий уровень напряжения. При отсутствии тока (точнее при малой его величине, так как контроллер всегда потребляет ток) падение напряжения на резисторе мало, и на выходе компаратора устанавливается низкий уровень напряжения.
Источником питания всей конструкции является роутер, напряжение 5 В с которого подается на приемник (входы слева на схеме) и проходит через линию практически без изменений — поскольку токи низкие, а линия короткая, то падение напряжение на резисторе и проводах достаточно мало. Далее это напряжение можно использовать для питания микроконтроллера (выходы справа на схеме).
Для передачи данных с микроконтроллера выход его UART соединен с базой транзистора, а выход компаратора соединен со входом преобразователя UART — USB. Скорость передачи данных — 1200 бит/сек. Это обеспечивает надежную передачу данных, а также при такой маленькой скорости передача даже короткой посылки видна по миганию светодиода.

Полные схемы приемника и передатчика

image
Передатчик
image
Приемник

Платы приемника и передатчика были изготовлены методом ЛУТ на одной плате, после сборки и отладки плата была разрезана:
image

Приемник установлен внутри обычной розетки RJ-45, в розетку вставляется идущий в щит кабель, кабель из розетки вставляется в роутер.
image

Передатчик установлен в небольшой коробке и положен в щит вместе с кнопкой звонка:
image

Обработка данных

Микроконтроллер, установленный в приемнике, измеряет период вспышек светодиода на электросчетчике и по нему вычисляет мощность. Эта величина постоянно сравнивается с порогом максимально допустимой мощности, и при ее превышении контроллер включает звонок.
Каждые 10 секунд контроллер передает последнюю измеренную величину мощности по UART на роутер. Тут возникает определенная проблема — при малых потребляемых мощностях светодиод на счетчике вспыхивает с периодом большим 10 секунд. В таком случае на роутер отправляется значение мощности — 0.
На роутер я установил интерпретатор Python, и написал скрипт, который обрабатывает данные от приемника, организует простейший локальный web-сервер и каждые 2 минуты передает среднее значение мощности на сайт cosm.com.
Данные на web-сервере обновляются при получении данных от приемника — каждые 10 секунд. При вычислении средней мощности в скрипте учитывается то, что реальная мощность не может быть равна 0 — при получении новой величины мощности, не равной нулю, все предыдущие нулевые значения замещаются новым значением.

Так выглядит web-страница сервера, открытая на телефоне:
image

Графики с Cosm.com
Выводим счетчик электроэнергии в интернет

Выводим счетчик электроэнергии в интернет

Python скрипт для роутера
Исходный код и прошивка для контроллера

Автор: iliasam

Источник

Поделиться

* - обязательные к заполнению поля