- Material som krävs:
- Arbeta med ACS712 nuvarande sensor:
- Kretsschema
- Kod och förklaring:
- Android-app för övervakning av elförbrukning:
Vi vet alla om elenergimätare som installeras i allas hus eller kontor för att mäta elförbrukningen. Slutligen varje månad blir många av oss oroliga för den höga elräkningen och vi måste titta på energimätaren en gång i taget. Men tänk om vi kan övervaka vår elanvändning var som helst i världen och få ett SMS / e-post när din energiförbrukning når ett tröskelvärde. Här bygger vi ett IoT-baserat projekt av energimätare.
Tidigare har vi byggt en energimätarkrets som skickar dig SMS om fakturan med hjälp av GSM-modulen. I det här projektet skapar vi en Smart Electricity Energy-mätare med Arduino och ESP8266 Wi-Fi-modul som inte bara kan skicka ett SMS / e-postmeddelande till din elräkning, utan också kan du övervaka energianvändningen när som helst och var som helst i världen. Här har vi använt en strömsensor ACS712 för att mäta energiförbrukningen, vi kommer att diskutera om det snart.
Vi kommer att ta hjälp av IFTTT- plattformen för att länka vårt Wi-Fi till SMS / e-postmeddelanden. Vi kommer också att använda MQTT Dashboard Android App för att övervaka vår energianvändning. Så Låt oss komma igång….
Material som krävs:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Strömgivare
- Alla AC-apparater
- Man-kvinnliga ledningar
Arbeta med ACS712 nuvarande sensor:
Innan vi börjar bygga projektet är det mycket viktigt för oss att förstå hur ACS712-strömgivaren fungerar eftersom den är den viktigaste komponenten i projektet. Att mäta ström, särskilt växelström, är alltid en tuff uppgift på grund av bruset i kombination med felaktig isoleringsproblem etc. Men med hjälp av denna ACS712-modul som konstruerats av Allegro har det blivit mycket enklare.
Denna modul fungerar på principen om Hall-effekt, som upptäcktes av Dr. Edwin Hall. Enligt en princip, när en strömbärande ledare placeras i ett magnetfält, genereras en spänning över dess kanter vinkelrätt mot riktningarna för både strömmen och magnetfältet. Låt oss inte komma för djupt in i konceptet, men helt enkelt använder vi en hallsensor för att mäta magnetfältet runt en strömförande ledare. Denna mätning kommer att vara i termer av millivolt som vi kallade för hallspänning. Denna uppmätta hallspänning är proportionell mot strömmen som flödade genom ledaren.
Den största fördelen med att använda ACS712 strömgivare är att den kan mäta både växelström och likström och det ger också isolering mellan belastningen (växelström / likström) och mätenheten (mikrokontroller-del). Som visas på bilden har vi tre stift på modulen som är Vcc, Vout respektive Ground.
Det 2-poliga kopplingsplinten är där den strömförande kabeln ska föras igenom. Modulen fungerar på + 5V så att Vcc ska drivas med 5V och marken ska anslutas till systemets jord. Vout-stiftet har en offset-spänning på 2500mV, vilket betyder att när ingen ström strömmar genom ledningen kommer utspänningen att vara 2500mV och när strömmen är positiv är spänningen större än 2500mV och när strömmen är negativ är spänningen blir mindre än 2500mV.
Vi kommer att använda den analoga stiftet från Arduino för att läsa utgångsspänningen (Vout) på modulen, som kommer att vara 512 (2500mV) när ingen ström strömmar genom ledningen. Detta värde kommer att minska när strömmen flyter i negativ riktning och kommer att öka när strömmen flyter i positiv riktning. Tabellen nedan hjälper dig att förstå hur utspänningen och ADC-värdet varierar baserat på strömmen som strömmar genom ledningen.
Dessa värden beräknades baserat på informationen i databladet för ACS712. Du kan också beräkna dem med formlerna nedan:
Voutspänning (mV) = (ADC-värde / 1023) * 5000 Ström genom ledningen (A) = (Vout (mv) -2500) / 185
Nu när vi vet hur ACS712-sensorn fungerar och vad vi kan förvänta oss av den. Låt oss gå vidare till kretsschemat.
Vi har använt den här sensorn för att skapa en digital amperemätarkrets med PIC Microcontroller och ACS712.
Kretsschema
Steg 1: Logga in på IFTTT med dina referenser.
Steg 2: Klicka på Ny applet på mina miniprogram
Steg 3: Klicka på + detta
Steg 4: Sök i AdaFruit och klicka på det.
Steg 5: Klicka på Övervaka ett flöde på AdaFruit IO.
Steg 6: Välj Feed som räkningen, Relation som ' lika med' och tröskelvärdet där du vill ha en e-post. Klicka på Skapa åtgärd . Jag har använt 4 som mitt tröskelvärde.
Steg 7: Klicka på + det . Sök efter G-post och klicka på den och logga in med dina g-postuppgifter.
Steg 8: Klicka på skicka ett e-postmeddelande till dig själv.
Steg 9: Skriv ditt ämne och din kropp som visas och klicka för att skapa.
Steg 10: Ditt " recept " är klart. Granska den och klicka på Slutför.
Nu är vi klara med webbintegration. Låt oss gå vidare med kodningsdelen..
Kod och förklaring:
Vi använder seriell kommunikation mellan ESP12 och Arduino. Så vi måste skriva kod för både Arduino och NodeMCU för sändning och mottagning.
Kod för sändardel, dvs. för Arduino Uno:
Komplett Arduino-kod ges i slutet av denna handledning. Vi kommer att använda biblioteket för aktuell sensor som kan laddas ner från den här länken.
Detta bibliotek har inbyggd funktion för att beräkna ström. Du kan skriva din kod för att beräkna strömmen men det här biblioteket har exakta strömmätningsalgoritmer.
Inkludera först biblioteket för aktuell sensor som:
#include "ACS712.h"
Skapa en matris för att lagra ström för att skicka den till NodeMCU.
röding watt;
Skapa en instans för att använda ACS712-30Amp vid PIN A0. Ändra första argumentet om du använder 20Amp eller 5 Amp-variant.
ACS712-sensor (ACS712_30A, A0);
I installationsfunktionen , definiera överföringshastighet 115200 för att kommunicera med NodeMCU. Ring sensor.calibrate () -funktionen för att kalibrera strömgivaren för att få exakta avläsningar.
ogiltig installation () { Serial.begin (115200); sensor.calibrate (); }
I loopfunktion kommer vi att kalla sensor.getCurrentAC (); funktion för att få aktuellt värde och lagra i flottörvariabeln I. Efter att ha fått ström beräknar du effekten med P = V * I formel. Vi använder 230V eftersom det är den vanliga standarden i europeiska länder, byt till din lokala, om det behövs
tomrumsslinga () { float V = 230; float I = sensor.getCurrentAC (); flottör P = V * I;
Dessa linjer omvandlar kraft till Wh.
last_time = aktuell tid; current_time = millis (); Wh = Wh + P * ((aktuell tid - sista tid) / 3600000.0);
Nu måste vi konvertera denna Wh till karaktärsform för att skicka den till NodeMCU, för denna dtostrf (); konverterar en flottör till en char-array så att den sedan kan skrivas ut enkelt:
dtostrf (Wh, 4, 2, watt);
Formatet är:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Skriv denna karaktärsuppsättning till seriell buffert med Serial.write () ; fungera. Detta skickar Wh- värde till NodeMCU.
Serial.write (watt); fördröjning (10000); }
Kod för mottagardelsnodMCU ESP12:
För detta behöver vi AdaFruit MQTT-biblioteket som kan laddas ner från den här länken.
Öppna nu Arduino IDE. Gå till exempel -> AdaFruit MQTT-bibliotek -> mqtt_esp8266
Vi kommer att redigera den här koden enligt våra AIO-nycklar och Wi-Fi-referenser och inkommande seriell data från Arduino.
Först inkluderade vi alla bibliotek för ESP12 Wi-Fi-modul och AdaFruit MQTT.
#omfatta
Vi definierar SSID och lösenord för ditt Wi-Fi, från vilket du vill ansluta din ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Detta avsnitt definierar AdaFruit-servern och serverporten som är fixerade som “io.adafruit.com” respektive “1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Ersätt dessa fält med ditt användarnamn och AIO-nycklar som du har kopierat från AdaFruit-webbplatsen när du skapade flödet.
#define AIO_USERNAME "********" #define AIO_KEY "*****************************"
Sedan har vi skapat en ESP12 WiFiClient-klass för att ansluta till MQTT-servern.
WiFiClient-klient;
Ställ in MQTT-klientklassen genom att skicka in WiFi-klienten och MQTT-servern och inloggningsinformation.
Adafruit_MQTT_Client mqtt (& klient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Ställ in ett flöde som heter 'Power' och 'bill' för publicering till ändringar.
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 ansluter vi Wi-Fi-modulen till Wi-Fi-åtkomstpunkten.
ogiltig installation () { Serial.begin (115200); fördröjning (10); Serial.println (F ("Adafruit MQTT demo")); // Anslut till WiFi-åtkomstpunkt. Serial.println (); Serial.println (); Serial.print ("Ansluter till"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. ... }
I loop- funktion kommer vi att söka efter inkommande data från Arduino och publicera dessa data till AdaFruit IO.
void loop () { // Se till att anslutningen till MQTT-servern är vid liv (detta gör den första // anslutningen och återansluts automatiskt när den kopplas bort). Se MQTT_connect // funktionsdefinitionen nedan. MQTT_connect (); int i = 0; flottör watt1;
Denna funktion söker efter inkommande data från Arduino och lagrar dessa data i watt array med hjälp av serial.read () -funktionen.
om (Serial.available ()> 0) { delay (100); // tillåter att all serie som skickas tas emot tillsammans medan (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
atof () -funktionen konverterar tecknen till flottörvärden och vi lagrar detta flottörvärde i en annan flottörvariabel watt1.
watt1 = atof (watt);
Beräkna räkningsbeloppet genom att multiplicera effekten (i Wh) med energitaxan och dela den med 1000 för att göra effekt i KWh.
bill_amount = watt1 * (energyTariff / 1000); // 1 enhet = 1kwH
Nu kan vi publicera saker!
Serial.print (F ("\ nSändande effektval")); Serial.println (watt1); Serial.print ("…");
Den här koden publicerar effektvärden i Power- feed
om (! Power.publish (watt1)) { Serial.println (F ("Misslyckades")); } annat { Serial.println (F ("OK!")); }
Detta kommer att publicera elräkningen i fakturaflödet .
if (! bill.publish (bill_amount)) { Serial.println (F ("Misslyckades")); } annat { Serial.println (F ("OK!")); }
Vårt faktureringsbelopp kan ändras snabbt men IFTTT tar tid att utlösa appleten så att dessa rader ger tid för utlösning så att vi kan få tröskel-e-post.
Ändra det beloppsbelopp som du vill få e-post på. Ändra också inställningen för IFTTT AdaFruit IO.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_mount); fördröjning (5000); } fakturamängd = 6; }
Komplett kod för Arduino och NodeMCU ESP12 ges i slutet av denna handledning.
Ladda nu upp koder till båda brädorna. Anslut din hårdvara som visas i kretsschemat och öppna io.adafruit.com. Öppna instrumentpanelen du just skapade. Du ser att elförbrukningen och elräkningen uppdateras.
När din faktura nådde till INR 4 då får du ett e-postmeddelande som denna.
Android-app för övervakning av elförbrukning:
Du kan använda Android-appen för att övervaka värdena. Ladda ner MQTT Dashboard android-appen från Play Store eller från den här länken.
Följ dessa steg för att ställa in anslutningen till io.adafruit.com:
Steg 1: Öppna appen och klicka på "+" -tecknet. Fyll i klient-ID vad du vill. Server och port förblir desamma som visas på skärmdumpen. Du får användarnamn och lösenord (aktiv nyckel) från AdaFruit IO-instrumentpanelen som visas nedan.
Active Key är ditt lösenord.
Steg 2: Välj elmätare och välj Prenumerera. I prenumerationen, ge vänligt namn och ämne. Ämnesformatet är ' ditt användarnamn' / feeds / 'feedname' och klicka på skapa.
Steg 3: På samma sätt prenumerera på fakturaflöde.
Steg 4: När dina apparater förbrukar energi visas uppdaterade värden under Power and Bill .
Så här kan du skapa en Smart Electric Energy Meter, som inte bara kan övervakas var som helst i världen utan också utlösa e-post när du har hög elförbrukning.
Kontrollera också alla våra IoT-projekt.