- Oikeiden komponenttien valitseminen IoT-yhteensopivalle aurinkoenergiamonitorille
- Piirikaavio IoT-pohjaiseen aurinkovoiman seurantaan
- ThingSpeakin asettaminen
- Arduino-koodi aurinkovoiman seurantaan ESP32: lla
- Tietojen testaus ja seuranta
Uusiutuvan energian alalla aurinkoenergia on eturintamassa, koska energian tuottaminen auringon voimalla on helpoin ja kaupallisesti kannattava tapa uusiutuvaa energiaa. Aurinkopaneeleista puhuen, aurinkopaneelien lähtötehoa on valvottava, jotta paneeleista saadaan optimaalinen teho. Siksi reaaliaikainen seurantajärjestelmä on tarpeen. Suuressa aurinkovoimalassa sitä voidaan käyttää myös jokaisen paneelin tehon seuraamiseen, mikä auttaa tunnistamaan pölyn kertymisen. Se estää myös vikatilanteet käytön aikana. Joissakin aiemmissa artikkeleissamme olemme rakentaneet muutaman aurinkoenergiaan liittyvän projektin, kuten aurinkoenergialla toimivan matkapuhelimen laturin ja aurinkosuuntaajapiirin jne. Voit tarkistaa ne, jos etsit lisää aurinkovoimaa koskevia projekteja.
Tässä projektissa teemme IoT-pohjaisen aurinkovoiman seurantajärjestelmän sisällyttämällä MPPT (Maximum Power Point Tracker) -pohjaisen akun lataustekniikan, mikä auttaa vähentämään latausaikaa ja parantamaan tehokkuutta. Mitataan myös paneelin lämpötila, lähtöjännite ja virta virtapiirin turvallisuuden parantamiseksi. Lopuksi kaiken alkuun aiomme käyttää ThingSpeak-pilvipalveluja seuraamaan lähtödataa mistä päin maailmaa tahansa. Huomaa, että tämä projekti on jatkoa aiemmin rakentamallemme MPPT-aurinkolatausohjausprojektille. Tässä seuraamme paneelin lähtöjännitettä, virtaa ja tehoa ESP32 IoT -kehityskortin avulla.
Oikeiden komponenttien valitseminen IoT-yhteensopivalle aurinkoenergiamonitorille
Kanssa aurinko näyttö, se on erittäin helppo seurata ja havaita vikoja tahansa aurinkokunnan. Siksi komponenttien valinnasta tulee erittäin tärkeä osa tällaisen järjestelmän suunnittelussa. Alla on luettelo osista, joita käytimme.
- ESP32-kehyslevy
- MPPT-piiri (voi olla mikä tahansa aurinkopiiri)
- Shuntivastus (esimerkiksi 1 Ohm 1 watti - sopii enintään 1 A virralle)
- Litiumparisto (suositeltava 7.4v).
- Aktiivinen Wi-Fi-yhteys
- Lämpötila-anturi aurinkopaneelille
- Jännitteenjakajan piiri (katso kuvaus)
Esp32 Dev Board:
IoT-yhteensopivalle sovellukselle on välttämätöntä valita oikean tyyppinen kehityskortti, joka pystyy käsittelemään tietoja analogisista nastoistaan ja lähettämään tietoja minkä tahansa yhteysprotokollan, kuten Wi-Fi: n tai pilven kautta. palvelin. Valitsimme nimenomaan ESP32: n, koska se on edullinen mikro-ohjain, jossa on paljon ominaisuuksia. Lisäksi siinä on sisäänrakennettu Wi-Fi-radio, jonka kautta voimme muodostaa yhteyden Internetiin erittäin helposti.
Aurinkopiiri:
Aurinkolatauspiiri on piiri, joka saa suuremman jännitteen aurinkopaneelista ja muuntaa sen latausjännitteeksi, jotta se voi ladata akun tehokkaasti. Tässä projektissa käytämme LT3562-pohjaista MPPT Charge Controller -piirilevyä, jonka olemme jo tehneet yhdessä aikaisemmissa projekteissamme. Mutta jos haluat upottaa tämän IoT-käytön valvonnan, voit käyttää mitä tahansa aurinkopiiriä. Olemme valinneet tämän kortin, koska piiri on varustettu MPPT (Maximum Power Point Tracking) -ominaisuudella, mikä on hyödyllistä pienitehoisille aurinkopaneeliprojekteille. Se on tehokas tapa ladata pieni litiumakku aurinkopaneelista.
Shunt-vastus:
Mikä tahansa vastus noudattaa ohmin lakia, mikä tarkoittaa, että jos tietty määrä virtaa virtaa vastuksen läpi, ilmestyy tietty määrä jännitehäviötä. Shunt-vastukset eivät ole poikkeus tästä, ja sitä käytetään erityisesti virran mittaamiseen. Kuitenkin riippuen nimellisvirrasta aurinkopaneelin läpi, valitse shuntivastus, joka tuottaa riittävän määrän jännitettä, joka voidaan mitata mikrokontrolleriyksiköllä. Mutta samalla, vastuksen teho on myös tärkeä asia. Shuntivastuksen tehon valinta on myös tärkeää.
Jännitepudotus voidaan laskea alla olevan kaavan avulla. Tätä kutsutaan Ohmin lakiksi.
V = I x R
V on jännite, joka syntyy 'I': n aikana, ts. Virran määrä vastuksen 'R' läpi. Esimerkiksi 1 ohmin vastus tuottaa 1 V jännitehäviön, kun 1 A virta virtaa sen läpi.
Vastuksen tehoa varten voidaan käyttää alla olevaa kaavaa -
P = I 2 R
Missä I on suurin virtavirta ja R on vastuksen arvo. 1 A: n virralla, jossa on 1 ohmin vastus, 1 watti riittää tehohäviöön. Tästä on kuitenkin hyötyä pienissä aurinkopaneelihankkeissa, mutta se ei sovi ollenkaan aurinkoverkkoon liittyviin sovelluksiin. Tällöin ei-invasiivinen virranmittaustekniikka on itse asiassa mitä on käytettävä. Tällöin virtavirta voidaan mitata tarkasti, kun voidaan mitata hyvin pieni virran määrä ja erittäin suuri virran määrä.
Litiumparisto:
Litiumpariston valinta on olennainen osa kaikkia aurinkopaneeleja koskevia hankkeita. Koska mikrokontrolleriyksikkö, joka pysyy jatkuvasti päällä ja jatkuvasti tarkistaa ja lähettää tietoja, vaatii vähintään sata milliampeeria virtaa vakaan toiminnan takaamiseksi.
Akun kapasiteetin tulisi olla sellainen, joka voi käyttää mikro-ohjainta vähintään 4-5 päivän ajan, kun aurinko ei paista monsuunin takia. On myös tärkeää, että latausvirran on oltava suurempi kuin kuormitusvirta akun näkökulmasta. On melko epätavallista, jos joku yhdistää 100 mA: n kuorman akkuun ja antaa latausvirran, joka on sitä pienempi. Jotta voisimme olla turvallisemmalla puolella, latausvirtaa tulisi olla vähintään viisi kertaa enemmän kuin kuormitusvirta.
Toisaalta akun jännitteen on oltava korkeampi kuin mikään mikro-ohjainta vaativa tavanomainen jännitteen säätimen tulojännite. Esimerkiksi 7,4 V: n litiumparisto voidaan liittää sekä 3,3 V: n että 5,0 V: n lineaarisen jännitesäätimen yli (koska lineaarinen säädin vaatii suurempaa katkaisujännitettä kuin LDO ja kytkentä).
Projektissamme käytimme 4000 mAh: n akkua, jonka luokitus oli 7,4 V. Käytimme 5,0 V: n säätäjää, joka tarjoaa riittävän virran ja jännitteen ESP32: lle.
Jännitteenjakaja:
Jännitteenjakaja on olennainen osa aurinkopaneelin jännitteen mittausta. On valittava jännitteenjakaja, joka jakaa jännitteen mikro-ohjaimen I / O-jännitetulon mukaan.
Valitse yllä olevat vastukset siten, että jännitteenjakajan lähtöjännite ei saa ylittää mikro-ohjaimen suurinta I / O-jännitettä (3,3 V ESP32: lle). On kuitenkin suositeltavaa käyttää potentiometriä, koska se antaa joustavuuden valita minkä tahansa aurinkopaneelin korkeampi tai matalampi jännite ja se voi helposti asettaa jännitteen yleismittarilla.
Meidän tapauksessamme MPPT-piirilevyssä on potentiometri, joka toimii jännitteenjakajana. Asetamme jännitteenjakajan jakokertoimella 6V. Yhdistimme kaksi monimetriä, yhden tulon ja toisen potin lähtöön, ja asetimme arvon, että kun tulojännite on 18 V, lähtö on 3 V, koska aurinkopaneelin nimellislähtöjännite on 18 V.
Lämpötila-anturi aurinkopaneelille:
Aurinkopaneelin teholähdöllä on suora yhteys aurinkopaneelin lämpötilaan. Miksi? Koska kun aurinkopaneelin lämpötila alkaa kasvaa, aurinkopaneelin lähtövirta kasvaa eksponentiaalisesti, kun taas jännitelähtö alkaa laskea lineaarisesti.
Tehokaavan mukaan teho on yhtä suuri kuin jännite kertaa virta (W = V x A), laskeva lähtöjännite vähentää myös aurinkopaneelin lähtötehoa myös virtavirran kasvun jälkeen. Seuraava mieleemme tuleva kysymys on, kuinka mitata aurinkolämpötilaa? No, se on melko mielenkiintoinen, koska aurinkopaneelit ovat yleensä alttiina lämpöympäristölle, koska se altistuu suoralle auringonvalolle ja ilmeisistä syistä. Paras tapa mitata aurinkopaneelin lämpötila on käyttää tasaisen pinnan lämpötila-anturia. On myös suositeltavaa käyttää K-tyyppistä lämpöparia, joka on sijoitettu suoraan aurinkopaneeliin.
Sovelluksessamme olemme käyttäneet termistoripohjaista lämpötila-anturimoduulia, joka on esitetty alla.
Piirikaavio IoT-pohjaiseen aurinkovoiman seurantaan
IoT-yhteensopivan aurinkoenergiamonitorin täydellinen kytkentäkaavio on esitetty alla. Kaavio on yksinkertainen. Punainen viiva-piste-levy on MPPT-levy, jota käytimme tässä projektissa.
ThingSpeakin asettaminen
Luo tili ThingSpeakilla ja siirry kohtaan "Oma kanava" ja napsauta sitten Uusi kanava.
Luo uusi kanava kenttien nimillä.
Kun olet määrittänyt kentän, siirry API-avaimet- kenttään, jossa Write API Key on käytettävissä. Tämä avain on annettava koodissa ja kanavan tunnuksessa.
ThingSpeak-osoite löytyy samalla sivulla.
Yllä olevilla vaiheilla voit määrittää ThingSpeakin helposti. Jos haluat oppia lisää ThingSpeakista ja sen asennusprosessista, voit tutustua aiempiin aiheeseen liittyviin artikkeleihimme.
Arduino-koodi aurinkovoiman seurantaan ESP32: lla
Täydellinen ESP32-aurinkoenergian valvontakoodi löytyy tämän sivun alaosasta. Koodi alkaa määrittämällä SSID, salasana ja muutama muu vakioparametri alla olevan kuvan mukaisesti.
// määritä WiFi SSID ja PWD uplinkille. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// vastus 25 ° C: ssa #define THERMISTORNOMINAL 10000 // temp. nimellisvastukselle (melkein aina 25 C) #define TEMPERATURENOMINAL 25 // Termistorin beetakerroin (yleensä 3000-4000) #define BCOEFFICIENT 3950 // 'muun' vastuksen arvo #define SERIESRESISTOR 10000
Termistorin nimellisohmia käytetään nimellislämpötilassa. Aseta tämä arvo termistorin tietolomakkeesta riippuen. Laita termistorin beetakerroin ja sarjavastusvastus.
// määritä analoginen virralle ja jännitteelle const int curr_an_pin = 35; const int volt_an_pin = 34; const int ntc_temp_an_pin = 33;
PIN-koodit määritetään täältä.
#define thingSpeakAddress "xxxxxxxxx" #define channelID xxxxx #define writeFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
Laita thingSpeakAddress, channelID, Write Feed API Key. Loput asiat eivät ole pakollisia, mutta ovat silti hyödyllisiä, jos tietoja on vastaanotettava verkosta.
void setup () { // laita asetuskoodisi tähän, jotta se voidaan suorittaa kerran: // aseta sarjaportti 115200 Serial.begin (115200); // Alusta sarjaviive (1000); WiFi.mode (WIFI_STA); ThingSpeak.begin (asiakas); // Alusta ThingSpeak // todo: luo tehtävä lukemaan nasta virran ja jännitteen saamiseksi ja laskemaan aurinkopaneelin watti ja lämpötila xTaskCreate ( wifi_task, / * Tehtävätoiminto. * / "Wifi_task", / * Merkkijono nimellä tehtävä. * / 1024 * 2, / * Pinon koko tavuina. * / NULL, / * Parametri lähetetty tehtävän syötteenä * / 5, / * Tehtävän prioriteetti. * / NULL); / * Tehtäväkahva. * / Serial.print ("Tietojen lukeminen"); }
Yllä olevassa koodissa ThingSpeak-palvelin alustetaan ja luodaan tehtävä, joka saa aurinkopaneeliin liittyvät tiedot.
Pään silmukassa aurinkovirta ja jännite tunnistetaan analogisen nastan kautta ja keskiarvo on tehty.
float solar_curr_adc_val = 0; float solar_volt_adc_val = 0; for (i = 0; i <NUMERONÄYTTEET; i ++) { curr_samples = analogRead (curr_an_pin); volt_samples = analoginenLue (volt_an_pin); temp_samples = analogRead (ntc_temp_an_pin); viive (10); } // keskiarvo kaikista näytteistä kelluva virta_avg = 0; kelluva volt_avg = 0; uimurilämpötila = 0; ryhmälle (i = 0; i <NÄYTTEET; i ++) { curr_avg + = curr_samples; volt_avg + = voltin näytteet; temp_avg + = temp_näytteet; } virta_keskiarvo / = NÄYTTEET; volt_avg / = NÄYTTEET; temp_avg / = NUMERONÄYTTEET; //Serial.print("ADC VALUE = "); //Serial.println(ADC_VALUE); // muuntaa ADC-arvo jännitteiksi todellisen virran ja jännitteen saamiseksi. float solar_curr = (virta_avg * 3,3) / (4095); float solar_volt = (volt_avg * 3,3) / (4095); // käyttämällä jännitteenjakajaa astumme alas todellisesta jännitteestä. // tästä syystä kerrotaan 6 keskimääräisellä jännitteellä saadaksesi aurinkopaneelin todellisen jännitteen. aurinkojännite * = 6;
Aurinkojännite syötetään kertomalla 6: lla, kun loimme jännitteenjakajan, joka jakaa tulojännitteen 6 kertaa.
Lämpötila muodostetaan termistorista logaritmisen muodostuksen avulla.
// muuntaa arvon vastus temp_avg = 4095 / temp_avg - 1; temp_avg = SERIESRESISTOR / temp_avg; //Serial.print("Termistorivastus "); //Serial.println(temp_avg); kelluva Steinhart; steinhart = temp_avg / THERMISTORNOMINAL; // (R / Ro) steinhart = log (steinhart); // ln (R / Ro) steinhart / = TEHOKAS; // 1 / B * ln (R / Ro) steinhart + = 1,0 / (TEMPERATURENOMINAALINEN + 273,15); // + (1 / Vastaanottaja) steinhart = 1,0 / steinhart; // Käänteinen Steinhart - = 273,15; // muuntaa absoluuttinen lämpötila C: ksi
Tiedot luetaan 15 sekunnin välein.
viive (1000); laskea ++; Sarjaprintti ("."); jos (laskenta> = 15) { laskenta = 0; Sarja.println ("=============================================== ============================ "); Sarja.tulos ("Aurinkojännite ="); Sarja.println (aurinko_jännite); Sarja.tulos ("Aurinkovirta ="); Sarja.println (aurinko_virta); float solar_watt = solar_volt * solar_curr; Sarja.tulos ("Solar Watt ="); Sarja.println (aurinko-watti); Sarja.tulos ("Aurinkolämpötila ="); Sarjaprintln (steinhart); Sarja.println ("=============================================== ============================ ");
Vastaavien kenttien tiedot lähetetään funktiolla Thing.Speak.setField (); kun WiFi on kytketty.
jos (WiFi.status () == WL_CONNECTED) { ThingSpeak.setField (1, solar_volt); ThingSpeak.setField (2, aurinkovirta); ThingSpeak.setField (3, aurinko-watti); ThingSpeak.setField (4, Steinhart); // kirjoita ThingSpeak-kanavalle int x = ThingSpeak.writeFields (channelID, writeFeedAPIKey); if (x == 200) { Serial.println ("Kanavien päivitys onnistui."); } else { Serial.println ("Kanavan päivitysongelma. HTTP-virhekoodi" + merkkijono (x)); } } else { Serial.println ("\ r \ n ######################################################## ######################### "); Serial.println ("Datan päivittäminen asiaSpeak-palvelimeen epäonnistui."); Serial.println ("WiFi-yhteyttä ei ole kytketty…"); Serial.println ("################################## # ################ r \ n "); } Serial.print ("Tietojen lukeminen"); } }
Alla olevalla koodinpätkällä luotu Wi-Fi-tehtävä
void wifi_task (void * -parametri) { while (1) { if (WiFi.status ()! = WL_CONNECTED) { Serial.print ("Yritetään muodostaa yhteys SSID: hen:"); Serial.println (WLAN_SSID); taas (WiFi.status ()! = WL_CONNECTED) { WiFi.begin (WLAN_SSID, WLAN_PASS); // Yhdistä WPA / WPA2-verkkoon. Vaihda tämä rivi, jos käytät avointa tai WEP-verkkoa Serial.print ("."); viive (5000); } Serial.println ("\ nYhteydessä."); Sarja.println (); Serial.println ("WiFi kytketty"); Serial.println ("IP-osoite:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / portTICK_PERIOD_MS); } vTaskDelete (NULL); }
Tietojen testaus ja seuranta
Aurinkopaneeli on kytketty piiriin ja sijoitettu auringonvaloon testausta varten alla olevan kuvan mukaisesti.
Täydellinen työskentely on esitetty alla olevassa videossa. Piirimme pystyi lukemaan lähtöjännitteen, virran ja tehon paneelista ja päivittämään sen suorana asiapeak-kanavalla alla olevan kuvan mukaisesti.
Kuten näemme, 15 minuutin data näkyy yllä olevassa kaaviossa. Koska kyseessä on ulkokäyttöinen projekti, on käytettävä asianmukaista piirilevyä ja suljettua laatikkoa. Kotelo on tehtävä siten, että piiri pysyy vedenpitävänä sateessa. Jos haluat muokata tätä piiriä tai keskustella tämän projektin muista näkökohdista, käytä Circuit Digestin aktiivista foorumia. Toivottavasti pidit opetusohjelmasta ja opit jotain hyödyllistä.