2-Achsen Solarnachführung
Here comes the sun ... (The Beatles)
Solarenergie ist kostbar.
Die Effektivität von Solarpanelen kann entscheidend gesteigert werden, wenn man die Panele nach dem jeweiligen Stand
der Sonne ausrichtet (solar-tracking). Das ist eine schöne Regelungsaufgabe für einen Mikrocontroller.
Man benötigt zusätzlich noch einen Sonnensensor und zwei Getriebemotoren für die Nachführung von Azimut und Elevation.
Geeignete Getriebemotoren hatte ich aus einer verschrotteten Maschine retten können. Aber beim Solarsensor war
Nachdenken angesagt.
Ursprünglich in der Rüstungsindustrie wurden sogenannte "Position Sensitive Devices" (PSD) entwickelt, um den
heißen Abgasstrahl von Kampfflugzeugen oder Raketen als Zielvorgabe für Abwehrraketen zu nutzen. Eine Weiterentwicklung
eines solchen kommerziellen Sensors kann heute jeder Zivilist für den geringen Preis von etwa 60 bis 800 Euro käuflich
erwerben. Wenn Sie am heimischen Herd also ihre eigene Anti-Raketen-Rakete entwickeln wollen - greifen Sie zu !
Aber geht es nicht auch etwas preiswerter? Passende Fotodioden oder Cadmium-Sulfid-Widerstände besitze ich nicht.
Da erinnert man sich gern daran, daß eine gewöhnliche LED auch als "Solarzelle" arbeiten kann. Zwar ist die erzeugte
elektrische Leistung sehr gering, aber eine grüne oder gelbe 5 mm LED erbrachte an einem hochohmigen Spannungsmesser
immerhin 1,7 V im direkten Sonnenlicht. Nicht schlecht, wenn man bedenkt, daß eine bedrahtete 5 mm LED beim
Billiganbieter nur 5 Cent das Stück kostet und der gesamte Sensor inklusive passender temperaturkompensierter
Referenzspannungsquelle für insgesamt 25 Cent erhältlich ist. Etwas eigene Bastelei ist natürlich erforderlich.
So entstand diese Schaltung:
Ein ATmega32 liest über 4 seiner 8 Analogeingänge im Sekundentakt die von den Sensor-LED bereitgestellten
Spannungen ein. Die Analogeingänge des ATmega32 erwiesen sich als erstaunlich hochohmig. Eine Zwischenschaltung von
Impedanzwandlern zwischen den Sensor-LED und den Eingängen des A/D-Wandlers ist nicht erforderlich. Aus diesem Grund
müssen die vier Leitungen von den Sensor-LED zu den Eingängen des A/D-Wandlers abgeschirmt werden. Der Schirm dient
gleichzeitig als Leitung für das Massepotential. Die den Sensor-LED parallel geschalteten Kondensatoren 100 nF
unterdrücken wirksam die Einstreuung von 50 Hz und 16 2/3 Hz Wechselspannungsfeldern. Die Widerstände 2M2 sind für
die Entladung der Kondensatoren 100 nF notwendig.
Eine weitere LED aus der gleichen Charge wird als externe Spannungsreferenz für den Mikrocontroller genutzt. Diese
Referenz-LED befindet sich direkt an AREF des Mikrocontrollers und wird nicht von der Sonne beschienen. Versuchsweise
wurde die Referenz-LED ebenfalls der Sonne ausgesetzt - eine Veränderung der Referenzspannung konnte ich nicht feststellen.
Da alle 5 LED aus dem gleichen Material sind und in fast identischer Umgebung betrieben werden erfolgt auf einfachste
Weise eine Kompensation des Temperaturganges der Sensor-LED der Solarnachführung und die 10 Bit des A/D-Wandlers
des ATmega32 können voll ausgenutzt werden.
Die 4 Sensor-LED sind jeweils etwa 15 ° nach außen gebogen. Dieser Wert muß von Hand sorgfältig justiert werden.
Am Einfachsten geht das mit einem 10 cm langen Schattenstab, der für die Justage
senkrecht zur Ebene der Solarzellen der Solarnachführung auf etwas weißem Papier montiert ist.
So läßt sich sehr fein ablesen, ob und in welche Richtung die Solarnachführung schielt. Nach der Justage sollten die
Sensor-LED durch eine passende Kuppel aus Plexiglas vor Einwirkungen der Umwelt geschützt werden.
Ergebnisse:
Die beschriebene Solarnachführung funktioniert bei ortsfesten Solaranlagen zufriedenstellend, sie sucht immer den hellsten
Punkt am Himmel. Das muß nicht immer der Ort der Sonne sein.
Für den ursprünglich gedachten Einsatz während der Parkzeiten am Gepäckträger meines Elektrofahrrad
ist das Konzept nur bedingt brauchbar, da der azimutale Drehwinkel der Solarpanele durch Endschalter aus
mechanischen Gründen auf 320 ° begrenzt werden mußte. Da die Richtung des parkenden Fahrrades nicht vorab bestimmbar ist,
kann es vorkommen, daß sich die Sonne in den 40 ° des Azimut befindet, die mechanisch nicht angefahren werden können.
Auf die Endschalter kann aber bei dieser Solarnachführung nicht verzichtet werden, deshalb muß ein Konzept ohne Endschalter
her - ein absoluter 360 ° Drehgeber mit einem Kompaß-Sensor und einer RTC an einem Mikrocontroller wird den Sonnenstand
aus den Kepler-Elementen der Sonne berechnen und die Solarpanele entsprechend steuern.
Aber das ist schon wieder ein anderes Projekt ...
Die Programmierung erfolgte wieder in BASCOM-AVR. Mit der kostenlosen Demo kann man
bis zu 4 kByte Programmcode erzeugen.
Die Software belegt 2 % des Flash-Programmspeichers im Mikrocontroller.
Das ist der kommentierte Programmcode für die Solarnachführung in BASCOM-AVR:
Ähnlichkeiten mit dem Code meines Wh-Meters sind nicht zufällig.
'***************************************************************************
'* M32 Sun-Tracker.bas *
'* 28.12.2008 *
'* Motorlaufzeit in 1s Schritten wählbar *
'* Wenn Schwelle überschritten beginnt Motor immer bei 0s zu drehen *
'* und schaltet bei 0s + M_dauer in jeder Zykluszeit ab *
'* Differenz Einschalt-/Ausschaltschwelle ergibt Hysterese und die Motoren *
'* bleiben in ihrer letzten Stellung stehen *
'***************************************************************************
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 10
$framesize = 40
$prog &HFF, &HFF , &HD9, &H00 'M32 lock and fuse bytes
'external Crystal, JTAG disabled,
'port C for user
Config Adc = Single , Prescaler = 128 , Reference = Off 'ext.ref. 1,68 V
Config Portc = Output 'L293D 2x H-Brücke
Config Timer1 = Timer , Prescale = 256
Const Timervorgabe = 3036 'um auf 1 s Takt zu kommen 3036
Const Einschaltschwelle = 500 'Einschaltschwelle Lichtstärke
Const Ausschaltschwelle = 180 'Ausschaltschwelle Lichtstärke
Const M_intervall = 60 'Zykluszeit, aller 60 s Motoren Ein
Const M_dauer = 2 'Motoren laufen je 2 s
Dim Ist_sekunde As Byte
Dim Letzte_sekunde As Byte 'Merker zum Vergleich ob neue Sekunde
Dim N As Word 'Wert von Sensor North 0...1023
Dim S As Word 'Wert von Sensor South
Dim E As Word 'Wert von Sensor East
Dim W As Word 'Wert von Sensor West
Dim Ns As Word 'Summe N+S
Dim Ew As Word 'Summe E+W
Dim Nsew As Word 'Summe N+S+E+W
On Timer1 Timer_irq
Enable Timer1
Enable Interrupts
Set Portc.2 'Startbedingung für Kontroll-LED: aus!
Start Adc
Do
If Ist_sekunde <> Letzte_sekunde Then 'Wenn neue Sekunde dann:
N = Getadc(4) 'Sensorwerte einlesen
S = Getadc(5)
E = Getadc(6)
W = Getadc(7)
Ns = N + S 'Summe N+S
Ew = E + W 'Summe E+W
Nsew = Ns + Ew 'Summe aller Sensoren
If Nsew > Einschaltschwelle Then 'es ist ausreichend hell geworden!
Reset Portc.2 'Kontroll-LED an
If Ist_sekunde <= M_dauer Then 'Motoren Ein
If N > S Then
Set Portc.6
Reset Portc.7
End If
If S > N Then
Set Portc.7
Reset Portc.6
End If
If E > W Then
Set Portc.4
Reset Portc.5
End If
If W > E Then
Set Portc.5
Reset Portc.4
End If
Else 'wenn Motorlaufzeit abgelaufen
Set Portc.4 'beide Motoren: aus
Set Portc.5
Set Portc.6
Set Portc.7
End If
Else
If Nsew < Ausschaltschwelle Then 'es wird finster!
Set Portc.2 'Kontroll-LED aus
Set Portc.6 'Motoren: Parkpositionen anfahren
Reset Portc.7 'und auf Endschaltern stehen bleiben
Set Portc.4
Reset Portc.5
End If
End If
If Ist_sekunde = M_intervall Then 'Zykluszeit abgelaufen?
Ist_sekunde = 0 'neuer Zyklus beginnt
End If
Letzte_sekunde = Ist_sekunde 'aktualisieren
End If
Loop
End
Timer_irq:
Timer1 = Timervorgabe 'wieder voreinstellen
Incr Ist_sekunde 'Sekundenzähler +1
Return
'******************************************************************************
Und nun noch das obige Programm als compiliertes HEX-File
M32-Solartracker.hex zum Download.