Die Liniensensoren übergeben ihre Messwerte mittels der Funktion LineData() an das Hauptprogramm "main". Mit diesem Programm können die Messwerte mittels Infrarot am PC dargestellt werden - z.B. mit dem Terminalprogramm "Hercules":
#include "asuro.h" #include "stdlib.h" int main (void) { SerPrint(text); Msleep(1000); |
Bei Verwendung dieses Testprogramms wird schnell deutlich, dass "feste" Werte für hellen bzw. dunklen Untergrund nicht zuverlässig funktionieren werden. Bei eingeschalteteter Deckenbeleuchtung ergeben sich ganz andere Werte als bei "Dämmerlicht".
Trotzdem versuchen wir es erst einmal mit festen Werten - zum Üben:
Das folgende Programm lässt die linke BackLED leuchten, wenn ein dunkler Untergrund "auftaucht". Ausgewertet wird erstmal nur der linke Liniensensor. Der Test ergab Werte für Schwarz bei 50 und für Weiß bei 100. Der Mittelwert ist also 75. Die gemessenen Werte variieren aber stark - je nach Umgebungslicht.
#define OFFSET 75
} |
Linienverfolgung "Typ Simpel"
Nun wollen wir einen einfachen Zweipunktregler programmieren.
Die Absolutwerte der Liniensensoren interessieren eigentlich nicht. Dieses simple Programm zeigt daher, dass allein mit der Differenz von linkem und rechtem Sensorwert ganz gut gearbeitet werden kann.
Es wird nur der Zustand "links heller als rechts" ausgewertet. Der ASURO pendelt ständig hin und her - auch bei geraden Linienstücken. Scharfe Knicke und enge Kurven werden nicht bewältigt. Außerdem funktioniert der Algorithmus am Besten, wenn der ASURO nach links (und nicht nach rechts) ausbricht. Dennoch ist es eindrucksvoll, dass der ASURO einer breiten und mäßig geschwungenen Linie gut folgen kann:
#include "asuro.h" int main(void) { |
Ein gewisses Fine-Tuning kann man erreichen, indem man verschiedene Geschwindigkeitskombinationen ausprobiert.
Etwas besser geht es noch mit der Kombination MotorSpeed(50,200). Dann "wackelt" der ASURO zwar etwas mehr - aber die Linienverfolgung kann auch engeren Kurven besser folgen.
.