Das Programm
von
am 14.02.2014 um 20:27 (6669 Hits)
Da die Eletronik ja ein bisschen aufmuckt, hab ich schon angefangen, das Programm zu schreiben. Ich benutze einen Arduino Mega und wollte, da der Roboter ja für die Präsentation auch einen "Show-Effekt" haben soll, will ich in das Gehäuse, das ein Freund von mir macht, ein paar LEDs einbauen und die Scheinwerfer lichtabhängig an und ausgeschalten werden. Außerdem kommt vorne noch eine RGB-LED dran, die je nachdem, ob der Roboter vorwärts, rückwärts,... fährt eine andere Farbe annehmen soll. Ich denke auch an eine Computerstimme, die Informationen gibt. Dafür habe ich auch schon etwas gefunden: http://code.google.com/p/tinkerit/wiki/Cantarino Hat jemand von euch damit schon Erfahrungen gemacht? Als Sensoren soll der Arduino einen Ultraschallsensor für die Entfernung und einen Reflexoptokoppler um einer schwarzen Linie zu folgen benutzen. Das ist bis jetzt recht mager, aber mir fällt nichts auf. Wenn jemand von euch Vorschläge für weitere Sensoren, Gagedts oder ähnliches hat, bitte rein damit in die Kommentare! Hier ist schonmal der bisherige Code. Allerdings fehlen noch jede Sorte von Tönen und es ist auch noch eine sehr frühe Version.
const int Pin_echo = 22;
const int Pin_trigger = 24;
const int Pin_Motor_r1 = 13;
const int Pin_Motor_r2 = 12;
const int Pin_Motor_l1 = 11;
const int Pin_Motor_l2 = 10;
const int Pin_R = 7;
const int Pin_G = 6;
const int Pin_B = 5;
const int Pin_LDR = A0;
const int Pin_Frontlicht = 26;
const int Pin_Ruecklicht = 28;
const int Lichtschwelle = 1;
const int Faktor = 2500;
void setup(){
Serial.begin(9600);
}
void loop(){
pinMode(Pin_Motor_r1,OUTPUT);
pinMode(Pin_Motor_r2,OUTPUT);
pinMode(Pin_Motor_l1,OUTPUT);
pinMode(Pin_Motor_l2,OUTPUT);
pinMode(Pin_trigger,OUTPUT);
pinMode(Pin_echo,INPUT);
boolean Error = false;
int Abstand = 0;
Scheinwerfer();
Entfernung();
Serial.print(Abstand);
Serial.print(" ");
int Richtung = 2;
if (Abstand >= 50){
int (Richtung = 1); // 1 = gerade
}
else if (Abstand < 0){
int (Richtung = 3); // 3 = links
}
else if (Abstand < 50){
int (Richtung = 2); // 2 = rechts
}
if (Faktor > 1000){
boolean Error = true;
} else if (Faktor <100){
boolean Error = true;}
Motor(Richtung);
if(Error == true){
RGB(255,0,0);}
else if(Richtung >= 2){
RGB(255,165,0);}
else if(Richtung == 1){
RGB(0,255,0);}
Serial.println(Richtung);
delay(100);
while (Error = false){
delay(1000);
}
}
void RGB(int R,int G, int B){
analogWrite(Pin_R,R);
analogWrite(Pin_G,G);
analogWrite(Pin_B,B);
}
void Motor(int Richtung){
if (Richtung = 1){
analogWrite (Pin_Motor_r1,2 * Faktor);
analogWrite (Pin_Motor_r2,0);
analogWrite (Pin_Motor_l1,2 * Faktor);
analogWrite (Pin_Motor_l2,0);
}
else if (Richtung = 2){
analogWrite(Pin_Motor_r1,Faktor);
analogWrite(Pin_Motor_r2,0);
analogWrite(Pin_Motor_l1,0);
analogWrite(Pin_Motor_l2,Faktor);
}
else if (Richtung = 3){
analogWrite(Pin_Motor_r1,0);
analogWrite(Pin_Motor_r2,Faktor);
analogWrite(Pin_Motor_l1,Faktor);
analogWrite(Pin_Motor_l2,0);
}
}
int Entfernung(){
digitalWrite(Pin_trigger, LOW);
delayMicroseconds(2);
digitalWrite(Pin_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(Pin_trigger, LOW);
int dauer = pulseIn(Pin_echo, HIGH);
int Abstand = dauer / 29 / 2 ;
return Abstand;
}
void Scheinwerfer(){
if (analogRead(Pin_LDR) <= Lichtschwelle){
digitalWrite(Pin_Frontlicht,HIGH);
digitalWrite(Pin_Ruecklicht,HIGH);
}
else{
digitalWrite(Pin_Frontlicht,LOW);
digitalWrite(Pin_Ruecklicht,LOW);
}
}