Hallo
Es gibt natürlich schon jede Menge Threads zum Thema Odometrie. Im Wesentlichen funktioniert das so: Die kleinen LEDs leuchten auf die Codescheiben, die Fototransistoren ändern ihren Widerstand durch das reflektierte Licht und am Pin des Mega8 liegt eine Spannung die der Helligkeit entspricht. Mit der Funktion OdometrieData() kann man diese Spannung digitalisieren, der gemessene Wert kann dann zwischen 0 und 1023 liegen (Maxwerte die in der Praxis nicht erreicht werden!).
Um den Weg zu messen den ein Rad zurücklegt zählt man die Hell-/Dunkelwechsel. Dazu ist es hilfreich, wenn man die minimalen und maximalen Werte kennt. Man kann dann z.b. auf diese Werte prüfen, die Flanken erkennen, Fehlmessungen ausfiltern.
Erste Hürde: serWrite() kann keine Werte ausgeben. Hier eine Möglichkeit die mit der orginalen CD-Library (asuro.c) funktioniert:
Code:
void PrintChar(unsigned char x)
{
unsigned char einer, zehner, huni;
char s[3]="hze";
einer=x%10;
zehner=(x-einer)/10;
huni=(x-(zehner*10+einer))/100;
s[0]=huni+'0';
s[1]=zehner+'0';
s[2]=einer+'0';
SerWrite(s,3);
}
(Aus: https://www.roboternetz.de/phpBB2/ze...ag.php?t=35598)
Nächstes Problem: Werte werden durch Fremdlicht beeinflußt, Codescheiben wanderen axial.
Ich empfehle dir, erstmal etwas zu experimentieren um eigene Erfahrungen zu sammeln. Das ist spannender und lehrreicher als fertige Lösungen nachzumachen...
Gruß
mic
Lesezeichen