PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie müssen T9 und T10 bei LineDemo reagieren?



white_rabbit
04.12.2006, 20:00
Hallo.
Ich versuche es immernoch mit dem Line-Demo. Mein Asuro will der Linie noch nciht ganz folgen :(
Wie reagiert bei Euch T9 und T10, wenn das Linien-Programm läuft und ihr z.B. mit dem Finger oder einem dunklen Blatt Papier unter den Dioden herstreicht?
Hier geht nur bei T10 die gründe LED an -- bei T9 ändert sich nix. Ist das korrekt so? Kommt mir jedenfalls falsch vor :(

EDH
04.12.2006, 20:27
einmal soll die led frün leuchten und beim anderen rot.
auserdem soll der asuro der linei folgen.

white_rabbit
04.12.2006, 20:51
hm, das tun sie zwar -- aber der Linie folgt er trotzdem nicht. Es ist so: wenn ich den Asuro einschalte und ihn im abgedunkelten Raum in die Luft halte, ist die LED orange und flimmert. Nähere ich mich dann z.B. mit dem Finger T10 wird die LED rot -- bei T9 wird sie grün. Dabei laufen die Motoren die ganze Zeit vorwärts und werden einseitig schneller, sobald rot/grün aufleuchtet. Die Break-LEDs hinten leuchten die ganze Zeit nicht (was laut Anleitung der Fall sein soll??)
Und wenn ich den Asuro auf einem Blatt Papier absetze, leuchtet meistens grün. Nur wenn BEIDE Transitoren über Schwarz sind, wird sie wieder orange. Wie breit muss der der schwarze Strich für den Parcour sein? Bei youtube werden Filme gezeigt, bei denen er nur ca 2 cm breit ist? Ich habe ihn schon mindestens 3 cm breit...

EDH
04.12.2006, 21:10
als bei meinem asuor noch liniensensoren drann, waren, hat eine linie mit briet 0,5 cm gereicht.

hast du die liniensesnoren wie in der anleitung beschrieben eingebaut (front led muss auf platine aufliegen!)

haben die liniensensoren beim selbstest fehlerfrei funktioniert?

lass dir mal die werte der liniensensore aufm hyperterminal ausgeben. vielicht ist bei dir n wiederstand flasch, und dann stimmen die ganten werte vom ad wandler niht.

damaltor
04.12.2006, 21:11
mach ihn so breit, dass er ZWISCHEN den beiden sensoren durchpasst. also 1-1,5 cm. geht es dann?

damaltor
04.12.2006, 21:14
ich kann dir auch die "Linientestarena" aus dem forum schicken wenn du willst. die sollte er schaffen. schick mir ne pm mit deiner email adresse.

white_rabbit
04.12.2006, 21:22
EDH: Ja, die rote LED liegt auf und die beiden Transistoren haben etwas Abstand. So wie es sein soll...
Der Selbsttest sagt ja auch nur das, was LineDemo sagt, oder?
Das ging soweit, meine ich. Welches Testprogramm ist denn speziell für die Fototransistoren ausgelegt und gibt deren Werte auf dem Terminal aus?

damaltor
04.12.2006, 21:24
dieses programm kannst du dir einfach und schnell selbst schreiben... es wurde aber auch gerade in einem der aktuellen threads entwickelt. dieser hat den treffenden namen "Linedata in hyperterminal ausgeben"...

white_rabbit
04.12.2006, 21:41
es scheint zu funktionieren:
linker/rechter Fotosensor auf schwarz: 4-5
auf weiß: um die 300
direkt vor einer Lampe: 900
Scheint zu stimmen, oder?
Warum folgt er dann der Linie nicht?

damaltor
04.12.2006, 21:43
jo hört sich gut an... du hat mail, ich hab die linien arena eben rausgesucht.

white_rabbit
04.12.2006, 21:45
habs gefunden. danke. die frage ist allerdings, warum es bei einem sehr/zu breiten streifen nicht trotzdem funktioniert?
Was spricht dagegen?

damaltor
05.12.2006, 15:56
streifen zu breit --> es könnte passieren dass beide sensoren gleichzeitig schwarz sehen, und dann versucht der asuro einfach irgendwohin auszuweichen oder denkt passt scho, is ja beides gleich dunkel und fährt stumpf geradeaus... keine ahnung. geht es mit dem was ich dir geschickt hab?

Asuro-n00b
23.12.2006, 22:08
Fröhliche Weihnachten Leute!
Ich habe heute mal das Programm aus der Asuroanleitung zur Linienverfolgung ausprobiert. Bei mir funste es zum Glück auf Anhieb.
Ich habe Asuro gleichmal eine Strecke um einen Tannenbaum aufgezeichnet und sie ihn abfahren lassen.

Hier ein Bild dazu:
http://home.pages.at/narffelix/asuro_tannenbaum.jpg

Hier das Video dazu:
http://www.youtube.com/watch?v=U2bEKGTRwiY

Hier der Quellcode, den ich aus der Anleitung abgeschrieben habe(hab noch eine Anzeige der Richtungsänderung mit den BackLEDs hinzugefügt:


#include "asuro.h" //Linienverfolgung auf einfachste Art
int main(void) {
unsigned int data[2]; //Speicher bereit stellen
Init();
FrontLED(ON); //Linienbeleuchtung einschalten
MotorDir(FWD,FWD); //Beide Motoren auf vorwärts
while(1){ //Endlosschleife, ASURO soll beliebig lang einer Linie nachfahren
LineData(data); //aktuelle Helligkeitswerte der Fototransistoren einlesen
if (data [0] > data[1]) //links heller als rechts
{MotorSpeed(200,150); //...dann links mehr Gas geben
BackLED(ON,OFF);} //Fahrtrichtung links anzeigen
else
{MotorSpeed(150,200); //...sonst rechts mehr Gas geben
BackLED(OFF,ON);} //Fahrtrichtung rechts anzeigen
}
return 0;
}



Habe noch eine Frage:
Woran liegt es, dass mein Asuro, wenn er mal keine Linie unter sich hat, immer nur nach rechts fährt?
Er müsste dann doch eigentlich gerade ausfahren...

damaltor
23.12.2006, 22:51
wahrscheinlich sind deine beiden fototransistoren so verschieden, dass der wert des einen immer etwas höher liegt als der des anderen. oder er behält hat das bei, was er als letztes gemacht hat, nach rechts fahren eben. ansonsten... solange er auf der linie macht was er soll...

Asuro-n00b
23.12.2006, 23:35
fototransistoren so verschieden, dass der wert des einen immer etwas höher liegt
Ja daran liegt es glaub ich. Aber ich würde gerne wissen was ich dagegen tun könnte, dass er dann nach rechts fährt und nicht geradeaus.
Ich versuche gleich mal das Programm so abzuändern, dass sich beide Motoren gleich schnell drehen sollen, wenn länger als 2 Sekunden kein Richtungswechsel stattgefunden hat. Somit würde er doch immer geradeaus fahren, wenn eine der beiden Fototransistoren immer etwas höhere Werte ausgibt.


oder er behält halt das bei, was er als letztes gemacht hat, nach rechts fahren eben.
Das dacht ich auch erst, aber habe es mit einem schwarzen Blatt Papier zwischen der Leuchtdiode und den einzelnen Fototransistoren ausprobiert und er hat in beiden Fällen nach wegnehmen des Blattes nach rechts gesteuert.

Asuro-n00b
24.12.2006, 01:12
*gähn*
Morgen ist Weihnachten und ich geh jetzt pennen.
Hab bis eben versucht das Programm hinzubekommen.
Ich weiß, wie ich die Zeit von ca. 2 Sekunden hinbekomme:
for(e=0;e<200;e++)
{Sleep(150);}
Aber wie verbinde ich das mit einer if-Abfrage, die nur dann gestartet wird wenn zwischen Data[1] und Data[2] 2Sekunden lang kein Wechsel war?

Ich bin die nächsten Tage erstmal feiern und schreibe erst ab 27.12. wieder zurück...

Wünsche euch ein Frohes Fest!

damaltor
24.12.2006, 12:51
ja, dir aucch ein frohes fest. das problem an der abfrage ist, dass wenn der asuro 2 sekunden eine linkskurve fährt um auf der linie zu bleiben, er auch geradeaus fahren würde...

Asuro-n00b
24.12.2006, 14:45
das problem an der abfrage ist, dass wenn der asuro 2 sekunden eine linkskurve fährt um auf der linie zu bleiben, er auch geradeaus fahren würde...

Genau das ist das Problem, das Programmtechnisch zu lösen.
Die 2Sekundenabfrage soll nur so lange erfüllt sein, so lange ca. 2 Sekunden kein Wechsel zwischen Data[0] und Data[1] stattgefunden hat(Er also die Linie verloren hat). Solange er also einen weißen Untergrund hat, soll er gerade aus fahren bis er wieder einen Farbunterschied am Boden erkennt.

Ansonsten passiert nämlich wieder, dass er eine Rechtskurve fährt(Begründung hat Damaltor ja schon gebracht)

Hier in diesem Video verliert er die Linie(Warum auch immer) und fährt seine Rechtskurve und stößt gegen den Tannenbaum:
http://www.youtube.com/watch?v=DftAszJlcoc

damaltor
24.12.2006, 15:24
lass ihn den kreis mal andersrum abfahren, und warte bis er die linie verliert. was passiert dann? auch ne rechtskurve oder jetzt ne linkskurve?

wenn du einfach nen wechsel der linedata werte voraussetzt, kann das probleme geben weil auch auf weisser fläche die werte nicht 100%ig konstant sind. (störlich, unebenheiten, irgend was anderes was den wert etwas beeinflusst)

Asuro-n00b
26.12.2006, 15:50
Ja das hab ich auch schon gemerkt. Das mit den 2 Sekunden warten, ob die Werte nicht mehr wechseln haut nicht hin, weil auf weißem Untergrund die die linke BackLED stark leuchtet und die rechte BackLED schwach leuchtet. Das heißt beide Fototransistoren schalten ab und zu durch aber der Linke(T9) dominiert(schaltet also häufiger).
Hm dann müsste man das irgendwie anders auswerten. Habt ihr noch irgendwie ne Idee? Ich weiß da nicht mehr weiter. :(

damaltor
26.12.2006, 16:55
lass ihn den kreis mal andersrum abfahren, und warte bis er die linie verliert. was passiert dann? auch ne rechtskurve oder jetzt ne linkskurve?

Asuro-n00b
28.12.2006, 17:46
auch ne Rechtskurve...
Aber das hab ich doch eben schon beschrieben.
Der Prozessor läuft doch glaub mit 8Mhz oder so.
Dann hat er vielleicht 3/4 der Takte für die Rechtskurve und nur 1/4 der Takte in der Linkskurve.
Also hat man nichts eindeutiges was man abfragen könnte.
Ich habe gemerkt, dass ich mich an dieses Projekt lieber später setzen sollte. Jetzt versuch ich erstmal einfachere Programme.
Später guck ich dann mal, ob man nicht die Häufigkeit abfragen kann, wie oft er von T9 und T10 ein Signal bekommt und wie lange.
Durch die BackLEDs kann man es ja selber recht eindeutig sehen.
Wenn er auf der Linie fährt, dann eiert er immer von links nach rechts und man sieht auch den Wechsel zwischen den BackLEDs, aber wenn er keine Linie hat, dann wechseln die BackLEDs so schnell, dass man es nicht sieht und es einem nur so vorkommt, als würde die Linke dauerhaft hell und die Rechte dauerhaft schwach leuchten.

Bei youtube hab ich schon mal einen Asuro gesehen, der gemerkt hat, dass er die Linie verloren hat und daraufhin etwas ausgeführt hat.
Aber jetzt setz ich mich erstmal an die Kollisonstaster, was sich damit so alles anstellen lässt. Da sind die Signale wenigstens eindeutig und das ist für Anfänger leichter auszuwerten. :)

damaltor
28.12.2006, 23:11
oh... viel glück =)

die werte von pollswitch() sind nicht wesentlich zuverlässiger als die der liniensensoren... =)

aber dazu gibt es viele tricks, such einfach mal.