Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Fahrzeuge Linienverfolgung mit Fahrzeug

Linienverfolgung mit Fahrzeug

Der Arduino soll mithilfe dieses Programmes einer weißen Linie auf dem Boden folgen.

 

Verwendet wurden:

1x Arduino Mega 2560

1x R3 4WD Mobile Car

2x Lichtsensoren

1x LED

 

Arduino mit Fahrzeug und Sensoren                 Arduino mit Fahrzeug und Sensoren

 

Die beiden Lichtsensoren und die LED werden vorne am Fahrzeug angebracht. Durch die LED wird der Boden unter ihm beleuchtet und die beiden Lichtsensoren erkennen dann die weiße Linie, sodass der Arduino das Fahrzeug darauf zusteuern kann.

 

 

Programm / Quellcode:   (in Arbeit)

 

const int links_richtung = 9;                       //   IN 4,  HIGH = Vorwärts, LOW = Rückwärts
const int rechts_richtung = 10;                 //  IN 1,  HIGH = Vorwärts, LOW = Rückwärts

const int rechts_geschwindigkeit = 11;  //   IN 2, 0 = langsam,  255 = schnell

const int links_geschwindigkeit = 12;      //   IN 3, 0 = langsam,  255 = schnell

// Pinbelegung

int sensorPin = A8;            //linker Sensor
int sensor2Pin = A9;          // rechter Sensor
int ledPin = 13;

// Sensorwerte

int sensorValue = 0;
int sensor2Value =0;
int ledState = 0;

// Geschwindigkeiten

int schnell = 200;
int mittel = 150;

// Fahrstatus

int status_ = 0;
int status_alt = 0;

// Zeit

long previousMillis = 0;
long Millis = 0;

// VOID SETUP

void setup () {
  Serial.println("Motor test!");
  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);
  pinMode(links_richtung,OUTPUT);
  pinMode(rechts_richtung,OUTPUT);
  pinMode(links_geschwindigkeit,OUTPUT);
  pinMode(rechts_geschwindigkeit,OUTPUT);
  pinMode(sensorPin, INPUT);
  pinMode(sensor2Pin, INPUT);
}

void linksvor(int v)      {  digitalWrite(links_richtung,HIGH); analogWrite(links_geschwindigkeit,255-v);}   //Rechte Seite wird dadurch nicht beeinflusst
void linkszurueck(int v)  {  digitalWrite(links_richtung,LOW);  analogWrite(links_geschwindigkeit,v);}       //Rechte Seite wird dadurch nicht beeinflusst
void rechtsvor(int v)     {  digitalWrite(rechts_richtung,HIGH); analogWrite(rechts_geschwindigkeit,255-v);}  //Linke Seite wird dadurch nicht beeinflusst
void rechtszurueck(int v) {  digitalWrite(rechts_richtung,LOW);  analogWrite(rechts_geschwindigkeit,v);}  //Linke Seite wird dadurch nicht beeinflusst

void vorwaerts (int v)    {  linksvor(v); rechtsvor(v);              }
void rueckwaerts (int v)  {  linkszurueck(v); rechtszurueck(v);      }
void rechtsdrehen (int v) {  linksvor(v); rechtszurueck(v);          }
void linksdrehen (int v)  {  linkszurueck(v); rechtsvor(v);          }
void rechtskurvevorwaerts() {  linksvor(schnell); rechtszurueck(mittel);   }
void linkskurvevorwaerts()  {  linksvor(mittel); rechtszurueck(schnell);   }
void halt()               {  linkszurueck(0);   rechtszurueck(0);    }
 
// VOID LOOP

void loop() {
   if (millis() - previousMillis >0){
  sensorValue = analogRead(sensorPin);
  Serial.print("Sensor 1: ");
  Serial.print(sensorValue);
 
   digitalWrite(ledPin, HIGH);
   digitalWrite(sensorPin, HIGH);
   sensorValue = analogRead(sensorPin);
   }
   if(millis() - previousMillis >100){
     sensor2Value = analogRead(sensor2Pin);
    
     Serial.print("    Sensor 2:");
     Serial.println(sensor2Value);
    
     digitalWrite(ledPin, HIGH);
     digitalWrite(sensorPin, HIGH);
 
   if(sensorValue - sensor2Value >50) {
     Serial.println("Linkskurvevorwärts");
     linkskurvevorwaerts();
   } else {
     if(sensor2Value - sensorValue >50) {
     Serial.println("Rechtskurvevorwärts");
     rechtskurvevorwaerts();
     } else {
          Serial.println("Geradeaus");  
           vorwaerts (schnell);
         x       }
     }
   }
  delay(2000);
   }
   
 

                                                                                                                                                                                                     

Von Daniel Dambeck, Moritz Burger und Fabian Krauß

Erstellt: Fabian Krauß (23.07.2014) Letzte Änderung: Andreas Hecker (03.12.2014)