- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 48

Thema: ASURO: kleine Aufgabe - ganz langsam fahren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.05.2005
    Beiträge
    734
    So, ich hab jetzt den Asuro dazu gebracht, sich mit der Geschwindigkeit von 1cm/sec zu bewegen. Eine Fahrt kann man es aber nicht wirklich nennen, es ist mehr ein Gehoppel. Aber er bewegt sich exakt mit 1cm/sec, sowohl auf Teppich als auch auf glattem Untergrund. Das Testprogramm ist angehängt.
    Das Prinzip ist, dass er sich alle 0.3sec um 3mm fort bewegt. Die 3mm entsprechen einem Encoder-Tick. Damit er die Haftreibung auch bei schwerem Gelände überwindet, ist eine PWM von 120 eingestellt. Dadurch bewegt er sich ruckartig. Mit dem PWM-Wert kann man noch variieren, aber zu klein darf er nicht werden, sonst läuft er nicht an und zu gross auch nicht, sonst macht er gleich 2 Ticks auf einmal.

    Mit dem Testprogramm kann man per Tastendruck die Geschwindigkeit von 0.2cm/sec bis 5cm/sec verändern. Siehe dazu den Sourcecode.

    Waste
    Code:
    /*******************************************************************************
    *
    * Description: Schleichfahrt
    *
    *****************************************************************************/
    #include "asuro.h"
    #include <stdlib.h>
    
    int main(void)
    {
    	unsigned char flagl, flagr, links, rechts, weiter, sw;
    	unsigned int data[2], dt;
    	unsigned long zeit;
       
    	Init();
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(120,120);
    	OdometrieData(data);
    	OdometrieData(data);
    	if (data[0] > 600) flagl = TRUE;		// Flag setzen
    	else flagl = FALSE;
    	if (data[1] > 600) flagr = TRUE;		// Flag setzen
    	else flagr = FALSE;
    	dt=300;
    	zeit=Gettime();
    	zeit += dt;
    	while(1){
    		if (Gettime() > zeit){
    			links = FWD; rechts = FWD;
    			MotorDir(FWD,FWD);
    			weiter = 1;
    			while(weiter){						// fahre einen Schritt
    				OdometrieData(data);			// messe Odometrie
    				if ((data[0] < 550) && (flagl == TRUE)) {flagl = FALSE; links = BREAK;}
    				if ((data[0] > 650) && (flagl == FALSE)) {flagl = TRUE; links = BREAK;}
    				if ((data[1] < 550) && (flagr == TRUE)) {flagr = FALSE; rechts = BREAK;}
    				if ((data[1] > 650) && (flagr == FALSE)) {flagr = TRUE; rechts = BREAK;}
    				MotorDir(links,rechts);
    				if ((links == BREAK) && (rechts == BREAK)) weiter = 0;
    			}
    			zeit += dt;
    		}
    		sw = PollSwitch();
    		if (sw & 0x01)
    			dt = 60;		//5cm/sec
    		if (sw & 0x02)
    			dt = 100;		//3cm/sec
    		if (sw & 0x04)
    			dt = 150;		//2cm/sec
    		if (sw & 0x08)
    			dt = 300;		//1cm/sec
    		if (sw & 0x10)
    			dt = 600;		//0.5cm/sec
    		if (sw & 0x20)
    			dt = 1500;		//0.2cm/sec
    	}
    	while(1);
    	return 0;
    }
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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

12V Akku bauen