- Nødvendige materialer:
- Arbejde med ACS712 nuværende sensor:
- Kredsløbsdiagram
- Kode og forklaring:
- Android-app til overvågning af elforbrug:
Vi kender alle til Elektricitet energimålere, der er installeret i alles hus eller kontorer for at måle elforbruget. Endelig hver måned bliver mange af os bekymrede over den høje elregning, og vi skal se på energimåleren en gang imellem. Men hvad nu hvis vi kan overvåge vores elforbrug fra hvor som helst i verden og få en SMS / e-mail, når dit energiforbrug når op til en tærskelværdi. Her bygger vi et IoT-baseret projekt af energimåler.
Tidligere har vi bygget et energimålerkredsløb, der sender dig SMS om regningen ved hjælp af GSM-modulet. I dette projekt laver vi en Smart Electricity Energy meter ved hjælp af Arduino og ESP8266 Wi-Fi-modul, som ikke kun kan sende dig en SMS / e-mail af din elregning, men også kan du overvåge energiforbruget når som helst og hvor som helst i verden. Her har vi brugt en strømføler ACS712 til at måle energiforbruget, vi diskuterer det snart.
Vi vil tage hjælp af IFTTT- platformen til at linke vores Wi-Fi til SMS / e-mail-underretninger. Vi bruger også MQTT Dashboard Android App til at overvåge vores energiforbrug. Så lad os komme i gang….
Nødvendige materialer:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Strømssensor
- Ethvert AC-apparat
- Han-hun ledninger
Arbejde med ACS712 nuværende sensor:
Før vi begynder at opbygge projektet, er det meget vigtigt for os at forstå funktionen af ACS712 Current sensor, da den er nøglekomponenten i projektet. Måling af strøm, især vekselstrøm, er altid en hård opgave på grund af støj kombineret med forkert isoleringsproblem osv. Men med hjælp fra dette ACS712-modul, der blev konstrueret af Allegro, er det blevet meget lettere.
Dette modul fungerer på princippet om Hall-effekt, som blev opdaget af Dr. Edwin Hall. Ifølge hans princip genereres en spænding på tværs af kanterne vinkelret på retningerne for både strømmen og magnetfeltet, når en strømførende leder placeres i et magnetfelt. Lad os ikke komme for dybt ind i konceptet, men simpelthen bruger vi en hallsensor til at måle magnetfeltet omkring en strømførende leder. Denne måling vil være i form af millivolt, som vi kaldte som hall-spænding. Denne målte hall-spænding er proportional med strømmen, der strømmer gennem lederen.
Den største fordel ved at bruge ACS712 strømføler er, at den kan måle både vekselstrøm og jævnstrøm, og det giver også isolation mellem belastningen (vekselstrøm / jævnstrøm) og måleenheden (del af mikrocontroller). Som vist på billedet har vi tre ben på modulet, som er henholdsvis Vcc, Vout og Ground.
2-polet klemme er, hvor den strømførende ledning skal føres igennem. Modulet fungerer på + 5V, så Vcc'en skal drives af 5V, og jorden skal være forbundet til systemets jord. Vout-stiften har en offset spænding på 2500mV, hvilket betyder, at når der ikke strømmer strøm gennem ledningen, vil udgangsspændingen være 2500mV, og når strømmen er positiv, vil spændingen være større end 2500mV, og når strømmen er negativ, er spændingen vil være mindre end 2500mV.
Vi bruger den analoge pin fra Arduino til at læse modulets udgangsspænding (Vout), som vil være 512 (2500mV), når der ikke strømmer strøm gennem ledningen. Denne værdi reduceres, når strømmen strømmer i negativ retning og vil stige, når strømmen strømmer i positiv retning. Nedenstående tabel hjælper dig med at forstå, hvordan udgangsspændingen og ADC-værdien varierer afhængigt af strømmen, der strømmer gennem ledningen.
Disse værdier blev beregnet på baggrund af oplysningerne i databladet for ACS712. Du kan også beregne dem ved hjælp af nedenstående formler:
Vout-spænding (mV) = (ADC-værdi / 1023) * 5000 Strøm gennem ledningen (A) = (Vout (mv) -2500) / 185
Nu ved vi, hvordan ACS712-sensoren fungerer, og hvad vi kunne forvente af den. Lad os gå videre til kredsløbsdiagrammet.
Vi har brugt denne sensor til at fremstille Digital Ammeter Circuit ved hjælp af PIC Microcontroller og ACS712.
Kredsløbsdiagram
Trin 1: Log ind på IFTTT med dine legitimationsoplysninger.
Trin 2: Klik på Ny applet på mine applets
Trin 3: Klik på + dette
Trin 4: Søg efter AdaFruit, og klik på den.
Trin 5: Klik på Overvåg et feed på AdaFruit IO.
Trin 6: Vælg Feed som regning, Relationship som ' lig med' og den tærskelværdi , som du vil have en e-mail med. Klik på Opret handling . Jeg har brugt 4 som min tærskeludløsningsværdi.
Trin 7: Klik på + det . Søg efter G-mail, og klik på den, og log ind med dine g-mail-legitimationsoplysninger.
Trin 8: Klik på Send dig selv en e-mail.
Trin 9: Skriv dit emne og din krop som vist, og klik for at oprette.
Trin 10: Din ' opskrift ' er klar. Gennemgå det, og klik på afslut.
Nu er vi færdige med webintegration. Lad os gå videre med kodningsdel..
Kode og forklaring:
Vi bruger seriel kommunikation mellem ESP12 og Arduino. Så vi er nødt til at skrive kode til både Arduino og NodeMCU til transmission og modtagelse.
Kode til senderdel, dvs. til Arduino Uno:
Komplet Arduino-kode gives i slutningen af denne vejledning. Vi bruger bibliotek til aktuel sensor, som kan downloades fra dette link.
Dette bibliotek har indbygget funktion til at beregne strøm. Du kan skrive din kode for at beregne strømmen, men dette bibliotek har nøjagtige strømmålealgoritmer.
Først skal du inkludere bibliotek til den aktuelle sensor som:
# inkluderer "ACS712.h"
Lav et array til lagring af strøm til afsendelse til NodeMCU.
char watt;
Opret en instans for at bruge ACS712-30Amp ved PIN A0. Skift første argument, hvis du bruger 20Amp eller 5 Amp-variant.
ACS712-sensor (ACS712_30A, A0);
I opsætningsfunktionen skal du definere baudrate på 115200 for at kommunikere med NodeMCU. Ring til sensor.calibrate () -funktion til kalibrering af strømføler for at få nøjagtige målinger.
ugyldig opsætning () { Serial.begin (115200); sensor.kalibrer (); }
I loop- funktion kalder vi sensor.getCurrentAC (); funktion for at få den aktuelle værdi og gemme i floatvariablen I. Efter at have fået strøm, beregnes effekt ved hjælp af P = V * I formel. Vi bruger 230V, fordi det er den almindelige standard i europæiske lande. Skift til dit lokale, hvis det er nødvendigt
ugyldig sløjfe () { flyde V = 230; float I = sensor.getCurrentAC (); flyde P = V * I;
Disse linjer konverterer strøm til Wh.
sidste tid = aktuel tid; strømtid = millis (); Wh = Wh + P * ((nuværende tid - sidste tid) / 3600000.0);
Nu er vi nødt til at konvertere denne Wh til tegnform for at sende den til NodeMCU, for denne dtostrf (); konverterer en float til en char array, så den derefter let kan udskrives:
dtostrf (Wh, 4, 2, watt);
Formatet er:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Skriv dette tegnarray til seriel buffer ved hjælp af Serial.write () ; fungere. Dette sender Wh- værdi til NodeMCU.
Serial.write (watt); forsinkelse (10000); }
Kode til modtagerens del NodeMCU ESP12:
Til dette har vi brug for AdaFruit MQTT-biblioteket, som kan downloades fra dette link.
Åbn nu Arduino IDE. Gå til eksempler -> AdaFruit MQTT-bibliotek -> mqtt_esp8266
Vi redigerer denne kode i henhold til vores AIO-nøgler og Wi-Fi-legitimationsoplysninger og indgående serielle data fra Arduino.
Først inkluderede vi alle bibliotekerne til ESP12 Wi-Fi-modul og AdaFruit MQTT.
#omfatte
Vi definerer SSID og adgangskode til dit Wi-Fi, hvorfra du vil oprette forbindelse til din ESp-12e.
#definer WLAN_SSID "xxxxxxxx" #definer WLAN_PASS "xxxxxxxxxxx"
Dette afsnit definerer AdaFruit-serveren og serverporten, der er rettet som henholdsvis “io.adafruit.com” og “1883”.
#definer AIO_SERVER "io.adafruit.com" #definer AIO_SERVERPORT 1883
Udskift disse felter med dit brugernavn og AIO-nøgler, som du har kopieret fra AdaFruit-webstedet, mens du opretter feedet.
#definer AIO_USERNAME "********" #definer AIO_KEY "*****************************"
Derefter har vi oprettet en ESP12 WiFiClient-klasse til at oprette forbindelse til MQTT-serveren.
WiFiClient-klient;
Opsæt MQTT-klientklassen ved at sende WiFi-klienten og MQTT-serveren og loginoplysninger.
Adafruit_MQTT_Client mqtt (& klient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Opsæt et feed kaldet 'Power' og 'bill' til offentliggørelse til ændringer.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
I installationsfunktionen forbinder vi Wi-Fi-modul til Wi-fi-adgangspunkt.
ugyldig opsætning () { Serial.begin (115200); forsinkelse (10); Serial.println (F ("Adafruit MQTT demo")); // Opret forbindelse til WiFi-adgangspunkt. Serial.println (); Serial.println (); Serial.print ("Opretter forbindelse til"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. ... }
I loop- funktion vil vi kontrollere for indgående data fra Arduino og offentliggøre disse data til AdaFruit IO.
void loop () { // Sørg for, at forbindelsen til MQTT-serveren er i live (dette vil skabe den første // forbindelse og genoprette forbindelse automatisk, når den afbrydes). Se MQTT_connect // funktionsdefinitionen længere nedenfor. MQTT_connect (); int i = 0; flyde watt1;
Denne funktion kontrollerer for de indgående data fra Arduino og gemmer disse data i watt- array ved hjælp af serial.read () -funktionen.
hvis (Serial.available ()> 0) { delay (100); // tillader, at alle sendte serier modtages sammen, mens (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
atof () - funktion konverterer tegnene til floatværdier , og vi gemmer denne floatværdi i en anden floatvariabel watt1.
watt1 = atof (watt);
Beregn regningsbeløbet ved at gange kraften (i Wh) med energitariffen og divider den med 1000 for at få strøm i KWh.
bill_amount = watt1 * (energyTariff / 1000); // 1 enhed = 1kwH
Nu kan vi udgive ting!
Serial.print (F ("\ nSending Power val")); Serial.println (watt1); Serial.print ("…");
Dette stykke kode udgiver effektværdier til Power -feed
hvis (! Power.publish (watt1)) { Serial.println (F ("Mislykket")); } andet { Serial.println (F ("OK!")); }
Dette vil offentliggøre elregningen til regningsfeeden .
hvis (! bill.publish (bill_amount)) { Serial.println (F ("Mislykket")); } andet { Serial.println (F ("OK!")); }
Vores faktureringsbeløb kan ændre sig hurtigt, men IFTTT tager tid at udløse appleten, så disse linjer giver tid til at udløse, så vi kan modtage tærskel-e-mail.
Skift den bill_mount- værdi, som du vil modtage e-mail på. Skift også IFTTT AdaFruit IO-opsætningen.
hvis (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_mount); forsinkelse (5000); } bill_mount = 6; }
Komplet kode til Arduino og NodeMCU ESP12 findes i slutningen af denne vejledning.
Upload nu koderne til begge kort. Tilslut din hardware som vist i kredsløbsdiagrammet og åbn io.adafruit.com. Åbn det dashboard, du lige har oprettet. Du vil se strømforbruget og elregningen opdateres.
Når din regning nåede op til INR 4, får du en e-mail som denne.
Android-app til overvågning af elforbrug:
Du kan bruge Android-appen til at overvåge værdierne. Til denne download downloader MQTT Dashboard android-appen fra Play-butikken eller fra dette link.
Følg disse trin for at konfigurere forbindelsen til io.adafruit.com:
Trin 1: Åbn appen, og klik på "+" -tegnet. Udfyld klient-id hvad du vil. Server og port forbliver de samme som vist på skærmbilledet. Du får brugernavn og adgangskode (Aktiv nøgle) fra AdaFruit IO-dashboardet som vist nedenfor.
Aktiv nøgle er din adgangskode.
Trin 2: Vælg elmåler, og vælg Abonner. Angiv venligt navn og emne i abonnementet. Emneformat er 'dit brugernavn' / feeds / 'feedname' og klik på Opret.
Trin 3: På samme måde skal du oprette et abonnement på regningsfeed.
Trin 4: Da dine apparater bruger energi, vises opdaterede værdier under strøm og regning .
Sådan kan du oprette et Smart Electricity Energy Meter, som ikke kun kan overvåges overalt i verden, men også udløse e-mail, når du har et højt elforbrug.
Tjek også vores alle IoT-projekter.