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
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ß