Linienfolger
Linienfolger
Funktionsweise
Die Front LED beleuchtet den Untergrung auf dem der ASURO fährt. Die beiden Fototransistoren T9 und T10 fangen das reflektierte Licht auf. Die Prozessor Ports PC2 und PC3 sind als A/D Wandler Ports initialisiert und messen die Spannung an den Fototransistoren. Über dunklem Untergrund wird weniger Licht reflektiert als über hellem Untergrund. Entsprechend ändert sich die Spannung an den Fototransistoren und damit der gemessene A/D Wert.
Besondere Verwendung des Liniensensors
Abgrunderkennung
Der Liniensensor kann so programmiert werden, dass der Asuro einen Abgrund erkennen kann und zurückweicht, ohne in die Tiefe zu stürzen. Ein Video dazu gibt es bei Youtube http://www.youtube.com/watch?v=ibAttdmQ02w
Balancierender Asuro
Von RN-User waste stammt die Idee, den Liniensensor dafür zu benutzen, dass der ASURO auf Hinterrädern balancieren kann, ohne mit dem Tischtennisball den Boden zu berühren. Allerdings sind dazu einige Umbaumaßnahmen erforderlich. Näheres siehe im Roboternetz. Ein Video gibt es ebenfalls http://www.youtube.com/watch?v=V0VxL2VqIWQ
Programmierung
Um die Motoren anzusteuern gibt es in der Asuro Bibliothek die fertige Funktion LineData() und einige Definitionen. Ein Code Schnipsel dazu:
unsigned int ldata[2]; /* Speichervariablen für Liniensensor Daten */
int diff, offset;
FronLED(ON); /* Front LED an */
for (j = 0; j < 0xFF; j++) LineData(lineData); /* Warten bis Werte stabil sind */
LineData(ldata); /* Einlesen der Liniensensor Daten */
offset = ldata[LINKS] - ldata[RECHTS]; /* Grundoffset zwischen linkem und rechtem Sensor feststellen */
while(1)
{
LineData(ldata); /* Einlesen der Liniensensor Daten */
diff = (ldata[LINKS] - ldata[RECHTS]) - offset; /* Differenz feststellen */
if (diff > 4) /* links heller als rechts */
BackLED(ON,OFF); /* linke hintere LED an */
else (if (diff < -4) /* rechts heller als links */
BackLED(OFF,ON); /* rechte hintere LED an */
}
Ein komplettes Beipiel zum Liniensensor findet sich hier.
Verbesserungsvorschläge:
- Die beiden Fototransistoren mit Schrumpfschlauh besser gegen seitlich empfangenes Fremdlicht abschirmen.
- Beim Auswerten der Helligskeitswerte nicht mit Absolutwerten rechnen sondern mit Differenzen. So können Fremdlicht Einflüsse verringert werden
- Die rote Frant LED ist nicht besonders lichtstark. Zudem sind die Fototransistoren mehr empfindlicher für Infrarot Licht. Statt der roten LED könnte man auch eine Infrarot LED verwenden. Allerdings ist Infrarot Licht nicht sichtbar. Man könnte auch eine lichtstarke weiße LED nehmen. Allerdings muß man dabei beachten, daß der Maximalstrom des Prozessor Ports (20mA) nicht überschritten wird, und ob der LED Vorwiderstand (R9) richtig dimensioniert ist.
- Wenn man später einmal eine Erweiterungsplatine einsetzen möchte, sollte man die Bauteile des Liniensensor steckbar machen, wie unter Liniensensor Modifikation beschrieben. Sonst muß man erst mühsam die Bauteile wieder auslöten.