Talaan ng mga Nilalaman:

ARDUINO ENERGY METER: 10 Hakbang (na may Mga Larawan)
ARDUINO ENERGY METER: 10 Hakbang (na may Mga Larawan)

Video: ARDUINO ENERGY METER: 10 Hakbang (na may Mga Larawan)

Video: ARDUINO ENERGY METER: 10 Hakbang (na may Mga Larawan)
Video: DR. VICKI BELO's TRANSFORMATION💖🤩#vickibelo #doctor #transformation #viral #trending 2024, Hulyo
Anonim
Image
Image
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER

[Mag-play ng Video]

Ako ay kabilang sa isang nayon ng Odisha, India kung saan ang madalas na pag-cut ng kuryente ay napaka-karaniwan. Hinahadlangan nito ang buhay ng bawat isa. Sa panahon ng aking pagkabata patuloy na pag-aaral pagkatapos ng takipsilim ay isang tunay na hamon. Dahil sa problemang ito nagdisenyo ako ng isang solar system para sa aking tahanan sa isang pang-eksperimentong batayan. Gumamit ako ng isang solar panel na 10 Watt, 6V para sa pag-iilaw ng ilang mga maliliwanag na LED. Matapos harapin ang maraming paghihirap ang proyekto ay matagumpay. Pagkatapos ay nagpasya akong subaybayan ang boltahe, kasalukuyang, lakas at enerhiya na kasangkot sa system. Nagdala ito ng ideya ng pagdisenyo ng isang ENERGY METER. Ginamit ko ang ARDUINO bilang sentro ng proyektong ito sapagkat napakadaling magsulat ng code sa IDE nito at maraming mga bilang ng open source library na magagamit sa internet na maaaring magamit ayon sa kinakailangan. Sinubukan ko ang proyekto para sa napakaliit na na-rate na (10Watt) solar system ngunit madali itong mabago upang magamit para sa mas mataas na system ng rating.

Mahahanap mo ang lahat ng aking mga proyekto sa:

Tampok: Pagsubaybay ng enerhiya sa pamamagitan ng 1. LCD display 2. sa pamamagitan ng internet (Xively upload) 3. Pag-log ng data sa isang SD card

Maaari mong makita ang aking bagong itinuturo na ARDUINO MPPT SOLAR CHARGE CONTROLLER (Bersyon-3.0)

Maaari mo ring makita ang aking iba pang mga itinuturo sa

ARDUINO SOLAR CHARGE CONTROLLER (Bersyon 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Bersyon-1)

Hakbang 1: Kinakailangan ang Mga Bahagi:

Mga Kinakailangan na Bahagi
Mga Kinakailangan na Bahagi

1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)

3. 16x2 CHARACTER LCD (Amazon)

