Compass (πυξίδα) στο smartphone είναι ένας ψηφιακός αισθητήρας βασισμένος σε μαγνητόμετρο που καθορίζει την κατεύθυνση προς τους μαγνητικούς πόλους της Γης. Η τεχνολογία επιτρέπει σε εφαρμογές πλοήγησης, χαρτογραφίας και επαυξημένης πραγματικότητας να προσδιορίζουν με ακρίβεια τον προσανατολισμό της συσκευής στο χώρο. Σύμφωνα με δεδομένα της STMicroelectronics, 2025, τα σύγχρονα MEMS-μαγνητόμετρα παρέχουν ακρίβεια προσδιορισμού κατεύθυνσης έως 1–2 μοίρες.
Βασικά σημεία
Ψηφιακή πυξίδα (compass) στο smartphone είναι ένας αισθητήρας βασισμένος σε μαγνητόμετρο που μετρά την ένταση του μαγνητικού πεδίου της Γης και καθορίζει το αζιμούθιο (γωνία σε σχέση με τον μαγνητικό βορρά). Σε αντίθεση με τη μηχανική πυξίδα, η ψηφιακή πυξίδα χρησιμοποιεί μικροηλεκτρομηχανικά συστήματα (MEMS) για την καταγραφή του μαγνητικού πεδίου. Το μαγνητόμετρο μετρά το πεδίο κατά τρεις άξονες, επιτρέποντας τον σωστό προσδιορισμό της κατεύθυνσης σε οποιαδήποτε κλίση του smartphone.
Το σύγχρονο MEMS-μαγνητόμετρο είναι ένα μικροτσίπ διαστάσεων 2×2×1 mm, ενσωματωμένο στο σώμα του smartphone μαζί με το επιταχυνσιόμετρο και το γυροσκόπιο (ως μέρος ενός 9-αξονικού IMU). Ο αισθητήρας μετρά όχι μόνο την κατεύθυνση αλλά και την ένταση του μαγνητικού πεδίου της Γης (25–65 µT ανάλογα με το γεωγραφικό πλάτος). Η παρουσία μεταλλικών αντικειμένων και παρασιτικών μαγνητικών πεδίων από τα ηχεία, τον κινητήρα δόνησης και την κάμερα προκαλεί παραμορφώσεις, επομένως για ακριβή λειτουργία απαιτείται λογισμική διόρθωση των μετρήσεων.
Οι πρώτες ψηφιακές πυξίδες σε κινητά τηλέφωνα εμφανίστηκαν το 2009 με την κυκλοφορία του iPhone 3GS — του πρώτου smartphone με ενσωματωμένο μαγνητόμετρο. Σήμερα, το μαγνητόμετρο εγκαθίσταται στη συντριπτική πλειοψηφία των smartphone, συμπεριλαμβανομένων των οικονομικών μοντέλων. Σύμφωνα με την Yole Group, η αγορά MEMS-μαγνητομέτρων για φορητές συσκευές υπερβαίνει τα 1,5 δισεκατομμύρια τεμάχια ετησίως, γεγονός που επιβεβαιώνει τη ζήτηση για αυτήν την τεχνολογία.
Η βάση του MEMS-μαγνητομέτρου είναι ένα ευαίσθητο στοιχείο που αλλάζει τα ηλεκτρικά του χαρακτηριστικά υπό την επίδραση εξωτερικού μαγνητικού πεδίου. Στα σύγχρονα smartphone χρησιμοποιείται το φαινόμενο Hall ή το μαγνητοαντιστατικό φαινόμενο (AMR — Anisotropic Magneto-Resistance). Η αρχή βασίζεται στο γεγονός ότι ένα υλικό που φέρει ρεύμα αλλάζει την αντίστασή του υπό την επίδραση μαγνητικού πεδίου, και από την αλλαγή τάσης υπολογίζεται το διάνυσμα του μαγνητικού πεδίου.
Οι αισθητήρες που βασίζονται στο φαινόμενο Hall καταγράφουν την αλλαγή τάσης στις άκρες της ημιαγωγικής πλάκας, που προκύπτει υπό την επίδραση της δύναμης Lorentz στα κινούμενα φορτία. Οι μαγνητοαντιστατικοί αισθητήρες (AMR) χρησιμοποιούν ένα στρώμα permalloy (NiFe), του οποίου η αντίσταση εξαρτάται από την κατεύθυνση του μαγνητικού πεδίου. Οι αισθητήρες AMR παρέχουν μικρότερο μέγεθος και υψηλότερη ευαισθησία σε σύγκριση με τους αισθητήρες Hall, επομένως κυριαρχούν στα σύγχρονα smartphone.
| Τύπος | Ευαισθησία | Κατανάλωση ενέργειας | Μέγεθος |
|---|---|---|---|
| Hall | Μέτρια | Χαμηλή | Μέτριο |
| AMR | Υψηλή | Χαμηλή | Μικρό |
| GMR | Πολύ υψηλή | Μέτρια | Μικρό |
Τα δεδομένα από το μαγνητόμετρο συνδυάζονται με τις μετρήσεις του επιταχυνσιόμετρου για τη διόρθωση της κλίσης και τον προσδιορισμό της κατεύθυνσης του βορρά στο οριζόντιο επίπεδο. Ο αλγόριθμος σύντηξης αισθητήρων (sensor fusion) χρησιμοποιεί το φίλτρο Madgwick ή το φίλτρο Kalman για τον συνδυασμό δεδομένων μαγνητομέτρου, γυροσκοπίου και επιταχυνσιόμετρου. Αυτό επιτρέπει τη λήψη σταθερού και ακριβούς αζιμουθίου ακόμη και κατά τη διάρκεια γρήγορων περιστροφών και κραδασμών της συσκευής.
Στη φορητή βιομηχανία χρησιμοποιούνται τρεις κύριοι τύποι MEMS-μαγνητομέτρων: βασισμένοι στο φαινόμενο Hall, ανισότροποι μαγνητοαντιστατικοί (AMR) και γιγάντιοι μαγνητοαντιστατικοί (GMR). Τα AMR-μαγνητόμετρα είναι τα πιο διαδεδομένα στα smartphone χάρη στον βέλτιστο συνδυασμό ευαισθησίας, κατανάλωσης ενέργειας και κόστους. Κορυφαίοι κατασκευαστές — AKM (Asahi Kasei Microdevices), STMicroelectronics και Bosch Sensortec.
Η ευαισθησία ενός AMR-μαγνητομέτρου ενός τυπικού smartphone είναι 0,3–1 µT με δυναμικό εύρος ±1000 µT (±8 Gauss), αρκετό για ακριβή μέτρηση του πεδίου της Γης (30–65 µT) και αντιστάθμιση παρασιτικών πεδίων. Η συχνότητα δειγματοληψίας του αισθητήρα μπορεί να φτάσει τα 100–200 Hz, αλλά οι περισσότερες εφαρμογές χρησιμοποιούν 10–50 Hz για εξοικονόμηση ενέργειας. Η αυτόματη αντιστάθμιση θερμοκρασίας και παραμορφώσεων τάσης του σώματος υλοποιείται σε επίπεδο οδηγού αισθητήρα.
Βαθμονόμηση πυξίδας — η διαδικασία αντιστάθμισης των παρασιτικών μαγνητικών πεδίων που δημιουργούνται από τα εξαρτήματα του smartphone: ηχεία, κινητήρα δόνησης, κάμερα και μπαταρία. Χωρίς βαθμονόμηση, οι μετρήσεις του μαγνητομέτρου μπορεί να αποκλίνουν από την πραγματική κατεύθυνση κατά 10–30 μοίρες. Το σύστημα βαθμονόμησης καθορίζει τον πίνακα μετατόπισης (hard-iron bias) κατά τρεις άξονες και τον εφαρμόζει για τη διόρθωση όλων των επόμενων μετρήσεων.
Η τυπική μέθοδος βαθμονόμησης πυξίδας — σχεδίαση ενός οκτώ: ο χρήστης περιστρέφει το smartphone σε μια τροχιά που μοιάζει με τον αριθμό 8. Κατά τη διάρκεια της κίνησης, ο αισθητήρας καταγράφει το μαγνητικό πεδίο σε όλους τους πιθανούς προσανατολισμούς, και ο αλγόριθμος συλλέγει σημεία και προσεγγίζει μια σφαίρα με κέντρο μετατοπισμένο σε σχέση με το μηδέν. Η ακτίνα της σφαίρας αντιστοιχεί στο μέγεθος του μαγνητικού πεδίου της Γης, και το κέντρο — στο διάνυσμα παρασιτικής μετατόπισης. Μετά την προσέγγιση, το σύστημα υπολογίζει συντελεστές διόρθωσης για κάθε άξονα.
Οι σύγχρονοι αλγόριθμοι βαθμονόμησης από τις Qualcomm και MediaTek εκτελούν συνεχή βαθμονόμηση παρασκηνίου χωρίς τη συμμετοχή του χρήστη. Αναλύουν τις αλλαγές στο μαγνητικό πεδίο κατά την περιστροφή της συσκευής και ενημερώνουν αυτόματα τις παραμέτρους διόρθωσης. Εάν ο αισθητήρας ανιχνεύσει ένα νέο παρασιτικό πεδίο (π.χ. κατά την τοποθέτηση μαγνητικής θήκης), το σύστημα ξεκινά εκ νέου βαθμονόμηση εντός 1–2 δευτερολέπτων συνεχούς κίνησης της συσκευής.
Ψηφιακή πυξίδα χρησιμοποιείται σε ένα ευρύ φάσμα φορητών εφαρμογών. Η κύρια εφαρμογή — υπηρεσίες πλοήγησης και χαρτογράφησης (Google Maps, Yandex.Maps, 2GIS) που καθορίζουν τον προσανατολισμό της συσκευής στον χάρτη για τη σωστή εμφάνιση της κατεύθυνσης κίνησης του χρήστη. Σε εφαρμογές επαυξημένης πραγματικότητας (AR) η πυξίδα εξασφαλίζει σωστή τοποθέτηση εικονικών αντικειμένων σε σχέση με τα σημεία του ορίζοντα.
Σε αστρονομικές εφαρμογές (Star Walk, SkySafari) η πυξίδα σε συνδυασμό με το επιταχυνσιόμετρο καθορίζει την κατεύθυνση προς την οποία είναι στραμμένο το smartphone και εμφανίζει την αντίστοιχη περιοχή του έναστρου ουρανού. Οι εφαρμογές ψαρέματος και τουρισμού χρησιμοποιούν την πυξίδα για τη σήμανση σημείων ενδιαφέροντος στον χάρτη με αναφορά στο αζιμούθιο. Η παρακολούθηση φυσικής κατάστασης με GPS χρησιμοποιεί τις μετρήσεις της πυξίδας για τον προσδιορισμό της κατεύθυνσης τρεξίματος ή ποδηλασίας, αυξάνοντας την ακρίβεια εμφάνισης της διαδρομής.
Για πρόσβαση στην ψηφιακή πυξίδα σε Android χρησιμοποιείται ο αισθητήρας TYPE_MAGNETIC_FIELD από το Sensor API. Οι προγραμματιστές καταχωρούν έναν ακροατή για αλλαγές στις μετρήσεις του μαγνητομέτρου και λαμβάνουν έναν πίνακα τιμών έντασης μαγνητικού πεδίου κατά τρεις άξονες σε μικροΤέσλα. Για τον προσδιορισμό του αζιμουθίου, τα δεδομένα μαγνητομέτρου συνδυάζονται με δεδομένα επιταχυνσιόμετρου μέσω του πίνακα περιστροφής sensor fusion.
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
class CompassManager(
private val sensorManager: SensorManager
) : SensorEventListener {
private val magnetometer = FloatArray(3)
private val accelerometer = FloatArray(3)
private val rotationMatrix = FloatArray(9)
private val orientation = FloatArray(3)
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) {
event.values.copyInto(magnetometer)
} else if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
event.values.copyInto(accelerometer)
}
SensorManager.getRotationMatrix(
rotationMatrix, null,
accelerometer, magnetometer
)
SensorManager.getOrientation(rotationMatrix, orientation)
val azimuth = Math.toDegrees(orientation[0].toDouble())
// αζιμούθιο: 0 = βορράς, 90 = ανατολή, 180 = νότος, 270 = δύση
}
fun start() {
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI)
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
Το αζιμούθιο που λαμβάνεται μέσω getOrientation μετράται σε ακτίνια και μπορεί να λάβει τιμές από -π έως π, όπου το 0 αντιστοιχεί στον μαγνητικό βορρά. Για εμφάνιση στην οθόνη, οι τιμές μετατρέπονται σε μοίρες (Math.toDegrees) με κανονικοποίηση στο εύρος 0–360. Είναι σημαντικό να λαμβάνεται υπόψη η μαγνητική απόκλιση — η γωνία μεταξύ μαγνητικού και πραγματικού (γεωγραφικού) βορρά, η οποία εξαρτάται από τη γεωγραφική θέση και αλλάζει με τον χρόνο. Ο Χάρτης Google διορθώνει αυτόματα την απόκλιση μέσω του GeomagneticField API.
Συχνές Ερωτήσεις
Ψηφιακή πυξίδα χρησιμοποιεί ένα MEMS-μαγνητόμετρο — ένα τσιπ 2×2 mm που μετρά το μαγνητικό πεδίο της Γης κατά τρεις άξονες. Τα δεδομένα μαγνητομέτρου συνδυάζονται με μετρήσεις του επιταχυνσιόμετρου για τον προσδιορισμό του αζιμουθίου — της γωνίας μεταξύ της κατεύθυνσης του βορρά και του προσανατολισμού της συσκευής.
Οι λανθασμένες μετρήσεις της πυξίδας συνήθως προκαλούνται από έλλειψη βαθμονόμησης, μαγνητικές παρεμβολές από τα ηχεία ή τον κινητήρα δόνησης, καθώς και από μαγνητικές θήκες. Λύση — εκτελέστε βαθμονόμηση με κίνηση σχήματος οκτώ ή αφαιρέστε τα μαγνητικά αξεσουάρ. Σε περίπτωση συνεχών σφαλμάτων μπορεί να απαιτηθεί έλεγχος του αισθητήρα.
Ναι, η βαθμονόμηση της πυξίδας είναι απαραίτητη για την αντιστάθμιση των παρασιτικών μαγνητικών πεδίων εντός του smartphone. Στις περισσότερες σύγχρονες συσκευές, η βαθμονόμηση γίνεται αυτόματα στο παρασκήνιο. Για χειροκίνητη βαθμονόμηση, σχεδιάστε με το smartphone ένα οκτώ στον αέρα — το σύστημα θα συλλέξει δεδομένα από όλες τις γωνίες και θα διορθώσει τις μετρήσεις.
Στο Android η πρόσβαση στην πυξίδα γίνεται μέσω του Sensor API με τον αισθητήρα TYPE_MAGNETIC_FIELD. Το αζιμούθιο υπολογίζεται μέσω των SensorManager.getRotationMatrix() και getOrientation(), που συνδυάζουν δεδομένα μαγνητομέτρου και επιταχυνσιόμετρου. Το αζιμούθιο που προκύπτει μπορεί να προσαρμοστεί για εμφάνιση στην οθόνη.
Οι πιο ακριβείς πυξίδες είναι εγκατεστημένες σε smartphone με τριπλό αισθητήρα IMU (μαγνητόμετρο + γυροσκόπιο + επιταχυνσιόμετρο) και ενεργό σύστημα βαθμονόμησης. Προηγούνται οι ναυαρχίδες Google Pixel, Samsung Galaxy S-series και iPhone Pro — χρησιμοποιούν μαγνητόμετρα AKM και Bosch με ευαισθησία 0,3 µT και αυτόματη διόρθωση.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης