Hallo
Wie der Titel schon sagt baue ich gerade einen Sonnenverfolger.
Der Sonnenverfolger funktioniert so, dass zuerst der Motor in die Ausgangsposition zurückfährt bis er an einem Taster anschlägt und stehen bleibt. Daraufhin wird der ADC-Wert eines LDRs, der auf einem Motor befestigt ist gemessen und währenddessen dreht der Motor sich ungefähr 180 Grad .Dabei wird der hellste Wert gemerkt und in eine Variable geschrieben("W" im Programm)
Danach fährt der Motor solange in die andere Richtung bis dieser Wert wieder erreicht ist.
Mein Problem ist , dass nach ca. 8 -10 maligen Ablaufen des Programms der Motor einfach ständig weiterläuft obwohl er sich nur solange drehen soll bis 180 Grad erreicht sind oder einer der beiden Taster gedrückt wird.
(Der andere Taster stellt sicher dass der Motor nicht zu weit in die andere Richtung fährt.Der erste Taster ist in der Ausgangsposition.
Nach dem Suchen des hellsten Punktes wird ca. 300 Sek lang gemessen ob einem zweiten LDR die Lichtstärke größer ist.
Wenn ja dann startet ein erneuter Suchlauf.
Des Weiteren startet ein neuer Suchlauf wenn beim ersten LDR die Lichtstärke weniger als die Hälfte des hellsten Punktes beträgt.
Der Motor wird mit einem L293D angesteuert
Hier das Programm:
Kann das Problem am Code liegen ?Code:$regfile = "m8def.dat " ' specify the used micro $crystal = 1000000 Config Portd.0 = Input ' Pin 2 Config Portd.1 = Input Config Portb.1 = Output Config Portb.2 = Output Config Portb.0 = Output Config Portd.7 = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC Start Adc Dim A As Integer Dim W As Word Dim B As Integer Dim D As Integer Dim L As Integer Dim F As Integer W = 0 L = 0 Portd.0 = 1 Portd.1 = 1 Do Portd.7 = 1 Portb.0 = 1 W = 0 L = 0 Start1: Portd.7 = 1 Portb.0 = 1 Wait 1 Portd.7 = 0 Portb.0 = 1 If Pind.0 = 0 Then For A = 1 To 800 Step 1 'Halbkreisdrehung und Suche nach hellstem Ad-Wert If Pind.1 = 0 Then Goto Start1 End If If Getadc(0) > W Then W = Getadc(0) End If Waitms 2 Next A Else Portd.7 = 1 Portb.0 = 1 Waitms 50 While Pind.0 = 1 Portd.7 = 1 Portb.0 = 0 Wend Goto Start1 End If Portd.7 = 1 Portb.0 = 1 D = W - 1 Wait 1 If Pind.1 = 1 Then While Getadc(0) < D Portd.7 = 1 Portb.0 = 0 'Wieder zurückfahren zum hellsten Punkt If Pind.0 = 0 Then Goto Start1 End If Waitms 2 Wend Else Goto Start1 End If Portd.7 = 1 Portb.0 = 1 B = W / 2 Wait 1 While L < 300 L = L + 1 Wait 1 If Getadc(0) < B Then L = 301 'Falls es beim zweiten LDR heller istoder die Helligkeit beim ersten LDR unter der Hälfte liegt dann erneuter Suchlauf End If F = Getadc(1) - 75 If Getadc(0) < F Then L = 301 End If Wend Loop
Wäre gut wenn mir jemand sagen könnte ob es an dem Programm liegt, dass der Motor nach einer bestimmten Anzahl von Suchläufen einfach weiterläuft oder nicht.
Mfg
David







Zitieren

Lesezeichen