Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Fahrzeuge Fahrzeug auf einem Tisch mit Blaulicht

Fahrzeug auf einem Tisch mit Blaulicht

20140723_114747.jpg

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:

 

 

 

Erstellt: Maximilian Reitz (23.07.2014) Letzte Änderung: Andreas Hecker (03.12.2014)