- Izbira pravih komponent za monitor sončne energije z omogočeno IoT
- Shema vezja za nadzor sončne energije na osnovi IoT
- Nastavitev ThingSpeak
- Koda Arduino za nadzor sončne energije z uporabo ESP32
- Podatki o preskušanju in spremljanju
Na področju obnovljivih virov energije je v ospredju sončna energija, saj je pridobivanje energije z uporabo sončne moči najlažji in poslovno donosen način obnovljive energije. Če govorimo o sončnih kolektorjih, je treba nadzirati izhodno moč sončne celice, da dobimo optimalno izhodno moč iz panelov. Zato je potreben sistem za nadzor v realnem času. V veliki sončni elektrarni se lahko uporablja tudi za nadzor izhodne moči vsake plošče, ki pomaga prepoznati nabiranje prahu. Prav tako preprečuje kakršne koli napake v času delovanja. V nekaterih prejšnjih člankih smo zgradili nekaj projektov, povezanih s sončno energijo, kot so polnilnik za mobilni telefon na sončno energijo, vezje solarnega pretvornika itd. Te lahko preverite, če iščete več projektov na področju sončne energije.
V tem projektu bomo izdelali sistem za nadzor sončne energije na osnovi IoT z vključitvijo tehnike polnjenja baterij, ki temelji na MPPT (Maximum Power Point Tracker), kar bo pomagalo skrajšati čas polnjenja in izboljšati učinkovitost. Izmerili bomo tudi temperaturo plošče, izhodno napetost in tok za izboljšanje varnostnega vidika vezja. Nazadnje bomo poleg tega uporabili še oblačne storitve ThingSpeak za spremljanje izhodnih podatkov od koder koli po svetu. Upoštevajte, da je ta projekt nadaljevanje projekta MPPT Solar Charge Controller, ki smo ga zgradili prej. Tu bomo spremljali izhodno napetost, tok in moč plošče z razvojno ploščo ESP32 IoT.
Izbira pravih komponent za monitor sončne energije z omogočeno IoT
S solarnim monitorjem postane zelo enostavno spremljati in odkrivati napake v katerem koli sončnem sistemu. Zato je izbira komponent pri oblikovanju takšnega sistema zelo pomemben del. Spodaj je seznam delov, ki smo jih uporabili.
- Razvojna plošča ESP32
- MPPT vezje (lahko katero koli sončno vezje)
- Preklopni upor (na primer 1 Ohm 1 vata - primeren za do 1A toka)
- Litijeva baterija (zaželena 7,4 V).
- Aktivna povezava Wi-Fi
- Temperaturni senzor za sončno ploščo
- Napetostni delilnik (glej opis)
Esp32 Dev Board:
Za aplikacijo, ki podpira IoT, je nujno izbrati pravo vrsto razvojne plošče, ki bo lahko obdelala podatke iz analognih zatičev in jih pošiljala prek kakršnega koli protokola povezave, kot je Wi-Fi ali v oblak. strežnik. Izbrali smo posebej ESP32, saj gre za poceni mikrokrmilnik s številnimi funkcijami. Prav tako ima vgrajen Wi-Fi radio, prek katerega se lahko zelo enostavno povežemo z internetom.
Sončno vezje:
Sončno polnilno vezje je vezje, ki dobi sončno ploščo višjo napetost in jo pretvori v polnilno napetost, da lahko učinkovito napolni baterijo. Za ta projekt bomo uporabili vezje MPPT Charge Controller na osnovi LT3562, ki smo ga že izdelali v enem od naših prejšnjih projektov. Če pa želite vdelati to IoT omogočeno spremljanje, lahko uporabite katero koli sončno vezje. To ploščo smo izbrali, ker je vezje opremljeno s sledenjem največje močne točke (MPPT), kar je koristno za projekte sončnih kolektorjev z majhno močjo. To je učinkovit način za polnjenje majhne litijeve baterije iz sončne celice.
Shunt upor:
Vsak upor upošteva ohmov zakon, kar pomeni, da če skozi upor teče določena količina toka, se bo pojavil določen padec napetosti. Shunt upori pri tem niso izjema in se posebej uporablja za merjenje pretoka toka. Vendar pa glede na nazivni tok toka skozi sončno ploščo izberite ranžirni upor, ki bo ustvaril ustrezno količino napetosti, ki jo lahko izmeri enota mikrokrmilnika. Toda hkrati je pomembna tudi moč upora. Pomembna je tudi izbira moči ranžirnega upora.
Padec napetosti lahko izračunamo po spodnji formuli. To je znano kot Ohmov zakon -
V = I x R
V je napetost, ki bo nastala med "I", tj. Količina toka skozi količino upora "R". Na primer, 1-ohmski upor ustvari 1V padca napetosti, ko skozi njega teče 1A toka.
Za moč upora je mogoče uporabiti spodnjo formulo -
P = I 2 R.
Kjer je I največji pretok toka, R pa vrednost upora. Za 1A toka z uporom 1 ohmov je 1 vat primeren za odvajanje moči. Vendar je to koristno za majhne projekte sončnih kolektorjev, vendar sploh ni primerno za aplikacije, povezane s sončnim omrežjem. V takem primeru je dejansko treba uporabiti neinvazivno tehniko merjenja toka. V takem primeru je mogoče natančno izmeriti tok toka, kjer je mogoče izmeriti zelo majhno količino toka in zelo veliko količino toka.
Litijeva baterija:
Izbira litijeve baterije je bistveni del vsakega projekta, ki vključuje sončne celice. Ker enota mikrokrmilnika, ki vedno ostane vklopljena in nenehno preverja in oddaja podatke, za stabilno delovanje zahteva vsaj sto miliamperov toka.
Kapaciteta baterije bi morala biti nekaj, kar lahko napaja mikrokrmilnik vsaj 4-5 dni, ko sonce zaradi monsuna ne sije. Pomembno je tudi, da mora biti polnilni tok z vidika baterije večji od toka obremenitve. Povsem nenavadno je, če nekdo 100mA obremenitve poveže z baterijo in zagotovi polnilni tok, ki je manjši od tega. Da bi bili na varnejši strani, bi morali imeti vsaj 5-krat več polnilnega toka od toka obremenitve.
Po drugi strani pa mora biti napetost akumulatorja višja od običajne vhodne napetosti regulatorja napetosti, ki je potrebna za mikrokrmilnik. Na primer, litijevo baterijo 7,4 V je mogoče priključiti tako na linearni regulator napetosti 3,3 V kot tudi na 5,0 V (ker linearni regulator zahteva višjo napetost izpada več kot LDO in preklop).
V našem projektu smo uporabili 4000 mAH baterijo z oceno 7,4 V. Uporabili smo 5,0 V regulator, ki zagotavlja dovolj toka in napetosti za ESP32.
Napetostni delilnik:
Napetostni delilnik je bistveni del merjenja napetosti sončne celice. Izbrati je treba napetostni delilnik, ki bo delil napetost v skladu z vhodno / izhodno napetostjo mikrokrmilnika.
Izberite zgornje upore tako, da izhodna napetost delilnika napetosti ne sme presegati maksimuma V / I napetosti mikrokrmilnika (3,3 V za ESP32). Priporočljivo je, da uporabite potenciometer, ker bo omogočil prožnost pri izbiri katere koli sončne celice z višjo ali nižjo napetostjo in bo lahko z multimetrom enostavno nastavil napetost.
V našem primeru imamo v vezju plošče MPPT potenciometer, ki deluje kot delilnik napetosti. Napetostni delilnik smo nastavili s faktorjem delitve 6V. Priključili smo dva večimetra, enega v vhodu in drugega v izhodu lonca, in nastavili vrednost, da bo pri vhodni napetosti 18V izhod 3V, saj je nazivna izhodna napetost sončne celice 18V.
Temperaturni senzor za sončno ploščo:
Izhodna moč sončne celice je neposredno povezana s temperaturo sončne celice. Zakaj? Ker se temperatura sončne celice začne povečevati, izhodni tok sončne celice narašča eksponentno, medtem ko se napetost začne linearno zmanjševati.
Glede na formulo moči je moč enaka napetosti, pomnoženi s tokom (W = V x A), zmanjšanje izhodne napetosti pa tudi zmanjša izhodno moč sončne celice tudi po povečanju toka. Naslednje vprašanje, ki se nam poraja, je, kako izmeriti sončno temperaturo? No, precej zanimivo je, ker so sončne celice na splošno izpostavljene vročinskemu okolju, saj je iz očitnih razlogov izpostavljeno neposredni sončni svetlobi. Najboljši način za merjenje temperature sončne celice je uporaba senzorja temperature ravne površine. Priporočljivo je tudi, da uporabite termočlen tipa K, nameščen neposredno na sončni plošči.
Za našo uporabo smo uporabili modul temperaturnega senzorja na osnovi termistorja, ki je prikazan spodaj.
Shema vezja za nadzor sončne energije na osnovi IoT
Popoln diagram vezja za monitor sončne energije z omogočeno IoT je prikazan spodaj. Shema je preprosta. Rdeča pomična plošča je plošča MPPT, ki smo jo uporabili za ta projekt.
Nastavitev ThingSpeak
Ustvarite račun s ThingSpeak in pojdite na možnost »moj kanal«, nato kliknite Nov kanal.
Ustvarite nov kanal z imeni polj.
Zdaj po nastavitvi polja pojdite na polje API Keys, kjer je na voljo ključ API Write. Ta ključ mora biti naveden v kodi in ID kanala.
Naslov ThingSpeak najdete na isti strani.
Z zgornjimi koraki lahko ThingSpeak nastavite zelo enostavno. Če želite izvedeti več o ThingSpeak in njegovem postopku nastavitve, si oglejte naše prejšnje članke o tej temi.
Koda Arduino za nadzor sončne energije z uporabo ESP32
Popolno kodo za nadzor sončne energije ESP32 najdete na dnu te strani. Koda se začne z določitvijo vašega SSID, gesla in nekaj drugih stalnih parametrov, kot je prikazano spodaj.
// definiramo WiFi SSID in PWD za uplink. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// odpornost pri 25 stopinjah C #define THERMISTORNOMINAL 10000 // temp. za nominalni upor (skoraj vedno 25 C) #define TEMPERATURENOMINAL 25 // Beta koeficient termistorja (ponavadi 3000-4000) #define BCOEFFICIENT 3950 // vrednost "drugega" upora #define SERIESRESISTOR 10000
Nazivni ohm termistorja je predviden pri nazivni temperaturi. To vrednost nastavite glede na podatkovni list termistorja. Vstavite Beta koeficient in serijsko vrednost upora termistorja.
// definiramo analog za const toka in napetosti int curr_an_pin = 35; const int volt_an_pin = 34; const int ntc_temp_an_pin = 33;
Kode PIN so določene tukaj.
#define thingSpeakAddress "xxxxxxxxx" #define ID kanala xxxxx #define writeFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
Vstavite thingSpeakAddress, channelID, Write Feed API Key. Vse ostalo ni potrebno, vendar je še vedno koristno, če je treba podatke prejemati s spleta.
void setup () { // postavite svojo nastavitveno kodo sem, da se zažene enkrat: // nastavite serijska vrata na 115200 Serial.begin (115200); // Inicializacija zaporedne zakasnitve (1000); WiFi.mode (WIFI_STA); ThingSpeak.begin (odjemalec); // Inicializirajte ThingSpeak // todo: ustvarite nalogo za branje zatiča za pridobivanje toka in napetosti ter izračun vata in temperature sončne celice xTaskCreate ( wifi_task, / * Task function. * / "Wifi_task", / * Niz z imenom naloga. * / 1024 * 2, / * Velikost sklada v bajtih. * / NULL, / * Parameter je poslan kot vhod v nalogo * / 5, / * Prednost naloge. * / NULL); / * Ročaj opravila. * / Serial.print ("Branje podatkov."); }
V zgornji kodi se strežnik ThingSpeak inicializira in ustvari se naloga, ki bo dobila podatke, povezane s solarno ploščo.
V glavni zanki se preko analognega zatiča zazna sončni tok in napetost in izračuna povprečje.
float solar_curr_adc_val = 0; float solar_volt_adc_val = 0; for (i = 0; i <NUMSAMPLES; i ++) { curr_samples = analogRead (curr_an_pin); volt_samples = analogRead (volt_an_pin); temp_samples = analogRead (ntc_temp_an_pin); zamuda (10); } // povprečje vseh vzorcev je plavajoče curr_avg = 0; plovec volt_avg = 0; float temp_avg = 0; for (i = 0; i <NUMSAMPLES; i ++) { curr_avg + = curr_samples; volt_avg + = volt_vzorci; temp_avg + = temp_samples; } curr_avg / = NUMSAMPLES; volt_avg / = NUMSAMPLES; temp_avg / = NUMSAMPLES; //Serial.print("ADC VALUE = "); //Serial.println(ADC_VALUE); // pretvorimo vrednost adc v napetosti, da dobimo dejanski tok in napetost. float solar_curr = (curr_avg * 3.3) / (4095); float solar_volt = (volt_avg * 3.3) / (4095); // z uporabo delilnika napetosti znižamo dejansko napetost. // zato pomnožimo 6 s povprečno napetostjo, da dobimo dejansko napetost sončne celice. sončna_volta * = 6;
Sončna napetost se odda tako, da se pomnoži s 6, saj smo ustvarili delilnik napetosti, ki bo vhodno napetost razdelil na 6-krat.
Temperatura se ustvari iz termistorja z uporabo logaritemske tvorbe.
// pretvorimo vrednost v upor temp_avg = 4095 / temp_avg - 1; temp_avg = SERIESRESISTOR / temp_avg; //Serial.print("Termistorski upor "); //Serial.println(temp_avg); plavajoči steinhart; steinhart = temp_avg / TERMISTORNOMINAL; // (R / Ro) steinhart = log (steinhart); // ln (R / Ro) steinhart / = BCOEFFICIENT; // 1 / B * ln (R / Ro) steinhart + = 1,0 / (TEMPERATURENOMINAL + 273,15); // + (1 / do) steinhart = 1,0 / steinhart; // Obrni steinhart - = 273,15; // pretvorimo absolutno temp v C
Podatki se berejo vsakih 15 sekund.
zamuda (1000); štetje ++; Serial.print ("."); if (count> = 15) { count = 0; Serial.println ("=============================================== ============================ "); Serial.print ("Sončna napetost ="); Serial.println (solar_volt); Serial.print ("Sončni tok ="); 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 ("=============================================== ============================ ");
Podatki za posamezna polja se posredujejo s funkcijo Thing.Speak.setField (); ko je WiFi povezan.
if (WiFi.status () == WL_CONNECTED) { ThingSpeak.setField (1, solar_volt); ThingSpeak.setField (2, solar_curr); ThingSpeak.setField (3, solar_watt); ThingSpeak.setField (4, steinhart); // pišemo na kanal ThingSpeak int x = ThingSpeak.writeFields (channelID, writeFeedAPIKey); if (x == 200) { Serial.println ("Uspešno posodabljanje kanalov."); } else { Serial.println ("Težava pri posodabljanju kanala. Koda napake HTTP" + niz (x)); } } else { Serial.println ("\ r \ n ###################################### ######################## "); Serial.println ("Podatkov ni bilo mogoče posodobiti na strežnik thingSpeak."); Serial.println ("WiFi ni povezan…"); Serial.println ("############################################### ############### \ r \ n "); } Serial.print ("Branje podatkov."); } }
Naloga Wi-Fi, ustvarjena v spodnjem delčku kode-
void wifi_task (void * parameter) { while (1) { if (WiFi.status ()! = WL_CONNECTED) { Serial.print ("Poskus vzpostavitve povezave s SSID:"); Serial.println (WLAN_SSID); medtem ko (WiFi.status ()! = WL_CONNECTED) { WiFi.begin (WLAN_SSID, WLAN_PASS); // Povežite se z omrežjem WPA / WPA2. Spremenite to vrstico, če uporabljate odprto ali omrežje WEP Serial.print ("."); zamuda (5000); } Serial.println ("\ nPovezan."); Serial.println (); Serial.println ("WiFi povezan"); Serial.println ("Naslov IP:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / portTICK_PERIOD_MS); } vTaskDelete (NULL); }
Podatki o preskušanju in spremljanju
Sončna plošča je povezana z vezjem in postavljena na sončno svetlobo za preskušanje, kot je prikazano spodaj.
Celotno delo je prikazano v spodnjem videu. Naše vezje je lahko prebralo izhodno napetost, tok in moč s plošče in ga posodobilo v živo na kanalu thingspeak, kot je prikazano spodaj.
Kot vidimo, so na zgornjem grafu prikazani 15-minutni podatki. Ker gre za projekt delovanja na prostem, je treba uporabiti ustrezen PCB skupaj s priloženo škatlo. Ograje mora biti narejeno tako, da vezje v dežju ostane nepremočljivo. Če želite spremeniti to vezje ali razpravljati o nadaljnjih vidikih tega projekta, prosimo, uporabite aktivni forum Circuit Digest. Upam, da ste uživali v vadnici in se naučili kaj koristnega.