Zonnevolgsysteem

Gepost door Jeroen Vreuls op zondag 7 april 2019 18:57

Schema en software

We hebben nu al aardig wat informatie bij elkaar en kunnen nu eens kijken om een opzetje te maken voor het programma. Om de zon via tijd te gaan volgen, hebben we iets van een klok nodig. En het liefst een klok die van 00:00 uur tot 24:00 uur loopt. Ik heb daar een RTC voor gebruikt, een DS1307. Daar kun je de seconden, minuten, uren, weekdag, maanden en het jaar uithalen via I²C. Het IC communiceert dus met de controller via I²C. Voor de controller heb ik een PIC18F4520 gebruikt, deze heeft lekker wat geheugen en I/O. Verderop in het artikel zal ik het complete programma plaatsen.

Toen ik het test programma af had, kwam ik er toch achter dat er wat verschil zat in het volgen van de zon. Dat was eigenlijk meer dan verwacht (ongeveer 10 graden), dit komt ook omdat de zon niet altijd precies in het zuiden staat tussen kwart voor één en één uur. Dat is ook de reden waarom een zonnewijzer afwijkt en dus niet altijd de goede tijd aan geeft. Om het preciezer te maken had ik een test opstelling gemaakt met twee LDR's en dat werkte op zich wel goed. Zie het schema hieronder.

Het schemaHet schema

Maar als er bewolking was, dan werd het lichtste punt aan de hemel opgezocht en dat is nu net niet de bedoeling. Want het lichtste punt kan bijvoorbeeld helemaal in het noorden liggen, terwijl de zon bijvoorbeeld in het zuiden staat. Ik heb dat opgelost door een klein zonnepaneeltje te gebruiken als zon detectie, dus als er zon is mag het paneel verdraaien en als het bewolkt is staat het paneel stil. Maar toen had ik weer dat als het de hele dag bewolkt was, het paneel helemaal niet verdraaide. Dat was dus ook niet de bedoeling, want als de zon even doorbreekt moet je er gelijk van kunnen profiteren.

Als LDR heb ik twee van die gesealde types gebruikt, dat is een dichte RVS behuizing met een glaasje ervoor. Als zonnepaneeltje heb ik een 12 V type gebruikt, een dingetje van 120 x 60 mm. Hoeveel Watt het paneeltje is weet ik niet, is ook niet van belang in dit geval, maar als zonnesensor voldoet het in ieder geval goed. De LDR's en het paneeltje hangen aan de 10 bit AD-converter van de controller, de LDR's rechtstreeks en het paneeltje via een opamp geschakeld als spanningsvolger. Het test programma om de zon met LDR's te volgen stelde dan ook niets voor. Zie hieronder.

RUN:

  LDR_1 = ADIn 0
  LDR_2 = ADIn 1
  SENSOR = ADIn 2

  Print At 1,1,"SENSOR_R:",Dec,LDR_1
  Print At 2,1,"SENSOR_L:",Dec,LDR_2

  If LDR_1 > LDR_2 And LDR_1 - LDR_2 > HYSTERESIS Then
    If SENSOR > 307 Then
      RICHTING = 0
      PULS = 1
      DelayUS FREQUENTIE
      PULS = 0
      DelayUS FREQUENTIE
    EndIf
  EndIf

  If LDR_2 > LDR_1 And LDR_2 - LDR_1 > HYSTERESIS Then
    If SENSOR > 307 Then
      RICHTING = 1
      PULS = 1
      DelayUS FREQUENTIE
      PULS = 0
      DelayUS FREQUENTIE
    EndIf
  EndIf

  If LDR_1 = LDR_2 Then
    PULS = 0
  EndIf

  If SENSOR > 307 Then
    LED = 1
  Else
    LED = 0
  EndIf

GoTo RUN
End

De LDR's worden met elkaar vergeleken en met de waarde die daar uit komt, wordt de puls en richting bepaald voor de stappenmotor driver. Het voordeel hier van is dat je gelijk een proportionele besturing hebt, de zon is als het ware je setpoint en daar wil het paneel naar toe. Dus als de zon zich verplaatst, draait het paneel mee totdat de gewenste waarde is bereikt. Er is ook een kleine hysterese toegevoegd voor een mooie rustige regeling, zodat het paneel niet heen en weer staat te bewegen. De regeling gaat werken als de waarde van de zonnesensor boven de 1,5 V komt. 5 V : 1024 (10 bits) = 0,0048828125 Volt per stapje. 1,5 V : 0,0048828125 = 307,2. We vullen bij het programma dus een waarde in van 307 (If SENSOR > 307 Then).

Maar met dit programma werd de klok weer niet gebruikt. Dus toen zat ik met het terug draaien naar het referentiepunt aan het eind van de dag en naar de verschillende posities lopen in de maanden januari tot december. Dat ging niet omdat ik geen toegang had tot de tijd en de verschillende maanden. En die had ik wel nodig. Nadat ik beide programma's had gecombineerd, had ik een perfect werkend zonnevolgsysteem. Als het bewolkt is verdraaid het paneel via de klok en als het zonnig is verdraaid het paneel via de twee LDR's in combinatie met het kleine paneeltje als zonnesensor.

Download het PICBASIC programma

Zoals je kunt zien is het toch een aardig groot programma geworden. Het programma vergt misschien wel wat uitleg, we beginnen bovenaan. Onder RUN kun je zien dat ik drie poorten gebruik om de klok gelijk te zetten, met de mode knop kan ik kiezen tussen uren, minuten, seconden, datum, maand, en jaar. Met de andere twee knoppen kan ik de waardes verhogen of verlagen. Daar staat ook de print opdracht tussen om de tijd, datum, en jaar op het display te zetten, en achter de tijd zet ik ook in welke mode het programma zit. Als het programma in de run mode zit, staat er MO:PRUN op het display. Op deze manier heb je een beeld waar het programma mee bezig is op dat moment.

Daaronder krijg je ZON-OP ZON-ONDER. Als we nu bijvoorbeeld naar de maand maart kijken, zie je dat daar gevraagd wordt of het de derde maand is en of het zes uur of later is. Als het zes uur of later is dan mag er iedere minuut gedraaid worden. En of dat nu de 33 pulsen zijn die er gegeven worden door het programma, of dat de opdracht gegeven wordt door de zonnesensor (als de waarde groot genoeg is) maakt niet uit. Als de waarde van de zonnesensor groot genoeg is, wordt er naar CORRECTIE_PANEEL gegaan. Daar kun je zien dat de twee LDR's met elkaar vergeleken worden en wordt er een keuze gemaakt of het paneel naar oost of west gestuurd moet worden. Als voorwaarde moet de zonnesensor wel zon zien, anders wordt er teruggegaan naar ZON-OP ZON-ONDER in maart. Helemaal onderaan bij de maand maart ZON-OP ZON-ONDER wordt gevraagd of het de derde maand is en of het later is dan 18:43. Als dat zo wordt er naar terugloop maart gegaan.

Daar kun je zien dat er MO:TL-M op het display wordt gezet, dat is de afkorting voor mode terugloop maart. Daaronder wordt er naar de status van de eindschakelaar gekeken die op het referentiepunt zit, die zit op 49 graden oost, bij zon op in juni dus. Als de voorwaarde klopt, draait het paneel daar naar toe. Als de eindschakelaar bereikt is, wordt er 10 seconden gewacht en daarna wordt er naar NAAR-ZON-OP-MAART in maart gelopen.

Daar wordt weer de mode op het display gezet, in dit geval MO:NZOM mode naar zon op maart. Het paneel staat nu dus op 49 graden oost en moet naar 90 graden oost, de plaats waar de volgende dag de zon weer opkomt. Er moet dus 90 graden – 49 graden = 41 graden gedraaid worden, dat wordt dus 41 graden : 0,0075 = 5466 stappen. Er moeten dus 5466 stappen gemaakt worden om op 90 graden oost uit te komen. Als het paneel op die positie staat, dan gaan we naar PANEEL-IN-POSITIE.

Bovenaan bij PANEEL-IN-POSITIE zie je dat de klok module uitgelezen wordt, dit is gedaan omdat de tijd en de maand nodig zijn voor het programma. De klok module loopt trouwens altijd door, dus de tijd loopt altijd. Ook als de spanning van de besturing gehaald wordt, loopt de klok gewoon door. Zoals je kunt zien wordt de mode weer op het display gezet, in dit geval MO:ZPIP (mode zonepaneel in positie). Als je bij maand drie kijkt, kun je zien dat er tot 7:43 uur de volgende morgen gewacht wordt voor dat het paneel weer begint te draaien. Ik kijk op iedere 15 de van de maand naar de tijd wanneer de zon opkomt en die tijd doe ik plus een uur. Ik laat het paneel dus een uur later beginnen met draaien. Met de zomertijd houd ik de tijd aan die dan geld, maar ik zet de klok dan ook geen uur vooruit. Dus dan heb je weer hetzelfde, het paneel begint dan ook een uur later met draaien. Ik heb nu de maand maart laten zien, maar op deze manier werkt het voor ieder maand, alleen met andere waardes.