WEB – МОНІТОР ПАРАМЕТРІВ ЕЛЕКТРИЧНОЇ
МЕРЕЖІ ЗА $30

 Пропоную опис простого та недорогого пристрою для вимірювання напруги, струму та потужності в електричній мережі 220В для споживачів зі струмом споживання не більше 30А з подальшим відображенням результатів вимірювання у вигляді графіків на WEB сторінці через комп'ютерну мережу. Цей пристрій можна зібрати самостійно, дотримуючись цієї інструкції. Передбачається, що ви маєте навички макетування та програмування мікроконтролерів Arduino.
 Всі компоненти, необхідні для збирання пристрою, можна придбати в інтернет-магазині, наприклад arduino.ua.
 Нам знадобляться:
Arduino Nano
Мікроконтролер ARDUINO NANO
або будь-який інший подібний мікроконтролер, наприклад ARDUINO UNO, MICRO, MINI
датчик тока ACS712
Датчик струму ACS712 30A GY-712
Ethernet модуль ENC28J60
Ethernet модуль ENC28J60
Модуль питания TSP-05
Модуль живлення TSP-05 220В - 5В 3Вт
або будь-яке інше джерело живлення 5В для Arduino
Трансформатор 220/12В
Трансформатор 220/12В невеликої потужності
Можна використовувати й інші,
наприклад 220/24В, 220/9В, 220/6В.
Але при цьому потрібно підібрати
параметри дільника напруги у схемі.
Резистор и электролитический конденсатор
Чотири резистори 0.25W:
220кОм - 2 шт; 100кОм, 5.6кОм по одній штуці та
електролітичний конденсатор на 10 мкФ на напругу не менше 10В.
Резистор и электролитический конденсатор

З'єднувальні провідники
мама-мама та дроти ПСВ (ВВГ) 0.5мм2 для комутації кола на 220 В
Нижче наводиться принципова схема стосовно мережі змінного струму 220В до 30А, 6 кВт повного навантаження. Цей набір обладнання також дозволяє моніторити коло постійного струму до 30А з доопрацюванням схеми вимірювання напруги. У колах постійного струму трансформатор не потрібний. Достатньо підібрати параметри дільника напруги та пам'ятати, що при цьому не буде гальванічної розв'язки між силовим та вимірювальним колом, що може становити небезпеку.

принципова схема для вимірювання напруги, струму та потужності в електричній мережі 220В

 Для вимірювання струму в електричній мережі використовується датчик ACS712 30A GY-712, який побудований на однойменній мікросхемі ACS712ELCTR-30A-T фірми Allegro. Ця мікросхема забезпечує точне вимірювання постійного та змінного електричного струму за рахунок використання ефекту Холла і забезпечує гальванічну розв'язку високовольтної та вимірювальної частини кола. Нижче показано важливу схему включення мікросхеми.

принципова схема включення мікросхеми ACS712ELCTR

 Вимірюваний струм,Ip, протікає від контактів 1, 2 до контактів 3,4. На виході мікросхеми (контакт 7) при Ip=0, напруга дорівнює половині напруги живлення мікросхеми Vout = 5/2 = 2.5В. При Ip=+30А (струм протікає у напрямку від контактів 1,2 до контактів 3,4) на виході мікросхеми (контакт 7) буде напруга Vout = 2.5 + 30*0.066 = 4.48B. При Ip=-30А (струм протікає у напрямку від контактів 3,4 до контактів 1,4) на виході мікросхеми (контакт 7) буде напруга Vout = 2.5 – 30 * 0.066 = 0.52B.
 Таким чином, при протіканні змінного струму в контрольованій електричній мережі, на аналоговому вході А0 мікроконтролера ARDUINO NANO буде напруга, яка змінюється за синусоїдою з частотою, що дорівнює частоті в електричній мережі. Амплітуда напруги на вході А0 буде пропорційна електричного струму (лінія А0 на графіку внизу).
 Для вимірювання напруги в електричній мережі використовується звичайний трансформатор 220/12В, який підключений через чотири резистори та конденсатор до аналогового входу А1 мікроконтролера ARDUINO NANO. Ці чотири резистори та конденсатор забезпечують зменшення амплітуди коливань напруги зі зміщенням до напруги, рівному половині напруги живлення (5/2=2.5В) на вході мікроконтролера. У результаті на вході А1 при напрузі в електричній мережі рівній нулю буде напруга 2.5В. У точці максимуму амплітуди напруги 220В, напруга на А1 складатиме приблизно 3.6B. У точці мінімуму амплітуди напруги, напруга на А1 буде приблизно 1.44B. Цю напругу можна підігнати до потрібного діапазону шляхом підбору пари резисторів 100кОм та 5.6кОм.
 У результаті на вході А1 має бути синусоїда, як показано на графіку внизу.

