2-Achsen Solarnachführung


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:

Solarnachfuehrung Schaltplan 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.

Sensor-LED Schattenstab 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.