- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 16

Thema: Linienfolger mit IR-Rechtsabbieger (1.Versuch)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8

    Linienfolger mit IR-Rechtsabbieger (1.Versuch)

    Hallo

    Fast auf den Tag genau bin ich nun seit zwei Monaten stolzer Besitzer eines asuros. Ich bin immer noch von ihm begeistert, viel Spass und Funktion für wenig Geld.

    Hier möchte ich euch mal meinen ersten (ernsthaften) Versuch eines Linienfolgers präsentieren, kombiniert mit einem einfachen Rechtabbieger auf Basis meiner IR-Minimallösung . Der Umbau beschränkt sich auf eine Variante des Dickmann-Reflektors und eine Abschirmung der Liniensensoren:

    Bild hier   Bild hier   Bild hier  

    Bild hier  
    Video2

    Code:
    /* asuro folgt einer Linie (graue Fuge zwischen hellen Fliesen) mit IR-Rechtabbieger
       24.2.2007
       mic
       
       Die "Linie" darf nicht zu dick sein, denn der asuro versucht
    	die Linie zwischen den Sensoren zu behalten.
    
    	Beim Start sollte der asuro genau auf der Linie stehen.
    
    	Wenn er sich "verirrt" hat und die StatusLED gelb leuchtet,
    	sollte man ihn leicht nach links versetzt neben die Linie stellen.
    */
    
    #include "../inc/ir-asuro.h"  // eine Lib mit IR-Erweiterung ab ca. Ver. 2.1
    #include "../inc/ir-asuro.c"
    
    unsigned int data[2]; // Speicher fuer die Line-Daten
    
    int main(void) {
    
    Init();
    StatusLED(RED); Msleep(1000); StatusLED(GREEN); // kurze Startverzoegerung
    FrontLED(ON);
    MotorDir(FWD,FWD);
    
       // IR-Abstandsmessung nach waste
       DDRD |= (1 << DDD1);   // Port D1 als Ausgang
       PORTD &= ~(1 << PD1);   // PD1 auf LOW
       OCR2  = 0x90; // maximaler Abstand
    
    do{ // Hauptschleife
    if (PIND & (1 << PD0)) { // Echo pruefen
    	StatusLED(GREEN); // keine Echo = freie Fahrt
    	LineData(data); // Liniensensoren einlesen
    	MotorSpeed(data[0]*4, data[1]*4); // Faktor bestimmt die Geschwindigkeit (Minimalregelung)
    	//MotorSpeed(255-data[0], 255-data[1]);
    	if (data[0] > data[1]) BackLED(ON,OFF); else BackLED(OFF,ON); // Showeffekt
    } else {
    	StatusLED(RED); // Hindernis erkannt
    	MotorSpeed(100,100); // zurückstossen bis kein Echo
    	MotorDir(RWD,RWD);
    	while (!(PIND & (1 << PD0))); // warten bis kein Echo
    	Msleep(150); // und noch ein bisschen zurueck
    	MotorDir(FWD,RWD);
    	Msleep(600); // zeitgesteuert 38,231 Grad nach rechts drehen
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(200,200); // weitersteppen bis zur naechsten Linie
    	StatusLED(YELLOW);
    	do {
    		MotorDir(FWD,RWD); Sleep(127); // mit Puls zu Pause-Verhaeltniss moeglichst langsam schleichen
    		MotorDir(BREAK,BREAK); Sleep(255);
    		LineData(data);
    	} while (!(data[0]-10 >  data[1])); // rechter Sensor deutlich dunkler als Linker
    	MotorDir(FWD,FWD); // d.h. Linie erreicht
    	MotorSpeed(0,0); // weiter mit Linienfolgen
    }
    
    } while (1);  // Ende Hauptschleife, ausfuehren bis der Akku leer ist
    return 0;
    }
    Für eine Qualifikation bei Wettbewerben dürfte das ja noch nicht reichen, aber es ist mal ein Anfang.

    Gruß

    mic
    Angehängte Dateien Angehängte Dateien
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

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

Solar Speicher und Akkus Tests