- Tarvittavat materiaalit:
- ACS712-virta-anturin toiminta:
- Piirikaavio
- Koodi ja selitys:
- Android-sovellus sähkönkulutuksen seuraamiseen:
Me kaikki tiedämme sähköenergiamittareista, jotka asennetaan jokaisen taloon tai toimistoon sähkönkulutuksen mittaamiseksi. Jokaisen kuukauden viimeisenä monet meistä ovat huolissamme korkeasta sähkölaskusta, ja meidän on tarkasteltava energiamittaria silloin tällöin. Mutta entä jos voimme seurata sähkönkulutustamme mistä päin maailmaa tahansa ja saada tekstiviesti / sähköposti, kun energiankulutus saavuttaa kynnysarvon. Täällä rakennamme IoT-pohjaista energiamittariprojektia.
Aikaisemmin olemme rakentaneet energiamittaripiirin, joka lähettää sinulle tekstiviestin laskusta GSM-moduulin avulla. Tässä projektissa teemme älykkään sähköenergiamittarin Arduino- ja ESP8266 Wi-Fi -moduulilla, joka ei vain voi lähettää sinulle sähkölaskusi tekstiviestin / sähköpostin, vaan myös seurata energiankulutusta milloin tahansa ja mistä päin maailmaa tahansa. Tässä olemme käyttäneet virtamittaria ACS712 energiankulutuksen mittaamiseen, keskustelemme siitä pian.
Otamme käyttöön IFTTT- alustan, jotta voimme yhdistää Wi-Fi-yhteyden SMS / sähköposti-ilmoituksiin. Käytämme myös MQTT Dashboard Android -sovellusta energiankäytön seuraamiseen. Joten Aloitetaan….
Tarvittavat materiaalit:
- Arduino Uno
- ESP12 / SolmuMCU
- ACS712-30Amp Virta-anturi
- Mikä tahansa verkkolaite
- Mies-nainen johdot
ACS712-virta-anturin toiminta:
Ennen projektin rakentamisen aloittamista on meille erittäin tärkeää ymmärtää ACS712-virtamittarin toiminta, koska se on projektin avainosa. Virran mittaaminen erityisesti vaihtovirrasta on aina vaikea tehtävä johtuen melusta ja siitä johtuvasta virheellisestä eristysongelmasta jne. Mutta tämän Allegron suunnitteleman ACS712-moduulin avulla on tullut paljon helpompaa.
Tämä moduuli toimii Hall-efektin periaatteella, jonka tohtori Edwin Hall löysi. Hänen periaatteensa mukaan, kun virtajohdin sijoitetaan magneettikenttään, sen reunojen yli syntyy jännite kohtisuorassa sekä virran että magneettikentän suuntiin. Älkäämme menkö liian syvälle käsitteeseen, vaan yksinkertaisesti sanottuna käytämme hall-anturia mittaamaan magneettikenttää virran johtimen ympärillä. Tämä mittaus on millivoltteina, joita kutsumme hallijännitteeksi. Tämä mitattu hallijännite on verrannollinen johtimen läpi virtaavaan virtaan.
ACS712-virtatunnistimen tärkein etu on se, että se voi mitata sekä vaihtovirtaa että tasavirtaa, ja se myös eristää kuorman (AC / DC-kuormitus) ja mittausyksikön (mikro-ohjaimen osa). Kuten kuvassa näkyy, moduulissa on kolme nastaa, jotka ovat Vcc, Vout ja Ground.
2-napainen riviliitin on paikka, jossa virtaa kuljettava johto tulisi siirtää. Moduuli toimii + 5 V: n jännitteellä, joten Vcc: n tulisi olla kytkettynä 5 V: n virtalähteeseen ja maan tulisi olla kytketty järjestelmän maahan. Vout-nastan siirtymäjännite on 2500 mV, mikä tarkoittaa, että kun johdon läpi ei virtaa virtaa, lähtöjännite on 2500 mV ja kun virtaava virta on positiivinen, jännite on suurempi kuin 2500 mV ja kun virtaava virta on negatiivinen, jännite on alle 2500 mV.
Käytämme Arduinon analogista tapia moduulin lähtöjännitteen (Vout) lukemiseen, joka on 512 (2500mV), kun langan läpi ei virtaa virtaa. Tämä arvo pienenee, kun virta kulkee negatiiviseen suuntaan ja kasvaa, kun virta virtaa positiiviseen suuntaan. Alla oleva taulukko auttaa sinua ymmärtämään, kuinka lähtöjännite ja ADC-arvo vaihtelevat langan läpi virtaavan virran perusteella.
Nämä arvot laskettiin ACS712: n tietolomakkeessa annettujen tietojen perusteella. Voit myös laskea ne käyttämällä seuraavia kaavoja:
Vout-jännite (mV) = (ADC-arvo / 1023) * 5000 virta johdon läpi (A) = (Vout (mv) -2500) / 185
Nyt, kun tiedämme, kuinka ACS712-anturi toimii ja mitä voimme odottaa siitä. Siirrytään piirikaavioon.
Olemme käyttäneet tätä anturia digitaalisen ampeeripiirin valmistamiseen PIC-mikrokontrollerilla ja ACS712: llä.
Piirikaavio
Vaihe 1: Kirjaudu IFTTT: hen kirjautumistiedoillasi.
Vaihe 2: Napsauta Omat sovelmat -kohdassa Uusi sovelma
Vaihe 3: Napsauta + tätä
Vaihe 4: Hae AdaFruitista ja napsauta sitä.
Vaihe 5: Napsauta kohtaa Seuraa syötteen AdaFruit IO -sovellusta.
Vaihe 6: Valitse Feed Bill, suhde kuin ' yhtä kuin' ja kynnys arvo , jolla haluat sähköpostin. Napsauta Luo toiminto . Olen käyttänyt 4: ää kynnysliipaisuarvona.
Vaihe 7: Napsauta + that . Etsi G-postia, napsauta sitä ja kirjaudu sisään g-mail-kirjautumistiedoillasi.
Vaihe 8: Napsauta Lähetä itsellesi sähköpostia.
Vaihe 9: Kirjoita aihe ja runko kuvan osoittamalla tavalla ja luo napsauttamalla.
Vaihe 10: Sinun ' resepti ' on valmis. Tarkista se ja napsauta Valmis.
Nyt verkkoyhteys on valmis. Siirrymme koodausosaan.
Koodi ja selitys:
Käytämme sarjaliikennettä ESP12: n ja Arduinon välillä. Joten meidän on kirjoitettava koodi sekä Arduinolle että NodeMCU: lle lähettämistä ja vastaanottamista varten.
Lähetinosan eli Arduino Unon koodi:
Täydellinen Arduino-koodi annetaan tämän opetusohjelman lopussa. Käytämme nykyisen tunnistimen kirjastoa, joka voidaan ladata tältä linkiltä.
Tässä kirjastossa on sisäänrakennettu toiminto virran laskemiseksi. Voit kirjoittaa koodin laskeaksesi virran, mutta tässä kirjastossa on tarkat virranmittausalgoritmit.
Lisää ensin kirjasto nykyiselle anturille:
#include "ACS712.h"
Tee taulukko energian varastoimiseksi sen lähettämiseksi NodeMCU: lle.
char watti;
Luo ilmentymä käyttämään ACS712-30Amp PIN-koodilla A0. Muuta First-argumenttia, jos käytät 20Amp- tai 5Ap-muunnosta.
ACS712-anturi (ACS712_30A, A0);
Määritä asetustoiminnossa siirtonopeus 115200 kommunikoida NodeMCU: n kanssa. Kutsu anturi. Kalibroi () -toiminto virtianturin kalibroimiseksi tarkkojen lukemien saamiseksi
void setup () { Sarja.alku (115200); anturi. kalibroi (); }
In silmukka toiminto, me kutsumme sensor.getCurrentAC (); nykyisen arvon saamiseksi ja tallentamiseksi kelluvaan muuttujaan I. Virran saamisen jälkeen laske teho käyttämällä kaavaa P = V * I Käytämme 230 V: tä, koska se on yleinen standardi Euroopan maissa. Vaihda tarvittaessa paikalliseen
tyhjä silmukka () { kelluva V = 230; uimuri I = anturi.getCurrentAC (); uimuri P = V * I;
Nämä linjat muuttavat tehon Wh: ksi.
last_time = current_time; nykyinen aika = millis (); Wh = Wh + P * ((nykyinen aika-viimeinen aika) / 3600000,0);
Nyt meidän on muunnettava tämä Wh merkkimuodoksi lähettämään se NodeMCU: lle tälle dtostrf (): lle; muuntaa uimurin char-taulukoksi, jotta se voidaan sitten tulostaa helposti:
dtostrf (Wh, 4, 2, watti);
Muoto on:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Kirjoita tämä merkkiryhmä sarjapuskuriin käyttämällä Serial.write () ; toiminto. Tämä lähettää Wh- arvon NodeMCU: lle.
Sarja. Kirjoita (watti); viive (10000); }
Vastaanottimen osan solmun koodi: MCU ESP12:
Tätä varten tarvitsemme AdaFruit MQTT -kirjaston, joka voidaan ladata tältä linkiltä.
Avaa nyt Arduino IDE. Siirry esimerkkeihin -> AdaFruit MQTT -kirjasto -> mqtt_esp8266
Muokkaamme tätä koodia AIO-avaintemme ja Wi-Fi-tunnistetietojemme sekä Arduinosta saapuvien sarjatietojen mukaan.
Ensinnäkin sisällytimme kaikki ESP12 Wi-Fi -moduulin ja AdaFruit MQTT: n kirjastot.
#sisältää
Määritämme SSID: n ja salasanan Wi-Fi-verkkoon, josta haluat yhdistää ESp-12e: n.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Tässä osassa määritetään AdaFruit-palvelin ja palvelinportti, jotka on korjattu vastaavasti ”io.adafruit.com” ja “1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Korvaa nämä kentät käyttäjänimelläsi ja AIO-avaimillasi, jotka olet kopioinut AdaFruit-sivustolta Syötettä tehdessäsi.
# määrittele AIO_USERNAME "********" # määrittele AIO_KEY "************************
Sitten olemme luoneet ESP12 WiFiClient -luokan yhteyden muodostamiseksi MQTT-palvelimeen.
WiFiClient-asiakas;
Määritä MQTT-asiakasluokka syöttämällä WiFi-asiakas ja MQTT-palvelin sekä kirjautumistiedot.
Adafruit_MQTT_Client mqtt (& asiakas, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Määritä syöte nimeltä Power ja Bill , jotta muutokset julkaistaan.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ syötteet / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
Vuonna setup toiminto, olemme yhteydessä Wi-Fi-moduuli Wi-Fi-tukiaseman.
void setup () { Sarja.alku (115200); viive (10); Serial.println (F ("Adafruit MQTT -demo")); // Yhdistä WiFi-tukiasemaan. Sarja.println (); Sarja.println (); Serial.print ("Yhdistetään kohteeseen"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
In silmukka toiminto, voimme tarkistaa tulevan datan Arduino ja julkaista tämän datan Adafruit IO.
void loop () { // Varmista, että yhteys MQTT-palvelimeen on käynnissä (tämä muodostaa ensimmäisen // -yhteyden ja muodostaa yhteyden uudelleen automaattisesti, kun yhteys katkaistaan). Katso alla oleva MQTT_connect // -funktion määritelmä. MQTT_kytke (); int i = 0; kelluva watti1;
Tämä toiminto tarkistaa tulevan datan Arduino ja tallentaa tämän tiedon W matriisi serial.read () funktio.
if (Sarja.käynnissä ()> 0) { viive (100); // sallii kaikkien lähetettyjen sarjojen vastaanottamisen yhdessä (Serial.available () && i <5) { watt = Serial.read (); } watti = '\ 0'; }
funktio atof () muuntaa merkit kelluviksi arvoiksi ja tallennamme tämän kelluvan arvon toiseen kelluvaan muuttujaan watt1.
watti1 = atof (watti);
Laske laskun määrä kertomalla teho (Wh: ssä) energiatariffilla ja jakamalla se 1000: lla, jotta teho olisi kWh.
laskun_määrä = watti1 * (energiatariffi / 1000); // 1 yksikkö = 1 kWh
Nyt voimme julkaista tavaraa!
Serial.print (F ("\ nLähetysvirta val")); Sarjaprintln (watti1); Sarja.tulos ("…");
Tämä koodinpätkä julkaisee arvot ulos Virta syötteen
if (! Power.publish (watt1)) { Serial.println (F ("epäonnistui")); } else { Sarja.println (F ("OK!")); }
Tämä julkaisee sähkölaskun laskun syötteessä.
if (! bill.publish (bill_amount)) { Sarja.println (F ("epäonnistui")); } else { Sarja.println (F ("OK!")); }
Laskusummasi voi muuttua nopeasti, mutta IFTTT vie aikaa appletin käynnistämiseen, joten nämä rivit antavat aikaa laukaisuun, jotta voimme vastaanottaa kynnyssähköpostin.
Muuta bill_amount- arvoa, jolta haluat saada sähköpostia. Muuta myös IFTTT AdaFruit IO -asetuksissa.
if (laskun_määrä == 4) { varten (int i = 0; i <= 2; i ++) { lasku.julkaisu (laskun_määrä); viive (5000); } laskun_määrä = 6; }
Arduinon ja NodeMCU ESP12: n täydellinen koodi annetaan tämän opetusohjelman lopussa.
Lataa koodit molemmille levyille. Liitä laitteisto piirikaavion mukaisesti ja avaa io.adafruit.com. Avaa luomasi kojelauta. Näet virrankulutus- ja sähkölaskun päivittyvän.
Kun lasku ulottui INR 4 niin saat tällaisen sähköpostiviestin.
Android-sovellus sähkönkulutuksen seuraamiseen:
Voit käyttää arvoja Android App -sovelluksella. Tätä varten lataa MQTT Dashboard android -sovellus Play-kaupasta tai tältä linkiltä.
Muodosta yhteys io.adafruit.com-palveluun seuraavasti:
Vaihe 1: Avaa sovellus ja napsauta + -merkkiä. Täytä asiakastunnus mitä haluat. Palvelin ja portti pysyvät samat kuin kuvakaappauksessa. Saat käyttäjätunnuksen ja salasanan (aktiivinen avain) AdaFruit IO -hallintapaneelista alla olevan kuvan mukaisesti.
Aktiivinen avain on salasanasi.
Vaihe 2: Valitse Sähkömittari ja valitse Tilaa. Ilmoita tilauksessa ystävällinen nimi ja aihe. Aiheen muoto on " käyttäjänimesi" / syötteet / "syötteen nimi" ja napsauta Luo.
Vaihe 3: Tee samalla tavalla tilaus laskusyötteelle.
Vaihe 4: Kun laitteesi kuluttavat energiaa, päivitetyt arvot näytetään Virta ja lasku -kohdassa .
Näin voit luoda älykkään sähköenergiamittarin, jota voidaan valvoa paitsi mistä päin maailmaa tahansa, vaan myös käynnistää sähköposti, kun sinulla on suuri sähkönkulutus.
Tarkista myös kaikki IoT-projektit.