- Pagpili ng Tamang Mga Bahagi para sa IoT Pinagana ang Solar Power Monitor
- Circuit Diagram para sa IoT batay sa Solar Power Monitoring
- Pagse-set up ng ThingSpeak
- Arduino Code para sa Solar Power Monitoring gamit ang ESP32
- Data ng Pagsubok at Pagsubaybay
Sa larangan ng nababagong enerhiya, ang enerhiya ng solar ay nangunguna, sapagkat ang paggawa ng enerhiya sa pamamagitan ng paggamit ng lakas ng araw ay ang pinakamadali at mabubuhay na komersyal na paraan ng nababagong enerhiya. Pinag-uusapan ang mga solar panel, ang output power ng isang output ng solar panel ay kailangang subaybayan upang makakuha ng pinakamabuting kalagayan na output ng kuryente mula sa mga panel. Ito ang dahilan kung bakit kinakailangan ang isang real-time na sistema ng pagsubaybay. Sa isang malaking halaman ng solar power, maaari rin itong magamit upang masubaybayan ang output ng kuryente mula sa bawat panel na makakatulong makilala ang dust buildup. Pinipigilan din nito ang anumang mga kundisyon ng kasalanan sa panahon ng operasyon. Sa ilan sa aming nakaraang mga artikulo, nakabuo kami ng ilang mga proyekto na nauugnay sa enerhiya ng solar tulad ng isang charger ng cell phone na pinapatakbo ng solar at solar inverter circuit, atbp. Maaari mong suriin ang mga iyon kung naghahanap ka ng maraming mga proyekto sa solar power.
Sa proyektong ito, gagawa kami ng isang IoT-based Solar Power Monitoring System sa pamamagitan ng pagsasama ng pamamaraan ng pagsingil na batay sa baterya ng MPPT (Maximum Power Point Tracker), na makakatulong upang mabawasan ang oras ng pagsingil at pagbutihin ang kahusayan. Gayundin, susukatin namin ang temperatura ng panel, output boltahe, at kasalukuyang upang mapabuti ang kaligtasan na aspeto ng circuit. Panghuli, upang itaas ang lahat, gagamitin namin ang mga serbisyo ng ulap na ThingSpeak upang subaybayan ang data ng output mula sa kahit saan sa buong mundo. Tandaan na ang proyektong ito ay isang pagpapatuloy ng MPPT Solar Charge Controller Project na itinayo namin mas maaga. Dito, susubaybayan namin ang output boltahe, kasalukuyang, at lakas ng panel gamit ang ESP32 IoT development board.
Pagpili ng Tamang Mga Bahagi para sa IoT Pinagana ang Solar Power Monitor
Sa pamamagitan ng isang solar monitor, napakadali upang subaybayan at makita ang mga pagkakamali sa anumang solar system. Ito ang dahilan kung bakit ang pagpili ng sangkap ay nagiging isang napakahalagang bahagi kapag nagdidisenyo ng naturang system. Ibinigay sa ibaba ang listahan ng mga bahagi na ginamit namin.
- Board ng ESP32 dev
- MPPT circuit (maaaring maging anumang solar circuit)
- Isang shunt resistor (halimbawa 1 Ohm 1 watt - angkop para sa hanggang sa 1A ng kasalukuyang)
- Isang baterya ng lithium (ginustong 7.4v).
- Aktibong koneksyon sa Wi-Fi
- Temperatura sensor para sa solar panel
- Voltage divider circuit (tingnan ang paglalarawan)
Esp32 Dev Board:
Para sa isang application na pinagana ng IoT, mahalaga na pumili ng tamang uri ng board ng pag-unlad na makakapagproseso ng data mula sa mga analog na pin nito at maipapadala ang data sa pamamagitan ng anumang uri ng protocol ng koneksyon tulad ng Wi-Fi o sa cloud server Partikular naming pinili ang ESP32 dahil ito ay isang murang microcontroller na may toneladang mga tampok. Gayundin, mayroon itong built-in na radyo na Wi-Fi kung saan maaari tayong makakonekta sa internet nang napakadali.
Solar Circuit:
Ang isang circuit ng pagsingil ng solar ay isang circuit na nakakakuha ng mas mataas na boltahe mula sa solar panel at pinapalitan ito pababa sa isang boltahe ng pagsingil upang ito ay mahusay na makarga ang baterya. Para sa proyektong ito, gagamitin namin ang batay sa LT3562 batay sa MPPT Charge Controller Circuit Board na nagawa na namin sa isa sa aming naunang mga proyekto. Ngunit kung nais mong i-embed ang IoT paganahin ang pagsubaybay, maaari mong gamitin ang anumang uri ng solar circuit. Pinili namin ang board na ito dahil ang circuit ay nilagyan ng Maximum Power Point Tracking (MPPT) na kapaki-pakinabang para sa mga proyektong solar power na mababa ang lakas. Ito ay isang mahusay na paraan upang singilin ang isang maliit na baterya ng lithium mula sa isang solar panel.
Shunt Resistor:
Ang sinumang risistor ay sumusunod sa batas ng ohm na nangangahulugang kung ang isang tiyak na halaga ng kasalukuyang dumadaloy sa pamamagitan ng risistor, lilitaw ang isang tiyak na halaga ng pagbagsak ng boltahe. Ang shunt resistors ay hindi isang pagbubukod nito at partikular itong ginagamit upang masukat ang kasalukuyang daloy. Gayunpaman, nakasalalay sa nominal na kasalukuyang daloy sa pamamagitan ng solar panel, pumili ng isang shunt risistor na makakapagdulot ng sapat na halaga ng boltahe na maaaring masukat sa yunit ng microcontroller. Ngunit, sa parehong oras, ang wattage ng risistor ay isang mahalagang bagay din. Ang pagpili ng shunt resistor wattage ay mahalaga din.
Maaaring makalkula ang drop ng boltahe gamit ang pormula na ibinigay sa ibaba. Kilala ito bilang batas ni Ohm-
V = I x R
Ang V ay ang boltahe na gagawin sa panahon ng 'I' ie ang dami ng kasalukuyang daloy sa pamamagitan ng dami ng risistor na 'R'. Halimbawa, ang 1-ohm risistor ay makagawa ng 1V ng boltahe na drop kapag ang 1A ng kasalukuyang dumadaloy dito.
Para sa wattage ng risistor, maaaring magamit ang formula sa ibaba-
P = I 2 R
Kung saan ako ang maximum na kasalukuyang daloy, at ang R ang halaga ng risistor. Para sa 1A ng kasalukuyang may 1 Ohms risistor, 1 wat ang sapat para sa pagwawaldas ng kuryente. Gayunpaman, kapaki-pakinabang ito para sa mga maliliit na proyekto ng solar panel ngunit hindi talaga angkop para sa mga application na nauugnay sa solar grid. Sa ganitong kaso, ang di-nagsasalakay na kasalukuyang pamamaraan ng pagsukat ay talagang kung ano ang dapat gamitin. Sa ganitong kaso, ang kasalukuyang daloy ay maaaring tumpak na masusukat kung saan ang isang napakababang halaga ng kasalukuyang, pati na rin ang isang napakataas na halaga ng kasalukuyang, ay maaaring masukat.
Baterya ng Lithium:
Ang pagpili ng baterya ng lithium ay isang mahalagang bahagi ng anumang proyekto na nagsasangkot ng mga solar panel. Sapagkat ang unit ng microcontroller na laging nananatili at patuloy na suriin at isinumite ang data ay nangangailangan ng hindi bababa sa isang daang milliampere ng kasalukuyang para sa matatag na operasyon.
Ang kapasidad ng baterya ay dapat na isang bagay na maaaring magbigay lakas sa microcontroller nang hindi bababa sa 4-5 araw kapag ang araw ay hindi nagniningning dahil sa tag-ulan. Mahalaga rin na ang kasalukuyang singilin ay dapat na higit pa sa kasalukuyang pag-load mula sa pananaw ng baterya. Ito ay lubos na hindi pangkaraniwang kung ang isang tao ay nag-uugnay sa 100mA ng pag-load sa isang baterya at nagbibigay ng isang kasalukuyang singil, na mas mababa sa iyon. Upang maging mas ligtas, dapat magkaroon kami ng hindi bababa sa 5 beses na higit na kasalukuyang singilin kaysa sa kasalukuyang pag-load.
Sa kabilang banda, ang boltahe ng baterya ay kailangang mas mataas kaysa sa anumang karaniwang boltahe ng input ng regulator ng boltahe na kinakailangan para sa microcontroller. Halimbawa, ang isang 7.4V lithium na baterya ay maaaring konektado sa parehong 3.3V at 5.0V linear voltage regulator (tulad ng linear regulator ay nangangailangan ng mas mataas na boltahe ng dropout higit sa LDO at Paglipat.)
Sa aming proyekto, gumamit kami ng isang baterya na 4000mAH na may isang rating na 7.4V. Gumamit kami ng isang 5.0V regulator na nagbibigay ng sapat na kasalukuyang at boltahe na output para sa ESP32.
Divider ng Boltahe:
Ang isang divider ng boltahe ay isang mahalagang bahagi ng pagsukat ng boltahe ng panel ng Solar. Dapat pumili ang isa ng isang divider ng boltahe na hahatiin ang boltahe ayon sa input ng microcontroller I / O boltahe.
Piliin ang mga resistor sa itaas sa isang paraan na ang boltahe ng output ng divider output ay hindi dapat lumagpas sa microcontroller maxim I / O boltahe (3.3V para sa ESP32). Gayunpaman, pinayuhan na gumamit ng potensyomiter dahil magbibigay ito ng kakayahang umangkop upang pumili ng anumang solar panel na mas mataas o mas mababang boltahe na rating at madaling maitakda ang boltahe gamit ang isang multimeter.
Sa aming kaso, mayroon kaming potensyomiter sa circuit circuit ng MPPT na kumikilos bilang isang boltahe na divider. Itinakda namin ang divider ng boltahe na may isang factor ng dibisyon ng 6V. Ikinonekta namin ang dalawang multi-meter, isa sa input at isa pa sa output ng palayok, at itinakda ang halaga na kapag ang input boltahe ay 18V ang output ay magiging 3V dahil ang nominal na output boltahe ng solar panel ay 18V.
Temperatura Sensor para sa Solar Panel:
Ang output ng power ng solar panel ay may direktang koneksyon sa temperatura ng solar panel. Bakit? Dahil bilang temperatura ng isang solar panel ay nagsisimula upang madagdagan ang kasalukuyang output mula sa solar panel ay nagdaragdag exponentially habang ang output ng boltahe ay nagsisimula upang mabawasan ang linearly.
Tulad ng formula ng kuryente, ang Wattage ay katumbas ng boltahe beses kasalukuyang (W = V x A), ang pagbawas ng output boltahe ay binabawasan din ang output ng solar panel kahit na ang pagtaas ng kasalukuyang daloy. Ngayon, ang susunod na tanong na pumapasok sa ating isipan ay, kung paano sukatin ang temperatura ng solar? Sa gayon, ito ay kagiliw-giliw na tulad ng mga solar panel ay karaniwang nakalantad sa kapaligiran ng init dahil nakalantad ito sa direktang sikat ng araw at para sa halatang mga kadahilanan. Ang pinakamahusay na paraan upang masukat ang temperatura ng solar panel ay sa pamamagitan ng paggamit ng isang flat sensor ng temperatura sa ibabaw. Iminumungkahi din na gumamit ng isang uri ng thermocouple na K na inilagay nang direkta sa solar panel.
Para sa aming aplikasyon, gumamit kami ng module ng temperatura sensor na nakabatay sa thermistor, na ipinapakita sa ibaba.
Circuit Diagram para sa IoT batay sa Solar Power Monitoring
Ang kumpletong diagram ng circuit para sa IoT Pinagana ang Solar Power Monitor ay ipinapakita sa ibaba. Ang eskematiko ay simple. Ang pulang dash-dot board ay ang MPPT board na ginamit namin para sa proyektong ito.
Pagse-set up ng ThingSpeak
Lumikha ng isang account gamit ang ThingSpeak at pumunta sa opsyong "aking channel", pagkatapos ay mag-click sa Bagong Channel.
Lumikha ng isang bagong channel na may mga pangalan ng patlang.
Ngayon pagkatapos itakda ang patlang, pumunta sa patlang ng Mga Key ng API kung saan magagamit ang Sumulat ng API Key. Ang key na ito ay kailangang ibigay sa code pati na rin ang channel ID.
Ang address ng ThingSpeak ay matatagpuan sa parehong pahina.
Sa mga hakbang sa itaas, maaari mong i-set up ang ThingSpeak nang napakadali. Kung nais mong malaman ang higit pa tungkol sa ThingSpeak at ang proseso ng pag-set up nito, maaari mong suriin ang aming mga nakaraang artikulo sa paksa.
Arduino Code para sa Solar Power Monitoring gamit ang ESP32
Ang kumpletong code ng pagsubaybay sa solar power solar ay matatagpuan sa ilalim ng pahinang ito. Nagsisimula ang code sa pagtukoy sa iyong SSID, Password, at ilang iba pang pare-pareho na mga parameter tulad ng ipinakita sa ibaba.
// tukuyin ang WiFi SSID & PWD para sa uplink. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// paglaban sa 25 degree C # tukuyin ang THERMISTORNOMINAL 10000 // temp. para sa nominal na paglaban (halos palaging 25 C) #define TEMPERATURENOMINAL 25 // Ang beta coefficient ng thermistor (karaniwang 3000-4000) #define BCOEFFICIENT 3950 // ang halaga ng 'other' resistor #define SERIESRESISTOR 10000
Ang thermistor nominal ohms ay ibinibigay sa nominal na temperatura. Itakda ang halagang ito depende sa datasheet ng thermistor. Ilagay ang Beta coefficient at halaga ng resistor ng serye ng thermistor.
// tukuyin ang Analog para sa Kasalukuyang at Boltahe const int curr_an_pin = 35; Const int volt_an_pin = 34; Const int ntc_temp_an_pin = 33;
Ang mga PIN ay tinukoy dito.
#define thingSpeakAddress "xxxxxxxxx" #define channelID xxxxx #define wroteFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
Ilagay ang bagaySpeakAddress, channelID, Sumulat ng Feed API Key. Ang natitirang mga bagay ay hindi kinakailangan ngunit kapaki-pakinabang pa rin kung ang data ay kailangang matanggap mula sa web.
void setup () { // ilagay ang iyong code sa pag-setup dito, upang magpatakbo nang isang beses: // itakda ang serial port sa 115200 Serial.begin (115200); // Initialize serial delay (1000); WiFi.mode (WIFI_STA); ThingSpeak.begin (client); // Initialize ThingSpeak // todo: lumikha ng isang gawain upang mabasa ang isang pin para makakuha ng kasalukuyang & boltahe at kalkulahin ang watt at temperatura ng solar panel xTaskCreate ( wifi_task, / * Gawain ng gawain. * / "Wifi_task", / * String na may pangalan ng gawain. * / 1024 * 2, / * Laki ng stack sa mga byte. * / NULL, / * Parameter na ipinasa bilang input ng gawain * / 5, / * Priority ng gawain. * / NULL); / * Hawakan ng Gawain. * / Serial.print ("Pagbabasa ng Data."); }
Sa code sa itaas, ang server ng ThingSpeak ay napasimulan at isang gawain ay nilikha na makakakuha ng data na nauugnay sa solar panel.
Sa pangunahing loop, ang kasalukuyang solar at boltahe ay na-sensed sa pamamagitan ng isang analog pin at tapos na ang average.
float solar_curr_adc_val = 0; float solar_volt_adc_val = 0; para sa (i = 0; i <NUMSAMPLES; i ++) { curr_samples = analogRead (curr_an_pin); volt_samples = analogRead (volt_an_pin); temp_samples = analogRead (ntc_temp_an_pin); antala (10); } // average ang lahat ng mga sample out float curr_avg = 0; float volt_avg = 0; float temp_avg = 0; para sa (i = 0; i <NUMSAMPLES; i ++) { curr_avg + = curr_samples; volt_avg + = volt_samples; temp_avg + = temp_samples; } curr_avg / = NUMSAMPLES; volt_avg / = NUMSAMPLES; temp_avg / = NUMSAMPLES; //Serial.print("ADC VALUE = "); //Serial.println(ADC_VALUE); // i-convert ang halaga ng adc sa mga voltages para makakuha ng aktwal na Kasalukuyan at Boltahe. float solar_curr = (curr_avg * 3.3) / (4095); float solar_volt = (volt_avg * 3.3) / (4095); // sa pamamagitan ng paggamit ng isang divider ng boltahe ay bumababa kami sa aktwal na boltahe. // para sa kadahilanang pinarami namin ang 6 na may avg boltahe upang makuha ang aktwal na boltahe ng solar panel. solar_volt * = 6;
Ang solar boltahe ay isinumite sa pamamagitan ng pag-multiply sa 6 habang nilikha namin ang voltner divider na hahatiin ang input boltahe ng 6 na beses.
Ang temperatura ay nabuo mula sa thermistor gamit ang isang logarithmic form.
// convert the value to resistance temp_avg = 4095 / temp_avg - 1; temp_avg = SERIESRESISTOR / temp_avg; //Serial.print("Thermistor paglaban "); //Serial.println(temp_avg); float steinhart; steinhart = temp_avg / THERMISTORNOMINAL; // (R / Ro) steinhart = log (steinhart); // ln (R / Ro) steinhart / = BCOEFFICIENT; // 1 / B * ln (R / Ro) steinhart + = 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1 / To) steinhart = 1.0 / steinhart; // Invert steinhart - = 273.15; // convert absolute temp sa C
Basahin ang data tuwing 15 segundo.
pagkaantala (1000); bilangin ++; Serial.print ("."); kung (count> = 15) { count = 0; Serial.println ("=________________________________________________________ =________________________________________ "); Serial.print ("Solar Voltage ="); Serial.println (solar_volt); Serial.print ("Solar Kasalukuyan ="); Serial.println (solar_curr); float solar_watt = solar_volt * solar_curr; Serial.print ("Solar Watt ="); Serial.println (solar_watt); Serial.print ("Solar Temperature ="); Serial.println (steinhart); Serial.println ("=________________________________________________________ =________________________________________ ");
Ang data para sa kani-kanilang mga patlang ay ipinadala gamit ang pagpapaandar na Thing.Speak.setField (); kapag nakakonekta ang WiFi.
kung (WiFi.status () == WL_CONNected) { ThingSpeak.setField (1, solar_volt); ThingSpeak.setField (2, solar_curr); ThingSpeak.setField (3, solar_watt); ThingSpeak.setField (4, steinhart); // sumulat sa ThingSpeak channel int x = ThingSpeak.writeFields (channelID, writeFeedAPIKey); kung (x == 200) { Serial.println ("Matagumpay na na-update ang mga channel."); } iba pa { Serial.println ("May problema sa pag-update ng channel. HTTP error code" + String (x)); } } iba pa { Serial.println ("\ r \ n ###################################### #### Serial.println ("Nabigong i-update ang Data sa thingSpeak Server."); Serial.println ("Hindi konektado ang WiFi…"); Serial.println ("#### ###oooooooooooooooooooooooooooooooooooooooo \ r \ n "); } Serial.print ("Pagbabasa ng Data."); } }
Ang gawain ng Wi-Fi na nilikha sa ibaba ng code snippet-
void wifi_task (void * parameter) { habang (1) { if (WiFi.status ()! = WL_CONNected) { Serial.print ("Sinusubukang kumonekta sa SSID:"); Serial.println (WLAN_SSID); habang (WiFi.status ()! = WL_CONNected) { WiFi.begin (WLAN_SSID, WLAN_PASS); // Kumonekta sa WPA / WPA2 network. Baguhin ang linyang ito kung gumagamit ng bukas o WEP network Serial.print ("."); pagkaantala (5000); } Serial.println ("\ nKonekta."); Serial.println (); Serial.println ("Konektado sa WiFi"); Serial.println ("IP address:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / portTICK_PERIOD_MS); } vTaskDelete (NULL); }
Data ng Pagsubok at Pagsubaybay
Ang solar panel ay konektado sa circuit at inilagay sa sikat ng araw para sa pagsubok tulad ng ipinakita sa ibaba.
Ang kumpletong pagtatrabaho ay ipinakita sa video sa ibaba. Nabasa ng aming circuit ang boltahe ng output, kasalukuyang, at lakas mula sa panel at na-update ito nang live sa channel ng mga bagay tulad ng ipinakita sa ibaba.
Tulad ng nakikita natin, 15-minutong data ay ipinapakita sa nasa itaas na grap. Dahil ito ay isang proyekto sa pagpapatakbo sa labas, kailangang gamitin ang wastong PCB kasama ang isang nakapaloob na kahon. Ang enclosure ay kailangang gawin sa isang paraan na ang circuit ay mananatiling hindi tinatagusan ng tubig sa ulan. Upang baguhin ang circuit na ito o upang talakayin ang karagdagang mga aspeto ng proyektong ito, mangyaring gamitin ang aktibong forum ng Circuit Digest. Inaasahan kong nasiyahan ka sa tutorial at natutunan ang isang bagay na kapaki-pakinabang.