- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Rechter Motor hat keine Power

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Anzeige

    E-Bike
    Werden die odoleds angeschaltet im betrieb? Und hast du den beleuchtungswerten angepast an deiner asuro im odometrie algorithmus?

    Postet deine program bitte.

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    19.02.2008
    Ort
    Mitteldeutschland
    Beiträge
    83
    Hallo,

    prüfe mal die äußeren Radmuffen, manchmal verhakt der Bot sich da und man muß sie am äußersten Ende der Achse anbringen.

    Gruß
    Matthias

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2009
    Alter
    40
    Beiträge
    13
    Also hier mein Programm:

    Ist ein wenig durcheinander, aber der gedanke war der
    das ich über den Pollswitch in einzelne Modi´s springe (Demomode, und steuern über Seriell) Ist aber noch nicht ganz fertig

    Code:
    #include "asuro.h"
    #include "myasuro.h"
    
    int x=0;									//Zählvariablen für diverse Zählschleifen
    char emfangene_daten[10];
    
    void Goo(int d,int l)								//eigene goturn anweisung 
    {													//Nur zum Test!!!!!!
    	if (l>0)
    	MotorDir(FWD,FWD);
    	else
    	MotorDir(RWD,RWD);
    	
    	MotorSpeed(d,d+8);							//die +8 sind nur zum gradeaus fahren
    	Msleep(5000);
    	MotorSpeed(BREAK,BREAK);
    }
    
    
    int main(void)
    {
    
        
      Init();  									//Devinierter Zustand vom ATMEL
      
     
     while(1)
    {
    	  while (PollSwitch() == 0)
    	  { 
    		StatusLED (GREEN);
    		Msleep (500);
    		StatusLED (RED);
    		Msleep (500);
    	  }
    		
    		switch (PollSwitch())					//Auswahlmenü gesteuert über Pollswitch
    		{
    			case 1:emfang();
    			break;
    			case 4: 								//Kleine Fahranweisung zu Demo zwecken.
    			StatusLED (YELLOW);
    			Msleep (2000);
    			
    			EncoderInit ();
    			for (x=1; x<=4; x++)					//Asuro fährt ein quadrat
    				{GoTurn ( 0, 45, 200);					//45° hier entspricht 90° drehung im real, da "grobe" encoderscheibe eingebaut
    				GoTurn (150, 0, 200);}
    			Msleep(1000);
    			
    			for (x=1; x<=2; x++)					//Asuro fährt einen kreis vorwärts und rückwärts
    				{if (x==1)
    				GoTurn (300, 90, 255);
    				else 
    				GoTurn (-300, -90, 255);
    				Msleep(500);}
    			break;
    		
    		
    			default: 								//Bei falscheingabe blinkt die Status LED 5x Gelb
    			for(x=1; x<=5; x++)
    				{StatusLED(OFF);
    				Msleep(500);
    				StatusLED(YELLOW);
    				Msleep(500);}
    		break;
    	  }
    		
    	return 0;
    	}
    }
    
    int emfang(void)							//Steuerung über Seriel
    {
    	EncoderInit ();
    	
    	
    	StatusLED (YELLOW);  
    	BackLED (ON, OFF);						
    	Msleep (500);
    	BackLED (OFF,ON);
    	Msleep (500);
    	BackLED (OFF,OFF);							//AUS damit!!!!
    	
    	SerWrite ("READY", 10);
    	SerRead (emfangene_daten, 1, 0);		//Warte auf Daten, ohne timeout!!
    	
    	switch (emfangene_daten[0])
    	{
    		case'T':								//keine Daten erhalten
    		break;
    		
    		case '1':									//Wenn daten =1 fahr vor.
    		GoTurn(10, 0, 150);
    		break;
    		
    		case '2':									//wenn daten =2 fahr zurück
    		Goo (200, 1);
    		break;
    		
    		default:								//sonst sendefehler 5xgelb
    		for(x=1; x<=5; x++)	
    		{
    			StatusLED(OFF);
    			Msleep(500);
    			StatusLED(YELLOW);
    			Msleep(500);
    		}
    		break;
    	}
    return 0;
    }

    @ ExMachina: einen fehler durch die Radmuffe kann ich ausschließen, da es über Motorspeed keine probleme gibt. Nur bei GoTurn.

    Aber danke für die Idee.

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Ob es deine problehm verursacht weiss ich nicht genau, aber MotorSpeed(x,x) muss 'unsigned int' werten haben. Nicht 'int' werten wie in dein Goo-header.

    Aber wesentlicher ist es den EncoderInit (); (in deine Empfang code) gleich hinter den letzten BackLED zu schreiben. Den BackLED function schaltet den odoleds einfach aus, und werden danach nicht wieder eingeschaltet. Und deshalb sind den verschiedene Goturn's und Go's auf dem falschen Weg.

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2009
    Alter
    40
    Beiträge
    13
    Hallo Valen, Danke für die schnelle Antwort.

    Ja hast recht es muss 'unsigned int' sein, hatte ich gar nicht drauf geachtet. Ist aber zum glück nicht aufgefallen, da ich nur mit Positiven Werten im Wertbereich gearbeitet hatte.

    Das mit dem EncoderInit() hab ich an einer weiteren Stelle im Programm noch mal eingebaut ohne BackLeds:
    Code:
     case 4:                         //Kleine Fahranweisung zu Demo zwecken. 
             StatusLED (YELLOW); 
             Msleep (2000); 
              
             EncoderInit (); 
             for (x=1; x<=4; x++)               //Asuro fährt ein quadrat 
                {GoTurn ( 0, 45, 200);               //45° hier entspricht 90° drehung im real, da "grobe" encoderscheibe eingebaut 
                GoTurn (150, 0, 200);} 
             Msleep(1000); 
              
             for (x=1; x<=2; x++)               //Asuro fährt einen kreis vorwärts und rückwärts 
                {if (x==1) 
                GoTurn (300, 90, 255); 
                else 
                GoTurn (-300, -90, 255); 
                Msleep(500);} 
             break;
    Gruß Alex

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Das habe ich gesehen, aber das macht nichts wenn du '1' oder '2' gesendet hast. Die Goo und Goturn danach mussen auch den odoleds an haben.

    Was du uberhaupt zum Asuro sendet oder dem welchen Taster eindrucken du machst hast du auch noch nicht erzahlt. Sehr wichtig weil wir nicht sehen konnte welchen funktionen Asuro in seinem gehirn auf jeder stelle anruft. Und du kanst das eigentlich aucht nicht. Das geht manch zu schnell. Aber glucklich hast du viel StatusLED funktionen und Msleep's um das zu beurteilen. Das ist aber nicht immer so.

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2009
    Alter
    40
    Beiträge
    13
    Hmm am besten wir Versteifen uns jetzt nicht nur auf mein anfänger Programm. Habe den Fehler des Schwachen motor´s auch wenn ich andere Programme wie z.b. die Examples aus der 2.71 Lib aufspiele.

    Werd auch später mal die 2.80 Lib ausprobieren, vielleicht bringt mir das mehr oder vielleicht ist der Fehler da auch ganz weg.

    Hatte bisher bei der neuen Lib probleme mit dem Flashen, wenn ich da änderungen gemacht hab.
    Werd euch heut abend mehr dazu erzählen können.

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Hmm am besten wir Versteifen uns jetzt nicht nur auf mein anfänger Programm. Habe den Fehler des Schwachen motor´s auch wenn ich andere Programme wie z.b. die Examples aus der 2.71 Lib aufspiele.
    Ok, dan wurde es moglicherweisse etwas anderes sein. Du weisst das die 2.71 und 2.8 lib neu kompiliert sollten werden mit deine odometrie 'dunkelheit'-werten und den 'tick-pro-meter'-faktor im myasuro.h???

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2009
    Alter
    40
    Beiträge
    13
    Hallo Valen, hab die Lib jetzt bestimmt 20x Übersetzt immer das gleiche ergebnis.

    Hab daher noch mal etwas rumgebasstelt und nun Versteh ich es gar nicht mehr.
    Auch bei der 2.80 Lib ist es das gleiche.
    Daher hab mal angefangen mein Goo richtig zu machen.

    Code:
    void Goo(int d,int l)								//eigene go anweisung 
    {	
    	StatusLED(GREEN);
    	
    	SetMotorPower(d,d+5);								//Fahr los mit vorgegebenem Tempo,richtung über +/- Wert
    	
    	l=l*38/10;											//l ist die Strecke die zurück gelegt werden soll. 1cm = 3.8 ticks												
    	EncoderInit();
    		for(encoder[1]=0; encoder[1]<=l; x++)
    		{
    			Msleep (10);
    		}
    	MotorSpeed(BREAK,BREAK);
    }
    Das komische an der ganzen sache ist hier funktioniert das ganz wunderbar. Asuro fährt grade UND beide Motoren haben die gleiche Power.

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Wenn du es komplet umgebastelt hat wurde es naturlich besser sein den complet geanderten code zu posten. Damit jeder etwas davon lernen kan. Aber nun alles klapt is es auch ok naturlich. =D> Aber welche modifikation hat das gemacht.


    Code:
    for(encoder[1]=0; encoder[1]<=l; x++)
    Vernunftige losung, aber die x++ ist optionel in diesen fall. Den for-Schleife endet dan in:

    Code:
     for(encoder[1]=0;  encoder[1]<=l; )
    Du machts nicht mit den zahler x weiterhin, oder es hat gar keine relation mit die variabele l. deshalb kan es weg. Und den for-schleife geht doch weiter bis die encoder[1] wert grosser wie l ist. Im princip sind die for-schleife und while-schleife sehr ahnlich. Den for-schleife hat nur ein initialisierung und moglicherweise ein zahler eingebaut. Aber nicht verpflichted.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen