- Vereiste materialen:
- Werking van ACS712 stroomsensor:
- Schakelschema
- Code en uitleg:
- Android-app voor het controleren van het elektriciteitsverbruik:
We kennen allemaal de elektriciteitsmeters die in ieders huis of kantoor worden geïnstalleerd om het elektriciteitsverbruik te meten. Elke maand maken velen van ons zich zorgen over de hoge elektriciteitsrekening en moeten we af en toe naar de energiemeter kijken. Maar wat als we ons elektriciteitsverbruik overal ter wereld kunnen volgen en een sms / e-mail kunnen ontvangen wanneer uw energieverbruik een drempelwaarde bereikt? Hier bouwen we een op IoT gebaseerd project van energiemeter.
Eerder hebben we een Energy Meter-circuit gebouwd dat u via een GSM-module een sms over de factuur stuurt. In dit project maken we een Smart Electricity Energy-meter met behulp van Arduino en ESP8266 Wi-Fi-module die u niet alleen een sms / e-mail van uw elektriciteitsrekening kan sturen, maar u ook het energieverbruik altijd en overal ter wereld kunt volgen. Hier hebben we een stroomsensor ACS712 gebruikt om het energieverbruik te meten, we zullen er binnenkort over praten.
We zullen hulp gebruiken van het IFTTT- platform om onze wifi te koppelen aan sms- / e-mailmeldingen. We zullen ook de MQTT Dashboard Android-app gebruiken om ons energieverbruik te volgen. Dus laten we beginnen….
Vereiste materialen:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Stroomsensor
- Elk AC-apparaat
- Man-vrouw draden
Werking van ACS712 stroomsensor:
Voordat we beginnen met de bouw van het project, is het erg belangrijk dat we de werking van de ACS712 stroomsensor begrijpen, aangezien dit het belangrijkste onderdeel van het project is. Het meten van stroom, met name wisselstroom, is altijd een zware taak vanwege de ruis die ermee gepaard gaat, een onjuist isolatieprobleem enz. Maar met de hulp van deze ACS712-module die door Allegro is ontwikkeld, is het een stuk eenvoudiger geworden.
Deze module werkt volgens het principe van Hall-effect, dat werd ontdekt door Dr. Edwin Hall. Volgens zijn principe wordt, wanneer een stroomvoerende geleider in een magnetisch veld wordt geplaatst, een spanning opgewekt over zijn randen loodrecht op de richtingen van zowel het stroom- als het magnetische veld. Laten we niet te diep op het concept ingaan, maar simpel gezegd gebruiken we een Hall-sensor om het magnetische veld rond een stroomvoerende geleider te meten. Deze meting zal in millivolt zijn, die we de hall-spanning noemden. Deze gemeten Hall-spanning is evenredig met de stroom die door de geleider vloeide.
Het grote voordeel van het gebruik van de ACS712 stroomsensor is dat deze zowel AC- als DC-stroom kan meten en ook isolatie biedt tussen de belasting (AC / DC-belasting) en de meeteenheid (microcontroller-onderdeel). Zoals op de afbeelding te zien is, hebben we drie pinnen op de module die respectievelijk Vcc, Vout en Ground zijn.
Het 2-pins aansluitblok is waar de stroomvoerende draad doorheen moet. De module werkt op + 5V, dus de Vcc moet worden gevoed door 5V en de aarde moet worden verbonden met de aarde van het systeem. De Vout-pin heeft een offsetspanning van 2500mV, wat betekent dat wanneer er geen stroom door de draad vloeit, de uitgangsspanning 2500mV zal zijn en wanneer de stroom positief is, zal de spanning groter zijn dan 2500mV en wanneer de stroom negatief is, zal de spanning zal minder zijn dan 2500mV.
We zullen de analoge pin van Arduino gebruiken om de uitgangsspanning (Vout) van de module te lezen, die 512 (2500mV) zal zijn als er geen stroom door de draad loopt. Deze waarde neemt af naarmate de stroom in negatieve richting vloeit en neemt toe naarmate de stroom in positieve richting vloeit. De onderstaande tabel helpt u te begrijpen hoe de uitgangsspanning en ADC-waarde variëren op basis van de stroom die door de draad vloeit.
Deze waarden zijn berekend op basis van de informatie in de Datasheet van ACS712. U kunt ze ook berekenen met behulp van de onderstaande formules:
Vout-spanning (mV) = (ADC-waarde / 1023) * 5000 Stroom door de draad (A) = (Vout (mv) -2500) / 185
Nu we weten hoe de ACS712-sensor werkt en wat we ervan kunnen verwachten. Laten we verder gaan met het schakelschema.
We hebben deze sensor gebruikt om een digitaal ampèremetercircuit te maken met behulp van PIC Microcontroller en ACS712.
Schakelschema
Stap 1: Log in op IFTTT met uw inloggegevens.
Stap 2: Klik in Mijn applets op Nieuwe applet
Stap 3: Klik op + this
Stap 4: Zoek AdaFruit en klik erop.
Stap 5: Klik op Monitor a feed op AdaFruit IO.
Stap 6: Kies Feed als factuur, Relationship als ' gelijk aan' en de drempel waarde in waarop u een e-mail. Klik op Actie maken . Ik heb 4 gebruikt als mijn drempelwaarde.
Stap 7: Klik op + dat . Zoek naar G-mail en klik erop en log in met uw g-mailgegevens.
Stap 8: Klik op jezelf een e-mail sturen.
Stap 9: Schrijf uw onderwerp en lichaam zoals weergegeven en klik om te maken.
Stap 10: Uw ' recept ' is klaar. Bekijk het en klik op voltooien.
Nu zijn we klaar met webintegratie. Laten we verder gaan met coderen.
Code en uitleg:
We gebruiken seriële communicatie tussen ESP12 en Arduino. We moeten dus code schrijven voor zowel Arduino als NodeMCU voor verzenden en ontvangen.
Code voor zenderdeel, dwz voor Arduino Uno:
De volledige Arduino-code wordt aan het einde van deze tutorial gegeven. We zullen de bibliotheek voor de huidige sensor gebruiken die via deze link kan worden gedownload.
Deze bibliotheek heeft een ingebouwde functie om de stroom te berekenen. U kunt uw code schrijven om de stroom te berekenen, maar deze bibliotheek heeft nauwkeurige stroommeetalgoritmen.
Voeg eerst een bibliotheek voor de huidige sensor toe als:
#inclusief "ACS712.h"
Maak een array om energie op te slaan en naar NodeMCU te sturen.
char watt;
Maak een instantie om ACS712-30Amp te gebruiken op PIN A0. Wijzig het eerste argument als u een 20Amp- of 5 Amp-variant gebruikt.
ACS712-sensor (ACS712_30A, A0);
Definieer in de instellingsfunctie de baudrate van 115200 om te communiceren met NodeMCU. Roep de functie sensor.calibrate () op om de huidige sensor te kalibreren om nauwkeurige metingen te krijgen.
ongeldige setup () { Serial.begin (115200); sensor.calibrate (); }
In de loop- functie noemen we sensor.getCurrentAC (); functie om de huidige waarde op te halen en op te slaan in de float-variabele I. Bereken na het verkrijgen van stroom het vermogen met de formule P = V * I. We gebruiken 230V omdat dit de algemene norm is in Europese landen. Wijzig indien nodig naar uw lokale
leegte lus () { float V = 230; zweven I = sensor.getCurrentAC (); zweven P = V * I;
Deze lijnen zetten vermogen om in Wh.
last_time = huidige_tijd; current_time = millis (); Wh = Wh + P * ((huidige_tijd -last_tijd) /3600000.0);
Nu moeten we deze Wh in tekenvorm omzetten om het naar NodeMCU te sturen, voor deze dtostrf (); converteert een float naar een char-array, zodat het vervolgens gemakkelijk kan worden afgedrukt:
dtostrf (Wh, 4, 2, watt);
Het formaat is:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Schrijf deze karakterreeks naar seriële buffer met Serial.write () ; functie. Hiermee wordt de Wh- waarde naar NodeMCU gestuurd.
Serial.write (watt); vertraging (10000); }
Code voor ontvangeronderdeel NodeMCU ESP12:
Hiervoor hebben we de AdaFruit MQTT-bibliotheek nodig die via deze link kan worden gedownload.
Open nu Arduino IDE. Ga naar voorbeelden -> AdaFruit MQTT-bibliotheek -> mqtt_esp8266
We zullen deze code bewerken volgens onze AIO-sleutels en Wi-Fi-inloggegevens en inkomende seriële gegevens van de Arduino.
Ten eerste hebben we alle bibliotheken voor ESP12 Wi-Fi Module en AdaFruit MQTT opgenomen.
# omvatten
We definiëren de SSID en het wachtwoord voor uw Wi-Fi, waarmee u uw ESp-12e wilt verbinden.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Deze sectie definieert de AdaFruit-server en serverpoort die zijn vastgesteld op respectievelijk “io.adafruit.com” en “1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Vervang deze velden door uw gebruikersnaam en AIO-sleutels die u tijdens het maken van de feed van de AdaFruit-site hebt gekopieerd.
#define AIO_USERNAME "********" #define AIO_KEY "*******************************"
Vervolgens hebben we een ESP12 WiFiClient-klasse gemaakt om verbinding te maken met de MQTT-server.
WiFiClient-client;
Stel de MQTT-clientklasse in door de WiFi-client en MQTT-server en inloggegevens door te geven.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Stel een feed in met de naam 'Power' en 'bill' voor publicatie van wijzigingen.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
In de setup- functie verbinden we de Wi-Fi-module met een Wi-Fi-toegangspunt.
ongeldige setup () { Serial.begin (115200); vertraging (10); Serial.println (F ("Adafruit MQTT demo")); // Maak verbinding met WiFi-toegangspunt. Serial.println (); Serial.println (); Serial.print ("Verbinden met"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
In loop- functie zullen we controleren op inkomende gegevens van de Arduino en deze gegevens publiceren naar AdaFruit IO.
void loop () { // Zorg ervoor dat de verbinding met de MQTT-server actief is (dit maakt de eerste // verbinding en maakt automatisch opnieuw verbinding wanneer de verbinding wordt verbroken). Zie de MQTT_connect // functiedefinitie verderop. MQTT_connect (); int i = 0; drijven watt1;
Deze functie controleert de inkomende gegevens van de Arduino en slaat deze gegevens op in watt- array met behulp van de functie serial.read ().
if (Serial.available ()> 0) { vertraging (100); // staat toe dat alle verzonden seriële berichten samen worden ontvangen terwijl (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
atof () functie converteert de karakters naar float-waarden en we slaan deze float-waarde op in een andere float-variabele watt1.
watt1 = atof (watt);
Bereken het factuurbedrag door het vermogen (in Wh) te vermenigvuldigen met het energietarief en dit te delen door 1000 om het vermogen in KWh te maken.
bill_amount = watt1 * (energyTariff / 1000); // 1eenheid = 1kwH
Nu kunnen we dingen publiceren!
Serial.print (F ("\ nSending Power Val")); Serial.println (watt1); Serial.print ("…");
Dit stuk code publiceert vermogenswaarden naar de Power- feed
if (! Power.publish (watt1)) { Serial.println (F ("Failed")); } anders { Serial.println (F ("OK!")); }
Dit publiceert de elektriciteitsrekening naar de factuurfeed .
if (! bill.publish (bill_amount)) { Serial.println (F ("Mislukt")); } anders { Serial.println (F ("OK!")); }
Ons factuurbedrag kan snel veranderen, maar IFTTT heeft tijd nodig om de applet te activeren, dus deze regels geven tijd om te triggeren, zodat we drempel-e-mail kunnen ontvangen.
Wijzig de waarde factuurbedrag waarop u e-mail wilt ontvangen. Wijzig ook de IFTTT AdaFruit IO-instellingen.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); vertraging (5000); } factuurbedrag = 6; }
Volledige code voor Arduino en NodeMCU ESP12 wordt aan het einde van deze tutorial gegeven.
Upload nu de codes naar beide borden. Sluit uw hardware aan zoals weergegeven in het schakelschema en open io.adafruit.com. Open het dashboard dat u zojuist hebt gemaakt. U ziet dat de rekening voor stroomverbruik en elektriciteit wordt bijgewerkt.
Wanneer uw factuur bereikt om INR 4 dan ontvangt u een e-mail als deze krijgen.
Android-app voor het controleren van het elektriciteitsverbruik:
U kunt de Android-app gebruiken om de waarden te controleren. Download hiervoor de MQTT Dashboard android app uit de Play store of via deze link.
Volg deze stappen om een verbinding met io.adafruit.com tot stand te brengen:
Stap 1: Open de app en klik op het “+” teken. Vul Client-ID in wat u maar wilt. Server en poort blijven hetzelfde zoals weergegeven in de schermafbeelding. U krijgt de gebruikersnaam en het wachtwoord (actieve sleutel) van het AdaFruit IO-dashboard, zoals hieronder weergegeven.
Active Key is uw wachtwoord.
Stap 2: Selecteer Elektriciteitsmeter en selecteer Abonneren. Geef bij het abonnement een beschrijvende naam en een onderwerp op. Onderwerpformaat is ' uwgebruikersnaam' / feeds / 'feednaam' en klik op aanmaken.
Stap 3: Maak op dezelfde manier een abonnement op factuurfeed.
Stap 4: Aangezien uw apparaten energie verbruiken, worden bijgewerkte waarden weergegeven onder Stroom en Factuur .
Op deze manier kunt u een slimme elektriciteitsenergiemeter maken, die niet alleen overal ter wereld kan worden gecontroleerd, maar ook een e-mail kan activeren wanneer u een hoog elektriciteitsverbruik heeft.
Bekijk ook onze alle IoT-projecten.