sunnuntai 16. syyskuuta 2018

AURINKOPANEELIN TESTAUS

Olen useiden vuosien ajan käyttänyt kesämökillä aurinkosähköä. Paneelit aurinkoiseen paikkaan, kaupasta lataussäädin ja akut varastoksi. Niin yksinkertaista se on. Periaatteessa kyllä ja noillakin pärjää pitkälle, mutta aurinkopaneelin toimintaan liittyy kyllä monta muutakin tekijää. Tämän kertaisen blogini tarkoituksena valottaa aurinkopaneelin toimintaa mittaamalla sitä.

Mittausjärjestely. Vasemmalla vakiovirtakuorma.
Paneelin tuottoa eri kulmista.
Olin jokin vuosi sitten ostanut pienen 50 W paneelin testejä varten. Tuolloin testasin lähinnä paneelin tuottoa auringon ollessa eri suunnissa. Toisin sanoen kääntelin paneelia eri kulmissa ja mittasin tuoton.
Yleensä suositellaan paneeli suuntaamaan etelään. Silloin aurinko on korkeimmillaan. En tiedä, mistä tuo suositus tulee, sillä tuoton suuruuteen on monia tekijöitä. Ehkä se on helppo ja selkeä ratkaisu?





Maapallo kääntyy tunnissa 15 astetta. Kun siirrytään kolme (3) tuntia eli 45 astetta siitä, milloin aurinko paistaa paneeliin suoraan, putoaa tuotto noin puoleen. Myös sillä on vaikutusta, onko paneeli pysty- vai vaakasuorassa. Valo on siis jossain määrin polarisoitunutta. Tämän tekijän vaikutus on kuitenkin marginaalisen pieni. Paljon suurempi vaikutus on maapallon kaltevuudella. Juhannuksen tienoilla aurinko paistaa eteläsuomen leveyspiirillä noin 53 asteen korkeudella ja jouluna noin 9 asteen korkeudella. Toinen suositus on asentaa paneeli noin 45 asteen kulmaan. En tiedä tuotakaan, mistä se tulee, mutta pystykulmaa kannatta miettiä sen mukaan, mihin aikaan vuodesta on sen pääasiallinen käyttöaika. Joka tapauksessa vuorokausi rytmillä on paljon suurempi merkitys kuin vuosirytmillä.



Tuosta syystä olen kokeillut erilaisia tapoja kääntää paneeleita päivän edetessä. Jos paneeli seuraa aurinkoa 90 – 120 asteen verran (6 – 8 tuntia), on paneelin tuotto noin kaksinkertainen. Pilvisellä säällä vielä suurempi. Pilvien kulkua on tietysti mahdoton määritellä tai laskea etukäteen, sillä ei voi ennustaa, mihin aikaan päivästä aurinko joutuu pilven taakse, jolloin tuotto tippuu helposti jopa 90 %. Kääntyvä paneeli on silloin kohtisuoraan aurinkoon, kun se suostuu pilkistämään pilven raosta.

Mittaustaulukko. 
Aurinkopaneeli on vähän kuin paristo, minkä jännite on lähes vakio riippumatta valon voimakkuudesta (säteilyn tehosta). Riippuu tietysti paneelista, mutta on tyypillisesti välillä 19 – 23 V. Pimeällä jännite luonnollisesti laskee nollaan. Valo ei suoranaisesti muuta tämän ”pariston” sisäistä vastusta, vaan muuttaa ikään kuin ”vakiovirtalähteen” kuormituskykyä. Kuva simuloi aika hyvin paneelin käyttäytymistä valoisuuden vaihdellessa. Kuvassa PNP-transistorin kannalla on vakiojännitelähde ja transistorin emitterillä valovastus, jonka suuruutta auringosta tuleva fotonivirta muuttaa. Lähdössä oleva kuormituksen vaihtelu ei juurikaan muuta saatavaa virtaa, vaan lähtöjännite muuttuu radikaalisti. Kun on hämärää, aurinko paistaa vinosti tai on pilven takana, saadaan vähän virtaa. Kun paistaa voimakkaasti, saadaan kuormaan paneelin tehosta riippuva maksimivirta. Kuvassa on esitetty taulukko todellisesta mittauksesta. Siinä on aikaskaala tunnin välein, mutta pilven hattaratkin toki vaikuttivat. Kuvassa kolme olen yrittänyt havainnollistaa paneelin käyttäytymistä graafisesti.

Vakiovirtalähdemalli.
Kuvassa on kuormituslaitteen kytkentä. Siinä on kahdella transistorilla (tehotransistori MJE3055 ja ohjaustransistori 2N2904) tehty vakiovirtakuorma. Arduino ohjaa vakiojännitteen ohjaustransistorin kannalle, mikä puolestaan syöttää tehotransistoria. Sen emitterillä on 1 ohmin vastus, mistä Arduino mittaa virran (1 ohmi * jännite = virta). Koska Arduino ei syötä tasajännitettä, vaan analogialähtö on pulssinleveysmoduloitu (PWM), pitää ohjausjännite suodattaa. Jännitemittausta varten on jännitejako kahdella vastuksella. Tuo paneelin noin 20 voltin jännite pitää skaalata Arduinon tuloalueelle 0 – 5 V.

Painikkeita on kolme. Ohjausjännite kasvaa, ohjausjännite pienenee ja arvojen tulostus näytölle. Tulostuksen aikana ohjausjännite nollataan. Tämä johtuu siitä, että tehotransistorin jäähdytyslevy on niin pieni, että pidempiaikaisessa kuormituksessa se olisi kuumentunut liikaa. Testien jälkeen on muutenkin selvää, että tuon ohjausohjelman olisi voinut tehdä fiksumminkin, esim. automaattiseksi, mutta se uhraus on turhaa, koska tälläkin ilmenee kaikki oleellinen paneelin ominaisuuksista. Myöskään tämä tekemäni testilaite ei pysty kuormittamaan tätä 50 W paneelia sen maksimivirtaan saakka.


