- Potrebni materijali:
- Rad senzora struje ACS712:
- Kružni dijagram
- Šifra i objašnjenje:
- Android aplikacija za praćenje potrošnje električne energije:
Svi znamo za brojila električne energije koja se ugrađuju u svačiju kuću ili ured za mjerenje potrošnje električne energije. Napokon svakog mjeseca, mnogi od nas se brinu zbog visokog računa za struju i moramo povremeno pogledati brojilo energije. Ali što ako možemo nadzirati potrošnju električne energije s bilo kojeg mjesta na svijetu i dobiti SMS / e-poštu kada vaša potrošnja energije dosegne prag. Ovdje gradimo projekt mjerača energije zasnovan na IoT-u.
Prije smo izgradili krug mjerača energije koji vam šalje SMS o računu pomoću GSM modula. U ovom projektu izrađujemo pametno brojilo električne energije pomoću Arduina i ESP8266 Wi-Fi modula koji vam ne samo da mogu poslati SMS / e-poštu vašeg računa za električnu energiju, već također možete pratiti potrošnju energije bilo kad i bilo gdje u svijetu. Ovdje smo koristili Senzor struje ACS712 za mjerenje potrošnje energije, o tome ćemo raspraviti uskoro.
Pomoći ćemo IFTTT platformi kako bismo povezali naš Wi-Fi s obavijestima putem SMS-a / e-pošte. Također ćemo upotrijebiti aplikaciju MQTT za nadzornu ploču za Android kako bismo nadzirali svoju potrošnju energije. Pa krenimo…
Potrebni materijali:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Senzor struje
- Bilo koji AC uređaj
- Muško-ženske žice
Rad senzora struje ACS712:
Prije nego što započnemo s izradom projekta, vrlo nam je važno razumjeti rad ACS712 strujnog senzora jer je on ključna komponenta projekta. Mjerenje struje, posebno izmjenične struje, uvijek je težak zadatak zbog buke povezane s nepravilnim izolacijskim problemom itd. Ali, uz pomoć ovog modula ACS712 koji je dizajnirao Allegro stvar postalo je puno lakše.
Ovaj modul radi na principu Hall-efekta, koji je otkrio dr. Edwin Hall. Prema njegovom principu, kada se vodič koji nosi struju postavi u magnetsko polje, na njegovim se rubovima stvara napon okomit na smjerove i struje i magnetskog polja. Ne ulazimo previše duboko u koncept, već jednostavno rečeno koristimo Hall-ov senzor za mjerenje magnetskog polja oko vodiča koji nosi struju. Ovo mjerenje bit će izraženo u milivoltima koje smo nazvali naponom dvorane. Izmjereni napon dvorane proporcionalan je struji koja je prolazila kroz vodič.
Glavna prednost korištenja ACS712 strujnog senzora je u tome što može mjeriti i izmjeničnu i istosmjernu struju, a također osigurava izolaciju između opterećenja (AC / DC opterećenje) i mjerne jedinice (dio mikrokontrolera). Kao što je prikazano na slici, na modulu imamo tri iglice koje su Vcc, Vout i Ground.

2-pinski priključni blok je mjesto kroz koje treba proći strujnu žicu. Modul radi na + 5V, tako da bi se Vcc trebao napajati od 5V, a tlo bi trebalo biti povezano na masu sustava. Vout pin ima pomak napona od 2500mV, što znači da kada kroz žicu ne prolazi struja, tada će izlazni napon biti 2500mV, a kada je struja pozitivna, napon će biti veći od 2500mV, a kada struja bude negativna, napon će biti manji od 2500mV.
Koristit ćemo analogni pin Arduina za očitavanje izlaznog napona (Vout) modula, koji će biti 512 (2500mV) kada kroz žicu ne prolazi struja. Ova će se vrijednost smanjivati kako struja teče u negativnom smjeru, a povećavat će se kako će struja teći u pozitivnom smjeru. Tablica u nastavku pomoći će vam da shvatite kako izlazni napon i vrijednost ADC variraju ovisno o struji koja prolazi kroz žicu.

Te su vrijednosti izračunate na temelju podataka danih u tablici podataka ACS712. Također ih možete izračunati pomoću sljedećih formula:
Naponski izlaz (mV) = (vrijednost ADC / 1023) * 5000 struja kroz žicu (A) = (izlazni (mv) -2500) / 185
Sada, kad znamo kako ACS712 senzor radi i što bismo mogli očekivati od njega. Prijeđimo na shemu spojeva.
Ovaj smo senzor koristili za izradu kruga digitalnog ampermetra pomoću PIC mikrokontrolera i ACS712.
Kružni dijagram
Korak 1: Prijavite se na IFTTT sa svojim vjerodajnicama.
Korak 2: Na My Applets, kliknite New Applet

