Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Επισκόπηση συστημάτων
- Βήμα 2: Ας ξεκινήσουμε την πρωτοτυπία
- Βήμα 3: Πρωτοτυπία - Περνοσανίδα
- Βήμα 4: Πρωτότυπο - Ασπίδα στήριξης
- Βήμα 5: Πρωτοτυπία - Ισχύς και έδαφος
- Βήμα 6: Πρωτότυπο - Φορέας οδηγού κινητήρα
- Βήμα 7: Πρωτοτυπία - Κεφαλίδα πίνακα αισθητήρα γραμμής
- Βήμα 8: Πρωτοτυπία - Micro Gear Motor and Encoder
- Βήμα 9: Πρωτότυπο - LED
- Βήμα 10: Πρωτότυπο - Ξεμπλοκάρισμα
- Βήμα 11: Επισκόπηση βιβλιοθηκών λογισμικού
- Βήμα 12: Επεξηγούνται βιβλιοθήκες - Κουμπί PushButton
- Βήμα 13: Εξηγημένες βιβλιοθήκες - Αισθητήρας γραμμής
- Βήμα 14: Βιβλιοθήκες που εξηγούνται - TeensyviewMenu
- Βήμα 15: Βιβλιοθήκες που εξηγούνται - Motors
- Βήμα 16: Δοκιμή - Οδομετρία κωδικοποιητή
- Βήμα 17: Δοκιμή - Αισθητήρες κίνησης Prop Shield
- Βήμα 18: Επισκόπηση προγράμματος
- Βήμα 19: Πλοήγηση στο μενού και τις ρυθμίσεις
- Βήμα 20: Βαθμονόμηση αισθητήρα γραμμής
- Βήμα 21: Δοκιμαστική εκτέλεση
- Βήμα 22: Τελικές σκέψεις και βελτιώσεις
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Αυτό είναι ένα προηγμένο ρομπότ γραμμής που βασίζεται στον αισθητήρα γραμμής Teensy 3.6 και QTRX που έχω κατασκευάσει και δουλεύω εδώ και αρκετό καιρό. Υπάρχουν κάποιες σημαντικές βελτιώσεις στο σχεδιασμό και την απόδοση από το προηγούμενο ρομπότ της σειράς μου. Η ταχύτητα και η απόκριση του ρομπότ έχουν βελτιωθεί. Η συνολική δομή είναι συμπαγής και ελαφριά. Τα εξαρτήματα είναι τοποθετημένα κοντά στον άξονα του τροχού έτσι ώστε να ελαχιστοποιείται η γωνιακή ορμή. Μικρομεταλλικοί κινητήρες ταχυτήτων υψηλής ισχύος παρέχουν την κατάλληλη ροπή και οι τροχοί σιλικόνης από διανομέα αλουμινίου προσφέρουν την απαραίτητη πρόσφυση σε υψηλές ταχύτητες. Ασπίδα προστασίας και κωδικοποιητές τροχών επιτρέπουν στο ρομπότ να καθορίσει τη θέση και τον προσανατολισμό του. Με το Teensyview τοποθετημένο στο σκάφος, όλες οι σχετικές πληροφορίες μπορούν να απεικονιστούν και οι σημαντικές παράμετροι του προγράμματος μπορούν να ενημερωθούν χρησιμοποιώντας τα κουμπιά ώθησης.
Για να ξεκινήσετε την κατασκευή αυτού του ρομπότ, θα χρειαστείτε τα ακόλουθα εφόδια (και πολύ χρόνο και υπομονή στη διάθεσή σας).
Προμήθειες
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
- Teensy 3.6 Development Board
- Prop Shield με αισθητήρες κίνησης
- Sparkfun TeensyView
- Pololu QTRX-MD-16A Reflectionance Sensor Array
- Πρωτότυπο PCB διπλής όψης 15x20cm
- Ρυθμιστής Τάσης Pololu Step-Up/Step-Down S9V11F3S5
- Pololu Ρυθμιζόμενος ρυθμιστής τάσης αύξησης 4-5-20V U3V70A
- MP12 6V 1580 rpm μικροκινητήρας με κωδικοποιητή (x2)
- DRV8833 Dual Motor Driver Carrier (x2)
- 3.7V, μπαταρία Li-Po 750mAh
- Διακόπτης έναρξης / λήξης
- Ηλεκτρολυτικός πυκνωτής 470uF
- Ηλεκτρολυτικός πυκνωτής 1000uF (x2)
- Κεραμικός πυκνωτής 0.1uF (x5)
- Κουμπιά (x3)
- 10mm πράσινο LED (x2)
Σκεύη, εξαρτήματα
- Τροχός σιλικόνης Atom 37x34mm (x2)
- Pololu Ball Caster με μεταλλική μπάλα 3/8”
- Βάση κινητήρα N20 (x2)
- Μπουλόνι και παξιμάδια
Καλώδια και συνδετήρες
- Ευέλικτα καλώδια 24AWG
- 24 ακίδων FFC σε DIP και καλώδιο FFC (Τύπος Α, μήκος 150 mm)
- Στρογγυλή γυναικεία κεφαλίδα καρφίτσας
- Στρογγυλή θηλυκή κεφαλίδα με μακρύ τερματικό
- Γυναικεία κεφαλίδα με ορθή γωνία διπλής σειράς
- Αρσενική κεφαλίδα διπλής σειράς με ορθή γωνία
- Κεφαλίδα αρσενικής καρφίτσας
- Κεφαλίδα αρσενικής καρφίτσας βελόνας
Εργαλεία
- Πολύμετρο
- Συγκολλητικό σίδερο
- Σύρμα συγκόλλησης
- Απογυμνωτής καλωδίων
- Κόφτης καλωδίων
Βήμα 1: Επισκόπηση συστημάτων
Όπως και με τον προηγούμενο σχεδιασμό μου ενός ρομπότ αυτοεξισορρόπησης, αυτό το ρομπότ είναι ένα συγκρότημα από σανίδες διαρροής τοποθετημένες σε μια σανίδα που εξυπηρετεί επίσης τον σκοπό μιας δομής.
Τα κυριότερα συστήματα του ρομπότ περιγράφονται παρακάτω.
Μικροελεγκτής: Πίνακας ανάπτυξης Teensy 3.6 με επεξεργαστή 32-bit 180MHz ARM Cortex-M4.
Αισθητήρας γραμμής: Αναλογική σειρά αισθητήρων γραμμής εξόδου QTRX-MD-16A Pololu 16 καναλιών σε διάταξη μέσης πυκνότητας (βήμα αισθητήρα 8 mm).
Οδήγηση: 6V, 1580rpm, υψηλής ισχύος μικρομεταλλικοί μοτέρ γραναζιών με μαγνητικό κωδικοποιητή τροχών και τροχούς σιλικόνης τοποθετημένους σε πλήμνες αλουμινίου.
Οδοντομετρία: Μαγνητικά ζεύγη κωδικοποιητών τροχών για την εκτίμηση των συντεταγμένων και της καλυπτόμενης απόστασης.
Αισθητήρας προσανατολισμού: Ασπίδα προστασίας με αισθητήρες κίνησης για την εκτίμηση της θέσης και της κατεύθυνσης του ρομπότ.
Τροφοδοσία: 3.7V, 750mAh lipo μπαταρία ως πηγή ενέργειας. 3.3V ο ρυθμιστής αύξησης/μείωσης τροφοδοτεί τον μικροελεγκτή, τους αισθητήρες και τη συσκευή εμφάνισης. Ο ρυθμιζόμενος ρυθμιστής αύξησης τροφοδοτεί τους δύο κινητήρες.
Διεπαφή χρήστη: Teensyview για την εμφάνιση πληροφοριών. Ξεκλείδωμα με τρία κουμπιά για αποδοχή εισόδων χρήστη. Δύο αριθμοί πράσινων LED διαμέτρου 10 mm για ένδειξη κατάστασης κατά τη λειτουργία.
Βήμα 2: Ας ξεκινήσουμε την πρωτοτυπία
Θα εφαρμόσουμε το παραπάνω κύκλωμα στον πίνακα. Πρέπει πρώτα να διατηρήσουμε έτοιμους τους πίνακες διαρροής, κολλώντας κεφαλίδες πάνω τους. Το βίντεο θα δώσει μια ιδέα σχετικά με το ποιες κεφαλίδες πρέπει να συγκολληθούν σε ποιους πίνακες ανάρτησης.
Μετά τη συγκόλληση κεφαλίδων σε πίνακες ανάρτησης, στοιβάξτε το Teensyview και το κουμπί pushout στο πάνω μέρος του Teensy.
Βήμα 3: Πρωτοτυπία - Περνοσανίδα
Πάρτε το πρωτότυπο διάτρητης πλάκας 15x20cm διπλής όψης και σημειώστε το όριο με μόνιμο μαρκαδόρο όπως φαίνεται στην εικόνα. Τρυπήστε τρύπες μεγέθους Μ2 για την τοποθέτηση της συστοιχίας αισθητήρων, του τροχού τροχού και των κινητήρων μικρομεταλλικών γραναζιών σε τοποθεσίες που σημειώνονται με λευκό κύκλο. Αργότερα θα κόψουμε τον πίνακα κατά μήκος του ορίου μετά τη συγκόλληση και τον έλεγχο όλων των εξαρτημάτων.
Θα ξεκινήσουμε την πρωτοτυπία μας συγκολλώντας τις καρφίτσες και τις υποδοχές της κεφαλίδας στον πίνακα. Οι πίνακες ανάρτησης θα εισαχθούν αργότερα σε αυτές τις κεφαλίδες. Δώστε ιδιαίτερη προσοχή στη θέση των κεφαλίδων στον πίνακα. Θα συνδέσουμε όλα τα καλώδια με βάση αυτήν τη διάταξη κεφαλίδων.
Βήμα 4: Πρωτότυπο - Ασπίδα στήριξης
Αρχικά θα κολλήσουμε τις συνδέσεις με την προστατευτική θωράκιση. Δεδομένου ότι χρησιμοποιούμε μόνο τους αισθητήρες κίνησης της προστατευτικής θωράκισης, πρέπει να συνδέσουμε μόνο τους ακροδέκτες SCL, SDA και IRQ εκτός από τους ακροδέκτες 3V και γείωσης της προστατευτικής προστασίας.
Μόλις ολοκληρωθεί η σύνδεση, τοποθετήστε το Teensy and prop shield και βαθμονομήστε τους αισθητήρες κίνησης ακολουθώντας τα βήματα που αναφέρονται εδώ.
Βήμα 5: Πρωτοτυπία - Ισχύς και έδαφος
Συγκολλήστε όλες τις συνδέσεις ισχύος και γείωσης που αναφέρονται στην εικόνα. Τοποθετήστε όλους τους πίνακες ανάρτησης στη θέση τους και διασφαλίστε τη συνέχεια χρησιμοποιώντας ένα πολύμετρο. Επαληθεύστε τα διαφορετικά επίπεδα τάσης στο σκάφος.
- Τάση εξόδου Li-po (συνήθως μεταξύ 3V και 4.2V)
- Τάση εξόδου ρυθμιστή κλιμακούμενου προς τα πάνω (3,3V)
- Ρυθμιζόμενη τάση εξόδου ρυθμιστή αύξησης (ρυθμισμένη σε 6V)
Βήμα 6: Πρωτότυπο - Φορέας οδηγού κινητήρα
Ο πίνακας μεταφοράς οδηγού διπλού κινητήρα DRV8833 μπορεί να παρέχει συνεχόμενα ρεύματα 1,2Α και 2Α ανά κανάλι. Θα συνδέσουμε τα δύο κανάλια παράλληλα για να οδηγήσουμε έναν κινητήρα. Συγκολλήστε τις συνδέσεις ακολουθώντας τα παρακάτω βήματα.
- Παράλληλα με τις δύο εισόδους και τις δύο εξόδους του φορέα του οδηγού, όπως φαίνεται στην εικόνα.
- Συνδέστε τα καλώδια ελέγχου εισόδου στο πρόγραμμα οδήγησης του κινητήρα.
- Συνδέστε έναν ηλεκτρολυτικό πυκνωτή 1000uF και έναν κεραμικό πυκνωτή 0.1uF στους ακροδέκτες Vin και Gnd των δύο σανίδων μεταφοράς.
- Συνδέστε έναν κεραμικό πυκνωτή 0.1uF στους ακροδέκτες εξόδου του οδηγού κινητήρα.
Βήμα 7: Πρωτοτυπία - Κεφαλίδα πίνακα αισθητήρα γραμμής
Το Teensy 3.6 διαθέτει δύο ADC - ADC0 και ADC1 που είναι πολυπλεγμένα σε 25 προσβάσιμες ακίδες. Μπορούμε να έχουμε πρόσβαση σε οποιεσδήποτε δύο ακίδες από τα δύο ADC ταυτόχρονα. Θα συνδέσουμε οκτώ αισθητήρες γραμμής ο καθένας με ADC0 και ADC1. Οι αισθητήρες ζυγού αριθμού θα συνδεθούν στο ADC1 και οι αισθητήρες περιττού αριθμού στο ADC0. Συγκολλήστε τις συνδέσεις ακολουθώντας τα παρακάτω βήματα. Αργότερα θα συνδέσουμε τον αισθητήρα γραμμής χρησιμοποιώντας FFC σε προσαρμογέα και καλώδιο DIP.
- Συνδέστε όλους τους ακροδέκτες αισθητήρα (16, 14, 12, 10, 8, 6, 4, 2) όπως φαίνεται στην εικόνα. Δρομολογήστε το σύρμα για τη σύνδεση του πείρου αισθητήρα 12 στην πίσω πλευρά της σανίδας.
- Συνδέστε τον πείρο ελέγχου εκπομπού (EVEN) με τον πείρο Teensy 30.
- Συνδέστε όλους τους ακροδέκτες αισθητήρων (15, 13, 11, 9, 7, 5, 3, 1) όπως φαίνεται στην εικόνα.
- Συνδέστε έναν ηλεκτρολυτικό πυκνωτή 470uF σε Vcc και Gnd.
Εάν παρατηρήσετε προσεκτικά τις ακίδες του αισθητήρα γραμμής και τις αντίστοιχες καρφίτσες κεφαλίδας τους στην πλακέτα, θα παρατηρήσετε ότι η επάνω σειρά του αισθητήρα γραμμής αντιστοιχεί στην κάτω σειρά της κεφαλίδας στην πλακέτα και αντίστροφα. Αυτό συμβαίνει επειδή όταν συνδέουμε τον αισθητήρα γραμμής στον πίνακα χρησιμοποιώντας κεφαλίδες διπλής σειράς με ορθή γωνία, οι σειρές θα ευθυγραμμιστούν σωστά. Μου πήρε αρκετό χρόνο για να το καταλάβω και να διορθώσω τις εργασίες καρφιτσών στο πρόγραμμα.
Βήμα 8: Πρωτοτυπία - Micro Gear Motor and Encoder
- Διορθώστε τον κινητήρα μικρομεταλλικών γραναζιών με κωδικοποιητή χρησιμοποιώντας βάσεις κινητήρα N20.
- Συνδέστε τα καλώδια του κινητήρα και του κωδικοποιητή όπως φαίνεται στην εικόνα.
- Αριστερός κωδικοποιητής - Εφηβικές καρφίτσες 4 & 0
- Δεξιός κωδικοποιητής - Εφηβικές καρφίτσες 9 & 27
Βήμα 9: Πρωτότυπο - LED
Οι δύο λυχνίες LED δείχνουν εάν το ρομπότ έχει εντοπίσει στροφή ή όχι. Έχω χρησιμοποιήσει μια αντίσταση σειράς 470 ohm για να συνδέσω τα LED στο Teensy.
- Αριστερή άνοδος LED στην ακίδα Teensy 6
- Δεξιά LED άνοδος στο Teensy pin 8
Βήμα 10: Πρωτότυπο - Ξεμπλοκάρισμα
Τώρα που έχουμε ολοκληρώσει όλη τη συγκόλλησή μας στον πίνακα, μπορούμε να κόψουμε προσεκτικά κατά μήκος του ορίου που έχει επισημανθεί στον πίνακα και να αφαιρέσουμε τα επιπλέον κομμάτια του γυαλιού. Επίσης, συνδέστε τους δύο τροχούς και τον τροχό τροχού.
Τοποθετήστε όλους τους πίνακες ανάρτησης στις αντίστοιχες πρίζες τους. Για την εισαγωγή του διαλύματος FFC-DIP και για τη διόρθωση του αισθητήρα γραμμής QTRX-MD-16A, ανατρέξτε στο βίντεο.
Βήμα 11: Επισκόπηση βιβλιοθηκών λογισμικού
Θα προγραμματίσουμε το Teensy στο Arduino IDE. Θα χρειαστούμε κάποιες βιβλιοθήκες πριν ξεκινήσουμε. Οι βιβλιοθήκες που θα χρησιμοποιήσουμε είναι:
- Κωδικοποιητής
- Teensyview
- EEPROM
- ADC
- NXPMotionSense
Και μερικά που έχουν γραφτεί ειδικά για αυτό το ρομπότ,
- PushButton
- Αισθητήρας γραμμής
- TeensyviewMenu
- Κινητήρες
Οι συγκεκριμένες βιβλιοθήκες για αυτό το ρομπότ συζητούνται λεπτομερώς και είναι διαθέσιμες για λήψη στα επόμενα βήματα.
Βήμα 12: Επεξηγούνται βιβλιοθήκες - Κουμπί PushButton
Αυτή η βιβλιοθήκη προορίζεται για τη διασύνδεση του πίνακα ξεμπλοκαρίσματος με το Teensy. Οι λειτουργίες που χρησιμοποιούνται είναι
PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);
Η κλήση αυτού του κατασκευαστή με τη δημιουργία ενός αντικειμένου διαμορφώνει τις ακίδες του κουμπιού ώθησης στη λειτουργία INPUT_PULLUP.
int8_t waitForButtonPress (άκυρο);
Αυτή η λειτουργία περιμένει μέχρι να πατηθεί και να απελευθερωθεί ένα κουμπί και να επιστρέψει τον κωδικό κλειδιού.
int8_t getSingleButtonPress (άκυρο);
Αυτή η λειτουργία ελέγχει αν πατηθεί και απελευθερωθεί ένα κουμπί. Εάν ναι, επιστρέφει τον κωδικό κλειδί αλλιώς επιστρέφει μηδέν.
Βήμα 13: Εξηγημένες βιβλιοθήκες - Αισθητήρας γραμμής
Το LineSensor είναι η βιβλιοθήκη για τη διασύνδεση του πίνακα αισθητήρων γραμμής με το Teensy. Ακολουθούν οι λειτουργίες που χρησιμοποιούνται.
LineSensor (άκυρο);
Η κλήση αυτού του κατασκευαστή δημιουργώντας ένα αντικείμενο αρχικοποιεί το ADC0 και το ADC1, διαβάζει το κατώτατο όριο, τις ελάχιστες και τις μέγιστες τιμές από το EEPROM και διαμορφώνει τις ακίδες του αισθητήρα στη λειτουργία εισόδου και τον πείρο ελέγχου εκπομπής στην κατάσταση εξόδου.
άκυρη βαθμονόμηση (uint8_t calibrationMode);
Αυτή η λειτουργία βαθμονομεί τους αισθητήρες γραμμής. Ο τρόπος βαθμονόμησης μπορεί να είναι είτε MIN_MAX είτε MEDIAN_FILTER. Αυτή η λειτουργία εξηγείται λεπτομερώς σε μεταγενέστερο βήμα.
void getSensorsAnalog (uint16_t *sensorValue, uint8_t mode)?
Διαβάζει πίνακα αισθητήρων σε οποιαδήποτε από τις τρεις λειτουργίες που έχουν περάσει ως όρισμα. Η λειτουργία είναι η κατάσταση των εκπομπών και μπορεί να είναι ON, OFF ή TOGGLE. Η λειτουργία TOGGLE αντισταθμίζει τις ενδείξεις ανάκλασης των αισθητήρων λόγω του φωτός περιβάλλοντος. Οι αισθητήρες που είναι συνδεδεμένοι με ADC0 και ADC1 διαβάζονται ταυτόχρονα.
int getLinePosition (uint16_t *sensorValue);
Υπολογίζει τη θέση του πίνακα αισθητήρων πάνω από τη γραμμή με τη μέθοδο του σταθμισμένου μέσου όρου.
uint16_t getSensorsBinary (uint16_t *sensorValue);
Επιστρέφει μια αναπαράσταση 16-bit της κατάστασης των αισθητήρων. Ένα δυαδικό δείχνει ότι ο αισθητήρας είναι πάνω από τη γραμμή και ένα δυαδικό μηδέν δείχνει ότι ο αισθητήρας είναι εκτός γραμμής.
uint8_t countBinary (uint16_t binaryValue);
Η μετάδοση της αναπαράστασης των 16-bit των τιμών του αισθητήρα σε αυτήν τη λειτουργία επιστρέφει τον αριθμό των αισθητήρων που βρίσκονται πάνω από τη γραμμή.
void getSensorsNormalized (uint16_t *sensorValue, uint8_t mode)?
Διαβάζει τις τιμές του αισθητήρα και περιορίζει κάθε τιμή αισθητήρα στις αντίστοιχες τιμές min και max. Στη συνέχεια, οι τιμές των αισθητήρων αντιστοιχίζονται από το αντίστοιχο ελάχιστο έως μέγιστο εύρος σε 0 έως 1000 εύρος.
Βήμα 14: Βιβλιοθήκες που εξηγούνται - TeensyviewMenu
Το TeensyviewMenu είναι η βιβλιοθήκη όπου μπορείτε να έχετε πρόσβαση στις λειτουργίες του μενού οθόνης. Ακολουθούν οι λειτουργίες που χρησιμοποιούνται.
TeensyViewMenu (άκυρο).
Η κλήση αυτού του κατασκευαστή δημιουργεί ένα αντικείμενο κλάσης LineSensor, PushButton και TeensyView.
void intro (void)?
Αυτό είναι για πλοήγηση στο μενού.
δοκιμή άκυρου (άκυρο)?
Αυτό καλείται εσωτερικά στο μενού όταν οι τιμές του αισθητήρα γραμμής πρέπει να εμφανίζονται στο Teensyview για δοκιμή.
Βήμα 15: Βιβλιοθήκες που εξηγούνται - Motors
Motors είναι η βιβλιοθήκη που χρησιμοποιείται για την οδήγηση των δύο κινητήρων. Ακολουθούν οι λειτουργίες που χρησιμοποιούνται.
Κινητήρες (άκυροι)?
Η κλήση αυτού του κατασκευαστή δημιουργώντας ένα αντικείμενο ρυθμίζει τον έλεγχο κατεύθυνσης κινητήρα και τις ακίδες ελέγχου PWM στην κατάσταση εξόδου.
void setSpeed (int leftMotorSpeed, int rightMotorSpeed);
Η κλήση αυτής της συνάρτησης οδηγεί τους δύο κινητήρες σε ταχύτητες που περνούν ως επιχειρήματα. Η τιμή της ταχύτητας μπορεί να κυμαίνεται από -255 έως +255 με αρνητικό πρόσημο που δείχνει ότι η κατεύθυνση περιστροφής αντιστρέφεται.
Βήμα 16: Δοκιμή - Οδομετρία κωδικοποιητή
Θα δοκιμάσουμε τους κωδικοποιητές μαγνητικών τροχών και θα εμφανίσουμε τη θέση και την απόσταση που καλύπτει το ρομπότ.
Ανεβάστε το DualEncoderTeensyview.ino. Το πρόγραμμα εμφανίζει τα τσιμπούρια του κωδικοποιητή στο Teensyview. Ο κωδικοποιητής αυξάνεται εάν μετακινείτε το ρομπότ προς τα εμπρός και μειώνεται εάν το μετακινείτε προς τα πίσω.
Τώρα ανεβάστε το EncoderOdometry.ino. Αυτό το πρόγραμμα εμφανίζει τη θέση του ρομπότ σε συντεταγμένες x-y, εμφανίζει τη συνολική απόσταση που καλύπτεται σε εκατοστόμετρο και τη γωνία που γυρίζει σε μοίρες.
Αναφέρθηκα στο Implementing Dead Reckoning by Odometry on a Robot with R/C Servo Differential Drive by Seattle Robotics Society για τον προσδιορισμό της θέσης από τσιμπούρια κωδικοποιητή.
Βήμα 17: Δοκιμή - Αισθητήρες κίνησης Prop Shield
Βεβαιωθείτε ότι έχετε βαθμονομήσει τους αισθητήρες κίνησης ακολουθώντας τα βήματα που αναφέρονται εδώ.
Τώρα ανεβάστε το PropShieldTeensyView.ino. Θα πρέπει να μπορείτε να δείτε τις τιμές του επιταχυνσιόμετρου, του γυροσκοπίου και του μαγνητόμετρου και των τριών αξόνων στο Teensyview.
Βήμα 18: Επισκόπηση προγράμματος
Το πρόγραμμα για τους προχωρημένους ακόλουθους γραμμών είναι γραμμένο σε Arduino IDE. Το πρόγραμμα λειτουργεί με την ακόλουθη σειρά που εξηγείται παρακάτω.
- Οι τιμές που είναι αποθηκευμένες στο EEPROM διαβάζονται και εμφανίζεται το μενού.
- Πατώντας το LAUNCH, το πρόγραμμα εισέρχεται στον βρόχο.
- Οι κανονικοποιημένες τιμές του αισθητήρα γραμμής διαβάζονται.
- Η δυαδική τιμή της θέσης γραμμής λαμβάνεται χρησιμοποιώντας κανονικοποιημένες τιμές αισθητήρα.
- Ο αριθμός του αριθμού των αισθητήρων που βρίσκονται πάνω από τη γραμμή υπολογίζεται από τη δυαδική τιμή της θέσης γραμμής.
- Τα τσιμπούρια κωδικοποίησης ενημερώνονται και η συνολική απόσταση καλύπτεται, οι συντεταγμένες x-y και η γωνία ενημερώνονται.
- Για διαφορετικές τιμές δυαδικού αριθμού που κυμαίνονται από 0 έως 16, εκτελείται ένα σύνολο οδηγιών. Εάν ο δυαδικός αριθμός είναι στην περιοχή 1 έως 5 και αν οι αισθητήρες που βρίσκονται πάνω από τη γραμμή είναι ο ένας δίπλα στον άλλο, καλείται η ρουτίνα PID. Η περιστροφή πραγματοποιείται σε άλλους συνδυασμούς δυαδικής αξίας και δυαδικού αριθμού.
- Στη ρουτίνα PID (η οποία είναι η ρουτίνα PD), οι κινητήρες κινούνται με ταχύτητες που υπολογίζονται με βάση το σφάλμα, την αλλαγή σφάλματος, τις τιμές Kp και Kd.
Το πρόγραμμα προς το παρόν δεν μετρά τις τιμές προσανατολισμού από το προστατευτικό προστασίας. Αυτό είναι ένα έργο σε εξέλιξη και ενημερώνεται.
Ανεβάστε το TestRun20.ino. Θα δούμε πώς να πλοηγηθείτε στο μενού, να προσαρμόσετε τις ρυθμίσεις και πώς να βαθμονομήσετε τους αισθητήρες γραμμής στα επόμενα βήματα μετά τα οποία θα δοκιμάσουμε το ρομπότ μας.
Βήμα 19: Πλοήγηση στο μενού και τις ρυθμίσεις
Το μενού έχει τις ακόλουθες ρυθμίσεις στις οποίες μπορείτε να πλοηγηθείτε χρησιμοποιώντας τα αριστερά και δεξιά κουμπιά και να επιλέξετε με το κεντρικό κουμπί. Οι ρυθμίσεις και οι λειτουργίες τους περιγράφονται παρακάτω.
- CALIBRATE: Για βαθμονόμηση αισθητήρων γραμμής.
- ΔΟΚΙΜΗ: Για την εμφάνιση των τιμών του αισθητήρα γραμμής.
- ΕΚΚΙΝΗΣΗ: Για να ξεκινήσετε την ακόλουθη γραμμή.
- MAX SPEED: Για να ορίσετε το ανώτατο όριο της ταχύτητας του ρομπότ.
- ROTATE SPEED: Για να ορίσετε το ανώτατο όριο ταχύτητας του ρομπότ όταν εκτελεί στροφή, δηλαδή όταν και οι δύο τροχοί στρίβουν με ίσες ταχύτητες σε αντίθετες κατευθύνσεις.
- Κ. Π.: Αναλογική σταθερά.
- Κ. Δ.: Παράγωγη σταθερά.
- ΛΕΙΤΟΥΡΓΙΑ ΛΕΙΤΟΥΡΓΙΑΣ: Για να επιλέξετε μεταξύ δύο τρόπων λειτουργίας - NORMAL και ACCL. Στη λειτουργία NORMAL, το ρομπότ λειτουργεί με προκαθορισμένες ταχύτητες που αντιστοιχούν στις τιμές θέσης γραμμής. Στη λειτουργία ACCL, η MAX SPEED του ρομπότ αντικαθίσταται από ACCL SPEED σε προκαθορισμένα στάδια της διαδρομής. Αυτό μπορεί να χρησιμοποιηθεί για να επιταχύνει το ρομπότ σε ευθεία τμήματα της πίστας. Οι ακόλουθες ρυθμίσεις είναι προσβάσιμες μόνο εάν το RUN MODE έχει οριστεί ως ACCL.
- ΑΠΟΣΤΑΣΗ ΓΥΡΟΥ: Για να ορίσετε το συνολικό μήκος της πίστας.
- ACCL SPEED: Για να ρυθμίσετε την ταχύτητα επιτάχυνσης του ρομπότ. Αυτή η ταχύτητα αντικαθιστά το MAX SPEED σε διαφορετικά στάδια της πίστας, όπως ορίζεται παρακάτω.
- ΟΧΙ. ΤΩΝ ΣΤΑΔΩΝ: Για να ορίσετε τον αριθμό των σταδίων όπου χρησιμοποιείται το ACCL SPEED.
- ΣΤΑΔΙΟ 1: Για να ρυθμίσετε τις αποστάσεις έναρξης και λήξης του σταδίου στο οποίο το MAX SPEED αντικαθίσταται από ACCL SPEED. Για κάθε στάδιο, οι αποστάσεις έναρξης και τέλους μπορούν να οριστούν ξεχωριστά.
Βήμα 20: Βαθμονόμηση αισθητήρα γραμμής
Η βαθμονόμηση του αισθητήρα γραμμής είναι η διαδικασία με την οποία καθορίζεται η τιμή κατωφλίου καθενός από τους 16 αισθητήρες. Αυτή η τιμή κατωφλίου χρησιμοποιείται για να αποφασίσει εάν ένας συγκεκριμένος αισθητήρας είναι εκτός γραμμής ή όχι. Για να καθορίσουμε τις τιμές κατωφλίου 16 αισθητήρων, χρησιμοποιούμε οποιαδήποτε από τις δύο μεθόδους.
MEDIAN FILTER: Σε αυτή τη μέθοδο, οι αισθητήρες γραμμής τοποθετούνται πάνω από τη λευκή επιφάνεια και λαμβάνεται ένας προκαθορισμένος αριθμός μετρήσεων αισθητήρων και για τους 16 αισθητήρες. Καθορίζονται οι μέσες τιμές και των 16 αισθητήρων. Η ίδια διαδικασία επαναλαμβάνεται μετά την τοποθέτηση των αισθητήρων γραμμής πάνω στη μαύρη επιφάνεια. Η τιμή κατωφλίου είναι ο μέσος όρος των μέσων τιμών των ασπρόμαυρων επιφανειών.
MIN MAX: Σε αυτήν τη μέθοδο, οι τιμές των αισθητήρων διαβάζονται επανειλημμένα μέχρι ο χρήστης να ζητήσει διακοπή. Οι μέγιστες και ελάχιστες τιμές που συναντά κάθε αισθητήρας αποθηκεύονται. Η τιμή κατωφλίου είναι ο μέσος όρος των ελάχιστων και μέγιστων τιμών.
Οι οριακές τιμές που λαμβάνονται έτσι αντιστοιχίζονται στο εύρος 0 έως 1000.
Η βαθμονόμηση των αισθητήρων γραμμής με τη μέθοδο MIN MAX εμφανίζεται στο βίντεο. Μετά τη βαθμονόμηση των αισθητήρων γραμμής, τα δεδομένα μπορούν να απεικονιστούν όπως φαίνεται στην εικόνα. Εμφανίζονται οι ακόλουθες πληροφορίες.
- Μια δυαδική αναπαράσταση 16-bit της θέσης γραμμής με ένα δυαδικό 1 που υποδεικνύει ότι ο αντίστοιχος αισθητήρας γραμμής είναι πάνω από τη γραμμή και ένα δυαδικό 0 που δείχνει ότι ο αισθητήρας γραμμής είναι εκτός γραμμής.
- Καταμέτρηση του συνολικού αριθμού αισθητήρων που βρίσκονται πάνω από τη γραμμή.
- Ελάχιστες, μέγιστες και αισθητήριες τιμές (ακατέργαστες και κανονικοποιημένες) από τους 16 αισθητήρες, έναν αισθητήρα τη φορά.
- Θέση γραμμής στο εύρος -7500 έως +7500.
Οι ελάχιστες και μέγιστες τιμές αισθητήρα γραμμής αποθηκεύονται στη συνέχεια στο EEPROM.
Βήμα 21: Δοκιμαστική εκτέλεση
Το βίντεο είναι μια δοκιμαστική εκτέλεση στην οποία το ρομπότ έχει προγραμματιστεί να σταματήσει αφού ολοκληρώσει έναν γύρο.
Βήμα 22: Τελικές σκέψεις και βελτιώσεις
Το υλικό που συναρμολογείται για την κατασκευή αυτού του ρομπότ δεν χρησιμοποιείται πλήρως από το πρόγραμμα που το τρέχει. Θα μπορούσαν να γίνουν πολλές βελτιώσεις στο κομμάτι του προγράμματος. Οι αισθητήρες κίνησης της προστατευτικής θωράκισης δεν χρησιμοποιούνται προς το παρόν για τον προσδιορισμό της θέσης και του προσανατολισμού. Τα δεδομένα οδομετρίας από τους κωδικοποιητές μπορούν να συνδυαστούν με τα δεδομένα προσανατολισμού από το προστατευτικό κάλυμμα για να προσδιοριστεί με ακρίβεια η θέση και ο τίτλος του ρομπότ. Αυτά τα δεδομένα μπορούν στη συνέχεια να χρησιμοποιηθούν για να προγραμματίσουν το ρομπότ να μάθει το κομμάτι σε πολλούς γύρους. Σας ενθαρρύνω να πειραματιστείτε σε αυτό το μέρος και να μοιραστείτε τα αποτελέσματά σας.
Καλή τύχη.
Δεύτερο Βραβείο στο Διαγωνισμό Ρομπότ