- Potrebni materiali:
- Delovanje tokovnega senzorja ACS712:
- Shema vezja
- Koda in razlaga:
- Android aplikacija za spremljanje porabe električne energije:
Vsi vemo o števcih električne energije, ki so nameščeni v hiši ali pisarni za merjenje porabe električne energije. Na koncu vsakega meseca nas marsikoga zaskrbi visok račun za elektriko in enkrat na enkrat moramo pogledati merilnik energije. Kaj pa, če lahko spremljamo porabo električne energije od koder koli na svetu in dobimo SMS / e-pošto, ko poraba energije doseže mejno vrednost. Tu gradimo projekt merilnika energije, ki temelji na IoT.
Prej smo zgradili vezje merilnika energije, ki vam prek GSM modula pošlje SMS o računu. V tem projektu izdelujemo pametni števec električne energije z uporabo modula Wi-Fi Arduino in ESP8266, ki vam ne more samo poslati SMS / e-pošto vašega računa za elektriko, temveč lahko tudi kadar koli in od koder koli spremljate porabo energije. Tu smo za merjenje porabe energije uporabili trenutni senzor ACS712, o katerem bomo kmalu razpravljali.
Uporabili bomo pomoč platforme IFTTT za povezavo našega Wi-Fi-ja z obvestili SMS / e-pošta. Za nadzor porabe energije bomo uporabili tudi aplikacijo MQTT Dashboard Android. Začnimo torej…
Potrebni materiali:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp trenutni senzor
- Vsak AC Naprava
- Moško-ženske žice
Delovanje tokovnega senzorja ACS712:
Preden začnemo graditi projekt, je za nas zelo pomembno, da razumemo delovanje tokovnega senzorja ACS712, saj je ključna komponenta projekta. Merjenje toka, zlasti izmeničnega toka, je vedno težka naloga zaradi hrupa, ki je povezan z njim, zaradi neustrezne izolacijske težave itd. Toda s pomočjo tega modula ACS712, ki ga je zasnoval Allegro, je postalo veliko lažje.
Ta modul deluje po principu Hallovega učinka, ki ga je odkril dr. Edwin Hall. Po njegovem principu, ko je tokovni vodnik nameščen v magnetno polje, se na njegovih robovih ustvari napetost, pravokotna na smeri toka in magnetnega polja. Ne poglabljajmo se globoko v koncept, ampak preprosto povedano uporabljamo Hallov senzor za merjenje magnetnega polja okoli tokovnega vodnika. Ta meritev bo izražena v milivoltih, ki smo jih imenovali napetost dvorane. Ta izmerjena napetost dvorane je sorazmerna s tokom, ki je tekel skozi vodnik.
Glavna prednost uporabe tokovnega senzorja ACS712 je v tem, da lahko meri tako izmenični kot enosmerni tok, hkrati pa zagotavlja tudi izolacijo med obremenitvijo (AC / DC obremenitev) in merilno enoto (del mikrokrmilnika). Kot je prikazano na sliki, imamo na modulu tri zatiče, in sicer Vcc, Vout in Ground.
2-polni priključni blok je kraj, kjer je treba voditi tokovno žico. Modul deluje na + 5V, zato mora biti Vcc napajan s 5V, ozemljitev pa mora biti priključena na ozemljitev sistema. Voutov zatič ima odmično napetost 2500mV, kar pomeni, da ko skozi žico ne teče tok, bo izhodna napetost 2500mV in če je tok, ki teče pozitivno, napetost večja od 2500mV in ko je tok, ki teče, negativen, napetost bo manjša od 2500mV.
Z analognim zatičem Arduino bomo odčitavali izhodno napetost (Vout) modula, ki bo 512 (2500mV), če skozi žico ne teče tok. Ta vrednost se bo zmanjšala, ko bo tok tekel v negativni smeri, in se bo povečala, ko bo tok tekel v pozitivno smer. Spodnja tabela vam bo pomagala razumeti, kako se izhodna napetost in vrednost ADC spreminja glede na tok, ki teče skozi žico.
Te vrednosti so bile izračunane na podlagi informacij iz podatkovnega lista ACS712. Izračunate jih lahko tudi po spodnjih formulah:
Vout napetost (mV) = (vrednost ADC / 1023) * 5000 tok skozi žico (A) = (Vout (mv) -2500) / 185
Zdaj, ko vemo, kako deluje senzor ACS712 in kaj lahko pričakujemo od njega. Pojdimo na diagram vezja.
Ta senzor smo uporabili za izdelavo vezja digitalnega ampermetra z uporabo mikrokrmilnika PIC in ACS712.
Shema vezja
1. korak: Prijavite se v IFTTT s svojimi poverilnicami.
2. korak: V mojih apletih kliknite Nov programček
3. korak: kliknite + to
4. korak: Poiščite AdaFruit in kliknite nanj.
5. korak: Kliknite Spremljanje vira na AdaFruit IO.
6. korak: Izberite Feed kot račun, razmerje kot ' enako' in vrednost praga, pri katerem želite e-pošto. Kliknite Ustvari dejanje . Kot prag sprožilne vrednosti sem uporabil 4.
7. korak: kliknite + to . Poiščite G-pošto, kliknite nanjo in se prijavite s svojimi g-poštnimi poverilnicami.
8. korak: Kliknite si pošljite e-pošto.
9. korak: Napišite motiv in telo, kot je prikazano, in kliknite, da ustvarite.
10. korak: Vaš ' recept ' je pripravljen. Preglejte ga in kliknite na Finish.
Zdaj smo končali s spletno integracijo. Pojdimo k delu kodiranja..
Koda in razlaga:
Uporabljamo serijsko komunikacijo med ESP12 in Arduino. Torej, za oddajanje in sprejemanje moramo napisati kodo tako za Arduino kot za NodeMCU.
Koda za del oddajnika, tj. Za Arduino Uno:
Popolna koda Arduino je podana na koncu te vadnice. Za trenutni senzor bomo uporabili knjižnico, ki jo lahko prenesete s te povezave.
Ta knjižnica ima vgrajeno funkcijo za izračun toka. Za izračun toka lahko napišete kodo, vendar ima ta knjižnica natančne algoritme za merjenje toka.
Najprej vključite knjižnico za trenutni senzor kot:
#include "ACS712.h"
Naredite matriko za shranjevanje energije za pošiljanje na NodeMCU.
char vat;
Ustvarite primerek za uporabo ACS712-30Amp na PIN A0. Spremenite prvi argument, če uporabljate različico 20 Amp ali 5 Amp.
Senzor ACS712 (ACS712_30A, A0);
V nastavitveni funkciji določite hitrost prenosa 115200 za komunikacijo z NodeMCU. Za natančne odčitke pokličite funkcijo sensor.calibrate () za umerjanje tokovnega senzorja.
void setup () { Serial.begin (115200); sensor.calibrate (); }
V funkciji zanke bomo poklicali sensor.getCurrentAC (); funkcija za pridobitev trenutne vrednosti in shranjevanje v spremenljivko float I. Po prejemu toka izračunamo moč s formulo P = V * I. Uporabljamo 230 V, ker je to običajni standard v evropskih državah. Če je potrebno, zamenjajte lokalno
void loop () { float V = 230; float I = sensor.getCurrentAC (); plovec P = V * I;
Te črte pretvarjajo moč v Wh.
zadnji_čas = trenutni_ čas; trenutni_ čas = milis (); Wh = Wh + P * ((trenutni_čas-zadnji_čas) /3600000.0);
Zdaj moramo pretvoriti to Wh v obliko znakov, da jo pošljemo na NodeMCU, za to dtostrf (); bo pretvoril plovec v matriko char, da ga bo nato mogoče enostavno natisniti:
dtostrf (Wh, 4, 2, vati);
Oblika je:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Zapiši to polje znakov v zaporedni vmesnik z uporabo Serial.write () ; funkcijo. S tem bo vrednost Wh poslana na NodeMCU.
Serial.write (watt); zamuda (10000); }
Koda za vozlišče dela sprejemnika MCU ESP12:
Za to potrebujemo knjižnico AdaFruit MQTT, ki jo lahko prenesete s te povezave.
Zdaj odprite Arduino IDE. Pojdite na primere -> knjižnica AdaFruit MQTT -> mqtt_esp8266
To kodo bomo urejali v skladu z našimi ključi AIO in poverilnicami Wi-Fi ter dohodnimi serijskimi podatki iz Arduina.
Najprej smo vključili vse knjižnice za modul Wi-Fi ESP12 in AdaFruit MQTT.
#include
Določimo SSID in geslo za vaš Wi-Fi, iz katerega želite povezati svoj ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Ta razdelek opredeljuje strežnik AdaFruit in vrata strežnika, ki sta določena kot »io.adafruit.com« oziroma »1883«.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Zamenjajte ta polja z uporabniškim imenom in AIO ključi, ki ste jih kopirali s spletnega mesta AdaFruit med izdelavo vira.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Nato smo ustvarili razred ESP12 WiFiClient za povezavo s strežnikom MQTT.
Odjemalec WiFiClient;
Nastavite razred odjemalca MQTT tako, da vnesete odjemalca WiFi in strežnik MQTT ter podatke za prijavo.
Adafruit_MQTT_Client mqtt (& odjemalec, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Nastavite vir z imenom 'Power' in 'bill' za objavo sprememb.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ viri / račun");
V nastavitveni funkciji modul Wi-Fi povežemo z dostopno točko Wi-Fi.
void setup () { Serial.begin (115200); zamuda (10); Serial.println (F ("Demofruit MQTT demo")); // Povežite se z dostopno točko WiFi. Serial.println (); Serial.println (); Serial.print ("Povezovanje z"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); ... ... … }
V funkciji zanke bomo preverili, ali prihajajo podatki iz Arduina in jih objavili v AdaFruit IO.
void loop () { // Prepričajte se, da je povezava s strežnikom MQTT živa (s tem bo vzpostavljena prva // povezava in se bo samodejno znova povezala, ko bo prekinjena). Glejte definicijo funkcije MQTT_connect // v nadaljevanju. MQTT_connect (); int i = 0; plavajoči vat1;
Ta funkcija preveri dohodne podatke iz Arduina in jih shrani v vatno matriko s funkcijo serial.read ().
if (Serial.available ()> 0) { zamuda (100); // omogoča prejemanje vseh poslanih serijskih sporočil, medtem ko (Serial.available () && i <5) { watt = Serial.read (); } vat = '\ 0'; }
atof () funkcija pretvori znake v float vrednosti in to float vrednost bomo shranili v drugo spremenljivko float watt1.
watt1 = atof (watt);
Izračunajte znesek računa tako, da pomnožite moč (v Wh) s tarifo energije in ga delite s 1000, da dobite moč v KWh.
znesek_računa = watt1 * (energyTariff / 1000); // 1 enota = 1kwH
Zdaj lahko objavljamo stvari!
Serial.print (F ("\ nPošiljanje napajalnega ventila")); Serial.println (watt1); Serial.print ("…");
Ta del kode objavlja vrednosti moči v napajalniku
if (! Power.publish (watt1)) { Serial.println (F ("Failed")); } else { Serial.println (F ("V redu!")); }
To bo objavila račun za električno energijo za bill krmo.
if (! bill.publish (bill_amount)) { Serial.println (F ("Failed")); } else { Serial.println (F ("V redu!")); }
Znesek našega računa se lahko hitro spremeni, vendar IFTTT potrebuje čas, da sproži programček, zato bodo te vrstice dale čas za sprožitev, da bomo lahko prejeli prag e-pošte.
Spremenite vrednost bill_amount, na katero želite prejemati e-pošto. Prav tako spremenite nastavitev IFTTT AdaFruit IO.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); zamuda (5000); } znesek_računa = 6; }
Popolna koda za Arduino in NodeMCU ESP12 je podana na koncu te vadnice.
Zdaj naložite kode na obe plošči. Povežite svojo strojno opremo, kot je prikazano v vezju in odprite io.adafruit.com. Odprite nadzorno ploščo, ki ste jo pravkar ustvarili. Videli boste, da se račun za porabo energije in elektriko posodablja.
Ko vaš račun dosegel na INR 4 , potem boste dobili e-poštno sporočilo, kot je ta.
Android aplikacija za spremljanje porabe električne energije:
Za spremljanje vrednosti lahko uporabite aplikacijo Android. Za to naložite aplikacijo Android MQTT Dashboard iz trgovine Play ali s te povezave.
Če želite nastaviti povezavo z io.adafruit.com, sledite tem korakom:
1. korak: Odprite aplikacijo in kliknite znak "+". Izpolnite Id stranke, kar koli želite. Strežnik in vrata ostaneta enaka, kot je prikazano na posnetku zaslona. Uporabniško ime in geslo (aktivni ključ) boste dobili na nadzorni plošči AdaFruit IO, kot je prikazano spodaj.
Aktivni ključ je vaše geslo.
2. korak: Izberite Merilnik električne energije in izberite Naročite se. V naročnini navedite prijazno ime in temo. Oblika teme je " vaše uporabniško ime" / viri / "ime feeda" in kliknite na ustvari.
3. korak: Na enak način se naročite na podajanje računov.
4. korak: Ko vaše naprave porabljajo energijo, bodo posodobljene vrednosti prikazane v razdelku Napajanje in obračun .
Tako lahko ustvarite pametni merilnik električne energije, ki ga lahko ne samo spremljate od koder koli na svetu, ampak tudi sprožite e-pošto, ko imate veliko porabo električne energije.
Preverite tudi vse naše IoT projekte.