Nachdem nun alle Teile für unseren Saugroboter gekauft und gedruckt sind können wir endlich los legen mit der Konstruktion.

Bodenplatte zuschneiden und Motoren einbauen

Als erstes muss die Bodenplatte zugeschnitten werden. Der Saugroboter soll später eine Größe von 30x30cm haben. Wir zeichnen mit dem Zirkel einen Kreis mit dem Radius 15cm auf eine Holzplatte und sägen ihn danach mit der Stichsäge aus. Anschließend werden die Aussparungen für die Räder gesägt.

Danach wird die Motorenhalterung auf das Brett geschraubt und die Motoren befestigt. Als nächstes müssen an jeden Motor zwei Kabel angelötet werden. Danach werden die Kabelenden gecrimpt und an das Motorshield angeschlossen.

Nachdem auch die Ultraschallsensoren vorne an der Platte befestigt sind, können wir auch schon anfangen alles am Arduino anzuschließen.

Pinbelegung

Motoren:

linker Motor = 10
linker Motor = 11
rechter Motor = 7
rechter Motor = 6
linker Motor Geschwindigkeit = 9
rechter Motor Geschwindigkeit = 5

Sensoren:

Ultraschall Sensoren
Trigger Sensor vorne = 22
Echo Sensor vorne = 23
Trigger Sensor links = 28
Echo Sensor links = 29
Trigger Sensor rechts = 30
Echo Sensor rechts = 31
Trigger Sensor vorne links = 24
Echo Sensor vorne links = 25
Trigger Sensor vorne rechts = 26
Echo Sensor vorne rechts = 27

Nachdem alles verkabelt ist, kann auch schon der Programmcode hochgeladen und das erste Testfahren gemacht werden.

/////////////////////////////////////////////////////
// //
// www.TekkieBros.de //
// //
/////////////////////////////////////////////////////

#include <Arduino.h>

//Motoren
int lMotor = 10; //Links Vorwärts
int lMotorB = 11; //Links Rückwärts
int rMotor = 7; //Rechts Vorwärts
int rMotorB = 6; //Rechts Rückwärts
int lGeschwindigkeit = 9; //Pin für Geschwindigkeit links
int rGeschwindigkeit = 5; //Pin für Geschwindigkeit rechts
int geschwindigkeit = 255; //Geschwindigkeit 255 Vollgas
//Ultraschall Sensoren
int triggerV = 22;
int echoV = 23;
long dauerV = 0;
long entfernungV = 0;
int triggerL = 28;
int echoL = 29;
long dauerL = 0;
long entfernungL = 0;
int triggerR = 30;
int echoR = 31;
long dauerR = 0;
long entfernungR = 0;
int triggerVL = 24;
int echoVL = 25;
long dauerVL = 0;
long entfernungVL = 0;
int triggerVR = 26;
int echoVR = 27;
long dauerVR = 0;
long entfernungVR = 0;

//Variablen
int collisionDistance = 8;
int pauseStop = 50;
int randRichtung;
int randDrehTime;
int randBackTime;

void setup(){
pinMode(lMotor, OUTPUT);
pinMode(lMotorB, OUTPUT);
pinMode(rMotor, OUTPUT);
pinMode(rMotorB, OUTPUT);
pinMode(lGeschwindigkeit, OUTPUT);
pinMode(rGeschwindigkeit, OUTPUT);

pinMode(triggerV, OUTPUT);
pinMode(echoV, INPUT);
pinMode(triggerVL, OUTPUT);
pinMode(echoVL, INPUT);
pinMode(triggerVR, OUTPUT);
pinMode(echoVR, INPUT);
pinMode(triggerL, OUTPUT);
pinMode(echoL, INPUT);
pinMode(triggerR, OUTPUT);
pinMode(echoR, INPUT);

digitalWrite(rMotor, HIGH);
digitalWrite(rGeschwindigkeit, geschwindigkeit);
digitalWrite(rMotorB, LOW);
digitalWrite(lMotor, HIGH);
digitalWrite(lGeschwindigkeit, geschwindigkeit);
digitalWrite(lMotorB, LOW);
}

