Hilfe bei der Kollisionsvermeidung Code, Let s Roboter Stellen, RobotShop
Ich hoffe jemand kann mir helfen, mit Code. Die Motoren auf dem Roboter niemals drehen, nicht den Abstand egal bei welcher ein Hindernis angetroffen wird. Der Ultraschallsensor, Servo und Motoren wurden überprüft und unsere funktional. Ich habe lief auch einige andere similuar Skizzen mit den gleichen Ergebnissen. Der Akku ist voll aufgeladen. Jede Hilfe ist willkommen.
// Da wir Servos und Ultraschallsensoren in den Roboter verwenden, werden wir einige Bibliotheken geschrieben sind, ihre Verwendung zu erleichtern
#einschließen
#einschließen
// Im Folgenden sind die symbolischen Konstanten. Statt in einer nicht-sensical Pin-Nummer jedes Mal, wenn wir tun können eine leicht verständliche Namen wir wollen etwas eingeben zu müssen schreiben, die den Stift darstellen, wird der Compiler ersetzt dann die Namen mit den Zahlen
#define LeftMotorForward 8
#define LeftMotorBackward 9
#define LeftMotorSpeed 5
#define RightMotorForward 6
#define RightMotorBackward 7
#define RightMotorSpeed 10
#define USTrigger 3
#define USEcho 2
#define MaxDistance 100
#define LED 13
// Hier haben wir zwei ‚Objekte‘ erstellt, eine für die Servo und eine für den Ultraschallsensor
Servo Servo;
NewPing sonar (USTrigger, USEcho, MaxDistance);
// Im Folgenden unsigned Integer-Variablen erstellen, die wir später im Code verwenden. Sie sind ohne Vorzeichen, da sie nur postive Werte haben
unsigned int Dauer;
unsigned int Abstand;
unsigned int FrontDistance;
unsigned int LeftDistance;
unsigned int RightDistance;
unsigned int Zeit;
unsigned int CollisionCounter;
// Hier setzen wir den Pin-Modi. Wie wir Signale von den Stiften aussendet werden wir setzen sie als Ausgänge
pinMode (LeftMotorForward, OUTPUT);
pinMode (LeftMotorBackward, OUTPUT);
pinMode (LeftMotorSpeed, OUTPUT);
pinMode (RightMotorForward, OUTPUT);
pinMode (RightMotorBackward, OUTPUT);
pinMode (RightMotorSpeed, OUTPUT);
pinMode (LED, OUTPUT);
servo.attach (11); // Der Servo befestigt an Pin 4
>
Leere Schleife () // Dieser Block wiederholt sich während der Arduino eingeschaltet wird
servo.write (90); // Drehen Sie den Servo die Front gegen
Scan(); // an die Scan-Funktion gehen
FrontDistance = Abstand; // Setzen Sie die Variable FrontDistance auf den Wert des Abstandes von der Scanfunktion
Serial.println ( "Front-Abstand =");
Serial.print (Abstand);
if (FrontDistance> 40 || FrontDistance == 0) // Wenn es nichts direkt vor dem Roboter innerhalb 40cm oder der Abstandswert ist 0 (was für die newping libary bedeutet kein Ping zurückgegeben wurde) dann.
moveForward (); // Gehen Sie auf die moveForward Funktion
>
else // Else dann (wenn es etwas direkt vor dem Roboter innerhalb 40cm ist).
CollisionCounter CollisionCounter = + 1;
moveStop (); // zum moveStop Funktion gehen
navigieren();
>
>
Leere moveForward () // Diese Funktion weist den Roboter vorwärts zu gehen
Serial.println ( "");
Serial.println ( "Moving forward");
digital (LeftMotorBackward, LOW);
digital (LeftMotorForward, HIGH);
digital (RightMotorBackward, LOW);
digital (RightMotorForward, HIGH);
>
Leere moveBackward () // Diese Funktion teilt den Roboter rückwärts zu bewegen
Serial.println ( "");
Serial.println ( "Rückwärtsbewegung");
digital (LeftMotorForward, LOW);
digital (LeftMotorBackward, HIGH);
digital (RightMotorForward, LOW);
digital (RightMotorBackward, HIGH);
>
Leere moveleft () // sagt dieser Funktion kann der Roboter nach links abbiegen
Serial.println ( "");
Serial.println ( "Verschieben nach links");
digital (LeftMotorForward, LOW);
digital (LeftMotorBackward, HIGH);
digital (RightMotorBackward, LOW);
digital (RightMotorForward, HIGH);
Leere MoveRight- () // Diese Funktion teilt den Roboter nach rechts abbiegen
Serial.println ( "");
Serial.println ( "Moving rechts");
digital (LeftMotorBackward, LOW);
digital (LeftMotorForward, HIGH);
digital (RightMotorForward, LOW);
digital (RightMotorBackward, HIGH);
>
Leere moveStop () // Diese Funktion teilt den Roboter bewegen zu stoppen
Serial.println ( "");
Serial.println ( "Stoppen");
digital (LeftMotorBackward, LOW);
digital (LeftMotorForward, LOW);
digital (RightMotorForward, LOW);
digital (RightMotorBackward, LOW);
>
Leere Scan () // Diese Funktion bestimmt die Distanz sind die Dinge weg von dem Ultraschallsensor
Serial.println ( "");
Serial.println ( "Scannen");
Time = sonar.ping ();
Entfernung = Zeit / US_ROUNDTRIP_CM;
Verzögerung (500);
>
Leere navigate ()
Serial.println ( "Es gibt ein Hindernis!");
servo.write (167); // Die Servo nach links verschieben (meine kleine Servos nicht zu 180 gehen mochte, so spielte ich mit dem Wert herum, bis es schön gearbeitet)
Verzögerung (1000); // Warten Sie eine halbe Sekunde für die Servo um dorthin zu gelangen
Scan(); // an die Scan-Funktion gehen
LeftDistance = Abstand; // Setzen Sie die Variable LeftDistance auf den Abstand auf der linken Seite
Serial.println ( "Left = Abstand");
Serial.print (Abstand);
servo.write (0); Bewegen Sie den Servo nach rechts //
Verzögerung (1000); // Warten Sie eine halbe Sekunde für die Servo um dorthin zu gelangen
Scan(); // an die Scan-Funktion gehen
RightDistance = Abstand; // Setzen Sie die Variable RightDistance auf den Abstand auf der rechten Seite
Serial.println ( "Right Abstand =");
Serial.print (Abstand);
if (abs (RightDistance - LeftDistance) < 5)
rückwärts bewegen(); // Gehen Sie auf die moveBackward Funktion
Verzögerung (200); // das Programm Pause für 200 Millisekunden den Roboter umgekehrt zu lassen
nach rechts bewegen(); // Gehen Sie auf die MoveRight- Funktion
Verzögerung (100); // das Programm für 200 Millisekunden Pause der Roboter nach rechts abbiegen lassen
>
else if (RightDistance < LeftDistance) //If the distance on the right is less than that on the left then.
geh nach links(); // auf die Funktion gehen moveleft
Verzögerung (100); // Pause des Programms für eine halbe Sekunde der Roboter wiederum zu lassen
>
else if (LeftDistance < RightDistance) //Else if the distance on the left is less than that on the right then.
nach rechts bewegen(); // Gehen Sie auf die MoveRight- Funktion
Verzögerung (100); // Pause des Programms für eine halbe Sekunde der Roboter wiederum zu lassen
>
>