Sketch [Betaversion]
Dieser Sketch wurde zum größten Teil noch nicht getestet und ist nur aus Überlegungen heraus entstanden! Die funktionierende Endversion wird, sobald ein Test möglich war, veröffentlicht
Hier steht der unten gezeigte Sketch zur Nutzung mit der Arduino IDE Software zur Verfügung:
4WD_Roboter_2020_Florian_Porth
/* * Dieser Sketch, steuert die 4 Motoren sowie den Ultraschallsensor (Abstandsmessung), * welcher auf einem Servomotor montiert ist, sodass er den Abstamd in versch. * Richtungen messen kann. * * Motor: * - Pin4: rechts Rückwärts * - Pin5: rechts Vorwärts * - Pin6: links Rückwärts * - Pin7: links. Vorwärts * Ultraschallsensor: * - Pin10: triggerPin * - Pin9: echoPin * Servomotor: * - Pin3: Signal Servo * */ #include //Einbinden der Library zur Steuerung des Servomotors int trigPin = 10; int echoPin = 9; //Defninition der Pins, die für den Ultraschallsensor benötigt werden int rf = 5 //right forward; Pin 5; durch ein Signal an Pin 5, //drehen sich die beiden rechten Räder vorwärts int rb = 4 //right backward; Pin 4; " Pin 4 " rückwärts int lf = 7 //left forward; Pin 7; " Pin 7 drehen sich die beiden linken Räder vorwärts int lb = 6 //left backward; Pin 6; " Pin 6 " rückwärts int svs = 3 //Servomotor - Signal; Pin 3 int servonormal = 90 //Normalstellung des Servomotors - überprüfen!!!! int servolinks = 0 //Servo ist nach links gedreht - überprüfen!!!! int servorechts = 180 //Servo ist nach rechts gedreht - überprüfen!!!! int drehzeit = 100 //Zeit in Millisec, die der Roboter für die Drehung benötigt - überprüfen!!!! void setup() { // put your setup code here, to run once: Serial.begin (9600); pinMode(1, OUTPUT); //Definiere die u.g. Pins als OUTPUT pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, INPUT); //Definiere Pin 9 als INPUT (echoPin Ultraschall) pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); servo.write(servonormal); //Am Anfang wird der Servomotor in die Neutralstellung gebracht delay(500); } void loop() { // put your main code here, to run repeatedly: digitalWrite(lf,1); digitalWrite(rf,1); //Der Roboter fährt mit allen 4 Rädern vorwärts //Ultraschallsensor: long dauer, distance digitalWrite(trigPin,0); delayMicroseconds(2); digitalWrite(trigPin,1); delayMicroseconds(10); digitalWrite(trigPin,0); //Der Ultraschallsensor soll während der Fahrt kontrollieren, ob der Weg frei ist dauer = pulseIn(echoPin,1); distance = (dauer/2) / 25; //Berechnung der Distanz Serial.println(distance); //Die errechnete Distanz wird auf dem seriellen Monitor protokolliert if(distance <= 5) { digitalWrite(rf,0); digitalWrite(lf,0); //Der Roboter stoppt //Der Servomotor dreht den Ultraschallsensor und misst die jeweilige Entfernung zum nächsten Objekt servo.write(servolinks); //Der Servo dreht den Ultraschallsensor nach links long dauerlinks, distancelinks digitalWrite(trigPin,0); delayMicroseconds(2); digitalWrite(trigPin,1); delayMicroseconds(10); digitalWrite(trigPin,0); dauerlinks = pulseIn(echoPin,1); distancelinks = (dauer/2) / 25; //Die errechnete Distanz erscheint auf dem seriellen Monitor Serial.println("Entfernung links:"); Serial.println(distancelinks); delay(200); servo.write(servorechts); //Der Servo dreht den Ultraschallsensor nach rechts long dauerrechts, distancerechts digitalWrite(trigPin,0); delayMicroseconds(2); digitalWrite(trigPin,1); delayMicroseconds(10); digitalWrite(trigPin,0); dauerrechts = pulseIn(echoPin,1); distancerechs = (dauer/2) / 25; //Die errechnete Distanz erscheint auf dem seriellen Monitor Serial.println("Entfernung rechts:"); Serial.println(distancerechts); delay(200); servo.write(servonormal); //Vergleich beider Messwerte: if(distancerechts > distancelinks) //Wenn rechts mehr Platz ist als links... { digitalWrite(lf,1); digitalWrite(rb,1; delay(drehzeit); digitalWrite(lf,0); digitalWrite(rb,0); delayMicroseconds(100); digitalWrite(lf,1); digitalWrite(rf,1); //Der Roboter dreht sich nach rechts und fährt weiter } else //Wenn die if-Bedingung nicht erfüllt ist, muss links mehr Platz sein -> Der Roboter soll nach links fahren { digitalWrite(lb,1); digitalWrite(rf,1; //Drehung delay(drehzeit); //Drehzeit muss noch definiert werden digitalWrite(lb,0); digitalWrite(rf,0); //STOP delayMicroseconds(100); digitalWrite(lf,1); digitalWrite(rf,1); //Der Roboter dreht sich nach links und fährt weiter } } else { delay (490); continue /* * Wenn die erste if-Bedingung nicht erfüllt ist - d.h. kein Hindernis zu erkennen ist, * soll nach insg. 500 Millisekunden erneut gemessen werden */ } delay(10); } //Das Programm startet von vorne |
/*Florian Porth_2020_10b_10WU_PÖR*/ |
erstellt: 2019/20
Florian Porth
10b
Erstellt: Florian Porth (13.03.2020)
Letzte Änderung: Florian Porth (04.06.2020)