синусоида

 Якщо в контрольованій електричній мережі струм протікає через активне навантаження, наприклад електронагрівач або лампу розжарювання, синусоїди А0 і А1 будуть збігатися по фазі. Тобто, синусоїда струму і напруги переходитимуть через нуль одночасно, як показано на графіці вгорі. Якщо споживачем буде навантаження з індуктивною складовою, наприклад, трансформатор або електродвигун, синусоїди А0 і А1 не збігатимуться по фазі. Синусоїда струму та напруги переходитимуть через нуль у різний час зі зміщенням φ, як показано графік внизу. При цьому синусоїда струму (А0) відставатиме.

синусоїда

 У випадку, якщо споживачем буде навантаження з ємнісною складовою, синусоїда А0 випереджатиме синусоїду А1, як показано на графіку внизу.

синусоида
 У колах змінного синусоїдального струму, внаслідок постійної зміни значення напруги та струму, потужність не можна обчислити шляхом простого множення напруги на струм. Тому виділяють відразу три види електричної потужності: активну, реактивну та повну.
Активна потужність у колах синусоїдального струму
Одиниця виміру - ват (позначення: Вт; міжнародне позначення: W).


 де P - активна потужність, Вт;
  U - середньоквадратична напруга, В;
  I - середньоквадратичний струм, А;
  φ - кут зсуву фаз напруги та струму, град.
Активна потужність визначає частину електричної енергії, яка використовується безпосередньо на виконування корисної роботи.
Реактивна потужність у колах синусоїдального струму
Одиниця виміру - вольт-ампер реактивний (позначення: вар; міжнародне позначення: var)


 де Q - реактивна потужність, вар;
  U - середньоквадратична напруга, В;
  I - середньоквадратичний струм, А;
  φ - кут зсуву фаз напруги та струму, град.
Реактивна потужність визначає ту частину електричної енергії, яка марно витрачається в електричних мережах.
Повна потужність у колах синусоїдального струму
Одиниця повної електричної потужності - вольт-ампер (позначення: ВА; міжнародне позначення: VA)


 де S - повна потужність, ВА;
  P - активна потужність, Вт;
  Q - реактивна потужність, вар;
Повна потужність відповідає всій енергії, яка витрачається в електричних мережах.

Алгоритм обчислення наступний.
 Через аналогові входи А0 і А1 постійно зчитуємо поточні значення напруги та струму, підносимо їх у квадрат і підсумовуємо. З періодичністю в одну секунду обчислюємо середньоквадратичне значення для напруги та струму. Добуток середньоквадратичного значення напруги і струму дає величину повної потужності. Нижче наведено лістинг програми.
 Вам буде потрібна бібліотека UIPEthernet. В IDE Arduino 1.8.4 її можна встановити через меню "Скетч"-"Підключити бібліотеку" - "Керувати бібліотеками" - "Менеджер бібліотек" - UIPEthernet. Також можна завантажити цю бібліотеку з GitHub за адресою https://github.com/UIPEthernet/UIPEthernet.

IDE Arduino 1.8.4
/*ПРОГРАМА ДЛЯ ВИМІРЮВАННЯ ПАРАМЕТРІВ ЕЛЕКТРИЧНОЇ МЕРЕЖІ
Контролер - Arduino Nano
Ethernet модуль - ENC28J60
Датчик струму - ACS712 30A GY-712
Трансформатор для вимірювання напруги - 220/12В
  
Розробка - LIC CONTROL  http://lic.com.ua
Схема: http://lic.com.ua/article08.htm
З'єднування Arduino Nano <-> ENC28J60
    D2  - INT
    D3  - RESET
    D10 - CS
    D11 - SI (ST)
    D12 - SO
    D13 - SCK
З'єднайте Arduino Nano та ENC28J60 за цією схемою.
Підключіть модуль Ethernet до мережі.
Завантажте програму в контролер і в пошуковому рядку барузера наберіть
http://192.168.1.10/ та натисніть Enter.
Ваш комп'ютер повинен бути обов'язково підключений до Інтернету.
Якщо ви все зробили правильно, з'явиться сторінка з демонстраційними графіками.
Після цього можна підключити датчик струму - ACS712 30A GY-712 та трансформатор та
підібрати коефіцієнти kI,kV щоб одержати правильних даних.
Встановіть #define DEMO false коли вимірятимете реальні дані
*/
#include <UIPEthernet.h>
#define DEMO true //встановіть false для реального виміру
const char page1[] PROGMEM =
"<!DOCTYPE html>\n"
"<html>\n"
"<meta charset='UTF-8'>\n"
"<title>WEB MONITOR</title>\n"
"<link href='http://liccontrol.com/web/gauge.ico' rel='icon' type='image/x-icon'/>\n"
"<link rel='stylesheet' href='http://liccontrol.com/web/style.css' type='text/css'>\n"
"<script src='http://code.jquery.com/jquery-3.1.1.min.js'></script>\n"
"<script src='http://code.highcharts.com/highcharts.js'></script>\n"
"</head>\n"
;
const char page2[] PROGMEM =
"<body>\n"
"<table id='MainTab' border='0' cellspacing='0' cellpadding='0'>\n"
"<tbody><tr ><td><div id='trend'></div></td></tr></tbody>\n"
"</table>\n"
"<script src='http://liccontrol.com/web/trend.js'></script>\n"
"</body></html>\n"
;   
const char page3[] PROGMEM =
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Pragma: no-cache\n"
"Connection: close\r\n\r\n"
;

int IPin = A1;  //Аналоговий вхід для вимірювання струму
int VPin = A0;  //Аналоговий вхід для вимірювання напруги
//поточне та сумарне значення струму
double I=0.0, I1 = 0.0, I2 = 0.0;     
//поточне та сумарне значення напруги
double V=0.0, V1 = 0.0, V2 = 0.0;     
float S = 0.0;  //повна потужність
float P = 0.0;  //активна потужність
float Q = 0.0;  //Реактивна потужність
float P1 = 0.0; //миттєва потужність
float kI = 0.07398; //Коефіцієнт вимірювання струму
float kV = 0.97656; //Коефіцієнт вимірювання напруги
//Унікальна mac-адреса. Якщо буде повторення в мережі,
//Ethernet - модуль працювати не буде!
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; 
//Встановіть відповідну для вас адресу            
IPAddress ip(192, 168, 1, 10);  
EthernetServer server(80);
String result="";
unsigned long time1 = 0, count=0, count1=0;
unsigned long t1 = 0;
boolean Restart = true;

//Перезапуск мікросхемы ENC28J60
void resetENC28J60() {
  digitalWrite(3, LOW);    
  delay(200);           
  digitalWrite(3, HIGH);
  delay(100); 
}

//Процедура вимірювання струму та напруги
void MesureData() {  
  float angle = 2*M_PI*count/100.0;
  if (!DEMO) {
    I1 = kI*(analogRead(IPin) - 512);   //миттєве значення струму,А
  }    
  else {
    I1 = sqrt(2.0)*100.0*sin(angle);    //миттєве значення струму,А (в DEMO режимі)
  }           

  if (!DEMO) {
    V1 = kV*(analogRead(VPin) - 512);   //миттєве значення напруги,В 
  }    
  else {
    float d = 30.0;                     //зміщення синусоїди струму в градусах
    angle += 2.0*M_PI * d/360.0;
    V1 = sqrt(2.0)*220.0*sin(angle);    //миттєве значення напруги,В (в DEMO режимі)
  }

  I2 += pow(I1,2);
  V2 += pow(V1,2);  
  P1 += I1 * V1; 
  count++;
  
  if (count > 1000) { 
      I = sqrt(I2/count);     //середньоквадратична величина струму, А
      V = sqrt(V2/count);     //середньоквадратична величина напруги,В
      S = I * V;              //повна потужність, ВА
      P = P1/count;           //активна потужність, Вт           
      float _Q = pow(S,2)-pow(P,2);
      if (_Q>0.0) Q = sqrt(_Q);  //реактивна потужність, вар
      else Q = 0.0;
      P1 = 0.0;
      V2 = 0.0;
      I2 = 0.0;
      count = 1;   
      t1 = millis();          
  } 
  if (DEMO) {
    //Виводимо результати на графік. Значення потужності, 
    //для зручності відображення виводится поділеним на 100.
    if ((count % 5)==0) {
      Serial.print("U:"+String(V1)+", I:"+String(I1)+", Urms:"+String(V));
      Serial.print(", Irms:"+String(I)+", P/100:"+String(P/100.0));   
      Serial.println(", S/100:"+String(S/100.0));   
    }
  }
}


//Процедура надсилання до мережі даних, які зберігаються в PROGMEM 
void printProgStr (EthernetClient client, const char * str){
char c;
  if (!str) return;
  while ((c = pgm_read_byte(str++))) client.print (c);
}

//Формуємо JSON рядок даних для відправки її через мережу до браузера
String DataToBrowser() {
  int t = int((millis()-time1)/1000);
  String s = String(t)+", "+String(V,1)+", "+
  String(I,1)+", "+String(S/1000.0,2)+", "+
  String(P/1000.0,2);
  return s;
}

//Початкові установки та ініціалізації
void setup() {
  Serial.begin(9600);
  resetENC28J60();
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("START SERVER AT:");
  Serial.println(Ethernet.localIP());
}

//Головний цикл виконання програми
void loop() {
  MesureData();
  EthernetClient client = server.available();
  if (client) {
    result="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        result+=c;
        if (c == '\n') { 
          int y=result.indexOf("dat");
          if ((y>0) and (!Restart)) {
            printProgStr(client, page3);
            String s = DataToBrowser();
            client.println(s);
          } else {         
              printProgStr(client, page1);
              printProgStr(client, page2);
              Restart = false;
              time1 = millis();
          }                    
          break;
        }        
      }
    }
    delay(1);
    client.stop();
  }
}
З'єднайте Arduino Nano та ENC28J60 за цією схемою. Підключіть модуль Ethernet до мережі. Завантажте програму в контролер, у пошуковому рядку барузера наберіть http://192.168.1.10/ та натисніть Enter.
УВАГА!. Ваш комп'ютер повинен бути обов'язково підключений до Інтернету. Якщо ви зробили все правильно, з'явиться сторінка з демонстраційними графіками. Після цього можна підключити датчик струму - ACS712 30A GY-712, трансформатор та підібрати коефіцієнти kI,kV щоб отримати правильні дані.
Встановіть #define DEMO false коли будете вимірювати реальні дані.
ПАМ'ЯТАЙТЕ ПРО ПРАВИЛА ТЕХНІКИ БЕЗПЕКИ, КОЛИ БУДЕТЕ ПРАЦЮВАТИ З ВИСОКОЮ НАПРУГОЮ.
ВИСОКА НАПРУГА НЕБЕЗПЕЧНА ДЛЯ ЖИТТЯ!
Для потужних електричних споживачів, в кола яких струми перевищують 30А ми (lic.com.ua) пропонуємо універсальний струмовий WEB-монітор TSD i105 на контролері STM32 та мікрокомп'ютері Orange PI Zero з струмовими датчиками ACS722. Цей пристрій підключається до електричної мережі через стандартні трансформатори струму та забезпечує паралельний моніторинг 7 струмових ліній та напруг за трьома фазами в електричній мережі будь-якої потужності.
Вимірювання миттєвих значень струму та напруги забезпечує контролер STM32. Це дає високу частоту опитування (16кГц) з роздільною здатністю 12 біт. Мікрокомп'ютер Orange PI Zero забезпечує WEB інтерфейс та архівування даних з подальшим відображенням їх через WEB браузер.
Вартість такого струмового WEB-монітора 8800.0 грн без ПДВ, що значно дешевше за будь-які інші пристрої з аналогічними характеристиками.
WEB монитор параметров электрических сетей
WEB - монітор параметрів електричних мереж TSD i105.

 Вимірювальних струмових входів (5А, AC/DC) - 7 шт;
 Вимірювальних входів за напругою (220В, AC) - 3 шт;
 Вимір струмів, напруги, потужності повної, активної та реактивної з частотою 16 кГц;
 Виведення результатів вимірювання через WEB-інтерфейс та архівування на SD карті пам'яті;