Da bin ich erstaunt: Bei mir waren 4 gleiche Scheiden dabei, jede mit 6 schwarzen und 6 weißen Sektoren.Zitat:
Zitat von Manf
Ich bin auch gerade dabei die Programme zu deuten. Eine kleine Info im Kopf wäre ganz hilfreich.
Gruß
Torsten
Druckbare Version
Da bin ich erstaunt: Bei mir waren 4 gleiche Scheiden dabei, jede mit 6 schwarzen und 6 weißen Sektoren.Zitat:
Zitat von Manf
Ich bin auch gerade dabei die Programme zu deuten. Eine kleine Info im Kopf wäre ganz hilfreich.
Gruß
Torsten
bei mir isses wieder anders: bei mir gibts nur zwei scheiben mit jeweils 4 schwarz/weiß
Es war die 6er Scheibe...
Hier mal der Code für das gepostete Testprogramm, nicht ganz optimal aber für den Anfang nicht schlecht...
Code:#include "asuro.h"
#include <stdio.h>
#include <stdlib.h>
//const double raddurchmesser = 38.5; //mm
//const int odoaufloesung = 6; //Wechsel pro Umdrehung
// Variablen deklarieren; geht auch unter int main()
char odo_links[4]; // Speicher für die Odometriedaten in Ascii
char odo_rechts[4];
unsigned int Odo_Data[2]; // Speicher für die Odometriedaten in Integer
int i=0; // Schleifenzähler
int a=0;
int x=0;
int main(void)
{
Init(); // Initialisieren
// Begrüssung ;-)
SerWrite("\nROBOTERNETZ -> Test der Odometrie von ASURO\n\n",46);
MotorDir(FWD, FWD); // Beide Motoren vorwärts
MotorSpeed(100,100); // Beide Motoren mit "150" drehen
//while(1) // Endlosschleife
//{
//*** Test der Odometrie beginnt ***
i=0;
for(i=0;i<100;i++) // 100 Messwerte ermitteln
{
for (a=0;a<=10000;a++){x++;} //warten
OdometrieData(Odo_Data); // Odometrie abfragen
// Werte in Ascii wandeln
itoa(Odo_Data[0],odo_links,10);
itoa(Odo_Data[1],odo_rechts,10);
// Werte über IR schicken
SerWrite(odo_links, sizeof(odo_links));
SerWrite(", ", 2);
SerWrite(odo_rechts, sizeof(odo_rechts));
SerWrite("\n\r", 2);
}
//for (a=0;a<2000;a++){Sleep(72);} // ca. 2 Sekunden warten
//SerWrite("\n--- 100 ---\n", 12);
//} // Von Vorne
MotorSpeed(0,0); // Motoren aus
MotorDir(FREE,FREE); // Motoren auf Freilauf
return 0; //Programm beenden
}
Gruß, Sonic
Hier mal ein Film vom Linienfolgen. das ist das Programm:
Die Qualität ist supermies, da das Filmchen so klein gekloppt werden mußte. Sorry.Code://****************************************************************************************************
// Liniefolgeprogramm
// entwickelt aus dem mitglieferten Demoprogramm
//
// Geschwindigkeiten wurden geändert, das Verhalten invertiert (Bei Verlassen der Ideallinie wird abgebremst statt beschleunigt)
//
// letzte Änderung 29.11.2004
#include "asuro.h"
#define SPEED 0xBF
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void)
{
speedRight -=2;
if (speedRight < 0x5F) speedRight = 0x5F;
}
void LineRight (void)
{
speedLeft -=2;
if (speedLeft < 0x5F) speedLeft = 0x5F;
}
void LineDemo(void)
{
int i;
unsigned char j;
FrontLED(ON);
for (j = 0; j < 0xFF; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
MotorSpeed(speedLeft,speedRight);
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(YELLOW);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}
int main(void)
{
Init();
LineDemo ();
while(1);
return 0;
}
Der Linenfolgeplan ist von RealRobots.
Die in Code angegebenen Geschwindigkeiten hängen vermutlich vom Exemplar ab. Schon wenn ich Alkaline statt Akkus verwende ist das Tempo so verschieden, daß die Linie leicht verloren geht.
Gruß
Torsten
Sieht gut aus, der fährt viel sanfter in die Kurven, als meiner! ;o)
Wer lesen kann ist klar im Vorteil!
Wer es tut hat schon gewonnen!
Ja, warum stehen da wohl zwei Transistortypen? Naja, den ersten Fehler, eine unsaubere Lötstelle hab ich gleich gefunden, dann klappte der Rückwärtsgang nicht, weil ich die 8 Transistoren einfach beliebig aufgelötet hatte... Zum Glück musste ich nur 2 vertauschen, angesichts der vielen Möglichkeiten ein Wunder!
Ich zähle jetzt auch zum Kreis derer, deren ASURO einwandfrei läuft, bis auf das das eine Rad schneller als das andere ist, aber ich fürchte, das problem kann man schlecht beheben.
Ich werde versuchen Morgen mal den Anschluss an eure Diskussion zu erreichen, nachdem ich das ganze Wochenende in Münster war :-)
Übrigens cooles Video, werde ich denne auch mal probieren.
MFG Moritz
So dann hier noch mal mein Testprogramm mit Fahrt zum Vergleich, ich glaube die Fahrt soll je eine ganze Drehung sein und meiner geht wegen kleinerer Spannung nicht ganz auf 360°.
Ich habe jetzt das Tool installiert und werde weitere Programme testen.
Manfred
[glow=red:ee3cc9525b][shadow=red:ee3cc9525b][highlight=red:ee3cc9525b]JAAAAAAAAA!!![/highlight:ee3cc9525b][/shadow:ee3cc9525b][/glow:ee3cc9525b]
ES FUNKTIONIERT!!!
Durch meine Dummheit und meinen Glauben, das ich nix falsch mache ist mir der Fehler unterlaufen, den Sonic auch hatte bloß das ich einfach zwei Transistoren vertauscht hatte.
Aber noch eine Verbesserung wäre vielleicht, das im Werk ein Farbtupfer auf die eine Sorte Transistoren gemacht wird, damit man die auseinandergehalten werden können! (ich hab nämlich die beiden vertauscht, weil das Licht leicht diffus war und ich sie dann verwechselt habe)
Martin
soooooo...
ich versuche gerade die Prozeduren in bascom zu reproduzieren!
nun hab ich nen problem: der adc funktioniert nicht richtig: er zeigt wenn ich start adc drin habe immer 1023 und wenn ich stop adc dinne habe dann einen wert aber dieser wird nicht mehr aktualisiert.
EDIT: liegt das vielleicht am kondensator an aref?
Martin
Hmm, an VRef ist ja keine Referenzspannung angeschlossen, also wird folglich die interne genutzt. Soweit ich weis muss man die aber vorher anschalten. Leider hab ich keine Ahnung wie das in BASCOM geht, aber es steht bestimmt in der Hilfe drinn...
Gruß, Sonic