- Materiale necesare:
- Funcționarea senzorului de curent ACS712:
- Diagrama circuitului
- Cod și explicație:
- Aplicație Android pentru monitorizarea consumului de energie electrică:
Știm cu toții despre contoare de energie electrică care sunt instalate în casa sau birourile tuturor pentru a măsura consumul de energie electrică. La sfârșitul fiecărei luni, mulți dintre noi suntem îngrijorați de factura ridicată a energiei electrice și trebuie să ne uităm la contorul de energie din când în când. Dar dacă ne putem monitoriza consumul de energie electrică de oriunde din lume și vom primi un SMS / E-mail atunci când consumul dvs. de energie atinge o valoare prag. Aici construim un proiect de contor de energie bazat pe IoT.
Anterior am construit un circuit de măsurare a energiei care vă trimite SMS-uri despre factură utilizând modulul GSM. În acest proiect, realizăm un contor de energie electrică inteligentă utilizând modulul Arduino și ESP8266 Wi-Fi, care nu numai că vă poate trimite un SMS / e-mail cu factura dvs. de energie electrică, ci și puteți monitoriza consumul de energie oricând și de oriunde din lume. Aici am folosit un senzor de curent ACS712 pentru a măsura consumul de energie, despre care vom discuta în scurt timp.
Vom primi ajutorul platformei IFTTT pentru a ne conecta Wi-Fi la notificări prin SMS / E-mail. De asemenea, vom folosi aplicația Android MQTT Dashboard pentru a monitoriza consumul nostru de energie. Deci sa începem….
Materiale necesare:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Senzor de curent
- Orice aparat de curent alternativ
- Sârme masculin-feminin
Funcționarea senzorului de curent ACS712:
Înainte de a începe construirea proiectului, este foarte important pentru noi să înțelegem funcționarea senzorului de curent ACS712, deoarece este componenta cheie a proiectului. Măsurarea curentului, în special a curentului alternativ, este întotdeauna o sarcină dificilă datorită zgomotului cuplat cu problema de izolare necorespunzătoare etc. Dar, cu ajutorul acestui modul ACS712, care a fost proiectat de Allegro, lucrurile au devenit mult mai ușoare.
Acest modul funcționează pe principiul efectului Hall, care a fost descoperit de Dr. Edwin Hall. Potrivit principiului său, atunci când un conductor de transport al curentului este plasat într-un câmp magnetic, se generează o tensiune pe marginile sale perpendiculare pe direcțiile atât ale curentului, cât și ale câmpului magnetic. Să nu intrăm prea adânc în concept, ci, pur și simplu, folosim un senzor de hală pentru a măsura câmpul magnetic în jurul unui conductor de transport de curent. Această măsurare va fi în termeni de milivolți pe care i-am numit tensiunea de hală. Această tensiune hall măsurată este proporțională cu curentul care curgea prin conductor.
Avantajul major al utilizării senzorului de curent ACS712 este acela că poate măsura atât curent alternativ, cât și curent continuu și oferă, de asemenea, izolare între sarcină (sarcină AC / DC) și unitate de măsurare (partea microcontrolerului). După cum se arată în imagine, avem trei pini pe modul care sunt Vcc, Vout și respectiv Ground.
Blocul de borne cu 2 pini este locul prin care ar trebui să fie trecut firul de transport curent. Modulul funcționează pe + 5V, astfel încât Vcc ar trebui să fie alimentat de 5V și solul să fie conectat la masă a sistemului. Pinul Vout are o tensiune de offset de 2500mV, adică atunci când nu curge curent prin fir, atunci tensiunea de ieșire va fi de 2500mV și când curentul curge este pozitiv, tensiunea va fi mai mare de 2500mV și când curentul care curge este negativ, tensiunea va fi mai mică de 2500mV.
Vom folosi pinul analogic al Arduino pentru a citi tensiunea de ieșire (Vout) a modulului, care va fi 512 (2500mV) atunci când nu curge curent prin fir. Această valoare se va reduce pe măsură ce curentul curge în direcție negativă și va crește pe măsură ce curentul curge în direcție pozitivă. Tabelul de mai jos vă va ajuta să înțelegeți cum variază tensiunea de ieșire și valoarea ADC în funcție de curentul care trece prin fir.
Aceste valori au fost calculate pe baza informațiilor furnizate în Fișa tehnică a ACS712. De asemenea, le puteți calcula folosind formulele de mai jos:
Tensiune Vout (mV) = (valoare ADC / 1023) * 5000 curent prin fir (A) = (Vout (mv) -2500) / 185
Acum, că știm cum funcționează senzorul ACS712 și la ce ne-am putea aștepta de la acesta. Să trecem la schema circuitului.
Am folosit acest senzor pentru a realiza un circuit digital de ampermetru folosind microcontrolerul PIC și ACS712.
Diagrama circuitului
Pasul 1: conectați-vă la IFTTT cu acreditările dvs.
Pasul 2: Pe Appletele mele, faceți clic pe Applet nou
Pasul 3: Faceți clic pe + acest lucru
Pasul 4: Căutați AdaFruit și faceți clic pe el.
Pasul 5: Faceți clic pe Monitorizați un flux pe AdaFruit IO.
Pasul 6: Alegeți Feed ca factură, Relația ca „ egală cu” și valoarea prag la care doriți un e-mail. Faceți clic pe Creare acțiune . Am folosit 4 ca valoare de declanșare a pragului.
Pasul 7: Faceți clic pe + că . Căutați G-mail și faceți clic pe acesta și Conectați-vă cu acreditările dvs. g-mail.
Pasul 8: Faceți clic pe trimiteți-vă un e-mail.
Pasul 9: Scrieți subiectul și corpul așa cum se arată și faceți clic pentru a crea.
Pasul 10: „ Rețeta ” dvs. este gata. Examinați-l și faceți clic pe finisare.
Acum, am terminat cu integrarea web. Să trecem la partea de codificare..
Cod și explicație:
Folosim comunicații seriale între ESP12 și Arduino. Deci, trebuie să scriem cod atât pentru Arduino, cât și pentru NodeMCU pentru transmisie și recepție.
Cod pentru partea emițătorului, adică pentru Arduino Uno:
Codul Arduino complet este dat la sfârșitul acestui tutorial. Vom folosi biblioteca pentru senzorul de curent, care poate fi descărcat de pe acest link.
Această bibliotecă are funcția încorporată pentru a calcula curentul. Puteți scrie codul pentru a calcula curentul, dar această bibliotecă are algoritmi de măsurare a curentului exacți.
Mai întâi, includeți biblioteca pentru senzorul curent ca:
#include „ACS712.h”
Faceți o matrice pentru stocarea energiei pentru trimiterea acesteia la NodeMCU.
watt char;
Creați o instanță pentru a utiliza ACS712-30Amp la PIN A0. Schimbați primul argument dacă utilizați varianta de 20Amp sau 5 Amp.
Senzor ACS712 (ACS712_30A, A0);
În funcția de configurare , definiți baud rate de 115200 pentru a comunica cu NodeMCU. Call sensor.calibrate () funcția pentru calibrarea senzorului de curent pentru a obține citiri exacte.
void setup () { Serial.begin (115200); sensor.calibrate (); }
În funcția de buclă , vom apela sensor.getCurrentAC (); funcție pentru a obține valoarea curentă și a stoca în variabila float I. După ce ați obținut curent, calculați puterea utilizând formula P = V * I. Folosim 230V pentru că este standardul comun în țările europene. Treceți la local, dacă este necesar
bucla void () { float V = 230; float I = sensor.getCurrentAC (); plutitor P = V * I;
Aceste linii convertesc puterea în Wh.
last_time = current_time; ora_curenta = milis (); Wh = Wh + P * ((current_time -last_time) /3600000.0);
Acum, trebuie să convertim acest Wh în formă de caractere pentru al trimite la NodeMCU, pentru acest dtostrf (); va converti un float într-o matrice char, astfel încât să poată fi tipărit cu ușurință:
dtostrf (Wh, 4, 2, watt);
Formatul este:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Scrieți această matrice de caractere în bufferul serial utilizând Serial.write () ; funcţie. Aceasta va trimite valoarea Wh către NodeMCU.
Serial.write (watt); întârziere (10000); }
Cod pentru Node piese receptor MCU ESP12:
Pentru aceasta avem nevoie de biblioteca AdaFruit MQTT, care poate fi descărcată de pe acest link.
Acum, deschideți Arduino IDE. Accesați exemple -> Biblioteca AdaFruit MQTT -> mqtt_esp8266
Vom edita acest cod în funcție de cheile AIO și acreditările Wi-Fi și datele seriale primite de pe Arduino.
În primul rând, am inclus toate bibliotecile pentru modulul ESP12 Wi-Fi și AdaFruit MQTT.
#include
Definim SSID-ul și parola pentru Wi-Fi-ul dvs., de la care doriți să vă conectați ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Această secțiune definește serverul AdaFruit și portul serverului care sunt fixate ca „io.adafruit.com” și respectiv „1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Înlocuiți aceste câmpuri cu numele dvs. de utilizator și cheile AIO pe care le-ați copiat de pe site-ul AdaFruit în timp ce creați feedul.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Apoi am creat o clasă ESP12 WiFiClient pentru a ne conecta la serverul MQTT.
Client WiFiClient;
Configurați clasa de client MQTT trecând clientul WiFi și serverul MQTT și detaliile de conectare.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Configurați un flux numit „Putere” și „factură” pentru publicarea modificărilor.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish fact = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
În funcția de configurare , conectăm modulul Wi-Fi la punctul de acces Wi-Fi.
void setup () { Serial.begin (115200); întârziere (10); Serial.println (F ("Demo Adafruit MQTT")); // Conectați-vă la punctul de acces WiFi. Serial.println (); Serial.println (); Serial.print („Conectarea la”); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. ... }
În funcția de buclă , vom verifica datele primite de pe Arduino și le vom publica pe AdaFruit IO.
void loop () { // Asigurați-vă că conexiunea la serverul MQTT este activă (aceasta va face prima // conexiune și se va reconecta automat la deconectare). Consultați definiția funcției MQTT_connect // mai jos. MQTT_connect (); int i = 0; plutitor watt1;
Această funcție verifică datele primite de pe Arduino și stochează aceste date în matrice de wați utilizând funcția serial.read ().
if (Serial.available ()> 0) { delay (100); // permite ca toate serialele trimise să fie primite împreună în timp ce (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
funcția atof () convertește caracterele în valori float și vom stoca această valoare float într-o altă variabilă float watt1.
watt1 = atof (watt);
Calculați suma facturii înmulțind puterea (în Wh) cu tariful energetic și împărțiți-o la 1000 pentru a face putere în KWh.
factură_sumă = watt1 * (EnergyTariff / 1000); // 1unitate = 1kwH
Acum putem publica lucruri!
Serial.print (F ("\ nTrimiterea valorii de putere")); Serial.println (watt1); Serial.print („…”);
Această bucată de cod publică valorile puterii în alimentarea cu energie
if (! Power.publish (watt1)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
Aceasta va publica factura de energie electrică în fluxul facturilor .
if (! bill.publish (bill_amount)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
Suma facturii noastre se poate schimba rapid, dar IFTTT necesită timp pentru a declanșa applet-ul, astfel încât aceste linii vor da timp pentru declanșare, astfel încât să putem primi e-mail prag.
Schimbați valoarea facturii_amontului pe care doriți să primiți e-mail. De asemenea, modificați setarea IFTTT AdaFruit IO.
if (factură_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (factură_sumă); întârziere (5000); } factură_sumă = 6; }
Codul complet pentru Arduino și NodeMCU ESP12 este dat la sfârșitul acestui tutorial.
Acum, încărcați codurile pe ambele plăci. Conectați-vă hardware-ul așa cum se arată în schema de circuite și Deschideți io.adafruit.com. Deschideți tabloul de bord pe care tocmai l-ați creat. Veți vedea că factura privind consumul de energie și electricitatea se actualizează.
Când factura a ajuns la INR 4 , atunci veți primi un e - mail de genul asta.
Aplicație Android pentru monitorizarea consumului de energie electrică:
Puteți utiliza aplicația Android pentru monitorizarea valorilor. Pentru aceasta descărcați aplicația Android MQTT Dashboard din magazinul Play sau din acest link.
Pentru a configura conexiunea cu io.adafruit.com urmați acești pași:
Pasul 1: Deschideți aplicația și faceți clic pe semnul „+”. Completați ID-ul clientului orice doriți. Serverul și portul rămân aceleași așa cum se arată în captura de ecran. Veți primi numele de utilizator și parola (cheie activă) din tabloul de bord AdaFruit IO, așa cum se arată mai jos.
Cheia activă este parola dvs.
Pasul 2: Selectați Contor electricitate și selectați Abonare. În abonament, dați numele și subiectul prietenos. Formatul subiectului este „ numele dvs. de utilizator” / fluxuri / „numele de feed” și faceți clic pe creați.
Pasul 3: în același mod, faceți abonament pentru fluxul de facturi.
Pasul 4: Întrucât aparatele dvs. consumă energie, valorile actualizate vor fi afișate sub Puterea și factura .
Acesta este modul în care puteți crea un contor inteligent de energie electrică, care poate fi monitorizat nu numai de oriunde din lume, ci și declanșarea e-mailului atunci când aveți un consum ridicat de energie electrică.
Verificați și toate proiectele noastre IoT.