- Reikalingos medžiagos:
- ACS712 srovės jutiklio veikimas:
- Grandinės schema
- Kodas ir paaiškinimas:
- „Android“ programa elektros energijos vartojimui stebėti:
Mes visi žinome apie elektros energijos skaitiklius, kurie yra sumontuoti kiekvieno namuose ar biuruose, siekiant matuoti elektros energijos suvartojimą. Kiekvieno mėnesio pabaigoje daugelis iš mūsų sunerimę dėl didelės sąskaitos už elektrą ir mes turime kartą pažiūrėti į energijos skaitiklį. Bet ką daryti, jei mes galime stebėti elektros energijos naudojimą iš bet kurios pasaulio vietos ir gauti SMS / el. Laišką, kai jūsų energijos suvartojimas pasiekia ribinę vertę. Čia mes kuriame daiktų interneto projektu pagrįstą energijos skaitiklio projektą.
Anksčiau mes sukūrėme energijos skaitiklio grandinę, kuri jums siunčia SMS apie sąskaitą naudodama GSM modulį. Šiame projekte mes gaminame išmanųjį elektros energijos skaitiklį naudodami „Arduino“ ir ESP8266 „Wi-Fi“ modulį, kuris gali ne tik išsiųsti jums SMS / el. Laišką apie jūsų sąskaitą už elektrą, bet ir stebėti bet kuriuo metu ir bet kurioje pasaulio vietoje naudojamą energiją. Energijos suvartojimui išmatuoti naudojome srovės jutiklį ACS712, kurį netrukus aptarsime.
Norėdami susieti „Wi-Fi“ su SMS / el. Pašto pranešimais, pasinaudosime IFTTT platformos pagalba. Mes taip pat naudosime „ MQTT Dashboard Android“ programą, kad galėtume stebėti energijos naudojimą. Taigi leiskite pradėti…
Reikalingos medžiagos:
- Arduino Uno
- ESP12 / „NodeMCU“
- ACS712-30Amp srovės jutiklis
- Bet koks kintamosios srovės prietaisas
- Vyriškos ir moteriškos laidai
ACS712 srovės jutiklio veikimas:
Prieš pradedant kurti projektą, mums labai svarbu suprasti ACS712 srovės jutiklio veikimą, nes tai yra pagrindinis projekto komponentas. Srovės matavimas, ypač kintamosios srovės matavimas, visada yra sunki užduotis dėl triukšmo, susijusio su netinkama izoliacijos problema ir kt. Tačiau šio „Allegro“ sukurto ACS712 modulio pagalba tapo daug lengviau.
Šis modulis veikia Hall-efekto principu, kurį atrado daktaras Edwinas Hallas. Pagal jo principą, kai į magnetinį lauką įdedamas srovės laidininkas, per jo kraštus susidaro įtampa statmena tiek srovės, tiek magnetinio lauko kryptims. Nesigilinkime į sąvoką, bet paprasčiau tariant, mes naudojame salės jutiklį magnetiniam laukui aplink srovės laidininką matuoti. Šis matavimas bus išreikštas milivoltais, kuriuos mes pavadinome kaip salės įtampą. Ši išmatuota salės įtampa yra proporcinga srovei, kuri tekėjo per laidininką.
Pagrindinis ACS712 srovės jutiklio naudojimo pranašumas yra tai, kad jis gali matuoti tiek kintamą, tiek nuolatinę srovę, taip pat izoliuoja apkrovą (kintamosios / nuolatinės srovės apkrovą) ir matavimo bloką (mikrovaldiklio dalį). Kaip parodyta paveikslėlyje, modulyje yra trys kaiščiai, kurie yra „Vcc“, „Vout“ ir „Ground“.
2 kontaktų gnybtų blokas yra tas, kuriame turėtų būti praleistas srovės laidas. Modulis veikia esant + 5 V įtampai, todėl Vcc turėtų būti maitinamas 5 V įtampa, o žemė turėtų būti prijungta prie sistemos žemės. „Vout“ kaiščio poslinkio įtampa yra 2500 mV, tai reiškia, kad kai viela neteka srovė, išėjimo įtampa bus 2500 mV, o kai tekanti srovė yra teigiama, įtampa bus didesnė nei 2500 mV, o kai tekanti srovė yra neigiama, įtampa bus mažesnė nei 2500mV.
Analoginį „Arduino“ kaištį nuskaitysime modulio išėjimo įtampą (Vout), kuri bus 512 (2500mV), kai laidu neteka srovė. Ši vertė sumažės srovei tekant neigiama linkme ir didės srovei tekant teigiama linkme. Žemiau esanti lentelė padės suprasti, kaip išėjimo įtampa ir ADC vertė priklauso nuo laido tekančios srovės.
Šios vertės buvo apskaičiuotos remiantis informacija, pateikta ACS712 duomenų lape. Jas taip pat galite apskaičiuoti naudodamiesi šiomis formulėmis:
Vout įtampa (mV) = (ADC vertė / 1023) * 5000 srovė per laidą (A) = (Vout (mv) -2500) / 185
Dabar mes žinome, kaip veikia ACS712 jutiklis ir ko iš jo galime tikėtis. Pereikime prie grandinės schemos.
Mes naudojome šį jutiklį gamindami skaitmeninę ampermetro grandinę naudodami PIC mikrovaldiklį ir ACS712.
Grandinės schema
1 žingsnis: Prisijunkite prie IFTTT naudodami savo kredencialus.
2 žingsnis: „ Mano programėlėse“ spustelėkite „ Nauja programėlė“
3 žingsnis: Spustelėkite + tai
4 žingsnis: Ieškokite „ AdaFruit“ ir spustelėkite jį.
5 žingsnis: Spustelėkite Stebėti „AdaFruit IO“ kanalą .
6 žingsnis: Pasirinkite „ Feed“ kaip sąskaitą, „ Relationship“ kaip „ lygus“ ir slenksčio vertę, prie kurios norite gauti el. Laišką. Spustelėkite Sukurti veiksmą . Aš naudoju 4 kaip slenksčio suveikimo vertę.
7 žingsnis: Spustelėkite + tai . Ieškokite „G-mail“ ir spustelėkite jį ir prisijunkite naudodami savo „g-mail“ kredencialus.
8 žingsnis: Spustelėkite siųsti sau el. Laišką.
9 žingsnis: Parašykite temą ir kūną, kaip parodyta, ir spustelėkite, jei norite sukurti.
10 žingsnis: jūsų „ receptas “ paruoštas. Peržiūrėkite jį ir spustelėkite „Baigti“.
Dabar mes baigėme integruoti žiniatinklį. Pereikime prie kodavimo dalies..
Kodas ir paaiškinimas:
Mes naudojame nuoseklųjį ryšį tarp ESP12 ir „Arduino“. Taigi, mes turime parašyti kodą „Arduino“ ir „NodeMCU“ perdavimui ir priėmimui.
Siųstuvo dalies, ty „Arduino Uno“, kodas:
Pilnas „ Arduino“ kodas pateikiamas šios pamokos pabaigoje. Dabartiniam jutikliui naudosime biblioteką, kurią galite atsisiųsti iš šios nuorodos.
Ši biblioteka turi integruotą funkciją, kad apskaičiuotų srovę. Galite parašyti kodą, kad apskaičiuotumėte srovę, tačiau šioje bibliotekoje yra tikslūs srovės matavimo algoritmai.
Pirmiausia įtraukite dabartinio jutiklio biblioteką kaip:
#include „ACS712.h“
Sukurkite masyvą, kad galėtumėte kaupti energiją, kad galėtumėte ją siųsti į „NodeMCU“.
char vatas;
Sukurkite egzempliorių, kad galėtumėte naudoti ACS712-30Amp PIN A0. Pakeiskite argumentą „Pirmasis“, jei naudojate 20Amp arba 5Ap variatorius.
Jutiklis ACS712 (ACS712_30A, A0);
Be sąrankos funkcijai, apibrėžti Baud norma 115200 bendrauti su NodeMCU. Skambinkite jutikliui. Kalibruokite (), kad sukalibruotumėte srovės jutiklį, kad gautumėte tikslius rodmenis.
negaliojanti sąranka () { Serial.begin (115200); jutiklis.kalibruoti (); }
Pagal ciklo funkciją mes paskambinsime sensor.getCurrentAC (); funkcija gauti dabartinę vertę ir išsaugoti plūduriuojančiame kintamajame I. Gavę srovę, apskaičiuokite galią naudodami P = V * I formulę. Mes naudojame 230 V, nes tai yra įprastas Europos šalių standartas. Jei reikia, pakeiskite savo vietinį
tuštuma kilpa () { plūdė V = 230; plūdė I = jutiklis.getCurrentAC (); plūdė P = V * I;
Šios linijos paverčia galią Wh.
paskutinis laikas = dabartinis laikas; srovės laikas = milis (); Wh = Wh + P * ((dabartinis laikas - paskutinis laikas) / 3600000,0);
Dabar mes turime konvertuoti šią Wh į simbolių formą, kad nusiųstume ją į „NodeMCU“ šiam dtostrf (); konvertuos plūdę į char masyvą, kad ją būtų galima lengvai atspausdinti:
dtostrf (Wh, 4, 2, vatai);
Formatas yra:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Parašykite šį simbolių masyvą į nuoseklųjį buferį naudodami Serial.write () ; funkcija. Tai nusiųs Wh reikšmę „NodeMCU“.
Nuoseklus.rasyti (vatai); vėlavimas (10000); }
Imtuvo dalies mazgo kodas: MCU ESP12:
Tam mums reikalinga „AdaFruit MQTT“ biblioteka, kurią galima atsisiųsti iš šios nuorodos.
Dabar atidarykite „Arduino IDE“. Eikite į pavyzdžius -> „AdaFruit MQTT“ biblioteka -> mqtt_esp8266
Redaguosime šį kodą pagal AIO raktus ir „Wi-Fi“ kredencialus bei gaunamus serijinius duomenis iš „Arduino“.
Pirmiausia įtraukėme visas „ESP12 Wi-Fi Module“ ir „AdaFruit MQTT“ bibliotekas.
# įtraukti
Mes nustatome jūsų „Wi-Fi“, iš kurio norite prijungti ESp-12e, SSID ir slaptažodį.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Šiame skyriuje apibrėžiamas „AdaFruit“ serveris ir serverio prievadas, kurie yra atitinkamai „io.adafruit.com“ ir „1883“.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Pakeiskite šiuos laukus savo vartotojo vardu ir AIO raktais, kuriuos nukopijavote iš „AdaFruit“ svetainės, kai darote kanalą.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Tada mes sukūrėme ESP12 „WiFiClient“ klasę, kad galėtume prisijungti prie MQTT serverio.
„WiFiClient“ klientas;
Nustatykite „MQTT“ kliento klasę, įvesdami „WiFi“ klientą ir MQTT serverį bei prisijungimo duomenis.
„Adafruit_MQTT_Client mqtt“ (& klientas, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Norėdami paskelbti pakeitimus, nustatykite sklaidos kanalą „Power“ ir „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");
Naudodamiesi sąrankos funkcija, „Wi-Fi“ modulį sujungiame su „Wi-Fi“ prieigos tašku.
negaliojanti sąranka () { Serial.begin (115200); vėlavimas (10); Serial.println (F („Adafruit MQTT demo“)); // Prisijunkite prie „WiFi“ prieigos taško. Serijinis.println (); Serijinis.println (); Serial.print („Prisijungimas prie“); Serial.println (WLAN_SSID); „WiFi.begin“ (WLAN_SSID, WLAN_PASS); …. …. … }
Pagal ciklo funkciją patikrinsime, ar nėra gaunamų duomenų iš „Arduino“, ir paskelbsime šiuos duomenis „AdaFruit IO“.
void loop () { // Įsitikinkite, kad ryšys su MQTT serveriu yra gyvas (tai užmegs pirmąjį // ryšį ir automatiškai prisijungs atjungus). Toliau žr. Funkcijos „MQTT_connect //“ apibrėžimą. MQTT_connect (); int i = 0; plūduriuojantis vatas1;
Ši funkcija patikrina, ar nėra gaunamų duomenų iš „Arduino“, ir saugo šiuos duomenis vatų masyve naudodamasis funkcija serial.read ().
if (Serial.available ()> 0) { delsa (100); // leidžia visus siunčiamus serijinius gauti kartu, o (Serial.available () && i <5) { watt = Serial.read (); } vatas = '\ 0'; }
funkcija atof () konvertuoja simbolius į plūduriuojančias reikšmes ir šią kintamąją vertę išsaugosime kitame kintamajame kintamajame watt1.
vatas1 = atof (vatas);
Apskaičiuokite sąskaitos sumą padauginę galią (Wh) iš energijos tarifo ir padaliję ją iš 1000, kad galia būtų kWh.
sąskaitos_suma = vatas1 * (energijos tarifas / 1000); 1vnt = 1kwH
Dabar galime skelbti medžiagą!
Serial.print (F ("\ nSiuntimo galia val")); Serial.println (vatas1); Serial.print („…“);
Šis kodo dalis skelbia galios vertes į elektrinės pašarų
jei (! Power.publish (watt1)) { Serial.println (F ("Nepavyko")); } else { Serial.println (F ("Gerai!")); }
Taip bus paskelbta sąskaitą už elektros energiją sąskaitų santraukoje.
if (! bill.publish (bill_amount)) { Serial.println (F ("Nepavyko")); } else { Serial.println (F ("Gerai!")); }
Mūsų sąskaitos suma gali greitai pasikeisti, tačiau IFTTT užtrunka šiek tiek laiko, kad suaktyvintų programėlę, todėl šiose eilutėse bus laiko suaktyvinti, kad galėtume gauti el.
Pakeiskite bill_amount vertę, į kurią norite gauti el. Laišką. Taip pat pakeiskite IFTTT „AdaFruit IO“ sąranką.
if (sąskaitos_suma == 4) { už (int i = 0; i <= 2; i ++) { sąskaita.publikuoti (sąskaitos_suma); vėlavimas (5000); } sąskaitos_suma = 6; }
Pilnas „Arduino“ ir „NodeMCU ESP12“ kodas pateikiamas šios pamokos pabaigoje.
Dabar įkelkite kodus į abi plokštes. Prijunkite aparatinę įrangą, kaip parodyta grandinės schemoje, ir atidarykite io.adafruit.com. Atidarykite ką tik sukurtą informacijos suvestinę. Pamatysite atnaujinamą energijos suvartojimo ir elektros sąskaitą.
Kai jūsų sąskaita pasiekė INR 4 tada gausite panašaus laišką.
„Android“ programa elektros energijos vartojimui stebėti:
Vertėms stebėti galite naudoti „Android App“. Norėdami atsisiųsti „ MQTT Dashboard“ „Android“ programą iš „Play“ parduotuvės arba iš šios nuorodos.
Norėdami nustatyti ryšį su io.adafruit.com, atlikite šiuos veiksmus:
1 žingsnis: Atidarykite programą ir spustelėkite „+“ ženklą. Užpildykite kliento ID viską, ko norite. Serveris ir prievadas išlieka tokie patys, kaip parodyta ekrano kopijoje. Vartotojo vardą ir slaptažodį (aktyvųjį raktą) gausite iš „AdaFruit IO“ informacijos suvestinės, kaip parodyta žemiau.
Aktyvusis raktas yra jūsų slaptažodis.
2 žingsnis: Pasirinkite Elektros skaitiklis ir pasirinkite Prenumeruoti. Abonemente nurodykite draugišką vardą ir temą. Temos formatas yra „jūsų vartotojo vardas“ / „feeds“ / „feed name“ ir spustelėkite sukurti.
3 žingsnis: Tokiu pačiu būdu užsiprenumeruokite sąskaitos kanalą.
4 žingsnis: Kadangi jūsų prietaisai sunaudoja energiją, atnaujintos vertės bus rodomos skiltyje „ Maitinimas ir sąskaita“ .
Taip galite sukurti išmanųjį elektros energijos skaitiklį, kurį galima ne tik stebėti iš bet kurios pasaulio vietos, bet ir suaktyvinti el. Paštą, kai suvartojate daug elektros energijos.
Taip pat patikrinkite visus mūsų IoT projektus.