Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Roboter Fahrender Roboter

Fahrender Roboter

Materialien:

- Kabel

- Arduino

- Gehäuse

- Motor

- Widerstände

- V5 Sensorshield

- Stromquelle

 

 

 

 

Code:

// connect motor controller pins to Arduino digital pins
// Motor rechts
int enRechts = 10; //rot
int inR1 = 9; //braun
int inR2 = 8; //gelb
// Motor links
int enLinks = 5; //schwarz
int inL1 = 7; //grün
int inL2 = 6; //blau
//Ultraschallsensor
int EchoPin = 2; // Ultraschall Echo (gelb)h
int TrigPin = 3; // ULtraschall Trigger (grün)
long dauer = 0; // Variable Zeit für Schallmessung
long entf = 0; // in dieser Variable wird die Entfernung gespeichert
void setup()
{
  pinMode(EchoPin, INPUT);
  pinMode(TrigPin, OUTPUT);
  //setze mehrere Pins auf einmal als Output fest:
  pinMode(EchoPin, INPUT);
  for (int pinindex = 6; pinindex < 11; pinindex++) {
    pinMode(pinindex, OUTPUT); // Schleife setzt Pins 6-10 als Output fest
  }
}
void loop()
{
  //Entfernungsmessung
  digitalWrite(TrigPin, LOW);
  delay (5); //kurz Spannung vom Pin nehmen
  digitalWrite(TrigPin, HIGH);
  delay (10); //Schallwelle aussenden
  digitalWrite(TrigPin, LOW);//Dann wird der „Ton“ abgeschaltet.
  dauer = pulseIn(EchoPin, HIGH); //Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
  entf = (dauer / 2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
  if (entf <= 20) //Wenn die gemessene Entfernung über 500cm oder unter 0cm liegt,…
  {
    halt();
    delay(100);
    RECHTS();
    delay(100);
   
  }
  else
  {
    vorwaerts();
  }
}
void vorwaerts() {//geradeaus nach vorne
  // start rechter Motor
  digitalWrite(inR1, HIGH);
  digitalWrite(inR2, LOW);
  analogWrite(enRechts, 70); //Geschwindigkeit von 0-255
  // start linker Motor
  digitalWrite(inL1, HIGH);
  digitalWrite(inL2, LOW);
  analogWrite(enLinks, 70); //Geschwindigkeit von 0-255
  delay(2000);
}
void rueckwaerts() //geradeaus nach hinten
{
  // start rechter Motor
  digitalWrite(inR1, LOW);
  digitalWrite(inR2, HIGH);
  analogWrite(enRechts, 70); //Geschwindigkeit von 0-255
  // start linker Motor
  digitalWrite(inL1, LOW);
  digitalWrite(inL2, HIGH);
  analogWrite(enLinks, 70); //Geschwindigkeit von 0-255
  delay(2000);
}
void halt() {// Alle Motoren aus
  digitalWrite(inR1, LOW);
  digitalWrite(inR2, LOW);
  digitalWrite(inL1, LOW);
  digitalWrite(inL2, LOW);
}
void RECHTS(){
  digitalWrite(inR1, HIGH);
  digitalWrite(inR2, LOW);
  analogWrite(enRechts, 70); //Geschwindigkeit von 0-255
  // start linker Motor
  digitalWrite(inL1, HIGH);
  digitalWrite(inL2, LOW);
  analogWrite(enLinks, 140); //Geschwindigkeit von 0-255
  delay(2000);
}
/*void demoTwo()
  {
  // this function will run the motors across the range of possible speeds
  // note that maximum speed is determined by the motor itself and the operating voltage
  // the PWM values sent by analogWrite() are fractions of the maximum speed possible
  // by your hardware
  // turn on motors
  digitalWrite(inR1, LOW);
  digitalWrite(inR2, HIGH);
  digitalWrite(inL1, LOW);
  digitalWrite(inL2, HIGH);
  // accelerate from zero to maximum speed
  for (int i = 0; i < 256; i++)
  {
    analogWrite(enRechts, i);
    analogWrite(enLinks, i);
    delay(20);
  }
  // decelerate from maximum speed to zero
  for (int i = 255; i >= 0; --i)
  {
    analogWrite(enRechts, i);
    analogWrite(enLinks, i);
    delay(20);
  }
  // now turn off motors
  digitalWrite(inR1, LOW);
  digitalWrite(inR2, LOW);
  digitalWrite(inL1, LOW);
  digitalWrite(inL2, LOW);
  }
*/

 

Erstellt: Valerian Schneider (16.05.2017) Letzte Änderung: Jacob Busshart (28.06.2017)