Πίνακας περιεχομένων:

Έργο ψηφιακής πυξίδας Arduino: 3 βήματα
Έργο ψηφιακής πυξίδας Arduino: 3 βήματα

Βίντεο: Έργο ψηφιακής πυξίδας Arduino: 3 βήματα

Βίντεο: Έργο ψηφιακής πυξίδας Arduino: 3 βήματα
Βίντεο: Δημιουργία πλακέτας, μέθοδος σιδερώματος, αποχάλκωση 2024, Ιούλιος
Anonim
Image
Image

Γειά σου! Σε αυτό το διδακτικό θα δείτε πώς μπορείτε να φτιάξετε μια 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}

Ελπίζω να σας αρέσει αυτό το έργο. Αν είναι έτσι, μπορείτε επίσης να επισκεφθείτε τον ιστότοπό μου για πιο δροσερά έργα.

Συνιστάται: