Fahrzeug auf einem Tisch mit Blaulicht
Schritt 1 --> Blaulicht
Wir wollten ein Blaulicht auf dem Fahrzeug montieren und ließen uns dafür von den Amerikanischen Polizei Wagen inspirieren. Hier nun das daraus resultierende Programm.
//Blaulicht Programm V 1.1
int blau1 = 3;
int blau2 = 4;
int blau3 = 5;
int blau4 = 6;
//3,4,5,6 Rotes Licht
int gruen1 = 7;
int gruen2 = 8;
//7,8 Gruenes Licht
int rot1 = 9;
int rot2 = 10;
int rot3 = 11;
int rot4 = 12;
//9,10,11,12 Blaues Licht
void setup () {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
digitalWrite(rot3, HIGH);
delay(1);
digitalWrite(blau1, HIGH);
delay(1);
digitalWrite(rot4, HIGH);
delay(1);
digitalWrite(blau2, HIGH);
delay(48);
digitalWrite(gruen2, HIGH);
delay(69);
digitalWrite(rot3, LOW);
delay(1);
digitalWrite(blau1, LOW);
delay(1);
digitalWrite(rot4, LOW);
delay(1);
digitalWrite(blau2, LOW);
delay(10);
digitalWrite(gruen2, LOW);
delay(10);
digitalWrite(gruen1, HIGH);
delay(10);
digitalWrite(rot1, HIGH);
delay(10);
digitalWrite(blau3, HIGH);
delay(1);
digitalWrite(rot2, HIGH);
delay(1);
digitalWrite(blau4,HIGH);
delay(78);
digitalWrite(gruen1, LOW);
delay(10);
digitalWrite(gruen2, HIGH);
delay(100);
digitalWrite(rot1, LOW);
delay(1);
digitalWrite(blau3, LOW);
delay(1);
digitalWrite(rot2, LOW);
delay(1);
digitalWrite(blau4,LOW);
delay(8);
}
Schritt 2 --> Das Programm für den Roboter
#include
AF_DCMotor motorL(1);
AF_DCMotor motorR(2);
const int trigger1 = 25;
const int trigger2 = 29;
const int trigger3 = 33;
const int trigger4 = 37;
const int echo1 = 24;
const int echo2 = 28;
const int echo3 = 32;
const int echo4 = 36;
int gedreht = 1;
double echo1wert;
double echo1vorwert;
double echo2wert;
double echo2vorwert;
double echo3wert;
double echo4wert;
float cm ;
int Aktion = 1;
void setup()
{
// turn on motor
motorL.setSpeed(0);
motorR.setSpeed(0);
motorL.run(RELEASE);
motorR.run(RELEASE);
Serial.begin(9600);
pinMode(trigger1,OUTPUT);
pinMode(trigger2,OUTPUT);
pinMode(trigger3,OUTPUT);
pinMode(trigger4,OUTPUT);
pinMode(echo1,INPUT);
pinMode(echo2,INPUT);
pinMode(echo3,INPUT);
pinMode(echo4,INPUT);
Aktion = 1;
}
void Hinfahren(int G)
{
if (G < 200) // einer der Motoren läuft nicht bei unter 200
{
G= 200;
}
motorR.setSpeed(G);
motorL.setSpeed(G*0.71);
motorR.run(FORWARD);
motorL.run(BACKWARD);
delay(80); // der Motor läuft nur ganz kurz um danach wieder nach den Sensoren zu schauen
motorL.run(RELEASE);
motorR.run(RELEASE);
}
void Wegfahren(int G)
{
if (G < 200)
{
G= 200;
}
motorR.setSpeed(G);
motorL.setSpeed(G*0.85); // der Roboter fahrt für 0,5 sekunden rückwärts prüft dabei aber immer wieder ob hinter ihm noch tisch ist
for(int i=1; i<51; i++)
{
digitalWrite(trigger3,LOW);
delayMicroseconds(2);
digitalWrite(trigger3,HIGH);
delayMicroseconds(10);
digitalWrite(trigger3,LOW);
echo3wert = (pulseIn(echo3, HIGH) / 58.2);
digitalWrite(trigger4,LOW);
delayMicroseconds(2);
digitalWrite(trigger4,HIGH);
delayMicroseconds(10);
digitalWrite(trigger4,LOW);
echo4wert = (pulseIn(echo4, HIGH) / 58.2);
if ((echo3wert < 7) && (echo4wert < 7));
{
motorR.run(BACKWARD);
motorL.run(FORWARD);
delay(10);
motorL.run(RELEASE);
motorR.run(RELEASE);
}
}
}
void Drehenlinks()
{
motorR.setSpeed(200);
motorL.setSpeed(200);
motorR.run(FORWARD);
motorL.run(FORWARD);
delay(800);
motorL.run(RELEASE);
motorR.run(RELEASE);
}
void Drehenrechts()
{
motorR.setSpeed(200);
motorL.setSpeed(200);
motorR.run(BACKWARD);
motorL.run(BACKWARD);
delay(800);
motorL.run(RELEASE);
motorR.run(RELEASE);
}
void loop()
{
digitalWrite(trigger1,LOW);
delayMicroseconds(2);
digitalWrite(trigger1,HIGH);
delayMicroseconds(10);
digitalWrite(trigger1,LOW);
echo1wert = (pulseIn(echo1, HIGH) / 58.2);
digitalWrite(trigger2,LOW);
delayMicroseconds(2);
digitalWrite(trigger2,HIGH);
delayMicroseconds(10);
digitalWrite(trigger2,LOW);
echo2wert = (pulseIn(echo2, HIGH) / 58.2);
if ((echo1wert < 7) && (echo1vorwert < 7)) // es wird der aktuelle und der vorherige Wert geprüft um Fehler zu vermeiden
{
if ((echo2wert < 7) && (echo2vorwert < 7))
{
Hinfahren(200);
}
}
if ((echo1wert > 7) && (echo1vorwert > 7))
{
Wegfahren(200);
Drehenrechts();
gedreht = 1;
}
if ((echo2wert > 7) && (echo2vorwert > 7))
{
if (gedreht == 0)
{
Wegfahren(200);
Drehenlinks();
}
}
gedreht= 0;
Serial.println(Aktion);
echo1vorwert = echo1wert;
echo2vorwert = echo2wert;
}
Der Roboter prüft an allen Ecken ob die Distanz zum Untergrund kleiner ist als 7cm
nur wenn dies gegeben ist darf der Roboter fahren, da er sich ansonsten folglich an
einer Kante des Tisches befindet.
Nach den ganzen Programmen jetzt noch die Material Liste:
- 1 Arduino UNO
- 1 Arduino Mega 2560
- 10 1k Ohm Wiederstände
- Etliche Kabel
- 4 Rote LEDs
- 4 Blaue LEDs
- 2 Grüne LEDs
- 1 Motor Control Shield#
- 1 Alten ferngesteuerten Bagger Untersatz
-
4 Sensoren "HC-SR04"