Es soll doch auch irgendwie mit den Sensoren die am getriebe sind gehen (deswegen wurden doch die felder auf das zahnrad geklebt).
Ich benutze die standartsoftware die auf der disk war, weiß gar nicht wie man was anderes nutzt
du musst es halt durch testen herausfinden. Wenn er eine linkskurve fährt musst du zb die werte von (120,120) auf (120,110) ändern sodass er links schneller fährt und dadurch geradeaus fährt. Wenn er eine rechtskurve macht dann genau anders rum. durch öfteres testen kannst du die differenz immer genauer bestimmen und auch bei deinem nächsten programm berücksichtigen.
Eine Frage: Welche Version der Asuro-Libary verwendest du?? Wenn du die neuste verwendest (2.80) kannst du die differenz direkt in myasuro.h eintragen und brauchst dir dann keinen Kopf mehr darüber zumachen ob der Asuro jetzt links oder rechts fährt.
mfG Mattze
Es soll doch auch irgendwie mit den Sensoren die am getriebe sind gehen (deswegen wurden doch die felder auf das zahnrad geklebt).
Ich benutze die standartsoftware die auf der disk war, weiß gar nicht wie man was anderes nutzt
hab grad keine zeit deshalb fass ich mich kurz:
Die Sensoren heißen Odometer:
Hier ein Prog: Ist bei den Erweiterungsbändern dabei:
Code:// ******************************************* // * Odometrie für ASURO * // * Fährt exakt geradeaus * // * * // * * // * (c) 2007 Robin Gruber * // * Details zum Code in: * // * "Mehr Spaß mit ASURO, Band II" * // ******************************************* #include "asuro.h" // Schwellwert fr die Hell/Dunkel-Unterscheidung // Eventuell muss damit etwas variiert werden #define TRIGGERLEVEL 600 #define HYSTERESIS 10 #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�ler // den erlaubten Wertebereich verl�st if (difference<-255) difference=-255; if (difference>255) difference=255; // Status-LED noch entsprechend der erkannten Segmente // aufleuchten lassen, grn fr links, rot fr rechts StatusLED(status[0]+status[1]*2); // Z�ldifferenz passend auf die Motoren verteilen if (difference>0) MotorSpeed(255-difference,255); else MotorSpeed(255,255+difference); } return 0; }
Danke für das Prog. habe die geschwindigkeitswerte auf 120 gesetzt und er ist auch einigermaßen gradeaus gefahren aber hat noch immer einen rechtsdrall. werde das nochmal mit dem öl versuchen, vielleicht reiben die ja echt zu sehr.
Eine kleine Kurve bei gerade aus fahren ist normal wenn man nicht die Motorkraft (MotorSpeed) anpasst mit die Odometrie-zahlung. Das ist weil die Motorenleistung, Reibung, Rad große, Rad Abstand zu mitten des PCB., H-brücke Transistoren Verlust usw. immer nicht gleich genau sind. Deshalb haben die beide Motoren immer eine kleine unterschiedliche Drehzahl bei gleichen MotorSpeed werten. Und dann ist es immer noch möglich das es ein Drehzahl unterschied gibt bei andere werten des MotorSpeed-bereich. Mann kann es nur (einfach) verringern durch reduzieren der Getriebe Reibung, Rad große und Rad Abstand.
hallo,
also ich hab folgendes problem ich hab meinen asuro fertig gebaut flashen,etc klappt eigentlich auch, aber ich hab ein problem mit dem programm. ich hab mir 2 ideen überlegt um ein projekt mit dem asuro zu starten: 1.der asuro soll eine art wohnung absuchen. dafür wollte ich eine wohnung als modell bauen und sie weiß anstreichen oder so damit er an der wand entlang fährt und in dem raum einen schwarzen gegenstand oder einen schwarzen fleck auf dem boden sucht. ich wollt ihn in einer art halbkreisbahn an der wand entlang laufen lassen und sobald er mit einem taster aufkommt fährt er etwas zurück oder dreht sich und fährt noch einen halbkreis und so weiter.
2. er soll als eine arte einparkroboter funktionieren und mithilfe von annäherungssensoren oder ähnlichem in eine parklücke fahren
zu dieser idee hab ich gleich mal ein paar fragen: ist es schwer? hat jemand erfahrungen damit gesammelt? wie würde ich da preislich liegen?
zu meiner 1. idee hab ich schon 2 programme geschriebe aber da hab ich auch probleme xD bei dem ersten fährt er nur im kreis, die version war allerdings auch nur eine rohfassung die hab ich sofort abgebrochen:
#include <asuro.h>
#include <myasuro.h>
int main ()
{
Init();
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(120,90);
Msleep(300);
unsigned char taste;
taste= PollSwitch();
if(taste=32)
{ MotorDir(BREAK,FWD);
MotorSpeed(BREAK,100);
Msleep(100);
}
else if(taste!=32)
{
MotorDir(RWD,FWD);
MotorSpeed(100,100);
Msleep(100);
}
else
{}
}
return (0);
}
bei meinem 2ten programm steht er nur da die statusled leuchtet gelb dir vordere und die backled leuchten stark:
#include <asuro.h>
#include <myasuro.h>
int main (void)
{
unsigned int data [2];
Init();
FrontLED(ON);
while(1)
{
LineData(data);
if(data[0]==data[1])
{
MotorDir(FWD,FWD);
MotorSpeed(150,110);
Msleep(300);
unsigned char taste;
taste= PollSwitch();
if(taste=32)
{
MotorDir(BREAK,FWD);
MotorSpeed(BREAK,100);
Msleep(100);
}
else if(taste!=32)
{
MotorDir(RWD,FWD);
MotorSpeed(100,100);
Msleep(100);
}
else
{
return 0;
}
}
else
{
while(10)
{
BackLED(ON,OFF);
BackLED(OFF,ON);
StatusLED(YELLOW);
}
}
}
return 0;
}
bitte helft mir oder gebt mir anregungen was ich sonst noch aus meinem asuro mache kann es ist ein schulprojekt ich kenn mich nicht so wirklich damit aus und verzweifle weil mir nichts mehr einfällt
Als erste Program Versuch ist das OK. Ich sehe hier kein problem.
Deine letzte Code geht gleich in einer Endloss schleife weil de Responz von die Linien Phototransistoren verschiedene werten liefern bei gleichen Beleuchtung. Du muss erst diese Sensoren zu einander Kalibrieren bis du darauf entscheidungen macht.bei meinem 2ten programm steht er nur da die statusled leuchtet gelb dir vordere und die backled leuchten stark:bitte helft mir oder gebt mir anregungen was ich sonst noch aus meinem asuro mache kann es ist ein schulprojekt ich kenn mich nicht so wirklich damit aus und verzweifle weil mir nichts mehr einfälltCode:#include <asuro.h> #include <myasuro.h> int main (void) { unsigned int data [2]; Init(); FrontLED(ON); while(1) { LineData(data); if(data[0]==data[1]) // data[links] ist fast immer nie gleich an data[rechts]! Nur in sehr seltsamme fallen. { MotorDir(FWD,FWD); MotorSpeed(150,110); Msleep(300); unsigned char taste; taste= PollSwitch(); if(taste=32) { MotorDir(BREAK,FWD); MotorSpeed(BREAK,100); Msleep(100); } else if(taste!=32) { MotorDir(RWD,FWD); MotorSpeed(100,100); Msleep(100); } [color=red][b] else //Wieder eine Wahl das nicht existiert! Weglassen { return 0; } } else // hier ist data[0]!=data[1] (nicht gleich). Deshalb geht er hier fast immer in einer Endloss-schleife und fläckert ganz schnell die BackLeds an/aus! Und kommt nie wieder raus. Weil 10 nicht 0 ist. { while(10) { BackLED(ON,OFF); BackLED(OFF,ON); StatusLED(YELLOW); } } } return 0; }
Geändert von Valen (03.05.2012 um 21:30 Uhr)
Was mich auch wundert ist, dass bei dir das Init() fehlte, du nur die Anführungszeichen geändert hast und es jetzt klappt.
Kannst du dir/mir das erklären?
LG
Spacy Bar
Geändert von radbruch (06.06.2014 um 18:33 Uhr) Grund: veraltet
Lesezeichen