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
// 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
}
}
{
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);
}
{
//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);
}
{
// 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);
}
*/
{
// 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)