Πίνακας περιεχομένων:

Εμπόδιο αποφυγής ρομποτικού αυτοκινήτου: 9 βήματα
Εμπόδιο αποφυγής ρομποτικού αυτοκινήτου: 9 βήματα

Βίντεο: Εμπόδιο αποφυγής ρομποτικού αυτοκινήτου: 9 βήματα

Βίντεο: Εμπόδιο αποφυγής ρομποτικού αυτοκινήτου: 9 βήματα
Βίντεο: Дэнис Хонг: О создании автомобиля для слепых 2024, Νοέμβριος
Anonim
Εμπόδιο αποφυγή ρομποτικού αυτοκινήτου
Εμπόδιο αποφυγή ρομποτικού αυτοκινήτου
Εμπόδιο αποφυγή ρομποτικού αυτοκινήτου
Εμπόδιο αποφυγή ρομποτικού αυτοκινήτου

Πώς να φτιάξετε ένα εμπόδιο αποφεύγοντας το ρομπότ

Βήμα 1: Μαύρο κουτί

Μαύρο κουτί
Μαύρο κουτί

το πρώτο βήμα χρησιμοποίησα ένα μαύρο κουτί ως βάση για το ρομπότ μου.

Βήμα 2: Arduino

Arduino
Arduino

Το Arduino είναι ο εγκέφαλος όλου του συστήματος και ενορχηστρώστε τους κινητήρες μας

Βήμα 3: Προσάρτηση του Arduino στο Blackbox

Σύνδεση του Arduino στο Blackbox
Σύνδεση του Arduino στο Blackbox

Έβαλα το arduino στο blackbox χρησιμοποιώντας ζεστή κόλλα

Βήμα 4: Αισθητήρας υπερήχων

Αισθητήρας υπερήχων
Αισθητήρας υπερήχων

Για να φτιάξουμε ένα ρομπότ που μπορεί να κινείται μόνο του χρειαζόμαστε ένα είδος εισόδου, έναν αισθητήρα που ταιριάζει στον στόχο μας. Ο υπερηχητικός αισθητήρας είναι ένα όργανο που μετρά την απόσταση από ένα αντικείμενο χρησιμοποιώντας υπερηχητικά ηχητικά κύματα. Ένας αισθητήρας υπερήχων χρησιμοποιεί έναν μορφοτροπέα για την αποστολή και λήψη παλμών υπερήχων που μεταδίδουν πληροφορίες σχετικά με την εγγύτητα ενός αντικειμένου

Βήμα 5: Σύνδεση Breadboard του αισθητήρα στο Arduino

Σύνδεση Breadboard του αισθητήρα στο Arduino
Σύνδεση Breadboard του αισθητήρα στο Arduino
Σύνδεση Breadboard του αισθητήρα στο Arduino
Σύνδεση Breadboard του αισθητήρα στο Arduino

Χρησιμοποίησα καλώδια για να αρσενικήσω τη σύνδεση μεταξύ του breadboard και του arduino.

Δώστε προσοχή ότι ο αισθητήρας ping μπορεί να έχει διαφορετική διάταξη καρφιτσών, αλλά θα πρέπει να έχει έναν πείρο τάσης, έναν πείρο γείωσης, έναν πείρο τριγώνου και έναν πείρο ηχώ.

Βήμα 6: Ασπίδα κινητήρα

Motor Shield
Motor Shield

Οι πίνακες Arduino δεν μπορούν να ελέγξουν τους κινητήρες συνεχούς ρεύματος μόνοι τους, επειδή τα ρεύματα που παράγουν είναι πολύ χαμηλά. Για την επίλυση αυτού του προβλήματος χρησιμοποιούμε ασπίδες κινητήρα. Η ασπίδα κινητήρα έχει 2 κανάλια, τα οποία επιτρέπουν τον έλεγχο δύο κινητήρων DC, ή 1 βηματικό μοτέρ. … Με την αντιμετώπιση αυτών των ακίδων, μπορείτε να επιλέξετε ένα κανάλι κινητήρα για εκκίνηση, να καθορίσετε την κατεύθυνση του κινητήρα (πολικότητα), να ρυθμίσετε την ταχύτητα του κινητήρα (PWM), να σταματήσετε και να θέσετε σε λειτουργία τον κινητήρα και να παρακολουθήσετε την τρέχουσα απορρόφηση κάθε καναλιού

Βήμα 7: Σύνδεση του Motor Shield στο Arduino

Σύνδεση Motor Shield με Arduino
Σύνδεση Motor Shield με Arduino

Απλώς συνδέστε την ασπίδα του κινητήρα στο arduino με τα καλώδια του αισθητήρα σφιγμένα

Βήμα 8: Σύνδεση των 4 κινητήρων και των μπαταριών στο Shield

Σύνδεση των 4 κινητήρων και των μπαταριών στο Shield
Σύνδεση των 4 κινητήρων και των μπαταριών στο Shield

Κάθε Motor Shield έχει (τουλάχιστον) δύο κανάλια, ένα για τους κινητήρες και ένα για μια πηγή ενέργειας, συνδέστε τα μεταξύ τους

Βήμα 9: Προγραμματίστε το ρομπότ

εκτελέστε αυτόν τον κωδικό

#συμπεριλάβω #συμπεριλάβω

Σόναρ NewPing (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotor motor1 (1, MOTOR12_1KHZ); AF_DCMotor motor2 (2, MOTOR12_1KHZ); AF_DCMotor motor3 (3, MOTOR34_1KHZ); AF_DCMotor motor4 (4, MOTOR34_1KHZ); Servo myservo;

#define TRIG_PIN A2 #define ECHO_PIN A3 #define MAX_DISTANCE 150 #define MAX_SPEED 100 #define MAX_SPEED_OFFSET 10

boolean goForward = false? int απόσταση = 80; int speedSet = 0;

void setup () {

myservo.attach (10); myservo.write (115); καθυστέρηση (2000). απόσταση = readPing (); καθυστέρηση (100)? απόσταση = readPing (); καθυστέρηση (100)? απόσταση = readPing (); καθυστέρηση (100)? απόσταση = readPing (); καθυστέρηση (100)? }

void loop () {int distanceR = 0; int απόστασηL = 0; καθυστέρηση (40)? if (απόσταση <= 15) {moveStop (); καθυστέρηση (50)? moveBackward (); καθυστέρηση (150)? moveStop (); καθυστέρηση (100)? απόστασηR = lookRight (); καθυστέρηση (100)? απόστασηL = lookLeft (); καθυστέρηση (100)?

if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } απόσταση = readPing (); }

int lookRight () {myservo.write (50); καθυστέρηση (250)? int distance = readPing (); καθυστέρηση (50)? myservo.write (100); απόσταση επιστροφής? }

int lookLeft () {myservo.write (120); καθυστέρηση (300)? int distance = readPing (); καθυστέρηση (100)? myservo.write (115); απόσταση επιστροφής? καθυστέρηση (100)? }

int readPing () {καθυστέρηση (70); int cm = sonar.ping_cm (); αν (cm == 0) {cm = 200? } επιστροφή cm. }

void moveStop () {motor1.run (RELEASE); motor2.run (ΑΠΕΛΕΥΘΕΡΩΣΗ)? motor3.run (ΑΠΕΛΕΥΘΕΡΩΣΗ); motor4.run (ΑΠΕΛΕΥΘΕΡΩΣΗ); } void moveForward () {

αν (! goForward) {goForward = true? motor1.run (ΕΜΠΡΟΣ); motor2.run (ΕΜΠΡΟΣ); motor3.run (ΜΠΡΟΣΤΑ); motor4.run (ΜΠΡΟΣΤΑ); για (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); καθυστέρηση (5)? }}}

void moveBackward () {goForward = false; motor1.run (BACKWARD); motor2.run (ΠΙΣΩ) motor3.run (BACKWARD); motor4.run (BACKWARD); για (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); καθυστέρηση (5)? } void turnLeft () {motor1.run (BACKWARD); motor2.run (ΠΙΣΩ) motor3.run (ΜΠΡΟΣΤΑ); motor4.run (ΜΠΡΟΣΤΑ); καθυστέρηση (500)? motor1.run (ΕΜΠΡΟΣ); motor2.run (ΕΜΠΡΟΣ); motor3.run (ΜΠΡΟΣΤΑ); motor4.run (ΜΠΡΟΣΤΑ); }

void turnLeft () {motor1.run (BACKWARD); motor2.run (ΠΙΣΩ) motor3.run (ΜΠΡΟΣΤΑ); motor4.run (ΜΠΡΟΣΤΑ); καθυστέρηση (500)? motor1.run (ΕΜΠΡΟΣ); motor2.run (ΕΜΠΡΟΣ); motor3.run (ΜΠΡΟΣΤΑ); motor4.run (ΜΠΡΟΣΤΑ); }

Συνιστάται: