- Πώς να φτιάξετε ρομπότ αποφυγής εμποδίων χρησιμοποιώντας αισθητήρα υπερήχων
- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Εμπόδιο αποφυγής ρομπότ με χρήση του Arduino - Code
Το ρομπότ αποφυγής εμποδίων είναι μια έξυπνη συσκευή που μπορεί να ανιχνεύσει αυτόματα το εμπόδιο μπροστά του και να τα αποφύγει γυρίζοντας σε άλλη κατεύθυνση. Αυτός ο σχεδιασμός επιτρέπει στο ρομπότ να πλοηγείται σε άγνωστο περιβάλλον αποφεύγοντας συγκρούσεις, κάτι που αποτελεί πρωταρχική απαίτηση για οποιοδήποτε αυτόνομο κινητό ρομπότ. Η εφαρμογή του ρομπότ αποφυγής εμποδίων δεν είναι περιορισμένη και χρησιμοποιείται πλέον στις περισσότερες στρατιωτικές οργανώσεις που βοηθούν στην εκτέλεση πολλών επικίνδυνων εργασιών που δεν μπορούν να γίνουν από στρατιώτες.
Προηγουμένως δημιουργήσαμε το ρομπότ αποφυγής εμποδίων χρησιμοποιώντας το Raspberry Pi και χρησιμοποιώντας τον μικροελεγκτή PIC. Αυτή τη φορά θα κατασκευάσουμε ένα ρομπότ αποφυγής εμποδίων χρησιμοποιώντας έναν αισθητήρα υπερήχων και το Arduino. Εδώ χρησιμοποιείται ένας αισθητήρας υπερήχων για την ανίχνευση των εμποδίων στη διαδρομή υπολογίζοντας την απόσταση μεταξύ του ρομπότ και του εμποδίου. Εάν το ρομπότ βρει οποιοδήποτε εμπόδιο αλλάζει την κατεύθυνση και συνεχίζει να κινείται.
Πώς να φτιάξετε ρομπότ αποφυγής εμποδίων χρησιμοποιώντας αισθητήρα υπερήχων
Πριν πάτε για να δημιουργήσετε το ρομπότ, είναι σημαντικό να κατανοήσετε πώς λειτουργεί ο αισθητήρας υπερήχων επειδή αυτός ο αισθητήρας θα έχει σημαντικό ρόλο στην ανίχνευση εμποδίων. Η βασική αρχή πίσω από τη λειτουργία του αισθητήρα υπερήχων είναι να σημειωθεί ο χρόνος που χρειάζεται ο αισθητήρας για τη μετάδοση ακτίνων υπερήχων και τη λήψη των ακτίνων υπερήχων μετά το χτύπημα της επιφάνειας. Στη συνέχεια, η απόσταση υπολογίζεται χρησιμοποιώντας τον τύπο. Σε αυτό το έργο, χρησιμοποιείται ο ευρέως διαθέσιμος αισθητήρας υπερήχων HC-SR04. Για να χρησιμοποιήσετε αυτόν τον αισθητήρα, θα ακολουθηθεί παρόμοια προσέγγιση που εξηγείται παραπάνω.
Έτσι, ο πείρος Trig του HC-SR04 είναι ψηλός για τουλάχιστον 10 εμάς. Μια ηχητική δέσμη μεταδίδεται με 8 παλμούς των 40KHz το καθένα.
Το σήμα στη συνέχεια χτυπά την επιφάνεια και επιστρέφει πίσω και συλλαμβάνεται από τον ακροδέκτη Echo δέκτη του HC-SR04. Η καρφίτσα Echo είχε ήδη γίνει ψηλά τη στιγμή της αποστολής.
Ο χρόνος που χρειάζεται η δέσμη για την επιστροφή αποθηκεύεται σε μεταβλητή και μετατρέπεται σε απόσταση χρησιμοποιώντας κατάλληλους υπολογισμούς όπως παρακάτω
Απόσταση = (Χρόνος x Ταχύτητα ήχου στον αέρα (343 m / s)) / 2
Χρησιμοποιήσαμε αισθητήρα υπερήχων σε πολλά έργα, για να μάθουμε περισσότερα σχετικά με τον αισθητήρα υπερήχων, να ελέγξουμε άλλα έργα που σχετίζονται με τον αισθητήρα υπερήχων.
Τα εξαρτήματα για αυτό το ρομπότ αποφυγής εμποδίων μπορούν να βρεθούν εύκολα. Προκειμένου να κατασκευαστεί το πλαίσιο, οποιοδήποτε πλαίσιο παιχνιδιού μπορεί να χρησιμοποιηθεί ή μπορεί να γίνει επί παραγγελία.
Απαιτούμενα στοιχεία
- Arduino NANO ή Uno (οποιαδήποτε έκδοση)
- Αισθητήρας υπερήχων HC-SR04
- Μονάδα οδηγού κινητήρα LM298N
- 5V DC Motors
- Μπαταρία
- Τροχοί
- Σασί
- Καλώδια αλτών
Διάγραμμα κυκλώματος
Το πλήρες διάγραμμα κυκλώματος για αυτό το έργο δίνεται παρακάτω, όπως μπορείτε να δείτε ότι χρησιμοποιεί ένα Arduino nano. Αλλά μπορούμε επίσης να χτίσουμε ένα εμπόδιο που αποφεύγει το ρομπότ χρησιμοποιώντας το Arduino UNO με το ίδιο κύκλωμα (ακολουθήστε το ίδιο pinout) και τον κωδικό.
Μόλις το κύκλωμα είναι έτοιμο, πρέπει να χτίσουμε το εμπόδιο μας αποφεύγοντας το αυτοκίνητο συναρμολογώντας το κύκλωμα πάνω από ένα ρομποτικό πλαίσιο όπως φαίνεται παρακάτω.
Εμπόδιο αποφυγής ρομπότ με χρήση του Arduino - Code
Το πλήρες πρόγραμμα με ένα βίντεο επίδειξης δίνεται στο τέλος αυτού του έργου. Το πρόγραμμα θα περιλαμβάνει τη ρύθμιση της μονάδας HC-SR04 και την έξοδο των σημάτων στους ακροδέκτες κινητήρα για την αντίστοιχη κίνηση της κατεύθυνσης του κινητήρα. Δεν θα χρησιμοποιηθούν βιβλιοθήκες σε αυτό το έργο.
Πρώτα ορίστε το trig και το echo pin του HC-SR04 στο πρόγραμμα. Σε αυτό το έργο ο πείρος trig συνδέεται με το GPIO9 και ο πείρος echo συνδέεται με το GPIO10 του Arduino NANO.
int trigPin = 9; // trig pin του HC-SR04 int echoPin = 10; // Καρφίτσα ηχούς του HC-SR04
Ορίστε ακίδες για είσοδο της μονάδας οδηγού κινητήρα LM298N. Το LM298N διαθέτει 4 ακίδες εισόδου δεδομένων που χρησιμοποιούνται για τον έλεγχο της κατεύθυνσης του κινητήρα που είναι συνδεδεμένος σε αυτό.
int revleft4 = 4; // Αντίστροφη κίνηση του αριστερού κινητήρα int fwdleft5 = 5; // ForWarD κίνηση του αριστερού κινητήρα int revright6 = 6; // Αντίστροφη κίνηση του δεξιού κινητήρα int fwdright7 = 7; // Κίνηση ForWarD του δεξιού κινητήρα
Στη λειτουργία setup () , καθορίστε την κατεύθυνση δεδομένων των χρησιμοποιημένων ακίδων GPIO. Οι τέσσερις ακίδες κινητήρα και ο πείρος Trig έχουν οριστεί ως OUTPUT και ο ακροδέκτης Echo ορίζεται ως είσοδος.
pinMode (revleft4, OUTPUT); // ορίστε τις ακίδες κινητήρα ως έξοδο pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // ορίστε trig pin ως έξοδο pinMode (echoPin, INPUT); // ορίστε την καρφίτσα ηχούς ως είσοδο για τη σύλληψη ανακλώμενων κυμάτων
Στη λειτουργία βρόχου () , λάβετε την απόσταση από το HC-SR04 και με βάση την απόσταση μετακινήστε την κατεύθυνση του κινητήρα. Η απόσταση θα δείξει την απόσταση του αντικειμένου που έρχεται μπροστά από το ρομπότ. Η απόσταση λαμβάνεται με ριπή ακτίνων υπερήχων έως και 10 εμάς και τη λήψη μετά από 10us. Για να μάθετε περισσότερα σχετικά με τη μέτρηση της απόστασης χρησιμοποιώντας τον αισθητήρα υπερήχων και το Arduino, ακολουθήστε τον σύνδεσμο.
digitalWrite (trigPin, LOW); καθυστέρηση Μικροδευτερόλεπτα (2); digitalWrite (trigPin, HIGH); // στείλτε κύματα για καθυστέρηση 10 us Μικροδευτερόλεπτα (10); διάρκεια = pulseIn (echoPin, HIGH); // λήψη απόστασης ανακλώμενων κυμάτων = διάρκεια / 58.2. // μετατροπή σε καθυστέρηση απόστασης (10) ·
Εάν η απόσταση είναι μεγαλύτερη από την καθορισμένη απόσταση σημαίνει ότι δεν υπάρχει εμπόδιο στη διαδρομή της και θα κινείται προς τα εμπρός.
εάν (απόσταση> 19) { digitalWrite (fwdright7, HIGH); // προχωρήστε digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Εάν η απόσταση είναι μικρότερη από την καθορισμένη απόσταση για την αποφυγή εμποδίων σημαίνει ότι υπάρχει κάποιο εμπόδιο μπροστά. Έτσι σε αυτήν την περίπτωση το ρομπότ θα σταματήσει για λίγο και θα μετακινηθεί προς τα πίσω μετά από αυτό θα σταματήσει ξανά για λίγο και στη συνέχεια θα στρίψει σε άλλη κατεύθυνση.
εάν (απόσταση <18) { digitalWrite (fwdright7, LOW); // Διακοπή digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); καθυστέρηση (500) digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); καθυστέρηση (500) digitalWrite (fwdright7, LOW); // Διακοπή digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); καθυστέρηση (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); καθυστέρηση (500) }
Έτσι, έτσι ένα ρομπότ μπορεί να αποφύγει εμπόδια στο δρόμο του χωρίς να κολλήσει πουθενά. Βρείτε τον πλήρη κώδικα και το βίντεο παρακάτω.