Korak 3: Kliknite + ovo
Korak 4: Pretražite AdaFruit i kliknite na njega.

Korak 5: Kliknite na Monitor feed na AdaFruit IO.

Korak 6: Odaberite Feed kao račun, Odnos kao ' jednako' i vrijednost praga na kojem želite e-poštu. Kliknite Stvori akciju . Koristio sam 4 kao vrijednost okidača praga.

Korak 7: Kliknite + to . Potražite G-mail, kliknite ga i Prijavite se sa svojim g-mail vjerodajnicama.

Korak 8: Kliknite si pošaljite e-poštu.

Korak 9: Napišite predmet i tijelo kako je prikazano i kliknite za stvaranje.

Korak 10: Vaš ' recept ' je spreman. Pregledajte ga i kliknite na kraj.

Sad smo završili s web integracijom. Krenimo s dijelom kodiranja..
Šifra i objašnjenje:
Koristimo serijsku komunikaciju između ESP12 i Arduina. Dakle, moramo poslati kod i za Arduino i za NodeMCU za prijenos i primanje.
Kôd za dio odašiljača, tj. Za Arduino Uno:
Kompletni Arduino kôd dan je na kraju ovog vodiča. Za trenutni senzor koristit ćemo knjižnicu koju možemo preuzeti s ove poveznice.
Ova knjižnica ima ugrađenu funkciju za izračunavanje struje. Možete napisati svoj kôd za izračunavanje struje, ali ova knjižnica ima točne algoritme za mjerenje struje.
Prvo, uključite biblioteku za trenutni senzor kao:
#include "ACS712.h"
Napravite niz za pohranu snage za njegovo slanje na NodeMCU.
char watt;
Stvorite instancu za upotrebu ACS712-30Amp na PIN A0. Promijenite prvi argument ako koristite varijantu 20Amp ili 5Amp.
Senzor ACS712 (ACS712_30A, A0);
U funkciji postavljanja definirajte brzinu prijenosa od 115200 za komunikaciju s NodeMCU. Pozovite funkciju sensor.calibrate () za kalibriranje senzora struje kako biste dobili točna očitanja.
void setup () { Serial.begin (115200); sensor.calibrate (); }
U funkciji petlje pozvat ćemo sensor.getCurrentAC (); funkcija za dobivanje trenutne vrijednosti i pohranjivanje u plutajuću varijablu I. Nakon dobivanja struje izračunajte snagu pomoću formule P = V * I. Koristimo 230 V jer je to uobičajeni standard u europskim zemljama, ako je potrebno, promijenite ga na lokalni
void loop () { plutajuće V = 230; float I = sensor.getCurrentAC (); plovak P = V * I;
Te linije pretvaraju snagu u Wh.
last_time = trenutno_ vrijeme; trenutno_ vrijeme = milis (); Wh = Wh + P * ((trenutno_ vrijeme-posljednje_ vrijeme) /3600000.0);
Sada moramo pretvoriti ovaj Wh u oblik znaka da bismo ga poslali NodeMCU, za ovaj dtostrf (); pretvorit će plovak u polje s charom, tako da se tada može lako ispisati:
dtostrf (Wh, 4, 2, vat);
Format je:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Napišite ovaj niz znakova u serijski međuspremnik pomoću Serial.write () ; funkcija. Ovo će poslati vrijednost Wh na NodeMCU.
Serial.write (watt); kašnjenje (10000); }
Šifra za čvor dijela prijemnikaMCU ESP12:
Za to nam treba AdaFruit MQTT knjižnica koju možete preuzeti s ove poveznice.
Sada otvorite Arduino IDE. Idite na primjere -> Biblioteka AdaFruit MQTT -> mqtt_esp8266

