Πίνακας περιεχομένων:
- Βήμα 1: Απαιτούνται εξαρτήματα
- Βήμα 2: Πηγαίος κώδικας Arduino
- Βήμα 3: Επεξεργασία πηγαίου κώδικα IDE
Βίντεο: Έργο ψηφιακής πυξίδας Arduino: 3 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Γειά σου! Σε αυτό το διδακτικό θα δείτε πώς μπορείτε να φτιάξετε μια Compηφιακή Πυξίδα χρησιμοποιώντας ένα Arduino και το IDE επεξεργασίας. Αυτό είναι αρκετά απλό αλλά ενδιαφέρον και δροσερό Arduino Project.
Μπορείτε να παρακολουθήσετε το παράδειγμα επίδειξης αυτού του σεμιναρίου στο παραπάνω βίντεο. Μπορείτε πάντα να βρείτε πιο ενδιαφέροντα βίντεο όπως αυτό στο κανάλι μου στο YouTube, καθώς και να βρείτε πολλά ηλεκτρονικά έργα και σεμινάρια στον ιστότοπό μου, HowToMechatronics.com
Βήμα 1: Απαιτούνται εξαρτήματα
Για αυτό το έργο θα χρειαστείτε μόνο έναν πίνακα Arduino και ένα μαγνητόμετρο MEMS, για τη μέτρηση του μαγνητικού πεδίου της γης. Θα χρησιμοποιήσω το GY -80 breakout board που περιέχει το MC5883L 3 - Axis Magnetometer.
Πριν συνεχίσουμε με τον πηγαίο κώδικα για το έργο Εάν χρειάζεστε περισσότερες λεπτομέρειες για το πώς λειτουργεί το μαγνητόμετρο MEMS καθώς και πώς να συνδέσετε και να χρησιμοποιήσετε τον πίνακα ανάρτησης GY - 80 μέσω της επικοινωνίας I2C, μπορείτε να ελέγξετε τα συγκεκριμένα σεμινάρια μου για αυτό.
Βήμα 2: Πηγαίος κώδικας Arduino
Αυτό που πρέπει να κάνουμε πρώτα είναι να ανεβάσουμε ένα σκίτσο στον πίνακα Arduino που θα διαβάζει τα δεδομένα από το μαγνητόμετρο και θα τα στέλνει στο IDE επεξεργασίας. Ακολουθεί ο πηγαίος κώδικας Arduino:
/ * Arduino Compass * * του Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // I2C Arduino Library
#define Magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float heading, heading Βαθμοί, τίτλος Φιλτραρισμένος, απόκλιση.
float Xm, Ym, Zm?
#define Magnetometer 0x1E // I2C 7bit address of HMC5883
void setup () {
// Αρχικοποίηση σειριακών και επικοινωνιών I2C Serial.begin (115200); Wire.begin (); καθυστέρηση (100)? Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Επιλέξτε καταχώριση λειτουργίας Wire.write (0x00); // Λειτουργία συνεχούς μέτρησης Wire.endTransmission (); }
void loop () {
// ---- X-Axis Wire.beginTransmission (Magnetometer); // μετάδοση στη συσκευή Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Μαγνητόμετρο); // μετάδοση στη συσκευή Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1)? εάν (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Άξονας Υ
Wire.beginTransmission (Magnetometer); // μετάδοση στη συσκευή Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1)? if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Μαγνητόμετρο); // μετάδοση στη συσκευή Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1)? if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometer); // μετάδοση στη συσκευή Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1)? if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Μαγνητόμετρο); // μετάδοση στη συσκευή Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-Axis mX1 = mX1 << 8; mX_out = mX0+mX1; // Ακατέργαστα δεδομένα // Από το φύλλο δεδομένων: 0.92 mG/ψηφίο Xm = mX_out*0.00092; // Μονάδα Gauss //* Το μαγνητικό πεδίο της Γης κυμαίνεται από 0,25 έως 0,65 Gauss, επομένως αυτές είναι οι τιμές που πρέπει να πάρουμε περίπου.
// ---- Άξονας Υ
mY1 = mY1 << 8; mY_out = mY0+mY1; Υμ = mY_out*0.00092;
// ---- Z-Axis
mZ1 = mZ1 <0,073 rad απόκλιση = 0,073; επικεφαλίδα += απόκλιση. // Διόρθωση όταν τα σημάδια σέβονται εάν (επικεφαλίδα <0) επικεφαλίδα += 2*PI;
// Διόρθωση λόγω της προσθήκης της γωνίας κλίσης
if (επικεφαλίδα> 2*PI) επικεφαλίδα -= 2*PI.
headingDegrees = επικεφαλίδα * 180/PI; // Ο τίτλος στη μονάδα βαθμών
// Εξομάλυνση της γωνίας εξόδου / Φίλτρο χαμηλής διέλευσης
headingFiltered = headingFiltered*0.85 + heading Degrees*0.15;
// Αποστολή της τιμής επικεφαλίδας μέσω της σειριακής θύρας στο Processing IDE
Serial.println (headingFiltered);
καθυστέρηση (50)? }
Βήμα 3: Επεξεργασία πηγαίου κώδικα IDE
Αφού ανεβάσουμε το προηγούμενο σκίτσο του Arduino, πρέπει να λάβουμε τα δεδομένα στο Processing IDE και να σχεδιάσουμε την Digitalηφιακή Πυξίδα. Η πυξίδα αποτελείται από μια εικόνα φόντου, μια σταθερή εικόνα του βέλους και μια περιστρεφόμενη εικόνα του σώματος της πυξίδας. Έτσι, οι τιμές για το μαγνητικό πεδίο γης που υπολογίζονται με το Arduino χρησιμοποιούνται για την περιστροφή της πυξίδας.
Ακολουθεί ο πηγαίος κώδικας του Processing IDE:
/ * Arduino Compass * * του Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; εισαγωγή java.awt.event. KeyEvent; εισαγωγή java.io. IOException;
Σειριακό myPort;
PImage imgCompass; PImage imgCompassArrow; PImage φόντο?
String data = "";
επικεφαλίδα πλωτήρα
void setup () {
μέγεθος (1920, 1080, P3D). λείος(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = νέο Σειριακό (αυτό, "COM4", 115200); // ξεκινά τη σειριακή επικοινωνία myPort.bufferUntil ('\ n'); }
άκυρη κλήρωση () {
εικόνα (φόντο, 0, 0)? // Φορτώνει την εικόνα φόντου pushMatrix (); μετάφραση (πλάτος/2, ύψος/2, 0). // Μεταφράζει το σύστημα συντεταγμένων στο κέντρο της οθόνης, έτσι ώστε η περιστροφή να συμβαίνει ακριβώς στο κέντρο περιστρέφεται Z (ακτίνια (-κατηγορία)). // Περιστρέφει την πυξίδα γύρω από την εικόνα Z -Axis (imgCompass, -960, -540). // Φορτώνει την εικόνα της πυξίδας και καθώς το σύστημα συντεταγμένων μετατοπίζεται, πρέπει να ορίσουμε την εικόνα σε -960x, -540y (μισό μέγεθος οθόνης) popMatrix (); // Το σύστημα συντεταγμένων φέρνει πίσω στην αρχική του θέση 0, 0, 0 εικόνα (imgCompassArrow, 0, 0). // Φορτώνει την εικόνα CompassArrow η οποία δεν επηρεάζεται από τη λειτουργία rotateZ () λόγω της λειτουργίας popMatrix () textSize (30); κείμενο ("Επικεφαλίδα:" + επικεφαλίδα, 40, 40); // Εκτυπώνει την τιμή της επικεφαλίδας στην οθόνη
καθυστέρηση (40)?
}
// ξεκινά την ανάγνωση δεδομένων από τη σειριακή θύρα
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // διαβάζει τα δεδομένα από τη σειριακή θύρα και τα τοποθετεί στη μεταβλητή συμβολοσειράς "δεδομένα". επικεφαλίδα = float (δεδομένα); // Μετατροπή της τιμής συμβολοσειράς σε τιμή Float}
Ελπίζω να σας αρέσει αυτό το έργο. Αν είναι έτσι, μπορείτε επίσης να επισκεφθείτε τον ιστότοπό μου για πιο δροσερά έργα.
Συνιστάται:
Βηματικό μοτέρ ελεγχόμενο με MIDI με τσιπ άμεσης ψηφιακής σύνθεσης (DDS): 3 βήματα
Stepper Motor με ελεγχόμενο MIDI με τσιπ άμεσης ψηφιακής σύνθεσης (DDS): Έχετε ποτέ κακή ιδέα ότι ΜΟΝΟ έπρεπε να μετατραπεί σε ένα μίνι έργο; Λοιπόν, έπαιζα με ένα σκίτσο που είχα κάνει για το Arduino Due με στόχο τη δημιουργία μουσικής με μια μονάδα AD9833 Direct Digital Synthesis (DDS) … και κάποια στιγμή σκέφτηκα ότι
Προσθήκη ψηφιακής οθόνης σε παλιό δέκτη επικοινωνιών: 6 βήματα (με εικόνες)
Προσθήκη ψηφιακής οθόνης σε παλιό δέκτη επικοινωνιών: Ένα από τα μειονεκτήματα της χρήσης παλαιότερου εργαλείου επικοινωνίας είναι το γεγονός ότι ο αναλογικός επιλογέας δεν είναι πολύ ακριβής. Μαντεύετε πάντα τη συχνότητα που λαμβάνετε. Στις ζώνες AM ή FM, αυτό γενικά δεν αποτελεί πρόβλημα επειδή συνήθως
Σεμινάριο για τον αισθητήρα πυξίδας διασύνδεσης HMC5883L με Arduino: 10 βήματα (με εικόνες)
Οδηγίες για τον αισθητήρα πυξίδας διασύνδεσης HMC5883L με Arduino: Περιγραφή Το HMC5883L είναι μια ψηφιακή πυξίδα 3 αξόνων που χρησιμοποιείται για δύο γενικούς σκοπούς: για τη μέτρηση της μαγνήτισης ενός μαγνητικού υλικού όπως ένας σιδηρομαγνήτης ή για τη μέτρηση της αντοχής και, σε ορισμένες περιπτώσεις, της κατεύθυνσης του μαγνητικό πεδίο σε ένα σημείο της
ESPcopter και Visuino - Μετατροπή επικεφαλίδας πυξίδας σε τρισδιάστατη γωνία: 6 βήματα
ESPcopter και Visuino - Μετατρέψτε την Πυξίδα σε Τρισδιάστατη Γωνία: Το ESPcopter υποστηρίζεται πλέον πλήρως από την τελευταία έκδοση του Visuino, και αυτό το καθιστά ίσως το πιο εύκολο στον προγραμματισμό drone που υπάρχει! :-) Με την υποστήριξή του στο Visuino μπορείτε να ελέγχετε τους κινητήρες, το LED, συνεργαστείτε με το Επιταχυνσιόμετρο, Gyr
Καυστήρας με τροφοδοσία USB! Αυτό το έργο μπορεί να καεί μέσω πλαστικών / ξύλου / χαρτιού (το διασκεδαστικό έργο πρέπει επίσης να είναι πολύ λεπτό ξύλο): 3 βήματα
Καυστήρας με τροφοδοσία USB! Αυτό το έργο μπορεί να καεί μέσω πλαστικών / ξύλου / χαρτιού (το διασκεδαστικό έργο πρέπει επίσης να είναι πολύ λεπτό ξύλο): ΜΗΝ ΚΑΝΕΤΕ ΑΥΤΟ ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ USB !!!! διαπίστωσα ότι μπορεί να βλάψει τον υπολογιστή σας από όλα τα σχόλια. ο υπολογιστης μου ειναι μια χαρα Χρησιμοποιήστε φορτιστή τηλεφώνου 600ma 5v. το χρησιμοποίησα και δουλεύει μια χαρά και τίποτα δεν μπορεί να καταστραφεί αν χρησιμοποιήσετε βύσμα ασφαλείας για να διακόψετε την τροφοδοσία