- Nepieciešamie materiāli:
- Strāvas sensora ACS712 darbība:
- Shēmas shēma
- Kods un skaidrojums:
- Android lietotne elektroenerģijas patēriņa uzraudzībai:
Mēs visi zinām par elektrības enerģijas skaitītājiem, kas tiek uzstādīti ikviena mājā vai birojā, lai mērītu elektroenerģijas patēriņu. Katra mēneša beigās daudzi no mums uztraucas par lielo rēķinu par elektrību, un mums reizi pa reizei ir jāaplūko enerģijas skaitītājs. Bet ko tad, ja mēs varam uzraudzīt elektroenerģijas patēriņu no jebkuras vietas pasaulē un saņemt īsziņu / e-pastu, kad jūsu enerģijas patēriņš sasniedz sliekšņa vērtību. Šeit mēs veidojam IoT balstītu enerģijas skaitītāja projektu.
Iepriekš mēs esam izveidojuši enerģijas skaitītāja shēmu, kas, izmantojot GSM moduli, jums nosūta īsziņas par rēķinu. Šajā projektā mēs izveidojam viedo elektroenerģijas skaitītāju, izmantojot Arduino un ESP8266 Wi-Fi moduli, kas var ne tikai nosūtīt jums īsziņu / e-pastu par jūsu elektrības rēķinu, bet arī jūs varat uzraudzīt enerģijas patēriņu jebkurā laikā un no jebkuras vietas pasaulē. Šeit mēs esam izmantojuši strāvas sensoru ACS712, lai izmērītu enerģijas patēriņu, mēs to drīz apspriedīsim.
Mēs izmantosim IFTTT platformas palīdzību, lai savienotu mūsu Wi-Fi ar īsziņu / e-pasta paziņojumiem. Mēs arī izmantosim MQTT Dashboard Android App, lai uzraudzītu enerģijas patēriņu. Tātad ļauj sākt darbu…
Nepieciešamie materiāli:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp strāvas sensors
- Jebkura maiņstrāvas ierīce
- Vīriešu-sieviešu vadi
Strāvas sensora ACS712 darbība:
Pirms mēs sākam būvēt projektu, mums ir ļoti svarīgi saprast ACS712 strāvas sensora darbību, jo tas ir galvenā projekta sastāvdaļa. Pašreizējās strāvas mērīšana, īpaši maiņstrāvas strāva, vienmēr ir grūts uzdevums, pateicoties troksnim, kas saistīts ar nepareizu izolācijas problēmu utt. Bet, izmantojot šo Allegro lietojumprogrammas ACS712 moduli, ir kļuvis daudz vieglāk.
Šis modulis darbojas pēc Hall-efekta principa, kuru atklāja doktors Edvīns Hols. Saskaņā ar viņa principu, kad strāvas nesējs tiek ievietots magnētiskajā laukā, tā malās rodas spriegums, kas ir perpendikulārs gan strāvas, gan magnētiskā lauka virzieniem. Neiedziļināsimies jēdzienā, bet, vienkārši sakot, mēs izmantojam zāles sensoru, lai izmērītu magnētisko lauku ap strāvas vadītāju. Šis mērījums tiks izteikts milivoltos, kurus mēs saucām par zāles spriegumu. Šis izmērītais zāles spriegums ir proporcionāls strāvai, kas plūda caur vadītāju.
Galvenā ACS712 strāvas sensora izmantošanas priekšrocība ir tā, ka tā var izmērīt gan maiņstrāvu, gan līdzstrāvu, kā arī nodrošina izolāciju starp slodzi (maiņstrāvas / līdzstrāvas slodzi) un mērvienību (mikrokontrollera daļu). Kā parādīts attēlā, modulī ir trīs tapas, kas ir attiecīgi Vcc, Vout un Ground.
2 kontaktu spaiļu bloks ir vieta, kur jāiet caur strāvas vadu. Modulis darbojas ar + 5 V, tāpēc Vcc vajadzētu darbināt ar 5 V, un zemei jābūt savienotai ar sistēmas Zemi. Vout tapas nobīdes spriegums ir 2500mV, tas nozīmē, ja caur vadu neplūst strāva, tad izejas spriegums būs 2500mV un, ja plūstošā strāva ir pozitīva, spriegums būs lielāks par 2500mV un, kad plūstošā strāva ir negatīva, spriegums būs mazāks par 2500mV.
Mēs izmantosim analogo Arduino tapu, lai nolasītu moduļa izejas spriegumu (Vout), kas būs 512 (2500mV), ja caur vadu neplūst strāva. Šī vērtība samazināsies, strāvai plūstot negatīvā virzienā, un palielināsies, strāvai plūstot pozitīvā virzienā. Zemāk esošā tabula palīdzēs jums saprast, kā izejas spriegums un ADC vērtība mainās atkarībā no strāvas, kas plūst caur vadu.
Šīs vērtības tika aprēķinātas, pamatojoties uz ACS712 datu lapā sniegto informāciju. Varat arī tos aprēķināt, izmantojot šādas formulas:
Vout spriegums (mV) = (ADC vērtība / 1023) * 5000 strāva caur vadu (A) = (Vout (mv) -2500) / 185
Tagad, kad mēs zinām, kā darbojas ACS712 sensors un ko mēs no tā varētu sagaidīt. Pārejam uz ķēdes shēmu.
Mēs izmantojām šo sensoru, lai izveidotu digitālo ampērmetru ķēdi, izmantojot PIC mikrokontrolleru un ACS712.
Shēmas shēma
1. darbība: piesakieties IFTTT, izmantojot savus akreditācijas datus.
2. solis: Manās sīklietotnēs noklikšķiniet uz Jauna sīklietotne
3. solis: noklikšķiniet uz + this
4. solis: meklējiet AdaFruit un noklikšķiniet uz tā.
5. solis: noklikšķiniet uz Pārraudzīt AdaFruit IO plūsmu .
6. solis: izvēlieties Feed kā rēķinu, Relationship kā “ vienāds ar” un sliekšņa vērtību, pie kuras vēlaties saņemt e-pastu. Noklikšķiniet uz Izveidot darbību . Es izmantoju 4 kā sliekšņa trigera vērtību.
7. solis: noklikšķiniet uz + tas . Meklējiet G-pastu un noklikšķiniet uz tā un piesakieties, izmantojot savus g-pasta akreditācijas datus.
8. darbība: noklikšķiniet uz Nosūtīt sev e-pastu.
9. solis: uzrakstiet priekšmetu un ķermeni, kā parādīts, un noklikšķiniet, lai izveidotu.
10. solis: Jūsu recepte ir gatava. Pārskatiet to un noklikšķiniet uz Pabeigt.
Tagad mēs esam paveikuši tīmekļa integrāciju. Pārejam uz kodēšanas daļu..
Kods un skaidrojums:
Mēs izmantojam sērijveida sakarus starp ESP12 un Arduino. Tātad, lai nosūtītu un saņemtu, mums ir jāuzraksta kods gan Arduino, gan NodeMCU.
Raidītāja daļas kods, ti, Arduino Uno:
Pilnīgs Arduino kods ir norādīts šīs apmācības beigās. Mēs izmantosim bibliotēku strāvas sensoram, kuru var lejupielādēt no šīs saites.
Šajā bibliotēkā ir iebūvēta funkcija strāvas aprēķināšanai. Varat ierakstīt kodu, lai aprēķinātu strāvu, taču šai bibliotēkai ir precīzi strāvas mērīšanas algoritmi.
Pirmkārt, iekļaujiet pašreizējā sensora bibliotēku kā:
#include "ACS712.h"
Izveidojiet masīvu, lai saglabātu enerģiju, lai to nosūtītu uz NodeMCU.
char vats;
Izveidojiet instanci, lai izmantotu ACS712-30Amp pie PIN A0. Mainiet argumentu Pirmais, ja izmantojat 20Amp vai 5 Amp variantu.
Sensors ACS712 (ACS712_30A, A0);
Pēc iestatīšanas funkciju, noteikt bodu likmi 115200, lai sazinātos ar NodeMCU. Zvana sensors.calibrate () funkcija, lai kalibrētu strāvas sensoru, lai iegūtu precīzus rādījumus.
void setup () { Serial.begin (115200); sensors.kalibrēt (); }
In cilpas funkciju, mēs saucam sensor.getCurrentAC (); funkciju, lai iegūtu pašreizējo vērtību un saglabātu peldošajā mainīgajā I. Pēc strāvas iegūšanas aprēķiniet jaudu, izmantojot P = V * I formulu. Mēs izmantojam 230 V, jo tas ir izplatīts standarts Eiropas valstīs. Ja nepieciešams, nomainiet vietējo
void loop () { pludiņš V = 230; pludiņš I = sensors.getCurrentAC (); pludiņš P = V * I;
Šīs līnijas pārveido jaudu Wh.
pēdējais_laiks = pašreizējais_laiks; pašreizējais_laiks = milis (); Wh = Wh + P * ((pašreizējais_laiks-pēdējais_laiks) / 3600000,0);
Tagad mums šis Wh jāpārvērš rakstzīmju formā, lai to nosūtītu uz NodeMCU šim dtostrf (); pārveidos pludiņu par char masīvu, lai pēc tam to varētu viegli izdrukāt:
dtostrf (Wh, 4, 2, vati);
Formāts ir šāds:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Uzrakstiet šo rakstzīmju masīvu sērijveida buferī, izmantojot Serial.write () ; funkciju. Tas nosūtīs Wh vērtību uz NodeMCU.
Sērijas.rakstīt (vatos); kavēšanās (10000); }
Uztvērēja daļas mezgla kods: MCU ESP12:
Tam mums nepieciešama AdaFruit MQTT bibliotēka, kuru var lejupielādēt no šīs saites.
Tagad atveriet Arduino IDE. Pāriet uz piemēriem -> AdaFruit MQTT bibliotēka -> mqtt_esp8266
Mēs rediģēsim šo kodu atbilstoši mūsu AIO atslēgām un Wi-Fi akreditācijas datiem un ienākošajiem sērijas datiem no Arduino.
Pirmkārt, mēs iekļāvām visas ESP12 Wi-Fi moduļa un AdaFruit MQTT bibliotēkas.
# iekļaut
Mēs definējam jūsu Wi-Fi SSID un paroli, no kuras vēlaties savienot savu ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Šajā sadaļā ir definēts AdaFruit serveris un servera ports, kas attiecīgi ir fiksēti kā “io.adafruit.com” un “1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Nomainiet šos laukus ar savu lietotājvārdu un AIO atslēgām, kuras esat kopējis no AdaFruit vietnes, veidojot plūsmu.
#define AIO_USERNAME "********" #define AIO_KEY "*****************************
Tad mēs esam izveidojuši ESP12 WiFiClient klasi, lai izveidotu savienojumu ar MQTT serveri.
WiFiClient klients;
Iestatiet MQTT klienta klasi, ievadot WiFi klientu un MQTT serveri un pieteikšanās datus.
Adafruit_MQTT_Client mqtt (& klients, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Lai publicētu izmaiņas, iestatiet plūsmu ar nosaukumu “Power” un “bill” .
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
Pēc iestatīšanas funkciju, mēs savienot Wi-Fi moduli Wi-Fi piekļuves punktu.
void setup () { Serial.begin (115200); kavēšanās (10); Serial.println (F ("Adafruit MQTT demonstrācija")); // Savienojuma izveide ar WiFi piekļuves punktu. Seriālais.println (); Seriālais.println (); Serial.print ("Savienojums ar"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
In cilpas funkciju, mēs pārbaudīsim ienākošos datus no Arduino un publicēt šos datus, lai Adafruit IO.
void loop () { // Pārliecinieties, vai savienojums ar MQTT serveri ir dzīvs (tas izveidos pirmo // savienojumu un automātiski atjaunosies, kad to atvienos). Tālāk skatiet funkciju MQTT_connect // funkcijas definīciju. MQTT_connect (); int i = 0; pludiņš vats1;
Šī funkcija pārbauda ienākošos datus no Arduino un uzglabā šos datus vatu masīvā, izmantojot funkciju serial.read ().
ja (Seriāls.pieejams ()> 0) { aizkave (100); // ļauj visas nosūtītās sērijas saņemt kopā, kamēr (Serial.available () && i <5) { watt = Serial.read (); } vats = '\ 0'; }
funkcija atof () konvertē rakstzīmes uz pludiņa vērtībām, un mēs saglabāsim šo peldošo vērtību citā mainīgajā mainīgajā watt1.
vats1 = atof (vats);
Aprēķiniet rēķina summu, reizinot jaudu (Wh) ar enerģijas tarifu un dalot to ar 1000, lai iegūtu jaudu KWh.
rēķina_summa = vats1 * (enerģijas tarifs / 1000); 1vienība = 1kwH
Tagad mēs varam publicēt sīkumus!
Serial.print (F ("\ nSūtot Power val")); Serial.println (vats1); Sērijas.druka ("…");
Šis koda fragments publicē jaudas vērtības barošanas plūsmā
if (! Power.publish (watt1)) { Serial.println (F ("Neizdevās")); } else { Serial.println (F ("Labi!")); }
Tādējādi elektrības rēķins tiks publicēts rēķinu plūsmā.
ja (! bill.publish (bill_amount)) { Serial.println (F ("Neizdevās")); } else { Serial.println (F ("Labi!")); }
Mūsu rēķina summa var ātri mainīties, taču IFTTT ir vajadzīgs laiks, lai aktivizētu sīklietotni, tāpēc šīs rindas dos laiku aktivizēšanai, lai mēs varētu saņemt sliekšņa e-pastu.
Mainiet vērtību bill_amount, uz kuru vēlaties saņemt e-pastu. Mainiet arī IFTTT AdaFruit IO iestatījumus.
ja (rēķina_summa == 4) { par (int i = 0; i <= 2; i ++) { rēķins.publicēt (rēķina_summa); kavēšanās (5000); } rēķina_summa = 6; }
Pilnīgs Arduino un NodeMCU ESP12 kods ir norādīts šīs apmācības beigās.
Tagad augšupielādējiet kodus abos dēļos. Pievienojiet aparatūru, kā parādīts shēmas shēmā, un atveriet io.adafruit.com. Atveriet tikko izveidoto informācijas paneli. Jūs redzēsiet, ka tiek atjaunināts rēķins par enerģijas patēriņu un elektroenerģiju.
Kad jūsu rēķins sasniedzis INR 4 , tad jūs saņemsiet e-pastu, kā šis.
Android lietotne elektroenerģijas patēriņa uzraudzībai:
Vērtību uzraudzībai varat izmantot Android lietotni. Šim nolūkam lejupielādējiet MQTT Dashboard android lietotni no Play veikala vai no šīs saites.
Lai izveidotu savienojumu ar io.adafruit.com, rīkojieties šādi:
1. darbība: atveriet lietotni un noklikšķiniet uz “+” zīmes. Aizpildiet klienta ID visu, ko vēlaties. Serveris un ports paliek tādi paši kā parādīts ekrānuzņēmumā. Lietotājvārdu un paroli (aktīvo atslēgu) saņemsit no AdaFruit IO informācijas paneļa, kā parādīts zemāk.
Aktīvā atslēga ir jūsu parole.
2. solis: atlasiet Elektrības skaitītājs un atlasiet Abonēt. Abonējot norādiet draudzīgu vārdu un tēmu. Tēmas formāts ir “jūsu lietotājvārds ” / plūsmas / “plūsmas nosaukums” un noklikšķiniet uz Izveidot.
3. darbība. Tādā pašā veidā izveidojiet abonementu rēķinu plūsmai.
4. solis: Kad ierīces patērē enerģiju, atjaunotās vērtības tiks parādītas sadaļā Power and Bill .
Šādi jūs varat izveidot viedo elektroenerģijas skaitītāju, kuru var ne tikai uzraudzīt no jebkuras vietas pasaulē, bet arī aktivizēt e-pastu, ja jums ir liels elektroenerģijas patēriņš.
Pārbaudiet arī visus mūsu IoT projektus.