- Mga Materyal na Kinakailangan:
- Paggawa ng ACS712 Kasalukuyang Sensor:
- Diagram ng circuit
- Code at Paliwanag:
- Android App para sa Pagsubaybay sa Pagkonsumo ng Elektrisidad:
Alam nating lahat ang tungkol sa mga metro ng enerhiya ng Elektrisidad na naka-install sa bahay ng bawat isa o mga tanggapan upang masukat ang pagkonsumo ng elektrisidad. Sa wakas ng bawat buwan, marami sa atin ang nag-aalala tungkol sa mataas na singil sa kuryente at kailangan nating tingnan ang metro ng enerhiya minsan-minsan. Ngunit paano kung masusubaybayan namin ang aming ginagamit na kuryente mula sa kahit saan sa mundo at makakuha ng isang SMS / E-mail kapag umabot sa isang threshold na halaga ang iyong pagkonsumo ng enerhiya. Dito nagtatayo kami ng isang batay sa IoT na Project ng Energy Meter.
Dati ay nakabuo kami ng isang Energy Meter circuit na nagpapadala sa iyo ng SMS tungkol sa singil gamit ang module na GSM. Sa proyektong ito gumawa kami ng isang metro ng Smart Energy Elektrisidad gamit ang Arduino at ESP8266 Wi-Fi module na hindi lamang maipapadala sa iyo ng isang SMS / Email ng iyong singil sa kuryente ngunit maaari mo ring subaybayan ang paggamit ng enerhiya anumang oras at mula saan man sa mundo. Dito nagamit namin ang isang Kasalukuyang Sensor ACS712 upang masukat ang pagkonsumo ng enerhiya, tatalakayin namin ito tungkol sa ilang sandali.
Dadalhin namin ang tulong ng platform ng IFTTT upang mai -link ang aming Wi-Fi sa mga notification sa SMS / E-mail. Gagamitin din namin ang MQTT Dashboard Android App upang subaybayan ang aming paggamit ng Enerhiya. Kaya't Magsimula tayo….
Mga Materyal na Kinakailangan:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Kasalukuyang sensor
- Anumang AC Appliance
- Mga Wire na Lalaki-Babae
Paggawa ng ACS712 Kasalukuyang Sensor:
Bago namin simulan ang pagbuo ng proyekto napakahalaga para sa amin na maunawaan ang pagtatrabaho ng ACS712 Kasalukuyang sensor dahil ito ang pangunahing sangkap ng proyekto. Ang pagsukat ng kasalukuyang lalo na ang kasalukuyang AC ay palaging isang matigas na gawain dahil sa ingay kasama ng hindi tamang problema sa paghihiwalay atbp. Ngunit, sa tulong ng ACS712 module na ito na ininhinyero ng Allegro bagay ay naging mas madali.
Gumagana ang modyul na ito sa prinsipyo ng Hall-effect, na natuklasan ni Dr. Edwin Hall. Ayon sa kanyang prinsipyo, kapag ang isang kasalukuyang nagdadala konduktor ay inilalagay sa isang magnetic field, ang isang boltahe ay nabuo sa mga gilid nito patapat sa mga direksyon ng parehong kasalukuyang at ang magnetic field. Huwag tayong lumalim sa konsepto ngunit, sa madaling salita ay gumagamit kami ng isang sensor ng hall upang sukatin ang magnetikong patlang sa paligid ng isang kasalukuyang dalang konduktor. Ang pagsukat na ito ay magiging sa mga tuntunin ng millivolts na tinawag namin bilang boltahe ng bulwagan. Ang sinusukat na hall-voltage na ito ay proporsyonal sa kasalukuyang dumadaloy sa pamamagitan ng conductor.
Ang pangunahing bentahe ng paggamit ng ACS712 Kasalukuyang Sensor ay na maaaring masukat ang parehong AC at DC kasalukuyang at nagbibigay din ito ng paghihiwalay sa pagitan ng Load (AC / DC load) at Unit ng Pagsukat (bahagi ng Microcontroller). Tulad ng ipinakita sa larawan mayroon kaming tatlong mga pin sa module na kung saan ay Vcc, Vout at Ground ayon sa pagkakabanggit.
Ang 2-pin terminal block ay kung saan ang kasalukuyang nagdadala ng kawad ay dapat na dumaan. Gumagana ang module sa + 5V kaya ang Vcc ay dapat na pinalakas ng 5V at ang lupa ay dapat na konektado sa Ground ng system. Ang Vout pin ay mayroong isang offset boltahe na 2500mV, ibig sabihin kapag walang kasalukuyang dumadaloy sa pamamagitan ng wire pagkatapos ang output boltahe ay magiging 2500mV at kapag ang kasalukuyang daloy ay positibo, ang boltahe ay magiging mas malaki sa 2500mV at kapag ang kasalukuyang dumadaloy ay negatibo, ang ang boltahe ay magiging mas mababa sa 2500mV.
Gagamitin namin ang Analog pin ng Arduino upang mabasa ang output voltage (Vout) ng module, na magiging 512 (2500mV) kapag walang kasalukuyang dumadaloy sa pamamagitan ng kawad. Ang halagang ito ay mababawasan habang ang kasalukuyang daloy sa negatibong direksyon at tataas habang ang kasalukuyang daloy sa positibong direksyon. Tutulungan ka ng talahanayan sa ibaba na maunawaan kung paano nag-iiba ang boltahe ng output at halaga ng ADC batay sa kasalukuyang dumadaloy sa pamamagitan ng kawad.
Ang mga halagang ito ay kinakalkula batay sa impormasyong ibinigay sa Datasheet ng ACS712. Maaari mo ring kalkulahin ang mga ito gamit ang mga formula sa ibaba:
Vout Boltahe (mV) = (Halaga ng ADC / 1023) * 5000 Kasalukuyang Sa pamamagitan ng Wire (A) = (Vout (mv) -2500) / 185
Ngayon, na alam natin kung paano gumagana ang ACS712 Sensor at kung ano ang maaari nating asahan mula rito. Magpatuloy tayo sa diagram ng circuit.
Ginamit namin ang sensor na ito upang makagawa ng Digital Ammeter Circuit gamit ang PIC Microcontroller at ACS712.
Diagram ng circuit
Hakbang 1: Mag-login sa IFTTT kasama ang iyong mga kredensyal.
Hakbang 2: Sa Aking Mga Applet, Mag-click sa Bagong Applet
Hakbang 3: Mag-click sa + ito
Hakbang 4: Maghanap sa AdaFruit at mag-click dito.
Hakbang 5: Mag-click sa Subaybayan ang isang feed sa AdaFruit IO.
Hakbang 6: Piliin ang Feed bilang singil, Pakikipag-ugnay bilang ' pantay sa' at ang halaga ng threshold kung saan mo nais ang isang E-mail. Mag-click sa Gumawa ng aksyon . Gumamit ako ng 4 bilang aking halaga ng pag-trigger ng threshold.
Hakbang 7: Mag-click sa + iyon . Maghanap para sa G-mail at mag-click dito at Mag-login gamit ang iyong mga kredensyal sa g-mail.
Hakbang 8: Mag-click sa magpadala sa iyong sarili ng isang email.
Hakbang 9: Isulat ang iyong paksa at katawan tulad ng ipinakita at i-click upang likhain.
Hakbang 10: Ang iyong ' resipe ' ay handa na. Suriin ito at mag-click sa tapusin.
Ngayon, tapos na kami sa pagsasama ng web. Ituloy natin ang bahagi ng pag-coding..
Code at Paliwanag:
Gumagamit kami ng serial na komunikasyon sa pagitan ng ESP12 at Arduino. Kaya, kailangan naming magsulat ng code para sa parehong Arduino at NodeMCU para sa paglilipat at pagtanggap.
Code para sa Bahaging Transmitter hal para sa Arduino Uno:
Ang kumpletong Arduino code ay ibinibigay sa pagtatapos ng tutorial na ito. Gagamitin namin ang library para sa Kasalukuyang sensor na maaaring ma-download mula sa Link na ito.
Ang library na ito ay may built-in na function upang makalkula ang kasalukuyang. Maaari mong isulat ang iyong code upang makalkula ang kasalukuyang ngunit ang aklatan na ito ay may tumpak na kasalukuyang pagsukat ng mga algorithm.
Una, isama ang library para sa kasalukuyang sensor bilang:
# isama ang "ACS712.h"
Gumawa ng isang array upang mag-imbak ng kuryente para sa pagpapadala nito sa NodeMCU.
char watt;
Lumikha ng isang halimbawa upang magamit ang ACS712-30Amp sa PIN A0. Baguhin ang Unang argumento kung gumagamit ka ng 20Amp o 5 Amp variant.
ACS712 sensor (ACS712_30A, A0);
Sa pag- andar ng pag- setup , tukuyin ang baud rate na 115200 upang makipag-usap sa NodeMCU. Tumawag sa sensor.calibrate () na pagpapaandar para sa pag-calibrate ng kasalukuyang sensor upang makakuha ng tumpak na pagbabasa.
void setup () { Serial.begin (115200); sensor.calibrate (); }
Sa pagpapaandar ng loop , tatawagan namin ang sensor.getCurrentAC (); pagpapaandar upang makuha ang kasalukuyang halaga at mag-imbak sa variable ng float I. Matapos makuha ang kasalukuyang, kalkulahin ang kapangyarihan gamit ang P = V * I formula. Gumagamit kami ng 230V dahil ito ang karaniwang pamantayan sa mga bansang Europa, Baguhin sa iyong lokal, kung kinakailangan
void loop () { float V = 230; float ko = sensor.getCurrentAC (); lumutang P = V * I;
Ang mga linyang ito ay binabago ang lakas sa Wh.
last_time = kasalukuyang_time; kasalukuyang_time = millis (); Wh = Wh + P * ((kasalukuyang_time -last_time) /3600000.0);
Ngayon, kailangan nating i-convert ang Wh na ito sa form ng character upang maipadala ito sa NodeMCU, para sa dtostrf (); i-convert ang isang float sa isang char array upang madali itong mai-print:
dtostrf (Wh, 4, 2, watt);
Ang format ay:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Isulat ang array ng character na ito sa serial buffer gamit ang Serial.write () ; pagpapaandar Ipapadala nito ang halaga ng Wh sa NodeMCU.
Serial.write (watt); pagkaantala (10000); }
Code para sa Bahaging Tagatanggap ng NodeMCU ESP12:
Para sa mga ito kailangan namin ng AdaFruit MQTT library na maaaring ma-download mula sa link na ito.
Ngayon, buksan ang Arduino IDE. Pumunta sa mga halimbawa -> AdaFruit MQTT library -> mqtt_esp8266
I-e-edit namin ang code na ito alinsunod sa aming mga key ng AIO at mga kredensyal ng Wi-Fi at papasok na serial data mula sa Arduino.
Una, isinama namin ang lahat ng mga silid-aklatan para sa ESP12 Wi-Fi Module at AdaFruit MQTT.
# isama
Tinutukoy namin ang SSID at Password para sa iyong Wi-Fi, kung saan nais mong ikonekta ang iyong ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Tinutukoy ng seksyong ito ang AdaFruit server at server port na naayos bilang "io.adafruit.com" at "1883" ayon sa pagkakabanggit.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Palitan ang mga patlang na ito ng iyong username at mga key ng AIO na kinopya mo mula sa AdaFruit site habang ginagawa ang Feed.
#define AIO_USERNAME "********" #define AIO_KEY "*****************************"
Pagkatapos ay lumikha kami ng isang klase ng ESP12 WiFiClient upang kumonekta sa MQTT server.
Client ng WiFiClient;
I-setup ang klase ng kliyente ng MQTT sa pamamagitan ng pagpasa sa client ng WiFi at MQTT server at mga detalye sa pag-login.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
I-setup ang isang feed na tinatawag na 'Power' at 'bill' para sa pag-publish sa mga pagbabago.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
Sa pag- andar ng pag- setup , ikinonekta namin ang module ng Wi-Fi sa access point ng Wi-fi.
void setup () { Serial.begin (115200); antala (10); Serial.println (F ("Adafruit MQTT demo")); // Kumonekta sa access point ng WiFi. Serial.println (); Serial.println (); Serial.print ("Kumokonekta sa"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
Sa pagpapaandar ng loop , susuriin namin ang papasok na data mula sa Arduino at mai-publish ang data na ito sa AdaFruit IO.
void loop () { // Tiyaking ang koneksyon sa MQTT server ay buhay (gagawin nito ang unang // koneksyon at awtomatikong muling kumonekta kapag naka-disconnect). Tingnan ang MQTT_connect // kahulugan ng pagpapaandar sa ibaba. MQTT_connect (); int i = 0; float watt1;
Sinusuri ng pagpapaandar na ito ang papasok na data mula sa Arduino at iimbak ang data na ito sa watt array gamit ang serial.read () na function.
kung (Serial.available ()> 0) { pagkaantala (100); // pinapayagan ang lahat ng serial na ipinadala na matanggap na magkasama habang (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
atof () function na i-convert ang mga character sa float na halaga at iimbak namin ang float na halaga na ito sa isa pang float variable watt1.
watt1 = atof (watt);
Kalkulahin ang halaga ng singil sa pamamagitan ng pagpaparami ng lakas (sa Wh) na may taripa ng enerhiya at hatiin ito ng 1000 upang makagawa ng lakas sa KWh.
bill_amount = watt1 * (energyTariff / 1000); // 1unit = 1kwH
Ngayon ay maaari na nating mai-publish ang mga bagay-bagay!
Serial.print (F ("\ nSending Power val")); Serial.println (watt1); Serial.print ("…");
Ang piraso ng code na ito ay naglalathala ng mga halaga ng kuryente sa Power feed
kung (! Power.publish (watt1)) { Serial.println (F ("Nabigo")); } iba pa { Serial.println (F ("OK!")); }
Ipapalathala nito ang singil sa kuryente sa feed ng bill .
kung (! bill.publish (bill_amount)) { Serial.println (F ("Nabigo")); } iba pa { Serial.println (F ("OK!")); }
Ang aming halaga ng singil ay maaaring magbago nang mabilis ngunit ang IFTTT ay nangangailangan ng oras upang ma-trigger ang applet upang ang mga linyang ito ay magbibigay ng oras para sa pag-trigger upang makatanggap kami ng email ng threshold.
Baguhin ang halaga ng bill_amount kung saan mo nais makakuha ng email. Gayundin, baguhin ang pag-set up ng IFTTT AdaFruit IO.
kung (bill_amount == 4) { para sa (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); pagkaantala (5000); } bill_amount = 6; }
Ang Kumpletong Code para sa Arduino at NodeMCU ESP12 ay ibinibigay sa pagtatapos ng tutorial na ito.
Ngayon, i-upload ang mga code sa parehong mga board. Ikonekta ang iyong hardware tulad ng ipinapakita sa diagram ng Circuit at Buksan io.adafruit.com. Buksan ang dashboard na iyong nilikha. Makikita mo ang pag-update ng Kuryente at ang singil sa kuryente ay ina-update.
Kapag naabot ang iyong singil sa INR 4 pagkatapos ay makakakuha ka ng isang email na tulad nito.
Android App para sa Pagsubaybay sa Pagkonsumo ng Elektrisidad:
Maaari mong gamitin ang Android App para sa pagsubaybay sa mga halaga. Para sa pag-download na ito ng MQTT Dashboard android app mula sa Play store o mula sa Link na ito.
Upang mag-setup ng koneksyon sa io.adafruit.com sundin ang mga hakbang na ito:
Hakbang 1: Buksan ang App at mag-click sa tanda na “+”. Punan ang Client Id anumang nais mo. Ang server at port ay mananatiling kapareho ng ipinakita sa screenshot. Makakakuha ka ng Username at password (Aktibo key) mula sa dashboard ng AdaFruit IO tulad ng ipinakita sa ibaba.
Aktibo Key ang iyong password.
Hakbang 2: Piliin ang Meter ng Elektrisidad at piliin ang Mag-subscribe. Sa subscription, magbigay ng pangalan ng kaibigan at paksa. Ang format ng paksa ay ' yourusername' / feeds / 'feedname' at mag-click sa lumikha.
Hakbang 3: Sa parehong paraan, gumawa ng subscription para sa feed ng bill.
Hakbang 4: Tulad ng pag-ubos ng enerhiya ng iyong mga kasangkapan sa bahay, ang mga na-update na halaga ay ipapakita sa ilalim ng Power at Bill .
Ito ang paraan kung paano ka makakalikha ng isang Smart Electricity Energy Meter, na maaaring hindi lamang subaybayan mula sa kahit saan sa mundo ngunit mag-uudyok din ng Email kapag mayroon kang mataas na pagkonsumo ng Elektrisidad.
Suriin din ang aming lahat ng Mga Proyekto ng IoT.