Buderus-trade.ru

Теплотехника Будерус
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Счетчик электроэнергии для ардуино

Счетчик электроэнергии для ардуино

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

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

Счётчик электрической энергии

Устройство работает следующим образом: контроллер Arduino считывает частоту миганий светодиода электросчетчика и передает данные через беспроводной модуль XBee. Модуль USB/Xbee, установленный на компьютере, принимает данные на ПК и передает их в LabView, позволяющей отображать и мониторить данные энергопотребления в реальном времени.
Контроллер Arduino пересылает данные о среднем энергопотреблении за последние 5 минут, а также данные энергопотребления в реальном времени.

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

Схема устройства

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

Фрагмент кода для сбора данных с счетчика:

В приведённом выше коде происходит сравнение двух напряжений, первое — снимаемое с делителя с фоторезистором, второе напряжение — с потенциометра. Если первое значение напряжения превышает значение напряжения с потенциометра, то устанавливается флаг «flag_acquire = 1». Затем происходит подсчет времени, которое прошло с последнего мигания светодиода.
Для этого, считывается значение внутреннего программного счетчика, которое возвращает количество миллисекунд, прошедшее с момента включения питания контроллера. Для этого, используется команда millis(), см. урок 3 (тайминг)

Здесь задействовано две переменных pre_tmS и cur_tmS, переменная «cur_tmS» необходима для чтения значения внутреннего счетчика: cur_tmS = millis (); Если условие cur_tmS> pre_tmS выполняется, то происходит замер времени между двумя циклами (вспышками светодиода на энергосчетчике), значение которого записывается в переменную «tm_diffS».
Далее, данные посылаются в ПК через модуль Xbee.

Arduino посылает флаг S, чтобы LabView понял, что передаваемые данные — это значения в реальном времени, а затем сами данные цикла в миллисекундах.
Теперь можно сбросить флаг, когда светодиод счетчика погас:

Здесь мы проверяем установлен ли flag_acquire в 1, и если флаг установлен и напряжение на фоторезисторе упало ниже заданного, то сбрасываем флаг в ноль. Далее идет инкрементируем переменную impulsi , которая служит для подсчет среднего энергопотребления за последние 5 минут.
Данное значение в дальнейшем также передается в LabView с меткой «L».

Полный код программы:

LabView

Для приема данных использовался модуль XBee UartSbee V3.1.

Интерфейс программы очень простой:

LabView

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

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

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

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

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

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

Читайте так же:
Как проверить исправен ли счетчик электроэнергии

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

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

Воистину, передаточное число счетчика — великая вещь, так как зная ее можно выразить как мощность так и ток:
Составим пропорцию из нашего передаточного соотношения (А=12800 имп/кВт*ч) и неизвестного передаточного соотношения, которое будет при нагрузке X и за время одного единственного импульса (моргания лампочки):

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

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


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

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

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

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

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


Казалось бы просто, но до этого надо еще додуматься!

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

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

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

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

Читайте так же:
Сроки поверки для счетчиков электрической энергии

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

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

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

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

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

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

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

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

Подключение Arduino к счетчику Меркурий 230

У трехфазного счетчика электричества Меркурий 230 ART есть шина CAN, с помощью которой можно подключить Arduino.

Для этого нужен такой преобразователь уровней MAX485 (RS-485 Module TTL to RS-485)

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

Протокол обмена данными можно скачать на официальном сайте, в этой PDF.

На шине CAN может быть одновременно много устройств, у каждого из них есть свой ID. Сначала нужно определить ID нашего счетчика, для этого мы шлем для каждого ID от 1 до 255 запрос на тестирование канала связи, состоящий из 4 байт:

  1. ID счетчика
  2. 0 (команда «запрос на тестирование канала связи»)
  3. CRC
  4. CRC

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

Схема подключения:

Код Arduino:

#define SSerialRx 11 // Serial Receive pin RO
#define SSerialTx 8 // Serial Transmit pin DI
#define SSerialTxControl 9 // RS485 Direction control
#define SSerialRxControl 10 // RS485 Direction control

#define RS485Transmit HIGH
#define RS485Receive LOW

Читайте так же:
Электрические счетчики са4 и678

#define Pin13LED 13

SoftwareSerial RS485Serial(SSerialRx, SSerialTx); // Rx, Tx

int byteReceived;
int byteSend;

void setup() <
Serial.begin(9600);

pinMode(Pin13LED, OUTPUT);
pinMode(SSerialTxControl, OUTPUT);
pinMode(SSerialRxControl, OUTPUT);
digitalWrite(SSerialTxControl, RS485Receive);
digitalWrite(SSerialRxControl, RS485Receive);
RS485Serial.begin(9600);
delay(3000);
Serial.println(«start»);
send(cmd_test_con, sizeof(cmd_test_con));
send(cmd_access, sizeof(cmd_access));

Serial.println(getCounter(46, 1));
Serial.println(getCounter(46, 2));

send(cmd_0, sizeof(cmd_0));
send(cmd_1, sizeof(cmd_1));
send(cmd_2, sizeof(cmd_2));
>

void loop() <
for(int f=1; f<=3; f++) <
int v = getVoltage(46, f);
Serial.print(v);
Serial.print(» «)
>
for(int f=1; f<=3; f++) <
int v = getCurrent(46, f);
// Serial.print(» I «);
>
Serial.println();
delay(1000);
return;
byte cmd_r1[] = <46, 8, 0x11, 0x21>;
send(cmd_r1, sizeof(cmd_r1));
delay(1000);
byte cmd_r2[] = <46, 8, 0x11, 0x22>;
send(cmd_r2, sizeof(cmd_r2));
delay(1000);
byte cmd_r3[] = <46, 8, 0x11, 0x23>;
send(cmd_r3, sizeof(cmd_r3));
>

void scanDeviceIds() <
for(int i=0; i<=255; i++) <
byte cmd[] = ;
send(cmd, sizeof(cmd));
delay(1000);
>
>

void send(byte *cmd, int s) <
Serial.print(«sending. «);
unsigned int crc = crc16MODBUS(cmd, s);
unsigned int crc1 = crc & 0xFF;
unsigned int crc2 = (crc>>8) & 0xFF;
digitalWrite(SSerialTxControl, RS485Transmit); // Init Transceiver
digitalWrite(SSerialRxControl, RS485Transmit); // Init Transceiver
for(int i=0; i<s; i++) <
RS485Serial.write(cmd[i]);
Serial.print(cmd[i]);
Serial.print(» «);
>
RS485Serial.write(crc1);
RS485Serial.write(crc2);
Serial.print(«crc: «);
Serial.print(crc1);
Serial.print(» «);
Serial.print(crc2);
Serial.println();
digitalWrite(SSerialTxControl, RS485Receive); // Init Transceiver
digitalWrite(SSerialRxControl, RS485Receive); // Init Transceiver
delay(200);

if (RS485Serial.available()) <
while (RS485Serial.available()) <
byteReceived = RS485Serial.read(); // Read received byte
Serial.print(» «);
digitalWrite(Pin13LED, HIGH); // Show activity
Serial.print(byteReceived); // Show on Serial Monitor
delay(1);
digitalWrite(Pin13LED, LOW); // Show activity
>
delay(1000);
>
Serial.println();
>

void sendCmd(byte *cmd, int s, byte *response) <
unsigned int crc = crc16MODBUS(cmd, s);
unsigned int crc1 = crc & 0xFF;
unsigned int crc2 = (crc>>8) & 0xFF;
digitalWrite(SSerialTxControl, RS485Transmit); // Init Transceiver
digitalWrite(SSerialRxControl, RS485Transmit); // Init Transceiver
for(int i=0; i<s; i++) <
RS485Serial.write(cmd[i]);
//Serial.print(cmd[i]); // Show on Serial Monitor
//Serial.print(» «);
>
//Serial.print(» crc: «);
RS485Serial.write(crc1);
RS485Serial.write(crc2);
digitalWrite(SSerialTxControl, RS485Receive); // Init Transceiver
digitalWrite(SSerialRxControl, RS485Receive); // Init Transceiver
delay(200);

//Serial.print(» resp: «);
response[0] = 0;
byte i = 1;
while (RS485Serial.available()) <
byteReceived = RS485Serial.read();
response[i++] = byteReceived;
Serial.print(byteReceived); // Show on Serial Monitor
Serial.print(» «);
>
response[0] = i-1;
//Serial.println(); // Show on Serial Monitor
>

int getVoltage(int addr, byte f) <
byte cmd[] = ;
byte response[17];
sendCmd(cmd, sizeof(cmd), response);
if(response[0] < 6) return -1;
return ((int)response[3+1]*256 + response[2+1])/100;
>

long getCounter(int addr, byte f) <
byte cmd[] = ;
byte response[22];
sendCmd(cmd, sizeof(cmd), response);
if(response[0] < 6) return -1;
long r = 0;
r |= (long)response[2+1]<<24;
r |= (long)response[1+1]<<16;
r |= (long)response[4+1]<<8;
r |= (long)response[3+1];
return r;
>

int getCurrent(int addr, byte f) <
byte cmd[] = ;
byte response[17];
sendCmd(cmd, sizeof(cmd), response);
if(response[0] < 6) return -1;
return ((int)response[3+1]*256 + response[2+1]);
>

unsigned int crc16MODBUS(byte *s, int count) <
unsigned int crcTable[] = <
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
>;

Читайте так же:
Если не менять счетчик электроэнергии что будет 2016

unsigned int crc = 0xFFFF;

for(int i = 0; i < count; i++) <
crc = ((crc >> 8) ^ crcTable[(crc ^ s[i]) & 0xFF]);
>

Подключаем 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 — рекомендую познакомиться.

Читайте так же:
Замена электросчетчик постановление 442

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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