Nachführung Solarzelle mittels Servo
Hi,
Ich arbeite mich gerade in die Atmega Controller ein und hier ist mal ein kleines Testprojekt. :-)
Ich fand ne alte Solarzelle und nen Servo in der Bastelkiste, also warum nicht mal ne Solarzelle mittels Servo und 2 LDRs der Sonne nachführen.
Gesagt getan und losgebaut, hier das Ergebniss:
2 LDR, einer links und einer rechts von der Solarzelle messen das Licht und der Atmega wertet es aus. Der Atmega bewegt dann das Servo in die Richtung wo es heller ist. das ganze macht er solange bis beide in etwa gleich Hell sind.
Mann kann im Code einen Puffer einstellen, wieviel Abstand zwischen den beiden Messergebnissen sein darf bis der Atmega reagiert.
Hier ein kleines Video davon:
http://www.youtube.com/watch?v=qcufMahoQEQ
Werde es wohl Morgen (heute) noch so abändern, das nur aller 10min gemessen wird um Strom zu sparen. Evtl. werde ich dann auch einen Attiny26 verwenden.
Das ganze soll, nicht hundertprozentig eine Funktion erfüllen, es geht mir nur darum mich in die Atmegas einzuarbeiten.
hier noch der Code:
Code:
'**********************************************************
'* TEST Solarnachführung mittels Servo *
'* Ronny Drbal *
'* Email: ronny at ronbal de *
'* *
'* Servo am PORTD.5 LDR an ADC0 & ADC1 *
'* *
'**********************************************************
$regfile = "m16def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$baud = 9600 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Config Servos = 1 , Servo1 = Portd.5 , Reload = 10 'Servo Konfigurieren
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Konfigurieren
Enable Interrupts
Start Adc
Dim Linkerldr As Word
Dim Rechterldr As Word
Dim Serv1 As Byte
Dim Rechts1 As Word
Dim Rechts2 As Word
Serv1 = 45 'Startposition des Servos
Servo(1) = Serv1 'Servo setzen
Do
Messen: 'Wert vom linken LDR einlesen
Linkerldr = Getadc(0) 'Wert vom rechten LDR einlesen
Rechterldr = Getadc(1) 'Werte ausgeben an die Serielle Schnittstelle
Print "links: " ; Linkerldr ;
Print " rechts: " ; Rechterldr ;
Print " SERVO POS: " ; Serv1
Rechts1 = Rechterldr + 1 'hier werden die AD Werte etwas gelättet :-)
Rechts2 = Rechterldr - 1
If Linkerldr > Rechts1 Then 'prüfen wo es heller ist
If Serv1 > 144 Then 'prüfen ob Servo schon an der Max pos ist
Goto Messen
End If
Serv1 = Serv1 + 1 'Servo eine position weiter
Servo(1) = Serv1
Waitms 50
Goto Messen
End If
If Linkerldr < Rechts2 Then
If Serv1 < 45 Then
Goto Messen
End If
Serv1 = Serv1 - 1
Servo(1) = Serv1
Waitms 50
Goto Messen
End If
Loop
End
Gebt doch mal feedback was ihr davon haltet.
VG
dr_bal
Liste der Anhänge anzeigen (Anzahl: 1)
So ich nochmal.
Ich habe mal den Schaltplan gezeichnet (mein erster).
Könntet ihr mal drüberschauen ob das mit der Solarzelle und dem Akku klappt.
Wahrscheinlich eher nicht oder ? Zumindest wird es nicht effizient mit dem 7805 sein.
Also ich habe nen altes Akkupack aus einer Taschenlampe NIMH 3,6V 1800mah.
Ich habe die Solarzelle, welche bei vollen Sonnenschein um die 10V bringt.
Mein gedanke ich reduziere die Spannung auf 5V mit dem 7805, dahinter ne diode falls der Akku mal mehr Spannung als die Solarzelle hat.
Habe es auch mal so angeschlossen und der Akku läd auch, die frage ist nur wie lange er das so überlegen kann?
Da der Akku eh nicht gebraucht wird ist es jetzt mal nicht so schlimm wenn er drauf geht.
Aber wie würde man es richtig machen ?