Πίνακας περιεχομένων:
- Βήμα 1: Σχεδιασμός της λειτουργικότητας του έργου
- Βήμα 2: Διάγραμμα εγκατάστασης και καλωδίου
- Βήμα 3: Δοκιμή στοιχείων και βασικού κώδικα
- Βήμα 4: Βαθμονόμηση MPU
- Βήμα 5: Τελικός κώδικας
Βίντεο: Digitalηφιακή πυξίδα και ανιχνευτής κατεύθυνσης: 6 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Συγγραφείς:
Cullan Whelan
Άντριου Λουφ
Μπλέικ Τζόνσον
Ευχαριστίες:
Ναυτική Ακαδημία Καλιφόρνιας
Έβαν Τσανγκ-Σιού
Εισαγωγή:
Η βάση αυτού του έργου είναι μια ψηφιακή πυξίδα με παρακολούθηση επικεφαλίδας. Αυτό επιτρέπει στον χρήστη να ακολουθήσει μια κατεύθυνση σε μεγάλες αποστάσεις χρησιμοποιώντας μια ψηφιακή συσκευή. Συγκεκριμένα, μια επικεφαλίδα είναι μια γωνία που μετριέται δεξιόστροφα από το βορρά, η οποία θεωρείται μηδενική μοίρα, όπως υποδεικνύεται από την πυξίδα. Η συσκευή έχει δύο κύριες λειτουργίες: η πρώτη είναι η εμφάνιση της τρέχουσας επικεφαλίδας της συσκευής σε μια αναφορά ψηφιακής οθόνης και η δεύτερη είναι η δυνατότητα εισαγωγής μιας επικεφαλίδας που ζητείται από τον χρήστη, η οποία θα εμφανίζεται σε έναν δακτύλιο LED στο επάνω μέρος του περίβλημα πυξίδας. Στη συνέχεια, ο χρήστης θα προσαρμόσει τον προσανατολισμό της συσκευής που σχετίζεται με το φωτισμένο LED. Καθώς αλλάζει η κατεύθυνση της συσκευής, η λυχνία LED θα μεταβεί στην κεντρική λυχνία LED, υποδεικνύοντας έτσι ότι έχει καθοριστεί η σωστή επικεφαλίδα.
Προμήθειες:
- DIYmall 6M GPS Module
- HiLetgo MPU9250/6500 9-Axis 9 DOF 16 Bit
- Adafruit NeoPixel Ring 16
- Επαναφορτιζόμενη μπαταρία λιθίου MakerFocus 4pcs 3.7V
- Πίνακας ELEGOO MEGA 2560 R3
- Adafruit Mini Lipo w/Mini -B USB Jack - Φορτιστής USB LiIon/LiPoly - v1
- TFT LCD 2,8 με οθόνη αφής Breakout Board με υποδοχή MicroSD
Βήμα 1: Σχεδιασμός της λειτουργικότητας του έργου
Το πρώτο βήμα είναι η κατανόηση της λογικής και της τελικής λειτουργικής λειτουργικότητας. Αυτό το λογικό διάγραμμα απεικονίζει τις τρεις καταστάσεις συσκευής και τις δύο καταστάσεις αισθητήρα.
Κατάσταση 1: Κατάσταση φόρτωσης
Η κατάσταση φόρτωσης χρησιμοποιείται για να επιτρέψει στο Arduino Mega να λάβει δεδομένα από τους δύο αισθητήρες κατά την εκκίνηση. Η συσκευή θα εμφανίσει φόρτωση στην οθόνη, θα διαγράψει όλες τις τιμές αριθμών στην οθόνη και οι λυχνίες LED στο δαχτυλίδι NeoPixel θα ανάψουν σε κύκλο.
Κατάσταση 2: Λειτουργία πυξίδας
Σε αυτήν την κατάσταση, η συσκευή θα λειτουργεί σαν ψηφιακή πυξίδα. Ο δακτύλιος NeoPixel θα ανάψει για να δείξει την κατεύθυνση του Βορρά σε σχέση με τον προσανατολισμό της συσκευής. Η πραγματική επικεφαλίδα της συσκευής θα εμφανιστεί επίσης στην οθόνη LCD μαζί με το γεωγραφικό πλάτος και γεωγραφικό μήκος της συσκευής. Επίσης, σε αυτήν την κατάσταση, ο χρήστης θα μπορεί να εισάγει την επικεφαλίδα του χρήστη για εμφάνιση στην κατάσταση 3.
Κατάσταση 3: Λειτουργία παρακολούθησης επικεφαλίδας
Σε αυτήν την κατάσταση, η συσκευή θα βοηθήσει τώρα τον χρήστη να καθιερωθεί στην επιθυμητή επικεφαλίδα. Η συσκευή θα εμφανίζει τώρα την επικεφαλίδα των συσκευών και τους χρήστες που κατευθύνονται στην οθόνη LCD μαζί με τα δεδομένα γεωγραφικού πλάτους και γεωγραφικού μήκους. Ο δακτύλιος NeoPixel θα ανάψει τώρα για να δείξει τους χρήστες που κατευθύνονται σε σχέση με τον προσανατολισμό των συσκευών.
Τόσο στην κατάσταση 2 όσο και στην κατάσταση 3 υπάρχουν δύο καταστάσεις αισθητήρα, αυτές οι καταστάσεις αισθητήρα επιτρέπουν στη συσκευή να αντλεί δεδομένα από τον αισθητήρα που παρέχει τα πιο ακριβή δεδομένα ανάλογα με την κατάσταση λειτουργίας της συσκευής.
Κατάσταση αισθητήρα 1: MPU
Εάν η συσκευή δεν κινείται, τα δεδομένα της επικεφαλίδας θα αντληθούν από το MPU, καθώς είναι τα πιο ακριβή δεδομένα όταν η συσκευή δεν κινείται.
Κατάσταση αισθητήρα 2: GPS
Εάν η συσκευή κινείται, τα δεδομένα επικεφαλίδας θα αντληθούν από το τσιπ GPS, καθώς είναι τα πιο ακριβή δεδομένα σε αυτήν την κατάσταση.
Η συσκευή μπορεί ανά πάσα στιγμή να αλλάξει μεταξύ αυτών σε καταστάσεις αισθητήρα για να λάβει υπόψη τις συνθήκες χρήσης της αλλαγής της μονάδας. Αυτό είναι σημαντικό για τη λειτουργία της συσκευής καθώς και οι δύο αισθητήρες που χρησιμοποιούνται στη συσκευή έχουν συνθήκες που επηρεάζουν την ακρίβεια των δεδομένων που παρέχουν. Στην περίπτωση του MPU το τσιπ μπορεί εύκολα να επηρεαστεί από τοπικά μαγνητικά πεδία που προκαλούνται από αυτοκίνητα και μεταλλικά υλικά κατασκευής σε κτίρια. Έτσι χρησιμοποιείται ένα τσιπ GPS που μπορεί να παρέχει μια πολύ πιο ακριβή επικεφαλίδα που δεν επηρεάζεται από τις ίδιες επιρροές. Ωστόσο, το GPS μπορεί να παρέχει δεδομένα επικεφαλίδας μόνο όταν μετακινείται καθώς υπολογίζει την επικεφαλίδα χρησιμοποιώντας την αλλαγή των δεδομένων γεωγραφικού πλάτους και γεωγραφικού μήκους. Επομένως, τα τσιπ συμπληρώνουν το ένα το άλλο και χρησιμοποιώντας τις δύο καταστάσεις αισθητήρα παρέχουν την πιο ακριβή και αξιόπιστη λειτουργικότητα της συσκευής.
Βήμα 2: Διάγραμμα εγκατάστασης και καλωδίου
Το έργο χρησιμοποιεί και τον πίνακα κλωνοποίησης Arduino Mega παρόμοιο με τον παραπάνω πίνακα. Όλα τα στοιχεία του έργου θα συνδεθούν με αυτόν τον πίνακα. Παρακάτω είναι λεπτομερή διαγράμματα για τον τρόπο σύνδεσης των εξαρτημάτων για αυτό το έργο. Τα κουμπιά δεν έχουν λεπτομερές κύκλωμα καθώς αυτά μπορούν να ρυθμιστούν με πολλούς τρόπους. Σε αυτό το έργο χρησιμοποιούν μια αντίσταση έλξης 100Κ και ένα απλό κουμπί για να στείλουν ένα σήμα 3 βολτ στον καθορισμένο πείρο.
Βήμα 3: Δοκιμή στοιχείων και βασικού κώδικα
Το έργο θα αντλήσει δεδομένα τόσο από το τσιπ MPU όσο και από το GPS, όπως περιγράφηκε νωρίτερα. Επισυνάπτονται τρεις κωδικοί που επιτρέπουν τη δοκιμή δεδομένων από MPU, GPS και MPU με οθόνη για την επαλήθευση της λειτουργικότητας των τμημάτων. Είναι σημαντικό να λειτουργήσουν τα εξαρτήματα σε αυτό το στάδιο, καθώς ο κώδικας είναι ξεχωριστός για κάθε τσιπ και τυχόν ζητήματα μπορούν να αντιμετωπιστούν χωρίς φόβο ότι θα προκαλέσουν απρόβλεπτα σφάλματα στον τελικό κώδικα.
Απαιτούμενες βιβλιοθήκες:
Adafruit_ILI9341_Albert.h
SPI.h
Adafruit_GFX.h
Adafruit_ILI9341.h
TinyGPS ++. Ώρα
Adafruit_NeoPixel.h
MPU9250.h
Όλα αυτά μπορούν να βρεθούν αναζητώντας τους παραπάνω τίτλους. Δεν θα δημοσιεύσω συνδέσμους καθώς υπάρχουν πολλά αντίγραφα αυτών των βιβλιοθηκών από πολλές πηγές και τηρώντας το κοινοτικό πρότυπο της σύνδεσης μόνο με πρωτότυπα, θα σας αφήσω να τα βρείτε μόνοι σας.
Βήμα 4: Βαθμονόμηση MPU
Ο τίτλος που βρέθηκε μέσω του MPU στο State 2 και State 3 χωρίστηκε σε τέσσερα τεταρτημόρια. Αυτό ήταν απαραίτητο επειδή η μέθοδος βαθμονόμησής μας απαιτούσε την εύρεση των ελάχιστων και μέγιστων μεγεθών από το μαγνητόμετρο κατά μήκος των αξόνων x και y. Αυτό έγινε μέσω περιστροφής της συσκευής τυχαία γύρω από τους τρεις άξονές της, απαλλαγμένη από τυχόν σημαντικά ηλεκτρομαγνητικά πεδία εκτός από αυτό της Γης. Στη συνέχεια, πήραμε τις ελάχιστες και μέγιστες τιμές κατά μήκος του άξονα x και y και τις συνδέσαμε σε μια εξίσωση κλιμάκωσης για να περιορίσουμε τα μεγέθη μεταξύ των τιμών του αρνητικού ενός και ενός. Στο παραπάνω σχήμα, BigX και BigY είναι οι μέγιστες τιμές δεδομένων μαγνητόμετρου κατά μήκος του άξονα x και y αντίστοιχα, LittleX και LittleY είναι οι ελάχιστες τιμές δεδομένων μαγνητόμετρου κατά μήκος του άξονα x και y αντίστοιχα, IMU.getMagX_uT () και IMU.getMagY_uT () είναι οι τιμές που τραβιούνται από το μαγνητόμετρο ανά πάσα στιγμή κατά μήκος του άξονα x και y αντίστοιχα, και Mx και My είναι οι νέες κλιμακωτές τιμές που χρησιμοποιούνται για τον υπολογισμό της επικεφαλίδας.
Βήμα 5: Τελικός κώδικας
Το τελευταίο βήμα είναι η δημιουργία του τελικού κώδικα. Έχω επισυνάψει ένα αντίγραφο του τελικού κώδικα των έργων. Μέσα σε σημειώσεις έχουν γίνει για να περιηγηθείτε στον κώδικα. Η μεγαλύτερη πρόκληση αυτού του τμήματος ήταν να λειτουργήσουν σωστά τα τεταρτημόρια. Η εφαρμογή τετραγώνων αποδείχθηκε πιο κουραστική και αψηφιστική της λογικής από ό, τι θα μπορούσαμε να περιμέναμε. Αρχικά εφαρμόσαμε ένα βασικό αρκτάν (My/Mx) και στη συνέχεια μετατρέψαμε από ακτίνια σε μοίρες, αφού το Arduino εξέρχεται από ακτίνια από προεπιλογή. Ωστόσο, το μόνο τεταρτημόριο στο οποίο λειτουργούσε ήταν από 90 μοίρες έως 180 μοίρες, το οποίο μας έδωσε αρνητική απόδοση και κατέληξε να είναι το Τεταρτημόριο III. Η λύση σε αυτό έπαιρνε την απόλυτη τιμή, αφού εξακολουθούσε να αυξάνεται σωστά. Αυτή η τιμή αφαιρέθηκε στη συνέχεια από το 360 για να φωτιστεί το σωστό LED NeoPixel στην κατάσταση 2 και μια παρόμοια μαθηματική λειτουργία χρησιμοποιήθηκε στην κατάσταση 3 με βάση εάν η επικεφαλίδα ήταν μεγαλύτερη ή μικρότερη από την επικεφαλίδα εισόδου του χρήστη, και οι δύο μπορούν να εμφανιστούν στο παραπάνω κωδικός. Στα παραπάνω σχήματα, η επικεφαλίδα αντιστοιχεί στη φωτεινή ένδειξη NeoPixel που θα ανάψει με βάση τη διαφορά μεταξύ της επικεφαλίδας της συσκευής και της απόκλισης από το βορρά στην περίπτωση της κατάστασης 2 και από αυτήν της επικεφαλίδας χρήστη. Σε αυτή την περίπτωση, 90 έως 180 μοίρες αντιστοιχεί στο Τεταρτημόριο III. Και στις δύο περιπτώσεις, το tft.print προκαλεί την ανάγνωση της οθόνης της οθόνης της συσκευής από το βορρά.
Για τα άλλα τρία τεταρτημόρια, η εφαρμογή του arctan (My/Mx) οδήγησε σε αντιστροφή της αύξησης καθώς περιστρέφεται η συσκευή, δηλαδή η γωνία κατεύθυνσης θα μετρούσε αντίστροφα όταν υπολογιζόταν αντίστροφα και αντίστροφα. Η λύση σε αυτό το πρόβλημα ήταν να αναστρέψουμε το arctangent στη μορφή του arctan (Mx/My). Παρόλο που αυτό έλυσε την αναστροφή της αύξησης, δεν έδωσε τη σωστή επικεφαλίδα της συσκευής, εκεί που μπήκαν στο παιχνίδι τα τεταρτημόρια. Η απλή λύση ήταν να προσθέσετε μια μετατόπιση με βάση το αντίστοιχο τεταρτημόριο. Αυτό φαίνεται στα ακόλουθα σχήματα, τα οποία αποτελούν για άλλη μια φορά κομμάτια κώδικα από τις καταστάσεις 2 και 3 κάθε τεταρτημορίου.
Η πρώτη δήλωση if πραγματοποιείται εάν η επικεφαλίδα που υπολογίζεται από την εξίσωση MPU είναι μεγαλύτερη από την επικεφαλίδα χρήστη. Υπό αυτή τη συνθήκη, η επικεφαλίδα εισόδου του χρήστη προστίθεται στην επικεφαλίδα της συσκευής και η αντίστοιχη τιμή αφαιρείται από το 360. Εάν η δήλωση else πραγματοποιηθεί, η εξίσωση επικεφαλίδας MPU αφαιρείται από την επικεφαλίδα εισόδου του χρήστη. Αυτές οι συνθήκες εφαρμόστηκαν προκειμένου όχι μόνο να λάβουμε μια ακριβή τιμή για το NeoPixel, αλλά και να αποφύγουμε την απόκτηση μιας τιμής εκτός του αποδεκτού εύρους, η οποία είναι από 0 έως 359 μοίρες.
Συνιστάται:
Arduino Έλεγχος ταχύτητας και κατεύθυνσης κινητήρα DC χρησιμοποιώντας ποτενσιόμετρο & κουμπιά: 6 βήματα
Arduino Control DC Motor Speed and Direction Using a Potentiometer & Buttons: Σε αυτό το σεμινάριο θα μάθουμε πώς να χρησιμοποιούμε ένα πρόγραμμα οδήγησης L298N DC MOTOR CONTROL και ένα ποτενσιόμετρο για τον έλεγχο της ταχύτητας και της κατεύθυνσης του κινητήρα DC με δύο κουμπιά. Δείτε ένα βίντεο επίδειξης
Ρομπότ παρακολούθησης χρώματος με βάση τον τροχό πολλαπλής κατεύθυνσης και το OpenCV: 6 βήματα
Ρομπότ παρακολούθησης χρωμάτων με βάση τον τροχό παντός κατεύθυνσης και το OpenCV: Χρησιμοποιώ ένα πάνελ κατεύθυνσης τροχών για την υλοποίηση της παρακολούθησης των χρωμάτων μου και χρησιμοποιώ ένα λογισμικό για κινητά που ονομάζεται OpenCVBot. Χάρη στους προγραμματιστές λογισμικού εδώ, ευχαριστούμε. Το OpenCV Bot ανιχνεύει ή παρακολουθεί οποιοδήποτε αντικείμενο σε πραγματικό χρόνο μέσω επεξεργασίας εικόνας
Digitalηφιακή πυξίδα με μαγνητόμετρο Arduino και HMC5883L: 6 βήματα
Digitalηφιακή Πυξίδα χρησιμοποιώντας Arduino και HMC5883L Μαγνητόμετρο: Γεια σας παιδιά, αυτός ο αισθητήρας θα μπορούσε να υποδεικνύει το γεωγραφικό Βορρά, Νότο, Ανατολή και Δύση, εμείς οι άνθρωποι θα μπορούσαμε επίσης να το χρησιμοποιήσουμε κατά περιόδους όταν απαιτείται. Ετσι. Σε αυτό το άρθρο ας προσπαθήσουμε να καταλάβουμε πώς λειτουργεί ο αισθητήρας μαγνητόμετρου και πώς να τον διασυνδέσουμε με έναν μικροελέγχο
Πυξίδα LED και υψόμετρο: 7 βήματα (με εικόνες)
Πυξίδα LED και υψόμετρο: Αντικείμενα με LED πάντα με γοητεύουν. Συνεπώς, αυτό το έργο συνδυάζει τον δημοφιλή ψηφιακό αισθητήρα πυξίδας HMC5883L με 48 LED. Τοποθετώντας τα LED σε κύκλο, το led που φωτίζει είναι η κατεύθυνση προς την οποία κατευθύνεστε. Κάθε 7,5 βαθμοί θα
Πώς να φτιάξετε ένα ΗΚΓ και Digitalηφιακή οθόνη καρδιακού ρυθμού: 6 βήματα
Πώς να φτιάξετε ένα ΗΚΓ και Digitalηφιακό Παρατηρητήριο Καρδιακού Ρυθμού: Ένα ηλεκτροκαρδιογράφημα (ΗΚΓ) μετρά την ηλεκτρική δραστηριότητα του καρδιακού παλμού για να δείξει πόσο γρήγορα χτυπά η καρδιά καθώς και τον ρυθμό της. Υπάρχει μια ηλεκτρική ώθηση, γνωστή και ως κύμα, που ταξιδεύει μέσα από την καρδιά για να κάνει τον καρδιακό μυ