Painikkeita on kolme. Ohjausjännite kasvaa, ohjausjännite pienenee ja arvojen tulostus näytölle. Tulostuksen aikana ohjausjännite nollataan. Tämä johtuu siitä, että tehotransistorin jäähdytyslevy on niin pieni, että pidempiaikaisessa kuormituksessa se olisi kuumentunut liikaa. Testien jälkeen on muutenkin selvää, että tuon ohjausohjelman olisi voinut tehdä fiksumminkin, esim. automaattiseksi, mutta se uhraus on turhaa, koska tälläkin ilmenee kaikki oleellinen paneelin ominaisuuksista. Myöskään tämä tekemäni testilaite ei pysty kuormittamaan tätä 50 W paneelia sen maksimivirtaan saakka.

Jos paneeli kytketään suoraan akkuun (12 V), ei siihen saada ladattua suurinta mahdollista tehoa. Akku latautuu paneelin antamalla virralla, eli virta kertaa akun sen hetkinen jännite. Loppu paneelin tehosta kuluu paneelin lämmittämiseen, mikä ei ole hyvä juttu. Kuten tuosta taulukosta ilmenee, saadaan maksimiteho paneelista noin 17 – 18 voltin jännitteellä. Jotta tähän päästäisiin, on siinä hyvä pohtimisen aihe ensi kerraksi.

Ohjelma 54
/***************************************
* AuPanTest
* 13.09.2018
* Kuormitetaan pientä aurinkopaneelia ja
* kerätään ominaisuudesta dataa
**************************************/

// MÄÄRITTELYT:
// Muutamia perusmäärityksiä
const int Con_Miinus = 2;
boolean Bol_Miinus = true;
int Seq_Miinus = 1;

const int Con_Tulostus = 3;
boolean Bol_Tulostus = true;
int Seq_Tulostus = 1;
const int Con_LED_2 = 6;
const int Con_Plus = 4;
boolean Bol_Plus = true;
int Seq_Plus = 1;
const int Ain_Voltit = 0;
int Int_Jannite = 0;
float Flo_Jannite = 0;
float Flo_U_Kerroin = 0.0249;
const int Ain_Virta = 1;
int Int_Virta = 0;
float Flo_Virta = 0;
float Flo_I_Jako = 200;
float Flo_Teho = 0;

const int Con_Ohjaus = 5;
const int Con_AnaPohja = 50;
int Int_AnaOut = Con_AnaPohja;
int Int_AnaArvo = 0;
const int Con_AnaMuutos = 10;

// ALIOHJELMAT
void Fun_Tulostus(){
Serial.print("Jännite :"); Serial.print(Flo_Jannite);
Serial.print(" Virta :"); Serial.print(Flo_Virta);
Serial.print(" Teho :"); Serial.println(Flo_Teho);
}

// ASETUKSET:
void setup(){
Serial.begin(9600);
pinMode(Con_Miinus, INPUT_PULLUP);
pinMode(Con_Tulostus, INPUT_PULLUP);
pinMode(Con_Plus, INPUT_PULLUP);
}// Asetuksen loppu

// PÄÄLOOPPI
void loop(){
Bol_Miinus = !digitalRead(Con_Miinus);
Bol_Tulostus = !digitalRead(Con_Tulostus);
Bol_Plus = !digitalRead(Con_Plus);
Int_Jannite = analogRead(Ain_Voltit);
Flo_Jannite = Int_Jannite * Flo_U_Kerroin;
Int_Virta = analogRead(Ain_Virta);
Flo_Virta = Int_Virta / Flo_I_Jako;
Flo_Teho = Flo_Jannite * Flo_Virta;

switch (Seq_Miinus) {
   case 1:
     if(Bol_Miinus == true){
       delay(5);
       Int_AnaArvo = Int_AnaArvo - Con_AnaMuutos;
       if(Int_AnaArvo < 0){
         Int_AnaArvo = 0;}
         Int_AnaOut = Con_AnaPohja + Int_AnaArvo;
         delay(300);
         Fun_Tulostus();
     Seq_Miinus = 2;}
   break;
   case 2:
     if(Bol_Miinus == false){
       Seq_Miinus = 1;
   }
   break;
   }// Miinus-sekvenssin loppu

switch (Seq_Tulostus) {
   case 1:
     if(Bol_Tulostus == true){
       delay(5);
       Int_AnaOut = Con_AnaPohja;
       Fun_Tulostus();
       Seq_Tulostus = 2;
     }
   break;
   case 2:
      if(Bol_Tulostus == false){
        Seq_Tulostus = 1;
      }
   break;
   }// Tulostus-sekvenssin loppu

switch (Seq_Plus) {
   case 1:
     if(Bol_Plus == true){
       delay(5);
       Int_AnaArvo = Int_AnaArvo + Con_AnaMuutos;
       if(Int_AnaArvo > 204){
         Int_AnaArvo = 204;}
         Int_AnaOut = Con_AnaPohja + Int_AnaArvo;
         delay(300);
        Fun_Tulostus();
     Seq_Plus = 2;}
   break;
   case 2:
     if(Bol_Plus == false){
     Seq_Plus = 1;
   }
   break;
}// Plus-sekvenssin loppu

analogWrite(Con_Ohjaus, Int_AnaOut);
delay(1);
} // Pääohjelma LOPPU

Ei kommentteja:

Lähetä kommentti