Uređivat ćemo ovaj kod prema našim AIO ključevima i Wi-Fi vjerodajnicama i dolaznim serijskim podacima iz Arduina.
Prvo smo uključili sve knjižnice za ESP12 Wi-Fi modul i AdaFruit MQTT.
#include
Definiramo SSID i lozinku za vaš Wi-Fi, s kojeg želite povezati svoj ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Ovaj odjeljak definira poslužitelj AdaFruit i port poslužitelja koji su fiksni kao „io.adafruit.com“ i „1883“.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Zamijenite ova polja svojim korisničkim imenom i AIO ključevima koje ste kopirali s web stranice AdaFruit tijekom izrade feeda.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Tada smo stvorili klasu ESP12 WiFiClient za povezivanje s MQTT poslužiteljem.
Klijent WiFiClient;
Postavite klasu MQTT klijenta unošenjem WiFi klijenta i MQTT poslužitelja i podataka za prijavu.
Adafruit_MQTT_Client mqtt (& klijent, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Postavite feed pod nazivom "Snaga" i "račun" za objavljivanje promjena.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
U funkciji postavljanja , Wi-Fi modul povezujemo s Wi-Fi pristupnom točkom.
void setup () { Serial.begin (115200); kašnjenje (10); Serial.println (F ("Demofruit MQTT demonstracija")); // Povezivanje s WiFi pristupnom točkom. Serial.println (); Serial.println (); Serial.print ("Povezivanje s"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); ... ... … }
U funkciji petlje provjerit ćemo ima li dolaznih podataka s Arduina i objaviti ih na AdaFruit IO.
void loop () { // Osigurajte da je veza s MQTT poslužiteljem živa (ovo će uspostaviti prvu // vezu i automatski će se ponovo povezati kad je veza prekinuta). Pogledajte definiciju funkcije MQTT_connect // dalje u nastavku. MQTT_connect (); int i = 0; plutajući vat1;
Ova funkcija provjerava dolazne podatke iz Arduina i pohranjuje ih u vatni niz pomoću funkcije serial.read ().
if (Serial.available ()> 0) { delay (100); // dozvoljava da se svi serijski poslani primaju zajedno dok (Serial.available () && i <5) { watt = Serial.read (); } vat = '\ 0'; }
atof () funkcija pretvara znakove u plutajuće vrijednosti i pohranit ćemo ovu plutajuću vrijednost u drugu float varijablu watt1.
vat1 = atof (vat);
Izračunajte iznos računa množenjem snage (u Wh) s energetskom tarifom i podijelite ga s 1000 da biste dobili snagu u KWh.
iznos_računa = watt1 * (energyTariff / 1000); // 1jedinica = 1kwH
Sada možemo objavljivati stvari!
Serial.print (F ("\ n Slanje napona snage")); Serial.println (vat1); Serial.print ("…");
Ovaj dio koda objavljuje vrijednosti snage u napajanju
if (! Power.publish (watt1)) { Serial.println (F ("Failed")); } else { Serial.println (F ("U redu!")); }
Ovo će objaviti račun za struju na feedu računa .
if (! bill.publish (bill_amount)) { Serial.println (F ("Failed")); } else { Serial.println (F ("U redu!")); }
Iznos našeg računa može se brzo promijeniti, ali IFTTT-u treba vremena da pokrene aplet, tako da će ovi redovi dati vremena za aktiviranje kako bismo mogli primiti prag e-pošte.
Promijenite vrijednost računa_iznosa na koji želite dobiti e-poštu. Također, promijenite postavku IFTTT AdaFruit IO.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); kašnjenje (5000); } iznos_iznosa = 6; }
Kompletni kôd za Arduino i NodeMCU ESP12 dan je na kraju ovog vodiča.
Sada prenesite kodove na obje ploče. Spojite svoj hardver kao što je prikazano na shemi kruga i otvorite io.adafruit.com. Otvorite nadzornu ploču koju ste upravo stvorili. Vidjet ćete da se račun za potrošnju energije i struju ažurira.
Kada vaš račun stigao do INR 4 onda ćete dobiti e-poštu kao što je ovaj.


Android aplikacija za praćenje potrošnje električne energije:
Android aplikaciju možete koristiti za praćenje vrijednosti. Za ovo preuzmite aplikaciju Android MQTT Nadzorna ploča iz trgovine Play ili s ove veze.
Da biste postavili vezu s io.adafruit.com, slijedite ove korake:
Korak 1: Otvorite aplikaciju i kliknite znak "+". Ispunite Client Id sve što želite. Poslužitelj i port ostaju isti kao što je prikazano na snimci zaslona. Korisničko ime i lozinku (aktivni ključ) dobit ćete s nadzorne ploče AdaFruit IO, kao što je prikazano dolje.


Aktivni ključ je vaša lozinka.

Korak 2: Odaberite Mjerač električne energije i odaberite Pretplatite se. U pretplati navedite prijateljsko ime i temu. Format teme je ' yourusername' / feeds / 'feedname' i kliknite na create.


Korak 3: Na isti način napravite pretplatu za feed računa.
Korak 4: Kako vaši uređaji troše energiju, ažurirane vrijednosti prikazat će se u odjeljku Napajanje i račun .

Na ovaj način možete stvoriti pametni mjerač električne energije, koji se može ne samo pratiti s bilo kojeg mjesta na svijetu, već i pokretati e-poštu kada imate veliku potrošnju električne energije.
Također provjerite sve naše IoT projekte.
