Hallo!
Ich hab mir einen Roboter gebaut, der wenn er ein Hinderniss vor sich hat, zurückfahren und dann nach links fahren soll.
Den Sensor habe ich mir aus einem LDR und einer weißer LED gebaut(siehe Bild).
https://dl.dropbox.com/u/43915921/Foto%2003.01.13%2016%2056%2046.jpg
Mein Problem ist, dass wenn der Roboter ein Hinderniss entdeckt, schaltet er sich kurz aus, dann wieder ein und erst dann fährt er zurück und nach links.
Meine Frage ist, warum macht er das?
const int pwmA_rechts=10; //rechter Motor
const int pwmB_links=11; //linker Motoer
const int AIN1=2, AIN2=3, BIN1=4, BIN2=5; //AIN1,AIN2,BIN1 und BIN2 sind die steuereingänge des Motortreibers ( ob er Vorwährts oder Rückwährts fahren soll)
const int stby=6;
const int sensor_pin=1;
const int speed_pin=0;
const int sensor_led_pin=7, sensor_value_min=150;
int sensor_value;
int robo_speed;
int help=0, value;
//Unterprogramm zum Ansteuern der Motoren
void move(int motor, int motor_speed, int motor_direction);// motor: 1 oder 2(1: Motor A, 2: Motor B), speed: 0-255, direction: 1 oder 2 (1: vorwährts, 2: rückwährts)
void move(int motor, int motor_speed, int motor_direction)
{
switch(motor)
{
case 1:
switch(motor_direction)
{
case 1:
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
break;
case 2:
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
break;
}
analogWrite(pwmA_rechts,motor_speed);
break;
case 2:
switch(motor_direction)
{
case 1:
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
break;
case 2:
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
break;
}
analogWrite(pwmB_links,motor_speed);
break;
}
}
void setup()
{
Serial.begin(9600);
pinMode(pwmA_rechts,OUTPUT);
pinMode(pwmB_links,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(stby,OUTPUT);
pinMode(sensor_led_pin,OUTPUT);
digitalWrite(stby,HIGH); //standby pin muss 1 seins damit die Motoren aktiv sind
digitalWrite(sensor_led_pin,HIGH);
}
void loop()
{
sensor_value=analogRead(sensor_pin);
Serial.print("sensor_value: ");
Serial.println(sensor_value);
value=analogRead(speed_pin); //die Geschwindigkeit kann mit einem Potentiometer eingestellt werden
robo_speed=map(value,0,1023,200,255);
Serial.print("robo_speed: ");
Serial.println(robo_speed);
if(help==0)// damit nicht immer nur ein Motor zuerst angsteuert wird und somit der Roboter eine leichte Kurve fahren würde
{
move(1,robo_speed,1);
move(2,robo_speed,1);
}
else if(help==1)
{
move(2,robo_speed,1);
move(1,robo_speed,1);
help=0;
}
if(sensor_value > sensor_value_min) //wenn ein Hinderniss kommt, soll er zurück fahren und dann eine Linkskurve fahren
{
move(1,robo_speed,2);
move(2,robo_speed,2);
delay(1000);
move(1,robo_speed,1);
move(2,robo_speed,2);
delay(500);
}
help++;
}
Ich bin für jede Hilfe dankbar!
mfg
Michael