In diesem Beitrag soll gezeigt werden, wie man mit einfachen Mitteln ein einfaches und preiswertes Modell für eine solche Nachführeinrichtung bauen kann. Dazu benutzen wir:
• Mikrocontroller Attiny2313 auf Experimentierplatine, z. B. unsere Attiny-Platine (Link)
• ein Servo, z. B. SG90, auf einem Holzbrettchen montiert
• 2 LDR
• I2C-Modul PCF8591 zur Spannungsmessung
• Lüsterklemmenriegel mit 5 Einheiten, Schraube, Kabel, Pappestück
Der Aufbau kann der folgenden Abbildung entnommen werden (Aufsicht):
Fällt das Licht parallel zur Pappwand auf die Nachführeinrichtung, dann werden beide LDRs gleich stark beleuchtet. Ihr Widerstand ist dann gleich groß. Beide LDRs sind in Reihe geschaltet und bilden einen Spannungsteiler. Die Spannung Umess beträgt dann 2,5 V. Wenn nun das Licht nicht parallel zur Pappwand ausgerichtet ist, dann liegt eine der beiden LDRs (teilweise) im Schatten der Pappwand; entsprechend größer ist ihr Widerstand. In der Situation der obigen Abbildung ist der Widerstand vom rechten LDR größer als der vom linken. Umess ist dann kleiner als 2,5 V.
Der Mikrocontroller muss das Servo nun so steuern, dass der Lüsterklemmenriegel mit dem aufgesteckten Pappstück immer zur Lichtquelle hin ausgerichtet wird. Dazu werden die Masseleitung und die Umess-Leitung an das PCF8591 angeschlossen; dabei sollte man beachten, dass die im Handel befindlichen Module über Jumper schon in unterschiedlicher Weise mit Sensoren (LDR, Temperatursensor, Poti etc.) und Aktoren (z. B. LED) verbunden sind. Die folgende Abbildung zeigt die Verdrahtung bei einem solchen Modul.
Hier ist z. B. der Mittenabgriff des Potis an den Eingang AIN0 angeschlossen. Wir trennen nun diesen Mittenabgriff von diesem Eingang, indem wir den entsprechenden Jumper vom Modul entfernen. Den linken Steckerstift verbinden wir nun mit der Umess-Leitung. Letztlich wird das Potentiometer des Moduls nun durch die Reihenschaltung der LDRs ersetzt.
Vor dem Auslesen der Messwerte muss der PCF8591 so konfiguriert werden, dass er von diesem Eingang die Spannungswerte misst. Dies geschieht durch folgende Initialisierung:
Code: Alles auswählen
I2cstart
I2cwbyte Write_adresse
Knr = 0 'knr = 0 -> AIN0 als Eingang
I2cwbyte Knr
Waitms 20
I2cstop
Code: Alles auswählen
I2cstart
I2cwbyte Read_adresse
I2crbyte Istwert , Nack 'not Acknowledge: letzte Messung
I2cstop
Das Servo wird mit der elektrischen Quelle der Experimentierplatine verbunden. Die Datenleitung des Servos sollte mit dem Ausgang B.0 des Attiny2313 verbunden werden, wenn man das folgende Programm benutzen möchte.
Code: Alles auswählen
' Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' plus PCF8591-ad-da-wandler; keine zusätzlichen Pull-Up-Widerstände erforderlich
' LEDs zur Kontrolle an PortB.0 und Portb.1
' Analoge Werte lesen (mit ACK)
' Kalibrierung mit Ta0
' Nachführung stoppen mit Ta1
' Servo SG90 per PWM steuern
' rechter Anschlag (1,0 ms): compare1b = 250
' linker Anschlag (2,0 ms): compare1b = 1250
' PWM an OC1B = PortB.4
' Anschlüsse: braun -> GND (Minuspol), rot -> VCC (Pluspol), orange -> PortB.4
'
' ggf. 40W-Glühbirne o. Ä.(mit isotroper Strahlung) als Sonnenersatz
'
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
$baud = 9600
'**********************************************************
'******************* Deklarationen ************************
Dim Istwert As Byte
Dim Sollwert As Byte
Dim Write_adresse As Byte
Dim Read_adresse As Byte
Dim Knr As Byte
Dim Sollmin As Byte
Dim Sollmax As Byte
Declare Sub Initialisierung
Declare Sub Kalibrierung
Declare Sub Messen
Declare Sub Nach_links
Declare Sub Nach_rechts
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Waitms 50
Tccr1a = &B00100011
Tccr1b = &B00011010
Compare1a = 10000 'Maximalwert
Compare1b = 750 'Vergleichswert -> Mittelstellung
Write_adresse = 144
Read_adresse = 145
'**********************************************************
'******************** Hauptprogramm ***********************
Do 'Start nach Taster Ta0
Loop Until Pind.2 = 0
Call Initialisierung
Call Kalibrierung
Do
Call Messen
Printbin Istwert 'zur Kontrolle
If Istwert < Sollmin Then Call Nach_links 'vgl. Kalibrierung
If Istwert > Sollmax Then Call Nach_rechts
Waitms 100
Loop Until Pind.3 = 0
End
'**********************************************************
'******************* Unterprogramme ***********************
Sub Initialisierung
I2cstart
I2cwbyte Write_adresse
If Err = 0 Then Portb.0 = 1 'LED0 an, wenn Writeadresse bestätigt
Knr = 0
'knr 0 -> Poti, knr 1 -> LDR, knr 2 -> Temperatur, knr = 48 -> Poti - LDR (Differenz!)
I2cwbyte Knr
Waitms 20
I2cstop
Waitms 20
End Sub
Sub Kalibrierung
Sollwert = 127 'Kann auch automatisiert werden
Sollmin = Sollwert - 5
Sollmax = Sollwert + 5
End Sub
Sub Messen
I2cstart
I2cwbyte Read_adresse
I2crbyte Istwert , Nack 'not Acknowledge: letzte Messung
I2cstop
End Sub
Sub Nach_rechts
If Compare1b > 300 Then Compare1b = Compare1b - 10
End Sub
Sub Nach_links
If Compare1b < 1200 Then Compare1b = Compare1b + 10
End Sub
Das Video aus der Anlage zeigt unser Modell einer Nachführeinrichtung in Aktion. Hier markiert der rote Strich am oben Bildrand die Richtung, aus der die Sonnenstrahlen kommen. Die Drehung der Erde wird simuliert, indem das Holzklötzchen mit dem Servo gedreht wird. Man erkennt, dass das Servo die Lüsterklemme jeweils so weit dreht, bis das Pappestück parallel zum roten Strich steht.