Πίνακας περιεχομένων:
- Βήμα 1: Μαύρο κουτί
- Βήμα 2: Arduino
- Βήμα 3: Προσάρτηση του Arduino στο Blackbox
- Βήμα 4: Αισθητήρας υπερήχων
- Βήμα 5: Σύνδεση Breadboard του αισθητήρα στο Arduino
- Βήμα 6: Ασπίδα κινητήρα
- Βήμα 7: Σύνδεση του Motor Shield στο Arduino
- Βήμα 8: Σύνδεση των 4 κινητήρων και των μπαταριών στο Shield
- Βήμα 9: Προγραμματίστε το ρομπότ
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Πώς να φτιάξετε ένα εμπόδιο αποφεύγοντας το ρομπότ
Βήμα 1: Μαύρο κουτί
το πρώτο βήμα χρησιμοποίησα ένα μαύρο κουτί ως βάση για το ρομπότ μου.
Βήμα 2: Arduino
Το Arduino είναι ο εγκέφαλος όλου του συστήματος και ενορχηστρώστε τους κινητήρες μας
Βήμα 3: Προσάρτηση του Arduino στο Blackbox
Έβαλα το arduino στο blackbox χρησιμοποιώντας ζεστή κόλλα
Βήμα 4: Αισθητήρας υπερήχων
Για να φτιάξουμε ένα ρομπότ που μπορεί να κινείται μόνο του χρειαζόμαστε ένα είδος εισόδου, έναν αισθητήρα που ταιριάζει στον στόχο μας. Ο υπερηχητικός αισθητήρας είναι ένα όργανο που μετρά την απόσταση από ένα αντικείμενο χρησιμοποιώντας υπερηχητικά ηχητικά κύματα. Ένας αισθητήρας υπερήχων χρησιμοποιεί έναν μορφοτροπέα για την αποστολή και λήψη παλμών υπερήχων που μεταδίδουν πληροφορίες σχετικά με την εγγύτητα ενός αντικειμένου
Βήμα 5: Σύνδεση Breadboard του αισθητήρα στο Arduino
Χρησιμοποίησα καλώδια για να αρσενικήσω τη σύνδεση μεταξύ του breadboard και του arduino.
Δώστε προσοχή ότι ο αισθητήρας ping μπορεί να έχει διαφορετική διάταξη καρφιτσών, αλλά θα πρέπει να έχει έναν πείρο τάσης, έναν πείρο γείωσης, έναν πείρο τριγώνου και έναν πείρο ηχώ.
Βήμα 6: Ασπίδα κινητήρα
Οι πίνακες Arduino δεν μπορούν να ελέγξουν τους κινητήρες συνεχούς ρεύματος μόνοι τους, επειδή τα ρεύματα που παράγουν είναι πολύ χαμηλά. Για την επίλυση αυτού του προβλήματος χρησιμοποιούμε ασπίδες κινητήρα. Η ασπίδα κινητήρα έχει 2 κανάλια, τα οποία επιτρέπουν τον έλεγχο δύο κινητήρων DC, ή 1 βηματικό μοτέρ. … Με την αντιμετώπιση αυτών των ακίδων, μπορείτε να επιλέξετε ένα κανάλι κινητήρα για εκκίνηση, να καθορίσετε την κατεύθυνση του κινητήρα (πολικότητα), να ρυθμίσετε την ταχύτητα του κινητήρα (PWM), να σταματήσετε και να θέσετε σε λειτουργία τον κινητήρα και να παρακολουθήσετε την τρέχουσα απορρόφηση κάθε καναλιού
Βήμα 7: Σύνδεση του Motor Shield στο Arduino
Απλώς συνδέστε την ασπίδα του κινητήρα στο arduino με τα καλώδια του αισθητήρα σφιγμένα
Βήμα 8: Σύνδεση των 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 (ΜΠΡΟΣΤΑ); }