#include #include "EmonLib.h" #include #include #include #include byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE }; // MAC адрес устройства проверьте, что такой не существует в вашей сети byte ip[] = { 10, 10, xx, y1 }; // IP адрес устройства byte subnet[] = {255, 255, 255, 0}; // Маска сети byte gateway[] = {10, 10, xx, y2}; // Шлюз по умолчанию EthernetServer server(80); // Веб сервер EthernetClient http_client; // Веб клиент char serverName[] = "10.10.xx.y3"; // Адрес звонилки LCD5110 myGLCD(5,6,3); // Инициализация LCD extern uint8_t SmallFont[]; EnergyMonitor emon1; EnergyMonitor emon2; EnergyMonitor emon3; int msec = 0; int msecP1 = 0; int msecP2 = 0; int msecP3 = 0; int LevelAlarm = 300; boolean Alarm1 = false; // Начальные значения при включении boolean Alarm2 = false; boolean Alarm3 = false; boolean Start1 = true; // Флаг включения double Irms1; double Irms2; double Irms3; double Delta1=0; double Delta2=0; double Delta3=0; double Pcur1; double Pcur2; double Pcur3; double Kphase = 0.220; // Если у вас 380 - поменяйте значение double PAlarm = 0.05; // Критичное значение после которого включаем тревогу char buf[15]; char tbuf[5]; char buffer[50]; String AMsg=""; String MMsg=""; void setup() { Serial.begin(9600); Serial.println("Starting init..."); Ethernet.begin(mac, ip, gateway, subnet); myGLCD.InitLCD(70); myGLCD.setFont(SmallFont); myGLCD.clrScr(); emon1.current(0, 111.1); //инициализация emon2.current(1, 111.1); emon3.current(2, 111.1); myGLCD.clrScr(); myGLCD.print("Energy Monitor", 0, 0); myGLCD.print(" calibrating", 0, 10); myGLCD.print("unplug sensors", 0, 20); //myGLCD.print("12345678901234", 0, 30); 14 символов в строке дисплея myGLCD.update(); double Irms1 = emon1.calcIrms(1480); // первые значения снятые с сенсоров - ооочень отличаются... не будем их учитывать в дельтах double Irms2 = emon2.calcIrms(1480); double Irms3 = emon3.calcIrms(1480); double cIrms; #define WINc 20 // количество пробных попыток для калибровки double Irms[WINc]; cIrms = 0; for (int i=0; i>>>> HTTP clent connect..."); boolean current_line_is_blank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n' && current_line_is_blank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.print("Pcur1="); client.print(Pcur1); client.print("
"); client.print("Pcur2="); client.print(Pcur2); client.print("
"); client.print("Pcur3="); client.print(Pcur3); client.print("
"); client.println(); client.print(" Delta1:"); client.print(Delta1); client.print(" Delta2:"); client.print(Delta2); client.print(" Delta3:"); client.print(Delta3); client.println(); break; } if (c == '\n') { current_line_is_blank = true; } else if (c != '\r') { current_line_is_blank = false; } } } delay(10); client.stop(); } if ( (Start1)&&(msec >= 100) ) { // Проверяем сколько времени прошло с момента включения Start1 = false; } if ( !Start1) { MMsg = ""; isAlarmP1(); isAlarmP2(); isAlarmP3(); AMsg = ""; AMsg += MMsg; AMsg += " alarm"; Serial.println(AMsg); } else { itoa(100-msec,buf,10); //Serial.println(buf); //Serial.println(" <->"); MMsg = buf; AMsg = ""; AMsg += MMsg; AMsg += " "; //AMsg += " "; Serial.println(AMsg); } if ( msec <= 32766) { msec++; } else { msec = 0; } // again } void postPage (char *webPage) { // Аларм, аларм, аларм! Надо дернуть пейджу! if (http_client.connect(serverName,80)>0) { http_client.print("GET "); http_client.print(webPage); http_client.print(" HTTP/1.0"); http_client.println("User-Agent: Arduino 1.0"); http_client.println(); Serial.println(" >> GET URL"); } http_client.stop(); http_client.flush(); } void isAlarmP1 () { // Сработал первый аларм if ( (Pcur1 < PAlarm) ) { if ( Alarm1 != true ) { postPage("/alarm?q=P1"); msecP1 = msec; } else { if ( abs(msec - msecP1) >= LevelAlarm ) { // дополнительная ветка повтора аларма Serial.println(" >> Repeat alarm P1"); // postPage("/alarm?q=P1"); msecP1 = msec; } } Alarm1 = true; MMsg += "P1"; } else { Alarm1 = false; MMsg += " "; msecP1 = 0; } } void isAlarmP2 () { // Сработал второй аларм if ( (Pcur2 < PAlarm) ) { if ( Alarm2 != true ) { postPage("/alarm?q=P2"); msecP2 = msec; } else { if ( abs(msec - msecP2) >= LevelAlarm ) { // дополнительная ветка повтора аларма Serial.println(" >> Repeat alarm P2"); // postPage("/alarm?q=P2"); msecP2 = msec; } } Alarm2 = true; MMsg += "P2"; } else { Alarm2 = false; MMsg += " "; msecP2 = 0; } } void isAlarmP3 () { // Сработал третий аларм if ( (Pcur3 < PAlarm) ) { if ( Alarm3 != true ) { postPage("/alarm?q=P3"); msecP3 = msec; } else { if ( abs(msec - msecP3) >= LevelAlarm ) { // дополнительная ветка повтора аларма Serial.println(" >> Repeat alarm P3"); // postPage("/alarm?q=P3"); msecP3 = msec; } } Alarm3 = true; MMsg += "P3"; } else { Alarm3 = false; MMsg += " "; msecP3 = 0; } }