Hallo,
nach dem interessanten Beitrag über PD-Regler habe ich mich auch mal heran gemacht und versuche selbst einen Regler zu programmieren. Zuerst habe ich mal versucht mit FrontLED on und off zu arbeiten und diese Procedur geschrieben (und zum Teil bei andun abgeguckt =D> )
Daraus ist folgendes geworden:
tuts auch soweit so gut. Aber die Ergebnisse machen mich stutzig.Code:void ueber_linie (void) // Ist der Asuro noch über der Linie { unsigned int lineData[2]; unsigned int li_seite; unsigned int re_seite; unsigned char li[4]; // Variablen für Ausgabe unsigned char re[4]; unsigned char newLine = 10; unsigned char cR = 13; FrontLED(ON); // LED an LineData(lineData); // Liniensensor auslesen li_seite = lineData[0]; // Werte zwischenspeichern re_seite = lineData[1]; FrontLED(OFF); // LED aus LineData(lineData); // Liniensensor auslesen li_seite = li_seite - lineData[0]; // Differnz zwischen den beiden re_seite = re_seite - lineData[1]; // Messungen (hell-dunkel) berechnen if (li_seite > 30) { if (re_seite > 30) {StatusLED (RED); MotorSpeed(0,0);} else {StatusLED (GREEN);}} else {StatusLED (GREEN); MotorSpeed(0,0);} itoa(li_seite,li,10); // Ausgabe der Liniendaten an PC itoa(re_seite,re,10); SerWrite(li,strlen(li)); SerWrite(" | ", 3); SerWrite(re,strlen(re)); Sleep(100); SerWrite(&newLine,1); SerWrite(&cR,1); }
Über schwarz:
linker Sensor - 19 rechter Sensor 9
über grau:
linker Sensor - 32 rechter Sensor 34
über weiß:
linker Sensor - 58 rechter Sensor 110
Ich verstehe nicht wo der Unterschied zwischen den Sensoren herkommt. Ebenso verstehe ich das "-" beim linken Sensor nicht.
Hat jemand eine Idee? (Daran dass die Sensoren nicht abgeschirmt sind liegt es nicht, da ich den ASURO drehen und wenden kann wie ich will und die Ergebnisse weitgehend gleich bleiben.)
Gruß
Stefan







Zitieren

Lesezeichen