ich hab die Sensoren schon abgedeckt, sodass von außen kein licht mehr dran kommt..
es könnte auch am licht legen.
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
ich hab die Sensoren schon abgedeckt, sodass von außen kein licht mehr dran kommt..
Hallo Becci,
deinen letzten geposteten Messdaten entnehme ich, dass dort folgendes ermittelt wird:
Diese Werte sehen mir so aus, als ob hier der AD-Wandler 8-Bit Daten liefert.Left min/max, right min/max values
+00152
+00227
+00090
+00217
Wenn du die Werte zu 10-Bit umrechnest (nur * 4 nehmen) kommen da folgende Zahlen raus:
Left min/max
608
908
right min/max
360
868
In deinem oben angegeben Programm nutzt du aber 10-Bit-Wert.
Entsprechend solltest du deinen Wert für TRIGGERLEVEL 'so ungefähr' in die Mitte der Min-/Max-Werte legen.
Der größere Min-Wert ist bei dir: 608
Der kleiner Max-Wert ist bei dir: 868
Die Mitte (also guter Wert für TRIGGERLEVEL) liegt dann so bei 730
HYSTERESIS kannst du mit 10 lassen. Ist aber noch Reserve vorhanden, um hier größere Werte zu probieren. Auch 50 (730 - 50= 680 bzw. 730 + 50 = 780) läßt noch genüegend Spielraum zu deinen Min-/Max-Werten.
Mal zur Erklärung:
Das Problem mit dem TRIGGERLEVEL ist, dass das ein 'geratener' Wert aus dem Musterprogramm ist, der 'in der Regel' beim Asuro funktioniert.
Du hast aber andere Lichtverhältniss zuhause, und somit bekommst du auch andere Messwerte an der Odometrie.
Der Asuro versucht mit deinem Programm ja nur zwischen den hellen und dunklen Stellen auf der ODO-Scheibe zu unterscheiden, um daran zu erkennen, ob sie sich weiter gedreht hat.
Wenn du die Asuro-Bücher hast, schau dort noch einmal nach. In einem der beiden wird das sehr genau beschrieben.
Ich hoffe, dass es nun geht.
Gruß Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Vielen Dank!
Mir war das nicht klar, dass ich das mal 4 nehmen muss, hab ich wohl überlesen in den büchern!
Werde es morgen früh im Geschäft gleich mal ausprobieren und hoffen, dass es geht!![]()
Hallo Becci,
gern geschehen. (Aber erst mal abwarten was passiert)
Du hast da aber nichts überlesen. In den Büchern kommen keine Testprogramme vor, die dir 8-Bit Werte liefern. Ist leider auch nicht anhand des Testprogramms direkt zu erkennen. Da kann man nur drauf kommen, wenn man selber schon einige Versuche gemacht hat.
Was heißt eigendlich "morgen früh im Geschäft"?
Mein Chef sollte das nicht mitbekommen, wenn ich im Netz zum Asuro rumsurfe. Als BA-Studentin geht es dir da scheinbar viel besser!
Gruß Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Hab die offizielle Erlaubnis von meinem Chef im Roboternetz zu surfen, da er mir nicht weiterhelfen kann, wenn ich ein Problem hab![]()
Nachdem endlich die neue Lib geht, bin ich voller Hoffnung an mein Programm gegangen, welches mein ASURO geradeaus fahren lässt.
Ja nun hab ich aber ein anderes Problem. Mein rechter Motor fährt kurz an und blockiert dann... warum keine Ahnung. Ich dachte zuerst es liegt an meinem Programm und hab dann ein ganz kleines geschrieben, wo mein ASURO nur geradeaus fahren soll ohne die Odometriedaten auszuwerten. Auch hier blockiert mein rechter Motor. Warum???
Also mein ASURO fährt nun wieder geradeaus, wenn ich ein Programm ohne Odometrie schreibe...
Jedoch funktioniert es immer noch nicht mit meinem Odometrie-Geradeaus-Programm, was ich allerdings nicht verstehe, da letzte Woche mein ASURO immerhin noch nach vorne gefahren ist, allerdings mit einer leichten Rechtskurve....
Mein Programm nochmal (ist übrigends ein Beispielprogramm aus den ASURO Büchern)
Könnte mir vlt jemand ein Programm posten, welches aufgrund der Odometrie den ASURO geradeaus fahren lässt???Code:#include "asuro.h" //Schwellwert für die Hell/Dunkel-Unterscheidung //Eventuell muss damit etwas variiert werden #define TRIGGERLEVEL 680 #define HYSTERESIS 30 #define LOW 0 #define HIGH 1 int main(void) { unsigned int data [2]; signed int status [2]={0,0}; signed int difference=0; Init(); MotorDir(FWD,FWD); while(1) { //Helligkeitswerte der Lichtschranken auslesen OdometrieData(data); //Wechsel linker Sensor von niedrig auf hoch? if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)) { status[0]=HIGH; difference++; } //Wechsel linker Sensor von hoch auf niedrig? if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)) { status[0]=LOW; difference++; } //Wechsel rechter Sensor von niedrig auf hoch? if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)) { status[1]=HIGH; difference--; } //Wechsel rechter Sensor von hoch auf niedrig? if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)) { status[1]=LOW; difference--; } //zur Sicherheit: verhindern, dass der Differenzzähler den erlaubten //Wertebereich verlässt if(difference<-255) difference=-255; if(difference>255) difference=255; //StatusLED noch entsprechend der erkannten Segmente aufleuchten lassen, //grün für links, rot für rechts StatusLED(status[0]+status[1]*2); //Zähldifferenz passemd auf die Motoren verteilen if(difference>0) MotorSpeed(255-difference,255); else MotorSpeed(255,255+difference); } return 0; }
Danke
Ich hab das Programm etwas angepasst, bei:
hab ich:Code:if(difference>0) MotorSpeed(255-difference,255); else MotorSpeed(255,255+difference);
da ja der Wert für die Geschwindigkeit nicht höher als 255 sein darf.Code:if(difference>0) MotorSpeed(155-difference,155); else MotorSpeed(155,155+difference);
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
hast du das so belassen oder die 255 auch durch 155 ersetzt?Code:if(difference<-255) difference=-255; if(difference>255) difference=255;
das hab ich auch geändert, hab ich vergessen.
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
Lesezeichen