
Το μαγνητόμετρο HMC5883L είναι ένας αισθητήρας που χρησιμοποιείται ευρέως σε έργα Arduino για την ικανότητά του να μετράει μαγνητικά πεδία σε τρεις άξονες. Αυτό το καθιστά εξαιρετική επιλογή για τη δημιουργία ψηφιακών πυξίδων, συστημάτων πλοήγησης για drones και άλλων αυτόνομων οχημάτων. Εκτός του ότι είναι προσιτό, η ενσωμάτωσή του είναι απλή χάρη στη διεπαφή I2C, καθιστώντας το ιδανικό για αρχάριους.
Σε αυτό το άρθρο θα εμβαθύνουμε στα κύρια χαρακτηριστικά του HMC5883L, τη σύνδεσή του με διάφορες πλακέτες Arduino και πρακτικά παραδείγματα για τη χρήση του. Στο τέλος, θα μπορείτε να υλοποιήσετε το δικό σας έργο ψηφιακής πυξίδας με το Arduino, εκμεταλλευόμενοι όλες τις δυνατότητες αυτού του ισχυρού αισθητήρα.
Τι είναι το HMC5883L και πώς λειτουργεί;
Το HMC5883L είναι α μαγνητόμετρο τριών αξόνων που μετρά τις συνιστώσες του μαγνητικού πεδίου της Γης στους άξονες X, Y και Z Αυτό επιτρέπει όχι μόνο να ανιχνευθεί η παρουσία μαγνητικών πεδίων, αλλά επιτρέπει επίσης τον προσδιορισμό του προσανατολισμού μέσω υπολογισμών με βάση τις μετρήσεις που λαμβάνονται. Αυτά τα χαρακτηριστικά τον καθιστούν τον ιδανικό αισθητήρα για την κατασκευή συστημάτων προσανατολισμού, όπως μια ψηφιακή πυξίδα.
Ο αισθητήρας βρίσκεται συνήθως σε μονάδες όπως το μοντέλο GY-273, το οποίο περιλαμβάνει επίσης τα απαραίτητα ηλεκτρονικά για τη διευκόλυνση της άμεσης σύνδεσής του με πλακέτες Arduino ή άλλους μικροελεγκτές. Το τροφοδοτικό του είναι ευέλικτο και μπορεί να τροφοδοτηθεί τόσο με 3.3V όσο και με 5V, γεγονός που το καθιστά πολύ ευέλικτο όσον αφορά τη συμβατότητα με διαφορετικά συστήματα.
Συνδέσεις με το Arduino
Η σύνδεση του HMC5883L με το Arduino είναι πολύ απλή χάρη στη διεπαφή I2C που χρησιμοποιεί. Αυτή η επικοινωνία απαιτεί μόνο δύο καρφίτσες: SDA και SCL, το οποίο πρέπει να συνδεθεί με τις αντίστοιχες ακίδες στην πλακέτα του Arduino.
- να Arduino Uno, Nano και Mini: Το SDA συνδέεται στον ακροδέκτη A4 και το SCL στο A5.
- Εάν χρησιμοποιείτε Arduino Mega ή Due: Το SDA πρέπει να είναι συνδεδεμένο στον ακροδέκτη 20 και το SCL στον ακροδέκτη 21.
- Στην περίπτωση του Arduino Leonardo: Το SDA πηγαίνει στον ακροδέκτη 2 και το SCL στον ακροδέκτη 3.
Ας μην ξεχνάμε ότι το μαγνητόμετρο λειτουργεί με σταθερή διεύθυνση I2C 0x1E, οπότε δεν είναι δυνατή η αλλαγή του. Αυτή η διεύθυνση είναι μοναδική για αυτόν τον τύπο αισθητήρα, πράγμα που σημαίνει ότι δεν μπορούμε να συνδέσουμε πολλές συσκευές HMC5883L στον ίδιο δίαυλο I2C.
Ανάγνωση Μαγνητικού Πεδίου
Η κύρια μέθοδος λειτουργίας του HMC5883L είναι η ανάγνωση των τιμών του μαγνητικού πεδίου και στους τρεις άξονες. Για να λάβουμε αυτές τις τιμές σε ένα Arduino, χρησιμοποιούμε μια βιβλιοθήκη που αναπτύχθηκε από τον Jeff Rowberg. Μπορείτε να βρείτε αυτό το βιβλιοπωλείο στο το αποθετήριο GitHub και κατεβάστε το για χρήση στο Arduino IDE.
Μόλις εγκατασταθεί η βιβλιοθήκη, ο αισθητήρας μπορεί να αρχικοποιηθεί και να αρχίσει να διαβάζει τις τιμές του μαγνητικού πεδίου. Εδώ είναι ένα απλό παράδειγμα που κάνει ακριβώς αυτό:
#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;
void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}
void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}
Σε αυτόν τον κωδικό, το μαγνητόμετρο αρχικοποιείται και οι τιμές και στους τρεις άξονες διαβάζονται σε βρόχο. Κάθε φορά που εκτελούμε το «loop()», οι τιμές του μαγνητικού πεδίου σε X, Y και Z θα εμφανίζονται στη σειριακή οθόνη.
Ρυθμίσεις εύρους και κέρδους
Το HMC5883L σας επιτρέπει να προσαρμόσετε το περιοχή μέτρησης μαγνητικού πεδίου μεταξύ ±0.88 Gauss και ±8.1 Gauss με διαφορετικά επίπεδα απολαβής. Το προεπιλεγμένο εύρος είναι ±1.3 Gauss και μπορείτε να το τροποποιήσετε ώστε να ταιριάζει στις ανάγκες του έργου σας. Αυτό μπορεί να γίνει χρησιμοποιώντας την ακόλουθη γραμμή μέσα στον κώδικα:
magnetometro.setGain(value);
Όπου αξία είναι ένας ακέραιος αριθμός μεταξύ 0 και 7, ο οποίος θα επιλέξει το επίπεδο κέρδους. Παρακάτω σας παρουσιάζουμε έναν πίνακα με τις αντίστοιχες τιμές:
| αξία | Rango | Κέρδος (LSB/Gauss) |
|---|---|---|
| 0 | ±0.88Ga | 1370 |
| 1 | ±1.3Ga | 1090 |
| 2 | ±1.9Ga | 820 |
| 3 | ±2.5Ga | 660 |
| 4 | ±4.0Ga | 440 |
| 5 | ±4.7Ga | 390 |
| 6 | ±5.6Ga | 330 |
| 7 | ±8.1Ga | 230 |
Κατασκευή ψηφιακής πυξίδας
Μία από τις πιο κοινές χρήσεις του HMC5883L είναι η κατασκευή α ψηφιακή πυξίδα. Για να γίνει αυτό, πρέπει να υπολογίσουμε τη γωνία μεταξύ του αισθητήρα και του μαγνητικού βορρά χρησιμοποιώντας τις ενδείξεις των αξόνων X και Y Αυτό επιτυγχάνεται χρησιμοποιώντας τον τύπο:
float angulo = atan2(my, mx) * 180 / M_PI;
Αυτή η τιμή θα σας δώσει τη γωνία προσανατολισμού σε σχέση με τον μαγνητικό Βορρά. Για να ρυθμίσετε αυτή τη γωνία σε γεωγραφικός βορράς, πρέπει να λάβετε υπόψη τη μαγνητική απόκλιση της τοποθεσίας σας, την οποία μπορείτε να συμβουλευτείτε σε διαφορετικούς ιστότοπους όπως www.ign.es ή www.ngdc.noaa.gov.
Σωστή μαγνητική απόκλιση
Μόλις έχετε τη μαγνητική απόκλιση της θέσης σας, πρέπει απλώς να την αφαιρέσετε από τη γωνία που λαμβάνεται. Για παράδειγμα:
angulo -= declinacion;
Όταν η γωνία είναι αρνητική, μπορείτε να προσθέσετε 360 μοίρες για να λαμβάνετε πάντα μια θετική τιμή προσαρμοσμένη μεταξύ 0 και 360 μοιρών:
if (angulo < 0) angulo += 360;
Αυτή η ρύθμιση θα σας δώσει μια πυξίδα που θα δείχνει πάντα με ακρίβεια στον γεωγραφικό Βορρά.
Στην πράξη, με αυτόν τον αισθητήρα και μερικές βιβλιοθήκες μπορείτε να έχετε μια πυξίδα μέσα σε λίγα λεπτά. Ωστόσο, σημειώστε ότι το HMC5883L είναι ένας αισθητήρας ευαίσθητος σε εξωτερικές παρεμβολές, όπως κοντινά μέταλλα ή πεδία που δημιουργούνται από υψηλά ρεύματα, τα οποία μπορούν να αλλάξουν τις ενδείξεις.