- 12V Akku mit 280 Ah bauen         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 60

Thema: Asuro Programme gesucht

  1. #21
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Anzeige

    Praxistest und DIY Projekte
    Hallo firestar,

    in der erweiterten ASURO Bibliothek befindet sich die Routine Batterie().
    Damit erhält man den A/D Wandler Wert. Eine Interpretation der Daten, sprich Umrechnung in Volt oder Prozent fehlt aber.
    https://www.roboternetz.de/phpBB2/ze...ag.php?t=11256

    Gruß Peter

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.142
    Blog-Einträge
    3
    Hallo,
    das mit der Spannungsmessung kann man so machen:

    Code:
    /*    This function returns the adc-value of the vplus-input ( ADC5 )
    *    physical Vplus may be calculated by u=Vbandgap/1024*V_Plus_ADC_value*(R12+R13)/R13
    *    Vbandgap=2.56V ( datasheet )
    *    R12=12K
    *    R13=10K
    *    On my ASURO processor board I measured 2.73V on the ARef pin ( strange ) so I calculated
    *    2.73V instead of the bandgap voltage mentioned in the datasheet
    */
    unsigned int VPlus()
    {
        ADMUX = (1 << REFS0) | (1 << REFS1) | 0x05;    // Bandgap Reference and ADC5
        ADCSRA |= (1 << ADSC);            // Start conversion
        while (!(ADCSRA & (1 << ADIF)));    // wait for conversion complete
        ADCSRA |= (1 << ADIF);            // clear ADCIF
        return(ADCL + (ADCH << 8));
    }
    Gruss,
    stochri

  3. #23
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2005
    Beiträge
    5
    Hallo,

    Ich weis nicht was ich falch mache (habe den Ausro shon dreimal geflasht), und er macht garnichts)
    #include "asuro.h"

    ]
    Code:
    #include "asuro.h"
    
    int Main(void) {
    	unsigned char sw;
        sw = PollSwitch() ;
    	MotorDir(FWD,BREAK) ;
    	MotorSpeed(0, 0) ;
        if (sw & 0x01) 
    	   MotorSpeed(30, 30) ;
    	if (sw & 0x02)
    		MotorSpeed(50, 50) ;
    	if (sw & 0x04) 
    		MotorSpeed(80, 80) ;
    	if (sw & 0x08) 
    		MotorSpeed(120, 120) ;
    	if (sw & 0x10) 
    		MotorSpeed(160, 160) ;
    	if (sw & 0x20) 
    		MotorSpeed(250, 250) ;
    	}
    Gruss

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    25.08.2005
    Ort
    Berlin
    Beiträge
    53
    @drejc-slo

    zwischen
    unsigned char sw;
    und
    sw = PollSwitch() ;

    fehlt
    Init();

    Ergo
    .
    .
    .
    unsigned char sw;
    Init();
    sw = PollSwitch() ;
    .
    .
    .

  5. #25
    Neuer Benutzer Öfters hier
    Registriert seit
    30.08.2005
    Ort
    Paderborn
    Alter
    60
    Beiträge
    20
    außerdem
    - beim MotorDir hast Du die linke Seite auf "vorwärts", die rechte aber auf "break" - also halt gesetzt. Wenn Du dann die Geschwindigkeit erhöhst - in Abhängigkeit vom gedrückten Schalter - dann dreht sich nur die linke Seite.
    - entweder solltest Du die gesamte Funktion mit einem "while" kapseln oder am Ende des Programmes ein "while(1) stehen haben. Das verhindert, dass der Asuro nach dem beabsichtigten Programm eventuelle Code-Reste von vorherigen Flashs durchläuft

  6. #26
    Neuer Benutzer
    Registriert seit
    22.09.2005
    Ort
    Leipzig
    Alter
    39
    Beiträge
    3
    [glow=red:a1e1e03877]Dankeschön[/glow:a1e1e03877]

  7. #27
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2005
    Ort
    Bonn
    Alter
    42
    Beiträge
    6

    Zwei Programme zusammen geworfen

    Moinsen,
    habs endlich geschafft: hatte ein Ausweichprogramm geschrieben und hatte das Linienfolgeprogramm soweit abgeändert, dass der Bot einer Taschenlampe folgen kann. Und jetzt kommts: beide Programme zusammen funktionieren so, dass der Roboter der Lampe folgt und wenn er anstößt ausweicht um dann wieder der Lampe zu folgen. Hier ist der Code:

    Code:
    /* fahrenlightfeiner 
    der Roboter folgt einem Licht über die zwei Phototransistoren oder fährt, bei gleichmäßiger Ausleuchtung gerade aus. 
    Stößt er mit den Tastern an wird ein Ausweichmanöver eingeleitet
    
    kai 29.09.2005 */
    
    #include "asuro.h"
    #define KNOPF PollSwitch()									//Funktion PollSwitch() wird als KNOPF derfiniert	
    #define SPEED 0x8F											//SPEED wird als 248 definiert 
    
    int speedleft, speedright;									//globale Variablen
    unsigned int lineDaten[2];								//		"
    int ADOffset, i, j, k=0, l;								//		"
    
    void search_left(void);									//Funktionsprototyp
    void search_right(void);									//		"
    
    void LineLeft(void){										//Funktion der main Funktion 
    															//für die Erhöhung der Geschwindigkeit des linken Motors
    	speedleft+= 1;
    	
    	if(speedleft>0xFE)
    		speedleft = 0xFF;
    }
    
    void LineRight(void){										//Funktion der main Funktion 
    															//für die Erhöhung der Geschwindigkeit des rechten Motors
    	speedright += 1;
    	
    	if(speedright>0xFE)
    		speedright = 0xFF;
    }		
    
    void back(void){											//Funktion back() der Funktion taster()
    															//für zurücksetzen 
    	StatusLED(RED);	
    	BackLED(ON,ON);
    	MotorDir(RWD,RWD);						
    	MotorSpeed(254,255);								
    	for(i=0;i<=100;i++)				
    		Sleep(255);	
    }
    
    void pause(void){											//Funktion pause() der Funktion taster()
    															//für eine kleine Pause mit Lichteffekten (nicht unbedingt erforderlich)
    	MotorSpeed(BREAK,BREAK);
    	
    	while(k<=4){
    		StatusLED(RED);
    		BackLED(OFF,OFF);
    		FrontLED(ON);
    		for(i=0;i<=35;i++)
    			Sleep(255);
    			
    		StatusLED(OFF);
    		BackLED(ON,ON);
    		FrontLED(OFF);
    		for(i=0;i<=35;i++)
    			Sleep(255);
    		k++;
    	}
    }
    
    void taster(void){											//Funktion zur Steuerung des Ausweichens		
    
    	KNOPF;													//mehrmaliger Aufruf von PollSwitch, wegen dem bekannten Problem mit 	
    	KNOPF;													//dem Kondensator
    	KNOPF;
    	KNOPF;
    	KNOPF;
    	KNOPF;
    	KNOPF;
    	KNOPF;
    	KNOPF;
    	KNOPF;
    	
    	if(KNOPF > 0 && KNOPF < 8){							//falls Tasten 1-3 gedrückt wurden, fahre hier fort
    		back();
    		pause();
    		search_left();
    		BackLED(ON,OFF);
    		MotorDir(RWD,FWD);									//Abdrehen des Roboters in entgegengesetzter Richtung zur gedrückten Taste			
    		MotorSpeed(180,180);
    		for(j=0;j<=170;j++)	
    			Sleep(255);
    	}		
    	else if(KNOPF > 7 && KNOPF < 60 && KNOPF != 12 && KNOPF != 18 && KNOPF != 30){	//falls Tasten 4-6 gedrückt wurden, fahre hier fort
    		back();
    		pause();
    		search_right();
    		BackLED(OFF,ON);
    		MotorDir(FWD,RWD);									//Abdrehen des Roboters in entgegengesetzter Richtung zur gedrückten Taste
    		MotorSpeed(180,180);
    		for(j=0;j<=170;j++)		
    			Sleep(255);
    	}	
    	else if(KNOPF == 12 || KNOPF == 18 || KNOPF == 30){ 	//falls Tasten 2-4 gedrückt wurden, fahre hier fort
    		back();
    		pause();
    		search_left();
    		BackLED(ON,ON);
    		MotorDir(RWD,FWD);									//Abdrehen des Roboters in entgegengesetzer Richtung zur bisherigen Fahrtrichtung			
    		MotorSpeed(180,180);
    		for(j=0;j<=240;j++)			
    			Sleep(255);
    	}	
    }	
    
    int main(void){											//Hauptfunktion
    
    	Init();
    
    	StatusLED(GREEN);
    				
    	for (l = 0; l < 0xFF; l++)
    		LineData(lineDaten);								//Überschreiben des Speicherinhalts aus lineDaten[0,1] in die Funktion LineData
    			
    	LineData(lineDaten);
    	ADOffset = lineDaten[0] - lineDaten[1];				//Berechnen von ADOffset
    	speedleft = speedright = SPEED;							//Geschwindigkeit links und rechts gleich SPEED
    	
    	for(;;){												//Endlosschleife		
    	
    		LineData(lineDaten);								//Auswerten von LineData
    		i = (lineDaten[0] - lineDaten[1]) - ADOffset;		//Berechnung von i zur Bestimmung des heller beschienen Transistiors
    				
    		if(i > 50){										//falls rechter Transistor höhere Helligkeit-->
    			BackLED(ON,OFF);
    			LineRight();									//Erhöhe links die Geschwindigkeit
    			if(KNOPF > 0){									//Bedingung für Ausweichsequenz	
    				taster();									//Aufruf der Ausweichfunktion
    			}	
    		}
    		else if(i < -50){									//falls linker Transistor höhere Helligkeit-->
    			BackLED(OFF,ON);
    			LineLeft();										//Erhöhe rechts die Geschwindigkeit
    			if(KNOPF > 0){									//Bedingung für Ausweichsequenz
    				taster();									//Aufruf der Ausweichfunktion
    			}	
    		}
    		else{												//bei gleichmäßiger Beleuchtung-->
    			BackLED(OFF,OFF);
    			speedleft = speedright = SPEED;					//beide Motoren gleiche Geschwindigkeit
    			if(KNOPF > 0){									//Bedingung für Ausweichsequenz
    				taster();									//Aufruf der Ausweichfunktion
    			}	
    		}
    		MotorDir(FWD,FWD);
    		MotorSpeed(speedleft,speedright);					//Einsetzen der Variablen für die Geschwindigkeit der Motoren 								
    	}	
    	while(1);												//Endlosschleife (ASURO spezifisch)
    	return 0;	
    }	
    
    void search_left(void){									//Funktion search_left für Funktion taster()
    															//für Sucheffekt(nicht unbedingt erforderlich)
    	StatusLED(GREEN);
    	
    	for(k=0;k<=0;k++){
    		BackLED(OFF,OFF);
    		MotorDir(RWD,FWD);
    		MotorSpeed(150,150);
    		for(i=0;i<=250;i++)
    			Sleep(255);		
    		MotorDir(FWD,RWD);
    		MotorSpeed(150,150);
    		for(i=0;i<=250;i++)
    			Sleep(255);
    	}
    	Sleep(255);
    }
    
    void search_right(void){									//Funktion search_right für Funktion taster()
    															//für Sucheffekt(nicht unbedingt erforderlich)
    	StatusLED(GREEN);
    	
    	for(k=0;k<=0;k++){
    		BackLED(OFF,OFF);
    		MotorDir(FWD,RWD);
    		MotorSpeed(150,150);
    		for(i=0;i<=250;i++)
    			Sleep(255);
    		MotorDir(RWD,FWD);
    		MotorSpeed(150,150);
    		for(i=0;i<=250;i++)
    			Sleep(255);
    	}
    	Sleep(255);	
    }
    So das wärs. Endlich. Aber es gibt noch einiges zutun. Nämlich möchte ich gerne die zeitgesteuerten Elemente durch die Odometriedaten ersetzen und
    außerdem muß die Suchfunktion noch einen näheren Sinn bekommen. Ich stelle mir das so vor, dass er solange in der Suchfunktion verbleibt bis ein Helligkeitsunterschied ermittelt wurde und dann wieder der Lichtquelle folgt.
    Was haltet ihr davon. Wenns einer ausprobiert hat dann sagt doch mal bescheid.
    Kai

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    ideal ist es noch nicht. warum muss der robby immer wo anstossen. ein entfernungssensor draufsetzen. besser wär es auch noch die geschwindigkeit langsam drosseln ab einer bestimmten entfernung bis auf 0 wenn er dann dicht davor steht. die vorgegebenen routinen vom asuro sind nicht ideal geproggt. am besten das programm von grund auf neu schreiben, es ist viel überflüssiges zeug darin, muss mehr modulhafter aufgebaut werden.
    mfg pebisoft

  9. #29
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2005
    Ort
    Bonn
    Alter
    42
    Beiträge
    6
    Hi Pebisoft,

    danke für deine Kritik. Das mit dem Entfernungsmesser hört sich gut an, nur leider hab ich keinen und weiß auch nicht wie ich den da drauf bauen soll.
    Meinst du mit dem überflüssigen Krams z.B. die ganzen LED-Aktionen oder die Funktionen wie pause(), search_left, search_right? Ist mir nämlich klar, dass die völlig überflüssig sind; sind nur zum Spass da.
    Und wie meinst du das mit den vorgegebenen Funktionen? Was kann man da besser machen? Könntest du vielleicht ein bißchen Code mitgeben, wenn du Antwortest? Danke schon mal

  10. #30
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test