Quantcast
Channel: SUBMS » Linienverfolgung
Viewing all articles
Browse latest Browse all 2

Asuro Linienverfolgung 2

$
0
0

Dies ist ein alter Beitrag, der noch nicht komplett in die Blogstruktur eingearbeitet worden ist.


So, nachdem ich nun eine längere Pause einlegen musste, aufgrund von Rechnerproblemen geht es endlich weiter. Im Roboternetz gab es ja viele Anregungen und so hab ich folgende Umgesetzt: Man misst einmal mit ausgeschalteter FrontLED und einmal mit aktiver FrontLED. Die Differenz dieser beiden Messwert ergibt genau die Reflektion, die durch die LED verursacht wird. Und an der kann man sich dann orientieren. So wird das Umgebunslicht nämlich außen vor gelassen. Ich habe also folgendes Programm geschrieben um mir die Werte ausgeben zu lassen. Auf dem Bild unten seht ihr, was der Roboter gemessen hat. Links steht er auf weißem Untergrund und rechts auf schwarzen. Die gelben Flächen, zeigen die Abschnitte, bei der ich mit der Taschenlampe “Saboteur” gespielt habe. Wie ihr aber sehen könnt, macht dass dem Gesamtergebnis nichts.

Code zum auslesen der LineData() Werte

/*************************************************************************************

Asuro Liniensensor Test |

-------------------------

Mit diesem Programm können die Liniensensoren getestet werden.Sie sollten am besten abgeschirmt sein mit, zum Beispiel, Schrumpfschlauch o.ä.

Die Werte die auf der Rechten Seite stehen sind die absoluten Werte und sollten auch

so bleiben, selbst wenn sich das Licht verhältnis andert.

*************************************************************************************/

#include "asuro.h"
int main(void) {
unsigned char newLine = 10;
unsigned char cR = 13;
StatusLED(YELLOW);
Init();
StatusLED(GREEN);
unsigned char text[] = "Starte suche nach Schwarz! ";
SerWrite(text, strlen(text));
while(1) {
int line_off[2]; // Messe mit AUSgeschalteter Front LED
LineData(line_off); //Messe ...
FrontLED(ON);
int line_on[2]; //Messe mit ANgeschalteter Front LED
LineData(line_on); //Messe ...
PrintInt(line_on[0]);
SerWrite(" | ", 3);
PrintInt(line_off[0]);
SerWrite(" | ", 3);
PrintInt(line_on[0]-line_off[0]);
SerWrite(&newLine,1);
SerWrite(&cR,1);
FrontLED(OFF);
Msleep(500);
}
return 0;
}

Wertetabelle des Versuches

Das Ergebnis ist hier also eigentlich recht deutlich und gut: Wenn ich Werte um die 60 habe, dann stehe ich auf Weiß. Wenn ich Werte um 10 habe, dann stehe ich auf schwarz. Dies ist eine sehr gute Ausgangslage um weitere Programme zu schreiben, die mit Farben direkt umgehen sollen.


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images