4. ACS 712 CURRENT SENSOR (Amazon) 4. Mga RESISTOR (10k, 330ohm) (Amazon) 5. 10K POTENTIOMETER (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET CABLE (Amazon) 8. BREAD BOARD (Amazon)

Hakbang 2: Lakas at Enerhiya

Lakas: Ang lakas ay produkto ng boltahe (volt) at kasalukuyang (Amp) P = VxI Ang yunit ng lakas ay Watt o KWEnergy: Ang enerhiya ay produkto ng lakas (watt) at oras (Oras) E = Pxt Yunit ng Enerhiya ay Watt Hour o Kilowatt Oras (kWh) Mula sa nabanggit na pormula malinaw na upang sukatin ang Enerhiya kailangan natin ng tatlong mga parameter 1. Boltahe 2. Kasalukuyan 3. Oras

Hakbang 3: Pagsukat ng Boltahe

Pagsukat ng Boltahe
Pagsukat ng Boltahe
Pagsukat ng Boltahe
Pagsukat ng Boltahe
Pagsukat ng Boltahe
Pagsukat ng Boltahe

Sinusukat ang boltahe sa tulong ng isang circuit ng divider ng boltahe. Tulad ng ang boltahe ng input ng analog na ARDUINO ay limitado sa 5V na dinisenyo ko ang boltahe na divider sa isang paraan na ang output boltahe mula dito ay dapat mas mababa sa 5V. Ang aking baterya na ginamit para sa pagtatago ng Ang lakas mula sa solar panel ay na-rate na 6v, 5.5Ah. Kaya't kailangan kong bumaba sa 6.5v na ito sa isang boltahe na mas mababa sa 5V. Gumamit ako ng R1 = 10k at R2 = 10K. Ang halaga ng R1 at R2 ay maaaring mas mababa sa isa ngunit ang problema ay kapag ang pagtutol ay mababa mas mataas na kasalukuyang daloy sa pamamagitan nito bilang isang resulta malaking halaga ng lakas (P = I ^ 2R) na nawala sa anyo ng init. Kaya't maaaring pumili ng iba`t ibang halaga ng paglaban ngunit dapat mag-ingat upang mabawasan ang pagkawala ng kuryente sa paglaban. Vout = R2 / (R1 + R2) * Vbat Vbat = 6.5 kapag ganap na nasingil R1 = 10k at R2 = 10k Vout = 10 / (10 + 10) * 6.5 = 3.25v na mas mababa sa 5v at angkop para sa ARDUINO analog pinNOTE I ipinakita ang 9 Volt na baterya sa bared board circuit ay halimbawa lamang upang ikonekta ang mga wire. Ngunit ang aktwal na baterya na ginamit ko ay isang 6 Volt, 5.5Ah lead acid na baterya. Pag-calibrate ng Voltage: Kapag ang baterya ay ganap na nasingil (6.5v) makakakuha tayo isang Vout = 3.25v at mas mababang halaga para sa iba pang mas mababang boltahe ng baterya. Ang AEDUINO ADC ay nag-convert ng signal ng Analog sa kaukulang digital na approximation. Kapag ang boltahe ng baterya ay 6.5v Nakuha ko ang 3.25v mula sa voltage divider at sample1 = 696 sa serial monitor, kung saan ang sample1 ay ang halaga ng ADC ay tumutugma sa 3.25v Para sa mas mahusay na pag-unawa na na-attach ko ang real time simulation ng 123D.circuit para sa pagsukat ng boltahe Pagkakalibrate: Ang 3.25v na katumbas ng 696 1 ay katumbas ng 3.25 / 696 = 4.669mv Vout = (4.669 * sample1) / 1000 volt Ang tunay na boltahe ng baterya = (2 * Vout) voltARDUINO CODE: // pagkuha ng 150 mga sample mula sa voltage divider na may agwat ng 2sec at pagkatapos ay average ang mga sample na data na nakolekta para sa (int i = 0; i <150; i ++) {sample1 = sample1 + analogRead (A2); // basahin ang boltahe mula sa pagkaantala ng divider circuit (2); } sample1 = sample1 / 150; boltahe = 4.669 * 2 * sample1 / 1000;

Hakbang 4: Kasalukuyang Pagsukat

Kasalukuyang Pagsukat
Kasalukuyang Pagsukat
Kasalukuyang Pagsukat
Kasalukuyang Pagsukat

Para sa kasalukuyang pagsukat gumamit ako ng isang Hall Effect kasalukuyang sensor ACS 712 (20 A). Mayroong iba't ibang kasalukuyang saklaw na ACS712 sensor na magagamit sa merkado, kaya pumili ayon sa iyong kinakailangan. Sa diagram ng board board ay ipinakita ko ang LED bilang isang pagkarga ngunit ang aktwal na pagkarga ay magkakaiba. PRINCIPLE NG PAGSASAKIT: Ang Hall Effect ay ang paggawa ng isang pagkakaiba sa boltahe (ang boltahe ng Hall) sa isang konduktor na de koryente, na lumilipat sa isang kasalukuyang kuryente sa conductor at isang magnetikong patlang patayo sa kasalukuyang. Upang malaman ang higit pa tungkol sa sensor ng Hall Effect click dito VCC / 2 = 5v / 2 = 2.5VCalibration: Ang pagbasa ng analog ay gumagawa ng isang halaga ng 0-1023, na tumutugma sa 0v hanggang 5v Kaya ang Analog basahin ang 1 = (5/1024) V = 4.89mv Halaga = (4.89 * Halaga ng Basahin ang analog) / 1000 V Ngunit bilang ng bawat sheet ng data offset ay 2.5V (Kapag kasalukuyang zero makakakuha ka ng 2.5V mula sa output ng sensor) Tunay na halaga = (halaga-2.5) V Kasalukuyang sa amp = aktwal na halaga * 10ARDUINO CODE: // pagkuha ng 150 mga sample mula sa mga sensor na may agwat ng 2sec at pagkatapos ay average ang mga sample na data na nakolekta para sa (int i = 0; i <150; i ++) {sample2 + = analogRead (A3); // basahin ang kasalukuyang mula sa pagkaantala ng sensor (2); } sample2 = sample2 / 150; val = (5.0 * sample2) /1024.0; actualval = val-2.5; // offset voltage ay 2.5v amps = actualval * 10;

Hakbang 5: Pagsukat ng Oras

Para sa pagsukat ng oras hindi na kailangan ng anumang panlabas na hardware, dahil ang ARDUINO mismo ay may inbuilt timer. Ang pagpapaandar ng millis () ay nagbabalik ng hindi ng mga milliseconds mula nang magsimula ang Arduino board na magpatakbo ng kasalukuyang programa. Kard ng CardUINO: mahabang milisec = millis (); // kalkulahin ang oras sa milliseconds mahabang panahon = milisec / 1000; // convert milliseconds to segundo

Hakbang 6: Paano Kinakalkula ng ARDUINO ang Lakas at Enerhiya

totamp = totamp + amps; // kalkulahin ang kabuuang mga ampg avgamp = totamp / oras; // average amps amphr = (mga avgamp * oras) / 3600; // amp-hour watt = boltahe * amps; // power = voltage * kasalukuyang enerhiya = (watt * time) / 3600; Ang Watt-sec ay muling nai-convert sa Watt-Hr sa pamamagitan ng paghahati ng 1hr (3600sec) // enerhiya = (watt * time) / (1000 * 3600); para sa pagbabasa sa kWh

Hakbang 7: Visual Output

Visual Output
Visual Output

Ang lahat ng mga resulta ay maaaring mailarawan sa serial monitor o sa pamamagitan ng paggamit ng isang LCD. Gumamit ako ng isang 16x2 character LCD upang maipakita ang lahat ng mga resulta na nakuha sa mga nakaraang hakbang. Para sa mga iskematiko tingnan ang circuit board ng tinapay na ipinakita sa itaas. Ikonekta ang LCD sa ARDUINO tulad ng ibinigay sa ibaba: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Resistor o Potentiometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino - Hindi Konektado 8. D1 -> Arduino - Hindi Konektado 9. D2 -> Arduino - Hindi Konektado 10. D3 -> Arduino - Hindi Konektado 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Resistor (Backlight power) 16. K -> Arduino GND (Backlight ground) ARDUINO CODE: Para sa Serial Monitor:

Serial.print ("VOLTAGE:"); Serial.print (boltahe); Serial.println ("Volt"); Serial.print ("CURRENT:"); Serial.print (amps); Serial.println ("Amps"); Serial.print ("POWER:"); Serial.print (watt); Serial.println ("Watt"); Serial.print ("ENERGY CONSUMED:"); Serial.print (enerhiya); Serial.println ("Watt-Hour"); Serial.println (""); // print the next set of parameter after a blangko linya pagkaantala (2000); Para sa LCD: Para sa LCD display kailangan mo munang i-import ang "LiquidCrystal" library sa code. Upang malaman ang higit pa tungkol sa library ng LequidCrystal mag-click dito Para sa LCD tutorial clickhere Ang sumusunod na code ay isang format upang ipakita sa LCD ang lahat ng pagkalkula para sa lakas at enerhiya # isama ang lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // itakda ang pin 9 bilang output analogWrite (backLight, 150); // kinokontrol ang backlight intensity 0-254 lcd.begin (16, 2); // mga haligi, hilera. laki ng display lcd.clear (); // clear the screen} void loop () {lcd.setCursor (16, 1); // itakda ang cursor sa labas ng count count ng lcd.print (""); // print walang laman na pagkaantala ng character (600); // ///. // ///. (1, 0); // itakda ang cursor sa 1st col at 1st row lcd.print (watt); lcd.print ("W"); lcd.print (boltahe); lcd.print ("V"); lcd.setCursor (1, 1); // itakda ang cursor sa 1st col at 2nd row lcd.print (enerhiya); lcd.print ("WH"); lcd.print (amps); lcd.print ("A"); }

Hakbang 8: Pag-upload ng Data sa Xively.com

Pag-upload ng Data sa Xively.com
Pag-upload ng Data sa Xively.com
Pag-upload ng Data sa Xively.com
Pag-upload ng Data sa Xively.com
Pag-upload ng Data sa Xively.com
Pag-upload ng Data sa Xively.com

Sumangguni sa mga screenshot sa itaas para sa mas mahusay sa ilalim ng pagtayo. Para sa pag-upload ng data sa xively.com ang sumusunod na library upang ma-download muna HttpClient: mag-click ditoXively: mag-click ditoSPI: Mag-import mula sa arduino IDE (sketch -> I-import ang library…..) Ethernet: Mag-import mula sa arduino IDE ((sketch -> Mag-import ng library …..) Magbukas ng isang account gamit ang https://xively.com (dating pachube.com at cosm.com) Mag-sign up para sa isang libreng account ng developer sa

Pumili ng isang username, password, itakda ang iyong addressand time zone atbp Makakatanggap ka ng isang email sa kumpirmasyon;

pagkatapos ay i-click ang link sa pag-aktibo upang maisaaktibo ang iyong account. Matapos matagumpay na buksan ang account ay lumipat ka sa Pag-unlad ng mga aparato

  • Mag-click sa + Magdagdag ng kahon ng Device
  • Magbigay ng isang pangalan sa iyong aparato at paglalarawan (hal. MONITORING NG PAGSUSURI) ·
  • Pumili ng pribado o pampublikong data (pipiliin ko ang pribado) ·
  • Mag-click sa Magdagdag ng Device

Matapos idagdag ang aparato maililipat ka sa isang bagong pahina kung saan naroon ang maraming mahalagang impormasyon

  • Product ID, Product Secret, Serial Number, Activation Code ·
  • Feed ID, FeedURL, API End Point (Ginagamit ang feed ID sa ARDUINO code)
  • Magdagdag ng Mga Channel (IChoose ENERGY at POWER, ngunit maaari kang pumili ayon sa iyong pipiliin) Bigyan ang unit at simbolo para sa parameter ·
  • Idagdag ang yourlocation ·
  • Mga API key (ginamit sa ARDUINO code, iwasang ibahagi ang numerong ito) ·
  • Mga Trigger (pahina ng aw awing kapag nangyari ang isang kaganapan, tulad ng kapag lumampas ang pagkonsumo ng enerhiya sa isang tiyak na limit)

Hakbang 9: Xively at ARDUINO Code

Dito ko ikinabit ang kumpletong code (bersyon ng beta) para sa metro ng enerhiya na hindi kasama ang pag-log ng data ng SD card na nakalakip nang magkahiwalay sa susunod na hakbang. / ** Mag-upload ng data ng pagsubaybay ng enerhiya sa xively ** / # isama ang # isama ang # isama ang # isama ang #define API_KEY "xxxxxxxx" // Ipasok ang iyong Xively API key #define FEED_ID xxxxxxxxx // Ipasok ang iyong Xively feed ID // MAC address para sa iyong Ethernet shield byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analog pin na sinusubaybayan namin (0 at 1 ay ginagamit ng Ethernet protection) int sensorPin = 2; unsigned long lastConnectionTime = 0; // last time na kumonekta kami sa Cosm const unsigned long connectionInterval = 15000; // pagkaantala sa pagitan ng pagkonekta sa Cosm sa milliseconds // Initialize the Cosm library // Tukuyin ang string para sa aming datastream ID char sensorId = "POWER"; char sensorId2 = "ENERGY"; XivelyDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Balot ang datastream sa isang feed na XivelyFeed feed (FEED_ID, datastreams, 2 / * bilang ng mga datastreams * /); Ethernet client ng kliyente; XivelyClient xivelyclient (client); void setup () {Serial.begin (9600); Serial.println ("Initializing network"); habang (Ethernet.begin (mac)! = 1) {Serial.println ("Error sa pagkuha ng IP address sa pamamagitan ng DHCP, subukang muli …"); pagkaantala (15000); } Serial.println ("Nasimulan ang network"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // send data to xively getData (); // basahin ang datastream pabalik mula xively lastConnectionTime = millis (); // update time ng koneksyon kaya naghihintay kami bago kumonekta muli}} void sendData () {int sensor1 = watt; int sensor2 = enerhiya; datastreams [0].setFloat (sensor1); // power halaga datastreams [1].setFloat (sensor2); // halaga ng enerhiya Serial.print ("Basahin ang lakas"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Basahin ang enerhiya"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Pag-upload sa Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("PUT return code:"); Serial.println (ret); Serial.println (); } // makuha ang halaga ng datastream mula sa xively, i-print ang halagang natanggap namin na void getData () {Serial.println ("Pagbasa ng data mula sa Xively"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); kung (ret> 0) {Serial.print ("Datastream ay:"); Serial.println (feed [0]); Serial.print ("Ang halaga ng lakas ay:"); Serial.println (feed [0].getFloat ()); Serial.print ("Ang Datastream ay:"); Serial.println (feed [1]); Serial.print ("Ang halaga ng enerhiya ay:"); Serial.println (feed [1].getFloat ()); } Serial.println ();

Hakbang 10: Pag-log ng Data sa isang SD Card

Para sa pag-iimbak ng data sa isang SD card kailangan mong i-import ang SD library Para sa tutorial na mag-click dito Upang malaman ang higit pa tungkol sa pag-click sa SD library dito pagsulat ng code para sa pagpapakita ng LCD at pag-upload ng data xively.com. Ngunit sinusubukan kong pagbutihin ang code ng bersyon ng beta upang ang isang solong code ay maaaring maglaman ng lahat ng mga tampok (pagpapakita ng LCD, pag-upload ng Xively data at pag-iimbak ng data sa isang SD card). Ang code para sa pag-log ng data ay nakakabit sa ibaba. Kung ang sinumang sumulat ng mas mahusay na code sa pamamagitan ng pagbabago ng aking code mangyaring ibahagi sa akin. Ito ang aking unang teknikal na itinuturo, Kung may makahanap man ng anumang pagkakamali dito, huwag mag-atubiling magbigay ng puna.. upang mapabuti ko ang aking sarili. Kung makakita ka ng mga lugar ng pagpapabuti sa proyektong ito mangyaring magkomento o mensahe sa akin, Kaya't ang proyekto ay magiging mas malakas. Sa palagay ko ito ay magiging kapaki-pakinabang para sa iba pati na rin para sa akin.

123D Circuits Contest
123D Circuits Contest
123D Circuits Contest
123D Circuits Contest

Ikatlong Gantimpala sa 123D Circuits Contest

Inirerekumendang: