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