void stop(){
digitalWrite(rMotorB, LOW);
digitalWrite(lMotorB, LOW);
digitalWrite(rMotor, LOW);
digitalWrite(lMotor, LOW);
delay(pauseStop);
}
void rechtsdrehen(int drehTime){
stop();
digitalWrite(rMotor, LOW);
digitalWrite(rMotorB, HIGH);
digitalWrite(lMotor, HIGH);
digitalWrite(lMotorB, LOW);
delay(drehTime);
}
void linksdrehen(int drehTime){
stop();
digitalWrite(rMotor, HIGH);
digitalWrite(rMotorB, LOW);
digitalWrite(lMotor, LOW);
digitalWrite(lMotorB, HIGH);
delay(drehTime);
}
void vorwaerts(){
digitalWrite(rMotor, HIGH);
digitalWrite(rGeschwindigkeit, geschwindigkeit);
digitalWrite(rMotorB, LOW);
digitalWrite(lMotor, HIGH);
digitalWrite(lGeschwindigkeit, geschwindigkeit);
digitalWrite(lMotorB, LOW);
}
void rueckwaerts(int dauer){
stop();
digitalWrite(rMotor, LOW);
digitalWrite(rMotorB, HIGH);
digitalWrite(rGeschwindigkeit, geschwindigkeit);
digitalWrite(lMotor, LOW);
digitalWrite(lMotorB, HIGH);
digitalWrite(rGeschwindigkeit, geschwindigkeit);
delay(dauer);
}
void messung(){
//Messung Vorne
digitalWrite(triggerV, LOW);
delay(5);
digitalWrite(triggerV, HIGH);
delay(10);
digitalWrite(triggerV, LOW);
dauerV = pulseIn(echoV, HIGH);
entfernungV = (dauerV/2) * 0.03432;
//Messung Vorne Links
digitalWrite(triggerVL, LOW);
delay(5);
digitalWrite(triggerVL, HIGH);
delay(10);
digitalWrite(triggerVL, LOW);
dauerVL = pulseIn(echoVL, HIGH);
entfernungVL = (dauerVL/2) * 0.03432;
//Messung Vorne Rechts
digitalWrite(triggerVR, LOW);
delay(5);
digitalWrite(triggerVR, HIGH);
delay(10);
digitalWrite(triggerVR, LOW);
dauerVR = pulseIn(echoVR, HIGH);
entfernungVR = (dauerVR/2) * 0.03432;
//Messung Links
digitalWrite(triggerL, LOW);
delay(5);
digitalWrite(triggerL, HIGH);
delay(10);
digitalWrite(triggerL, LOW);
dauerL = pulseIn(echoL, HIGH);
entfernungL = (dauerL/2) * 0.03432;
//Messung RECHTS
digitalWrite(triggerR, LOW);
delay(5);
digitalWrite(triggerR, HIGH);
delay(10);
digitalWrite(triggerR, LOW);
dauerR = pulseIn(echoR, HIGH);
entfernungR = (dauerR/2) * 0.03432;
}

void loop(){
messung();
//Berechnung Zufallsdrehzeit
randDrehTime = (random(1, 5)*1000) / 2;
randBackTime = random(1,4)*1000;
if(entfernungV < collisionDistance){
randRichtung = random(0, 10);
rueckwaerts(randBackTime);
if(randRichtung<5){
rechtsdrehen(randDrehTime);
}
else{
linksdrehen(randDrehTime);
}
}
else if(entfernungR < collisionDistance || entfernungVR < collisionDistance){
rueckwaerts(randBackTime);
linksdrehen(randDrehTime);
}
else if(entfernungL < collisionDistance || entfernungVL < collisionDistance){
rueckwaerts(randBackTime);
rechtsdrehen(randDrehTime);
}
else{
vorwaerts();
}
}

0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert