- De juiste componenten kiezen voor IoT-geactiveerde zonne-energiemonitor
- Schakelschema voor op IoT gebaseerde monitoring van zonne-energie
- Het opzetten van de ThingSpeak
- Arduino-code voor monitoring van zonne-energie met behulp van ESP32
- Gegevens testen en bewaken
Op het gebied van hernieuwbare energie staat zonne-energie voorop, omdat het opwekken van energie door gebruik te maken van de kracht van de zon de gemakkelijkste en commercieel haalbare manier is van hernieuwbare energie. Over zonnepanelen gesproken, het uitgangsvermogen van een zonnepaneeloutput moet worden bewaakt om een optimaal vermogen van de panelen te krijgen. Daarom wordt een real-time monitoringsysteem noodzakelijk. In een grote zonne-energiecentrale kan het ook worden gebruikt om het vermogen van elk paneel te bewaken, wat helpt om de opeenhoping van stof te identificeren. Het voorkomt ook eventuele storingen tijdens de werking. In sommige van onze vorige artikelen hebben we een aantal zonne-energie-gerelateerde projecten gebouwd, zoals een oplader voor mobiele telefoons op zonne-energie en een omvormercircuit voor zonne-energie, enz. U kunt deze bekijken als u op zoek bent naar meer projecten op het gebied van zonne-energie.
In dit project zullen we een IoT-gebaseerd zonne-energiebewakingssysteem maken door de op MPPT (Maximum Power Point Tracker) gebaseerde batterijlaadtechniek toe te passen, wat de oplaadtijd zal helpen verminderen en de efficiëntie zal verbeteren. We zullen ook de paneeltemperatuur, uitgangsspanning en stroom meten om het veiligheidsaspect van het circuit te verbeteren. Tot slot, als klap op de vuurpijl, gaan we de ThingSpeak-cloudservices gebruiken om de uitvoergegevens overal ter wereld te monitoren. Merk op dat dit project een voortzetting is van het MPPT Solar Charge Controller Project dat we eerder hebben gebouwd. Hier zullen we de uitgangsspanning, stroom en vermogen van het paneel bewaken met behulp van het ESP32 IoT-ontwikkelbord.
De juiste componenten kiezen voor IoT-geactiveerde zonne-energiemonitor
Met een zonnemonitor wordt het heel eenvoudig om fouten in elk zonnesysteem te bewaken en te detecteren. Dit is de reden waarom de componentenselectie een zeer belangrijk onderdeel wordt bij het ontwerpen van een dergelijk systeem. Hieronder vindt u de lijst met onderdelen die we hebben gebruikt.
- ESP32-ontwikkelbord
- MPPT-circuit (kan elk zonnecircuit zijn)
- Een shuntweerstand (bijvoorbeeld 1 Ohm 1 watt - geschikt voor maximaal 1A stroom)
- Een lithiumbatterij (bij voorkeur 7,4 V).
- Actieve Wi-Fi-verbinding
- Temperatuursensor voor het zonnepaneel
- Spanningsdeler circuit (zie de beschrijving)
Esp32 ontwikkelaarsbord:
Voor een IoT-compatibele toepassing is het essentieel om het juiste type ontwikkelbord te kiezen dat de gegevens van de analoge pinnen kan verwerken en de gegevens via elk soort verbindingsprotocol zoals Wi-Fi of naar de cloud kan verzenden. server. We hebben specifiek voor ESP32 gekozen omdat het een goedkope microcontroller is met heel veel functies. Het heeft ook een ingebouwde Wi-Fi-radio waarmee we heel gemakkelijk verbinding met internet kunnen maken.
Zonnecircuit:
Een zonnelaadcircuit is een circuit dat een hogere spanning van het zonnepaneel krijgt en dit omzet naar een laadspanning, zodat het de batterij efficiënt kan opladen. Voor dit project zullen we de op LT3562 gebaseerde MPPT Charge Controller Circuit Board gebruiken die we al hebben gemaakt in een van onze eerdere projecten. Maar als u deze IoT-monitoring wilt insluiten, kunt u elk type zonnecircuit gebruiken. We hebben voor dit bord gekozen omdat het circuit is uitgerust met Maximum Power Point Tracking (MPPT) wat gunstig is voor energiezuinige zonnepaneelprojecten. Het is een efficiënte manier om een kleine lithiumbatterij op te laden via een zonnepaneel.
Shuntweerstand:
Elke weerstand volgt de wet van ohm, wat betekent dat als een bepaalde hoeveelheid stroom door de weerstand vloeit, er een zekere spanningsval zal optreden. Shuntweerstanden vormen hierop geen uitzondering en worden specifiek gebruikt om de stroom te meten. Kies echter, afhankelijk van de nominale stroom die door het zonnepaneel vloeit, een shuntweerstand die een voldoende hoeveelheid spanning produceert die kan worden gemeten door de microcontrollereenheid. Maar tegelijkertijd is het wattage van de weerstand ook een belangrijk ding. De keuze van het wattage van de shuntweerstand is ook belangrijk.
De spanningsval kan worden berekend met behulp van de onderstaande formule. Dit staat bekend als de wet van Ohm-
V = ik x R
V is de spanning die wordt geproduceerd tijdens 'I', dwz de hoeveelheid stroom die door de hoeveelheid weerstand 'R' vloeit. Een weerstand van 1 ohm produceert bijvoorbeeld 1V spanningsval wanneer er 1A stroom doorheen stroomt.
Voor het wattage van de weerstand kan de onderstaande formule worden gebruikt:
P = ik 2 R
Waar ik de maximale stroom is en de R de weerstandswaarde. Voor 1A stroom met 1 Ohm weerstand, is 1 watt voldoende voor de vermogensdissipatie. Dit is echter handig voor kleine zonnepaneelprojecten, maar helemaal niet geschikt voor toepassingen in het zonnestelsel. In zo'n geval is eigenlijk de niet-invasieve stroommetingstechniek wat gebruikt moet worden. In dat geval kan de stroom nauwkeurig worden gemeten, waarbij zowel een zeer lage hoeveelheid stroom als een zeer hoge hoeveelheid stroom kan worden gemeten.
Lithium batterij:
De selectie van de lithiumbatterij is een essentieel onderdeel van elk project waarbij zonnepanelen betrokken zijn. Omdat de microcontrollereenheid die altijd aan blijft en constant de gegevens controleert en verzendt, minstens honderd milliampère stroom nodig heeft voor een stabiele werking.
De batterijcapaciteit moet iets zijn dat de microcontroller minimaal 4-5 dagen van stroom kan voorzien als de zon niet schijnt vanwege de moesson. Het is ook belangrijk dat de laadstroom meer moet zijn dan de laadstroom vanuit het oogpunt van de accu. Het is vrij ongebruikelijk als iemand 100mA belasting aansluit op een accu en een laadstroom levert die lager is dan dat. Voor de zekerheid zouden we minimaal 5 keer meer laadstroom moeten hebben dan de laadstroom.
Aan de andere kant moet de batterijspanning hoger zijn dan elke normale ingangsspanning van de spanningsregelaar die nodig is voor de microcontroller. Een lithiumbatterij van 7,4 V kan bijvoorbeeld worden aangesloten op zowel 3,3 V als 5,0 V lineaire spanningsregelaar (aangezien lineaire regelaar een hogere uitvalspanning vereist dan de LDO en Switching.)
In ons project hebben we een 4000mAH-batterij gebruikt met een rating van 7,4 V. We hebben een 5.0V-regelaar gebruikt die voldoende stroom en spanningsoutput levert voor de ESP32.
Spanningsdeler:
Een spanningsdeler is een essentieel onderdeel van de spanningsmeting van het zonnepaneel. Men moet een spanningsdeler kiezen die de spanning verdeelt volgens de I / O-spanningsingang van de microcontroller.
Kies de bovenstaande weerstanden zodanig dat de uitgangsspanning van de spanningsdeler de maximale I / O-spanning van de microcontroller niet mag overschrijden (3.3V voor ESP32). Het wordt echter aangeraden om een potentiometer te gebruiken, omdat deze flexibiliteit biedt om een zonnepaneel met een hogere of lagere spanningswaarde te kiezen en de spanning gemakkelijk kan worden ingesteld met een multimeter.
In ons geval hebben we een potentiometer in het MPPT-bordcircuit die als spanningsdeler fungeert. We stellen de spanningsdeler in met een deelfactor van 6V. We hebben twee multimeters aangesloten, een in de ingang en een andere in de uitgang van de pot, en hebben de waarde ingesteld dat wanneer de ingangsspanning 18 V is, de uitgang 3 V is, aangezien de nominale uitgangsspanning van het zonnepaneel 18 V is.
Temperatuursensor voor het zonnepaneel:
Het uitgangsvermogen van het zonnepaneel heeft een directe verbinding met de temperatuur van het zonnepaneel. Waarom? Omdat als de temperatuur van een zonnepaneel begint te stijgen, de uitgangsstroom van het zonnepaneel exponentieel toeneemt, terwijl de uitgangsspanning lineair begint te dalen.
Volgens de vermogensformule is Wattage gelijk aan spanning maal stroom (W = V x A), een afnemende uitgangsspanning verlaagt ook het uitgangsvermogen van het zonnepaneel, zelfs na de toename van de stroom. Nu, de volgende vraag die bij ons opkomt, is, hoe de zonnetemperatuur te meten? Welnu, het is nogal interessant omdat zonnepanelen over het algemeen worden blootgesteld aan de hitteomgeving omdat het wordt blootgesteld aan direct zonlicht en om voor de hand liggende redenen. De beste manier om de temperatuur van een zonnepaneel te meten, is door een temperatuursensor met een plat oppervlak te gebruiken. Het wordt ook aanbevolen om een thermokoppel van het type K te gebruiken dat rechtstreeks in het zonnepaneel is geplaatst.
Voor onze toepassing hebben we een op thermistor gebaseerde temperatuursensormodule gebruikt, die hieronder wordt weergegeven.
Schakelschema voor op IoT gebaseerde monitoring van zonne-energie
Het volledige schakelschema voor de IoT Enabled Solar Power Monitor wordt hieronder weergegeven. Het schema is eenvoudig. Het rode streepjesbord is het MPPT-bord dat we voor dit project hebben gebruikt.
Het opzetten van de ThingSpeak
Maak een account aan bij ThingSpeak en ga naar de optie "mijn kanaal" en klik vervolgens op het nieuwe kanaal.
Maak een nieuw kanaal met de veldnamen.
Ga nu na het instellen van het veld naar het veld API-sleutels waar de API-sleutel schrijven beschikbaar is. Deze sleutel moet zowel in de code als in de kanaal-ID worden opgegeven.
Het ThingSpeak-adres staat op dezelfde pagina.
Met de bovenstaande stappen kunt u ThingSpeak heel gemakkelijk instellen. Als je meer wilt weten over ThingSpeak en het installatieproces, kun je onze eerdere artikelen over het onderwerp lezen.
Arduino-code voor monitoring van zonne-energie met behulp van ESP32
De volledige ESP32 zonnestroombewakingscode vindt u onderaan deze pagina. De code begint met het definiëren van uw SSID, wachtwoord en een paar andere constante parameters, zoals hieronder weergegeven.
// definieer WiFi SSID & PWD voor uplink. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// weerstand bij 25 graden C #define THERMISTORNOMINAL 10000 // temp. voor nominale weerstand (bijna altijd 25 C) #define TEMPERATURENOMINAL 25 // De bèta-coëfficiënt van de thermistor (meestal 3000-4000) #define BCOEFFICIENT 3950 // de waarde van de 'andere' weerstand #define SERIESRESISTOR 10000
De nominale ohm van de thermistor wordt geleverd bij de nominale temperatuur. Stel deze waarde in afhankelijk van het gegevensblad van de thermistor. Zet de Beta-coëfficiënt en de serieweerstandswaarde van de thermistor.
// definieer analoog voor stroom en spanning const int curr_an_pin = 35; const int volt_an_pin = 34; const int ntc_temp_an_pin = 33;
De pincodes worden hier gedefinieerd.
#define thingSpeakAddress "xxxxxxxxx" #define channelID xxxxx #define writeFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
Zet de thingSpeakAddress, channelID, Write Feed API Key. De rest van de dingen is niet vereist, maar is nog steeds nuttig als gegevens van internet moeten worden ontvangen.
void setup () { // plaats hier je setup-code, om een keer uit te voeren: // stel de seriële poort in op 115200 Serial.begin (115200); // Initialiseer seriële vertraging (1000); WiFi.mode (WIFI_STA); ThingSpeak.begin (klant); // Initialiseer ThingSpeak // todo: maak een taak om een pin te lezen voor het verkrijgen van stroom en spanning en bereken watt en temperatuur van het zonnepaneel xTaskCreate ( wifi_task, / * Task function. * / "Wifi_task", / * String met naam van taak. * / 1024 * 2, / * Stapelgrootte in bytes. * / NULL, / * Parameter doorgegeven als invoer van de taak * / 5, / * Prioriteit van de taak. * / NULL); / * Taakhandgreep. * / Serial.print ("Gegevens lezen."); }
In de bovenstaande code wordt de ThingSpeak-server geïnitialiseerd en wordt een taak gemaakt die de gegevens met betrekking tot het zonnepaneel zal ophalen.
In de hoofdlus worden de zonnestroom en -spanning waargenomen via een analoge pin en wordt het gemiddelde gedaan.
zweven solar_curr_adc_val = 0; zweven solar_volt_adc_val = 0; voor (i = 0; i <NUMSAMPLES; i ++) { curr_samples = analogRead (curr_an_pin); volt_samples = analogRead (volt_an_pin); temp_samples = analogRead (ntc_temp_an_pin); vertraging (10); } // gemiddelde van alle monsters uit float curr_avg = 0; zweven volt_avg = 0; zweven temp_avg = 0; voor (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); // converteer de adc-waarde naar spanningen om de werkelijke stroom en spanning te krijgen. zweven solar_curr = (curr_avg * 3.3) / (4095); zweven solar_volt = (volt_avg * 3.3) / (4095); // door een spanningsdeler te gebruiken verlagen we de werkelijke spanning. // om die reden vermenigvuldigen we de 6 met gemiddelde spanning om de werkelijke spanning van het zonnepaneel te krijgen. solar_volt * = 6;
De zonnespanning wordt aangeleverd door te vermenigvuldigen met 6 terwijl we de spanningsdeler hebben gemaakt die de ingangsspanning door 6 keer deelt.
De temperatuur wordt gegenereerd door de thermistor met behulp van een logaritmische formatie.
// converteer de waarde naar weerstand temp_avg = 4095 / temp_avg - 1; temp_avg = SERIESRESISTOR / temp_avg; //Serial.print("Thermistor weerstand "); //Serial.println(temp_avg); drijven steinhart; steinhart = temp_avg / THERMISTORNOMINAL; // (R / Ro) steinhart = logboek (steinhart); // ln (R / Ro) steinhart / = BCOEFFICIENT; // 1 / B * ln (R / Ro) steinhart + = 1,0 / (TEMPERATURENOMINAL + 273,15); // + (1 / To) steinhart = 1.0 / steinhart; // Steinhart omkeren - = 273.15; // converteer absolute temp naar C.
De gegevens worden elke 15 seconden gelezen.
vertraging (1000); tel ++; Serial.print ("."); if (count> = 15) { count = 0; Serial.println ("=============================================== ============================ "); Serial.print ("Solar Voltage ="); Serial.println (solar_volt); Serial.print ("Solar Current ="); 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 ("=============================================== ============================ ");
De gegevens voor de respectievelijke velden worden verzonden met behulp van de functie Thing.Speak.setField (); wanneer de wifi is verbonden.
if (WiFi.status () == WL_CONNECTED) { ThingSpeak.setField (1, solar_volt); ThingSpeak.setField (2, solar_curr); ThingSpeak.setField (3, solar_watt); ThingSpeak.setField (4, steinhart); // schrijf naar het ThingSpeak-kanaal int x = ThingSpeak.writeFields (channelID, writeFeedAPIKey); if (x == 200) { Serial.println ("Kanalen update succesvol."); } else { Serial.println ("Probleem bij bijwerken kanaal. HTTP-foutcode" + String (x)); } } anders { Serial.println ("\ r \ n ##################################### ###################### "); Serial.println ("Kan gegevens niet bijwerken naar thingSpeak Server."); Serial.println ("WiFi niet verbonden…"); Serial.println ("############################################# ############### \ r \ n "); } Serial.print ("Gegevens lezen."); } }
De Wi-Fi-taak gemaakt in het onderstaande codefragment-
void wifi_task (void * parameter) { while (1) { if (WiFi.status ()! = WL_CONNECTED) { Serial.print ("Probeert verbinding te maken met SSID:"); Serial.println (WLAN_SSID); while (WiFi.status ()! = WL_CONNECTED) { WiFi.begin (WLAN_SSID, WLAN_PASS); // Maak verbinding met het WPA / WPA2-netwerk. Wijzig deze regel als u een open of WEP-netwerk Serial.print (".") Gebruikt; vertraging (5000); } Serial.println ("\ nVerbonden."); Serial.println (); Serial.println ("WiFi verbonden"); Serial.println ("IP-adres:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / portTICK_PERIOD_MS); } vTaskDelete (NULL); }
Gegevens testen en bewaken
Het zonnepaneel is verbonden met het circuit en in het zonlicht geplaatst om te testen zoals hieronder weergegeven.
De volledige werking wordt gedemonstreerd in de onderstaande video. Ons circuit was in staat om de uitgangsspanning, stroom en vermogen van het paneel te lezen en live bij te werken op het thingspeak-kanaal, zoals hieronder weergegeven.
Zoals we kunnen zien, worden gegevens over 15 minuten weergegeven in de bovenstaande grafiek. Omdat dit een project voor buitenactiviteiten is, moet de juiste printplaat en een gesloten doos worden gebruikt. De behuizing moet zo worden gemaakt dat het circuit waterdicht blijft bij regen. Gebruik het actieve forum van Circuit Digest om dit circuit aan te passen of om andere aspecten van dit project te bespreken. Ik hoop dat je de tutorial leuk vond en iets nuttigs hebt geleerd.