Roboter bewegt sich auf Licht zu
Bauteile:
- Shield: L298P Shield v1.1
- Arduino uno
- 2 Lichtsensoren
- Fahrgestell
Code:
const int LichtsensorR = A0;
const int LichtsensorL = A1;
const int MotorVR = 6;
const int MotorVL = 5;
const int MotorDR = 7;
const int MotorDL = 4;
int gesch = 200;
int gesch2 =175;
int stay = 0;
int sensorValue = 0;
int start = 0;
float wertMAX = 0;
float mittelwert = 0;
void setup() {
pinMode(MotorVR, OUTPUT);
pinMode(MotorVL, OUTPUT);
pinMode(MotorDR, OUTPUT);
pinMode(MotorDL, OUTPUT);
Serial.begin(9600);
maxermitteln();
bismaxdrehen();
}
void halt() {
analogWrite(MotorVR, stay);
analogWrite(MotorVL, stay);
digitalWrite(MotorDR, HIGH);
digitalWrite(MotorDL, HIGH);
}
void drehen(int gesch) {
analogWrite(MotorVR, gesch);
analogWrite(MotorVL, gesch);
digitalWrite(MotorDR, HIGH);
digitalWrite(MotorDL, LOW);
}
void geradeaus() {
analogWrite(MotorVR, gesch2);
analogWrite(MotorVL, gesch2);
digitalWrite(MotorDR, HIGH);
digitalWrite(MotorDL, HIGH);
}
void lenken(int l, int r) {
analogWrite(MotorVR, r);
analogWrite(MotorVL, l);
digitalWrite(MotorDR, HIGH);
digitalWrite(MotorDL, HIGH);
}
void maxermitteln() {
drehen(200);
start = millis();
do {
mittelwert = (analogRead(LichtsensorR)+analogRead(LichtsensorL))/2;
if (mittelwert > wertMAX) {
wertMAX = mittelwert;
Serial.println(wertMAX);
}
} while (millis()-start < 7500);
}
void bismaxdrehen() {
drehen(150);
do {
mittelwert = (analogRead(LichtsensorR)+analogRead(LichtsensorL))/2;
} while (abs(wertMAX-mittelwert) > 20 );
halt();
}
void loop() {
{
if(analogRead(LichtsensorR)-5 > analogRead(LichtsensorL)) {
lenken(225,50);
}
else
{
if(analogRead(LichtsensorR) < analogRead(LichtsensorL)-70) {
lenken(50,200);
}
else
geradeaus();
}
}
if ((analogRead(LichtsensorR)+analogRead(LichtsensorL))/2-240 > wertMAX) {
halt();
}
}
Von: Thomas Link Moreno, Leo Buchner und Tobias Berghöfer