- Μονάδα αισθητήρα ταχύτητας LM393 (H206)
- H206 Ρύθμιση συναρμολόγησης αισθητήρα
- Διάγραμμα κυκλώματος ρομπότ αισθητήρα ταχύτητας DIY Arduino LM393
- Λογική πίσω από τη μέτρηση ταχύτητας με μονάδα αισθητήρα ταχύτητας LM393
- Λογική πίσω από τη μέτρηση της απόστασης που διανύει ο τροχός
- Λογική πίσω από τη μέτρηση της γωνίας του bot
- Κωδικός ρομπότ Arduino
- Δοκιμή του ρομπότ Arduino για μέτρηση απόστασης, ταχύτητας και γωνίας
Τα ρομπότ άρχισαν αργά να σέρνονται στην κοινωνία μας για να κάνουν τη ζωή μας πιο απλή. Μπορούμε ήδη να βρούμε τα έξι τροχοφόρα ρομπότ παράδοσης φαγητού από το Starship στους δρόμους του Ηνωμένου Βασιλείου, με έξυπνη πλοήγηση μεταξύ των πολιτών για να φτάσουν στον προορισμό του. Κάθε κινητό ρομπότ που πλοηγεί στο περιβάλλον πρέπει πάντα να γνωρίζει τη θέση και τον προσανατολισμό του σε σχέση με τον πραγματικό κόσμο. Υπάρχουν πολλοί τρόποι για να το επιτύχετε αυτό χρησιμοποιώντας διαφορετικές τεχνολογίες όπως GPS, RF Triangulation, Accelerometers, Gyroscopes κ.λπ. Κάθε τεχνική έχει το δικό της πλεονέκτημα και είναι μοναδική από μόνη της. Σε αυτό το σεμινάριο αισθητήρα ταχύτητας Arduino LM393 θα χρησιμοποιήσουμε την απλή και εύκολα διαθέσιμη μονάδα αισθητήρα ταχύτητας LM393για τη μέτρηση ορισμένων ζωτικών παραμέτρων όπως η ταχύτητα, η απόσταση που διανύθηκε και η γωνία του ρομπότ χρησιμοποιώντας το Arduino. Με αυτές τις παραμέτρους το ρομπότ θα μπορεί να γνωρίζει την πραγματική του κατάσταση και μπορεί να το χρησιμοποιήσει για ασφαλή πλοήγηση.
Το Arduino είναι η πιο δημοφιλής επιλογή για τους χόμπι για την κατασκευή ρομπότ, από έναν απλό οπαδού έως ένα πιο σύνθετο ρομπότ αυτοεξισορρόπησης ή καθαρισμού δαπέδων. Μπορείτε να ελέγξετε όλα τα είδη ρομπότ στην ενότητα Ρομποτική.
Θα κατασκευάσουμε ένα μικρό ρομπότ που τροφοδοτείται από μια μπαταρία λιθίου και θα το οδηγήσουμε χρησιμοποιώντας ένα χειριστήριο. Κατά τη διάρκεια του χρόνου εκτέλεσης μπορούμε να μετρήσουμε την ταχύτητα, την απόσταση και τη γωνία του ρομπότ και να το εμφανίσουμε σε πραγματικό χρόνο στην οθόνη LCD που είναι συνδεδεμένη στο Arduino. Αυτό το έργο σάς βοηθά να μετρήσετε αυτές τις παραμέτρους, αφού τελειώσετε με αυτό, μπορείτε να χρησιμοποιήσετε αυτές τις παραμέτρους για να λειτουργήσετε το bot σας αυτόνομα όπως απαιτείται. Ακούγεται ενδιαφέρον, έτσι; Ας ξεκινήσουμε λοιπόν.
Μονάδα αισθητήρα ταχύτητας LM393 (H206)
Πριν μπείτε στο διάγραμμα κυκλώματος και κωδικοποιήστε για το έργο, ας κατανοήσουμε την ενότητα αισθητήρα ταχύτητας LM393 καθώς παίζει ζωτικό ρόλο στο έργο. Η μονάδα αισθητήρα ταχύτητας H206 αποτελείται από έναν αισθητήρα υπερύθρου φωτός ενσωματωμένο με ένα συγκριτικό IC LM393 Voltage εξ ου και το όνομα LM393 Speed sensor. Η μονάδα αποτελείται επίσης από μια πλάκα πλέγματος που πρέπει να στερεωθεί στον περιστρεφόμενο άξονα του κινητήρα. Όλα τα στοιχεία φέρουν την παρακάτω εικόνα.
Ο αισθητήρας υπέρυθρου φωτός αποτελείται από ένα IR LED και ένα φωτο-τρανζίστορ που διαχωρίζονται από ένα μικρό φλοιό. Ολόκληρη η διάταξη του αισθητήρα τοποθετείται σε ένα μαύρο περίβλημα όπως φαίνεται παραπάνω. Η πλάκα πλέγματος αποτελείται από εγκοπές, η πλάκα είναι τοποθετημένη ανάμεσα στο κενό του αισθητήρα υπερύθρου φωτός με τέτοιο τρόπο ώστε ο αισθητήρας να μπορεί να ανιχνεύει τα κενά στην πλάκα πλέγματος. Κάθε κενό στην πλάκα πλέγματος ενεργοποιεί τον αισθητήρα υπερύθρων όταν διέρχεται από το κενό. Αυτά τα σκανδάλη στη συνέχεια μετατρέπονται σε σήματα τάσης χρησιμοποιώντας το συγκριτικό. Το συγκριτικό δεν είναι τίποτα άλλο από ένα LM393 IC από ON ημιαγωγούς. Η μονάδα έχει τρεις ακίδες, δύο από τις οποίες χρησιμοποιούνται για την τροφοδοσία της μονάδας και μία ακίδα εξόδου χρησιμοποιείται για τη μέτρηση του αριθμού των ενεργοποιήσεων.
H206 Ρύθμιση συναρμολόγησης αισθητήρα
Η τοποθέτηση αυτών των τύπων αισθητήρων είναι λίγο δύσκολη. Μπορεί να τοποθετηθεί μόνο σε κινητήρες που προεξέχουν άξονα και στις δύο πλευρές. Η μία πλευρά του άξονα συνδέεται με τον τροχό ενώ η άλλη πλευρά χρησιμοποιείται για την τοποθέτηση της πλάκας πλέγματος όπως φαίνεται παραπάνω.
Δεδομένου ότι ο τροχός και η πλάκα συνδέονται στον ίδιο άξονα και οι δύο περιστρέφονται στην ίδια ταχύτητα και επομένως με τη μέτρηση της ταχύτητας της πλάκας μπορούμε να μετρήσουμε την ταχύτητα του τροχού. Βεβαιωθείτε ότι τα κενά στην πλάκα πλέγματος περνούν μέσω του αισθητήρα υπερύθρων, μόνο τότε ο αισθητήρας θα μπορεί να μετρήσει τον αριθμό των κενών που έχουν περάσει. Μπορείτε επίσης να βρείτε τη δική σας μηχανική διάταξη για να τοποθετήσετε τον αισθητήρα εφόσον πληροί την καθορισμένη κατάσταση. Ο αισθητήρας υπερύθρων χρησιμοποιείται γενικά σε πολλά έργα ρομποτικής για να καθοδηγήσει το ρομπότ σχετικά με τα εμπόδια.
Η πλάκα πλέγματος που φαίνεται παραπάνω έχει 20 υποδοχές (πλέγματα). Αυτό σημαίνει ότι ο αισθητήρας θα βρει 20 κενά για μία πλήρη περιστροφή του τροχού. Μετρώντας τον αριθμό των κενών που έχει ανιχνεύσει ο αισθητήρας μπορούμε να υπολογίσουμε την απόσταση που διανύει ο τροχός, ομοίως με τη μέτρηση του πόσο γρήγορα ο αισθητήρας βρίσκει τα κενά που μπορούμε να ανιχνεύσουμε την ταχύτητα του τροχού. Στο ρομπότ μας θα έχουμε αυτόν τον αισθητήρα τοποθετημένο και στους δύο τροχούς και ως εκ τούτου μπορούμε να βρούμε και τη γωνία του ρομπότ. Ωστόσο, η γωνία περιστροφής μπορεί να υπολογιστεί πιο λογικά χρησιμοποιώντας το Επιταχυνσιόμετρο ή Γυροσκόπιο, μάθετε εδώ να συνδέσετε το Επιταχυνσιόμετρο και το γυροσκόπιο με το Arduino και δοκιμάστε να μετρήσετε τη γωνία περιστροφής χρησιμοποιώντας αυτά.
Διάγραμμα κυκλώματος ρομπότ αισθητήρα ταχύτητας DIY Arduino LM393
Το πλήρες διάγραμμα κυκλώματος αυτού του ρομπότ ανίχνευσης ταχύτητας και απόστασης φαίνεται παρακάτω. Το Bot αποτελείται από τον Arduino Nano ως το μυαλό του, οι δύο κινητήρες DC για τους τροχούς οδηγούνται από τη μονάδα L298N H-Bridge Motor Driver. Το Joystick χρησιμοποιείται για τον έλεγχο της ταχύτητας και της κατεύθυνσης του bot και οι δύο αισθητήρες ταχύτητας H206 χρησιμοποιούνται για τη μέτρηση της ταχύτητας, της απόστασης και του αγγέλου του bot. Στη συνέχεια, οι μετρημένες τιμές εμφανίζονται στη μονάδα LCD 16x2. Το ποτενσιόμετρο που είναι συνδεδεμένο στην οθόνη LCD μπορεί να χρησιμοποιηθεί για τη ρύθμιση της αντίθεσης της οθόνης LCD και η αντίσταση χρησιμοποιείται για τον περιορισμό του ρεύματος που ρέει στον οπίσθιο φωτισμό της οθόνης LCD.
Το πλήρες κύκλωμα τροφοδοτείται από κελί λιθίου 7,4V. Αυτό το 7.4V παρέχεται στον ακροδέκτη 12V της μονάδας οδηγού κινητήρα. Ο ρυθμιστής τάσης στη μονάδα οδηγού κινητήρα μετατρέπει στη συνέχεια το 7,4V σε ρυθμιζόμενο + 5V το οποίο χρησιμοποιείται για την τροφοδοσία των Arduino, LCD, Sensors και Joystick.
Ο κινητήρας ελέγχεται από τις ψηφιακές ακίδες 8,9,10 και 11 του Arduino. Δεδομένου ότι η ταχύτητα του κινητήρα πρέπει επίσης να ελεγχθεί, πρέπει να παρέχουμε σήματα PWM σε θετικό τερματικό του κινητήρα. Ως εκ τούτου έχουμε τους ακροδέκτες 9 και 10 που είναι και οι δύο καρφίτσες με δυνατότητα PWM. Οι τιμές X και Y σχηματίζουν το χειριστήριο χρησιμοποιώντας τις αναλογικές ακίδες A2 και A3 αντίστοιχα.
Όπως γνωρίζουμε ο αισθητήρας H206 δημιουργεί μια σκανδάλη όταν ανιχνεύεται το κενό στην πλάκα πλέγματος. Δεδομένου ότι αυτά τα σκανδάλη δεν πρέπει να διαβάζονται πάντα με ακρίβεια για τον υπολογισμό της σωστής ταχύτητας και απόστασης και οι δύο ακίδες (έξοδος) συνδέονται με τον εξωτερικό πείρο διακοπής 2 και 3 της πλακέτας Arduino. Συναρμολογήστε ολόκληρο το κύκλωμα σε ένα πλαίσιο και τοποθετήστε τον αισθητήρα ταχύτητας όπως εξηγείται, το bot μου έμοιαζε κάπως παρακάτω μετά την ολοκλήρωση των συνδέσεων. Μπορείτε επίσης να παρακολουθήσετε το βίντεο στο τέλος αυτής της σελίδας για να μάθετε πώς τοποθετήθηκε ο αισθητήρας.
Τώρα που το μέρος του υλικού έχει ολοκληρωθεί, ας εισέλθουμε στη λογική του τρόπου με τον οποίο θα μετρήσουμε την ταχύτητα, την απόσταση και το μόνο του bot και μετά θα προχωρήσουμε στην ενότητα προγραμματισμού.
Λογική πίσω από τη μέτρηση ταχύτητας με μονάδα αισθητήρα ταχύτητας LM393
Από τη διάταξη τοποθέτησης αισθητήρα θα πρέπει να γνωρίζετε ότι η μονάδα αισθητήρα ταχύτητας LM393 (H206) μετρά μόνο τα κενά που υπάρχουν στην πλάκα πλέγματος. Κατά την τοποθέτηση θα πρέπει να βεβαιωθείτε ότι ο τροχός (του οποίου η ταχύτητα πρέπει να μετρηθεί) και η πλάκα πλέγματος περιστρέφονται με την ίδια ταχύτητα. Όπως εδώ, αφού έχουμε τοποθετήσει τόσο τον τροχό όσο και την πλάκα στον ίδιο άξονα, προφανώς και οι δύο θα περιστρέφονται με την ίδια ταχύτητα.
Στη διάταξή μας έχουμε τοποθετήσει δύο αισθητήρες για κάθε τροχό για να μετρήσουμε τη γωνία του bot. Αλλά αν ο στόχος σας είναι να μετρήσετε μόνο την ταχύτητα και την απόσταση, μπορούμε να τοποθετήσουμε τον αισθητήρα σε οποιονδήποτε τροχό. Η έξοδος του αισθητήρα (σήματα ενεργοποίησης) συνήθως συνδέεται με έναν εξωτερικό πείρο διακοπής ενός μικροελεγκτή. Κάθε φορά που ανιχνεύεται το κενό στην πλάκα πλέγματος, ενεργοποιείται μια διακοπή και εκτελείται ο κωδικός στο ISR (Interrupt service Routine). Εάν μπορούμε να υπολογίσουμε το χρονικό διάστημα μεταξύ δύο τέτοιων σκανδάλης, μπορούμε να υπολογίσουμε την ταχύτητα του τροχού.
Στο Arduino μπορούμε εύκολα να υπολογίσουμε αυτό το χρονικό διάστημα χρησιμοποιώντας τη συνάρτηση millis () . Αυτή η λειτουργία millis θα συνεχίσει να αυξάνεται κατά 1 για κάθε milli δευτερόλεπτο από τη στιγμή ενεργοποίησης της συσκευής. Έτσι, όταν συμβεί η πρώτη διακοπή, μπορούμε να αποθηκεύσουμε την τιμή του millis () σε μια εικονική μεταβλητή (όπως pevtime σε αυτόν τον κώδικα) και, στη συνέχεια, όταν συμβεί η δεύτερη διακοπή, μπορούμε να υπολογίσουμε τον χρόνο που αφαιρείται αφαιρώντας την τιμή pevtime από το millis ().
Χρόνος που απαιτείται = τρέχουσα ώρα - προηγούμενη ώρα timetaken = millis () - pevtime ; // timetaken σε χιλιοστά του δευτερολέπτου
Μόλις υπολογίσουμε το χρόνο που απαιτείται, μπορούμε απλά να υπολογίσουμε την τιμή των rpm χρησιμοποιώντας τους παρακάτω τύπους, όπου (1000 / timetaken) δίνει το RPS (περιστροφές ανά δευτερόλεπτο) και πολλαπλασιάζεται επί 60 για να μετατρέψει το RPS σε RPM (περιστροφές ανά λεπτό).
rpm = (1000 / timetaken) * 60;
Μετά τον υπολογισμό των στροφών, μπορούμε να υπολογίσουμε την ταχύτητα του οχήματος χρησιμοποιώντας τους παρακάτω τύπους, εφόσον γνωρίζουμε την ακτίνα του τροχού.
Ταχύτητα = 2π × RPS × ακτίνα τροχού. v = ακτίνα_of_wheel * rpm * 0,104
Σημειώστε ότι ο παραπάνω τύπος είναι για τον υπολογισμό της ταχύτητας σε m / s, εάν θέλετε να υπολογίσετε σε km / hr τότε αντικαταστήστε το 0,0104 με 0,376. Αν είστε περίεργοι να μάθετε πώς αποκτήθηκε η τιμή 0,104, δοκιμάστε να απλοποιήσετε τον τύπο V = 2π × RPS × ακτίνα τροχού.
Η ίδια τεχνική χρησιμοποιείται ακόμη και αν χρησιμοποιείται αισθητήρας αίθουσας για τη μέτρηση της ταχύτητας ενός περιστρεφόμενου αντικειμένου. Αλλά για τον αισθητήρα H206 υπάρχει μια πρόσφυση, η πλάκα πλέγματος έχει 20 υποδοχές και επομένως για τη μέτρηση του χρόνου μεταξύ δύο κενών υποδοχών θα υπερφορτωθεί ο μικροελεγκτής. Ως εκ τούτου, μετράμε την ταχύτητα μόνο σε πλήρη περιστροφή ενός τροχού. Δεδομένου ότι θα δημιουργηθούν δύο διακοπές για κάθε κενό (το ένα στην αρχή και το άλλο στο τέλος του κενού) θα έχουμε συνολικά 40 διακοπές για τον τροχό για να κάνουμε μία πλήρη περιστροφή. Περιμένουμε λοιπόν 40 διακοπές πριν υπολογίσουμε πραγματικά την ταχύτητα του τροχού. Ο κωδικός για το ίδιο φαίνεται παρακάτω
if (περιστροφή> = 40) { timetaken = millis () - pevtime; // timetaken σε χιλιοστά του δευτερολέπτου = (1000 / timetaken) * 60; // τύποι υπολογισμού rpm pevtime = millis (); περιστροφή = 0; }
Ένα άλλο μειονέκτημα με αυτήν τη μέθοδο είναι ότι, η τιμή της ταχύτητας δεν θα μειωθεί στο μηδέν, καθώς η διακοπή θα περιμένει πάντα τον τροχό να ολοκληρώσει μία περιστροφή για τον υπολογισμό της τιμής rpm. Αυτό το μειονέκτημα μπορεί εύκολα να ξεπεραστεί με την προσθήκη ενός απλού κώδικα που παρακολουθεί το χρονικό διάστημα μεταξύ δύο διακοπών και εάν υπερβαίνει το κανονικό τότε μπορούμε να επιβάλουμε την τιμή των στροφών και της ταχύτητας να είναι μηδέν. Συνδέστε τον παρακάτω κώδικα, χρησιμοποιήσαμε μεταβλητή dtime για να ελέγξουμε τη διαφορά του χρόνου και αν υπερβαίνει τα 500 milli seconds η τιμή της ταχύτητας και των rpm αναγκάζεται να είναι μηδέν.
/ * Να μηδενιστεί εάν το όχημα σταμάτησε * / εάν (χιλιοστά () - ώρα> 500) // δεν βρέθηκε διακοπή για 500ms { rpm = v = 0; // κάντε rpm και ταχύτητα ως μηδενική ώρα = χιλιοστά (); }
Λογική πίσω από τη μέτρηση της απόστασης που διανύει ο τροχός
Γνωρίζουμε ήδη ότι το Arduino θα αισθανθεί 40 διακοπές όταν ο τροχός κάνει μια πλήρη περιστροφή. Έτσι, για κάθε περιστροφή που γίνεται από τον τροχό είναι προφανές ότι η απόσταση που διανύεται από τον τροχό είναι ίση με την περιφέρεια του τροχού. Εφόσον γνωρίζουμε ήδη την ακτίνα του τροχού, μπορούμε εύκολα να υπολογίσουμε την απόσταση που καλύπτεται χρησιμοποιώντας τον παρακάτω τύπο
Απόσταση = 2πr * αριθμός περιστροφών απόσταση = (2 * 3,141 * ακτίνα_of_wheel) * (αριστερά_intr / 40)
Όπου η περιφέρεια του τροχού υπολογίζεται χρησιμοποιώντας τον τύπο 2πr και στη συνέχεια πολλαπλασιάζεται με τον αριθμό των περιστροφών που γίνονται από τον τροχό.
Λογική πίσω από τη μέτρηση της γωνίας του bot
Υπάρχουν πολλοί τρόποι για να προσδιορίσετε τον άγγελο του ρομπότ. Τα επιταχυνσιόμετρα και τα γυροσκόπια χρησιμοποιούνται συνήθως για τον προσδιορισμό αυτών των τιμών. Αλλά μια άλλη φθηνή προσέγγιση είναι να χρησιμοποιήσετε τον αισθητήρα H206 και στους δύο τροχούς. Με αυτόν τον τρόπο θα γνωρίζαμε πόσες στροφές έχει κάνει κάθε τροχός. Το παρακάτω σχήμα δείχνει πώς υπολογίζεται η γωνία.
Όταν το ρομπότ αρχικοποιείται, η γωνία που αντιμετωπίζει θεωρείται 0 °. Από εκεί περιστρέφεται αριστερά, η γωνία αυξάνεται αρνητικά και αν περιστρέφεται δεξιά ο άγγελος αυξάνεται θετικά. Για κατανόηση ας εξετάσουμε το εύρος από -90 έως +90 όπως φαίνεται στο σχήμα. Σε μια τέτοια διάταξη δεδομένου ότι και οι δύο τροχοί έχουν την ίδια διάμετρο, εάν κάποιος από τον τροχό κάνει πλήρη περιστροφή το bot γυρίζουμε σε γωνία 90 °.
Για παράδειγμα, εάν ο Αριστερός τροχός κάνει μια πλήρη περιστροφή (80 διακοπές) τότε το bot θα γυρίσει 90 ° προς τα αριστερά και παρόμοια εάν ο Δεξί τροχός κάνει μια πλήρη περιστροφή (80 διακοπές) τότε το bot θα γυρίσει -90 ° προς τα δεξιά. Τώρα γνωρίζουμε ότι αν το Arduino ανιχνεύσει 80 διακοπές σε έναν τροχό, τότε το bot έχει γυρίσει κατά 90 ° και με βάση τον τροχό μπορούμε να πούμε αν το bot έχει γυρίσει με θετικό (δεξιά) ή αρνητικό (αριστερά). Έτσι, η αριστερή και η δεξιά γωνία μπορούν να υπολογιστούν χρησιμοποιώντας τους παρακάτω τύπους
int angle_left = (αριστερά_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
Όπου 90 καλύπτεται η γωνία όταν κάνετε διακοπή του 80. Η προκύπτουσα τιμή πολλαπλασιάζεται ο αριθμός διακοπών. Έχουμε επίσης χρησιμοποιήσει ένα συντελεστή 360 έτσι ώστε η προκύπτουσα τιμή να μην υπερβαίνει ποτέ το 36. Μόλις υπολογίσουμε τόσο την αριστερή όσο και τη δεξιά γωνία, η αποτελεσματική γωνία στην οποία αντιμετωπίζει το bot μπορεί να ληφθεί απλά αφαιρώντας την αριστερή γωνία από τη σωστή γωνία.
γωνία = γωνία_δεξιά - γωνία_αριστερά;
Κωδικός ρομπότ Arduino
Ο πλήρης κωδικός Arduino για αυτό το ρομπότ μέτρησης ταχύτητας και γωνίας βρίσκεται στο τέλος αυτής της σελίδας. Ο στόχος του προγράμματος είναι να υπολογίσει την ταχύτητα, την απόσταση και τη γωνία του bot χρησιμοποιώντας τα παραπάνω λογικά και να το εμφανίσει στην οθόνη LCD. Εκτός από αυτό θα πρέπει να παρέχει μια επιλογή για τον έλεγχο του bot χρησιμοποιώντας το Joystick.
Ξεκινάμε το πρόγραμμα καθορίζοντας τους Ψηφιακούς ακροδέκτες I / O για τους δύο κινητήρες. Σημειώστε ότι πρέπει επίσης να ελέγξουμε την ταχύτητα του κινητήρα και ως εκ τούτου πρέπει να χρησιμοποιήσουμε τους ακροδέκτες PWM στο Arduino για τον έλεγχο των κινητήρων. Εδώ χρησιμοποιήσαμε τον πείρο 8,9,10 και 11.
LM_pos #define 9 // αριστερή κινητήρα #define LM_neg 8 // αριστερή κινητήρα RM_pos #define 10 // δικαίωμα κινητήρα #define RM_neg 11 // δικαίωμα κινητήρα #define joyX Α2 #define joyY Α3
Για να μετρήσουμε την ταχύτητα και την απόσταση που πρέπει να καλύψουμε, πρέπει να γνωρίζουμε την ακτίνα του τροχού, να μετρήσουμε την τιμή και να την εισάγουμε σε μέτρα όπως φαίνεται παρακάτω. Για το bot μου η ακτίνα ήταν 0,033 μέτρα αλλά θα μπορούσε να διαφέρει για εσάς με βάση το bot σας.
float radius_of_wheel = 0,033; // Μετρήστε την ακτίνα του τροχού σας και εισαγάγετέ το εδώ σε cm
Μέσα στη λειτουργία εγκατάστασης , αρχίζουμε να μηδενίζουμε όλη την τιμή και στη συνέχεια να εμφανίζουμε ένα Εισαγωγικό Κείμενο στην οθόνη LCD. Έχουμε επίσης ξεκινήσει την σειριακή οθόνη για σκοπούς εντοπισμού σφαλμάτων Στη συνέχεια, έχουμε αναφέρει ότι οι αισθητήρες ταχύτητας H206 συνδέονται με τους πείρους 2 και 3 ως εξωτερικές διακοπές. Εκεί εντοπίζεται πάντα η διακοπή, η λειτουργία ISR Left_ISR και Right_ISR θα εκτελεστεί ανάλογα.
άκυρη ρύθμιση () { rotation = rpm = pevtime = 0; // Αρχικοποιήστε όλες τις μεταβλητές στο μηδέν Serial.begin (9600); lcd.begin (16, 2); // Αρχικοποιήστε την οθόνη LCD 16 * 2 lcd.print ("Bot Monitor"). // Γραμμή εισαγωγής μηνύματος 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Καθυστέρηση γραμμής εισαγωγής μηνύματος 2 (2000). lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, OUTPUT); pinMode (LM_neg, OUTPUT); pinMode (RM_pos, OUTPUT); pinMode (RM_neg, OUTPUT); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Το Left_ISR καλείται όταν ενεργοποιείται ο αισθητήρας αριστερού τροχού attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Το Right_ISR καλείται όταν ενεργοποιείται ο αισθητήρας δεξιού τροχού }
Μέσα στη ρουτίνα Left_ISR, απλώς αυξάνουμε μια μεταβλητή που ονομάζεται left_intr η οποία θα χρησιμοποιηθεί αργότερα στη μέτρηση της γωνίας του bot. Μέσα στο Right_ISR κάνουμε το ίδιο πράγμα, αλλά στη συνέχεια υπολογίζουμε επίσης την ταχύτητα εδώ. Η μεταβλητή περιστροφή αυξάνεται για κάθε διακοπή και στη συνέχεια χρησιμοποιείται η παραπάνω λογική για τον υπολογισμό της ταχύτητας.
άκυρο Left_ISR () { left_intr ++; καθυστέρηση (10); } άκυρο Right_ISR () { right_intr ++; καθυστέρηση (10) περιστροφή ++; dtime = χιλιοστά (); if (περιστροφή> = 40) { timetaken = millis () - pevtime; // timetaken σε χιλιοστά του δευτερολέπτου = (1000 / timetaken) * 60; // τύποι υπολογισμού rpm pevtime = millis (); περιστροφή = 0; } }
Μέσα στην κύρια λειτουργία άπειρου βρόχου παρακολουθούμε τις τιμές των Χ και Υ από το χειριστήριο. Με βάση την τιμή, εάν το χειριστήριο μετακινηθεί, ελέγχουμε ανάλογα το bot. Η ταχύτητα του bot εξαρτάται από το πόσο ωθεί το χειριστήριο.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); int acceleration = χάρτης (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, επιτάχυνση); analogWrite (RM_pos, επιτάχυνση); } αλλιώς { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } εάν (yValue> 550) analogWrite (RM_pos, 80); εάν (yValue <500) analogWrite (LM_pos, 100);
Αυτό θα βοηθήσει τον χρήστη να μετακινήσει το bot και να ελέγξει αν οι ληφθείσες τιμές είναι όπως αναμενόταν. Τέλος, μπορούμε να υπολογίσουμε την ταχύτητα, την απόσταση και τη γωνία του bot χρησιμοποιώντας τις παραπάνω λογικές και να την εμφανίσουμε στην οθόνη LCD χρησιμοποιώντας τον παρακάτω κώδικα.
v = ακτίνα_of_wheel * rpm * 0,104; //0.033 είναι η ακτίνα του τροχού σε απόσταση μετρητή = (2 * 3,141 * ακτίνα_ο_ τροχός) * (αριστερά_intr / 40); int angle_left = (αριστερά_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80); γωνία = γωνία_δεξιά - γωνία_αριστερά; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (right_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (απόσταση); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (γωνία);
Δοκιμή του ρομπότ Arduino για μέτρηση απόστασης, ταχύτητας και γωνίας
Μόλις το υλικό σας είναι έτοιμο, ανεβάστε τον κωδικό στο Arduino και χρησιμοποιήστε το χειριστήριο για να μετακινήσετε το bot σας. Η ταχύτητα του bot, η απόσταση που καλύπτεται από αυτό και η γωνία θα εμφανίζονται στην οθόνη LCD όπως φαίνεται παρακάτω.
Στην οθόνη LCD ο όρος Lt και Rt αντιπροσωπεύει το πλήθος Left Interrupt Count και Right Interrupt αντίστοιχα. Μπορείτε να βρείτε αυτές τις τιμές να αυξάνονται για κάθε κενό που εντοπίζεται από τον αισθητήρα. Το tem S υποδεικνύει την ταχύτητα του bot σε m / sec και ο όρος D δείχνει την απόσταση που καλύπτεται σε μέτρα. Η γωνία του bot εμφανίζεται στο τέλος όπου 0 ° είναι για ευθεία και πηγαίνει αρνητική για αριστερόστροφη περιστροφή και θετική για δεξιόστροφη περιστροφή.
Μπορείτε επίσης να παρακολουθήσετε το βίντεο στο τέλος αυτής της σελίδας για να κατανοήσετε πώς λειτουργεί το bot. Ελπίζω ότι καταλάβατε το έργο και σας άρεσε να το φτιάξετε. Εάν έχετε οποιεσδήποτε ανησυχίες αφήστε τους στην ενότητα σχολίων και θα προσπαθήσω καλύτερα να απαντήσω. Μπορείτε επίσης να χρησιμοποιήσετε φόρουμ για γρήγορη τεχνική βοήθεια.