مقياس المغناطيسية HMC5883L هو مستشعر يستخدم على نطاق واسع في مشاريع Arduino لقدرته على قياس المجالات المغناطيسية في ثلاثة محاور. وهذا يجعلها خيارًا ممتازًا لإنشاء بوصلات رقمية وأنظمة ملاحة للطائرات بدون طيار وغيرها من المركبات ذاتية القيادة. بالإضافة إلى كونه ميسور التكلفة، فإن تكامله بسيط بفضل واجهة I2C، مما يجعله مثاليًا للمبتدئين.
في هذه المقالة سوف نتعمق في الميزات الرئيسية لـ HMC5883L، وارتباطه بمختلف لوحات Arduino والأمثلة العملية لاستخدامه. في النهاية، ستتمكن من تنفيذ مشروع البوصلة الرقمية الخاص بك باستخدام Arduino، مع الاستفادة من الإمكانات الكاملة لهذا المستشعر القوي.
ما هو HMC5883L وكيف يعمل؟
HMC5883L هو أ مقياس مغناطيسي ثلاثي المحاور والذي يقيس مكونات المجال المغناطيسي للأرض في المحاور X وY وZ، وهذا لا يسمح باكتشاف وجود المجالات المغناطيسية فحسب، بل يسمح أيضًا بتحديد الاتجاه من خلال الحسابات بناءً على القياسات التي تم الحصول عليها. هذه الخصائص تجعله المستشعر المثالي لصنع أنظمة التوجيه، مثل البوصلة الرقمية.
عادة ما يتم العثور على المستشعر في وحدات مثل طراز GY-273، والذي يتضمن أيضًا الإلكترونيات اللازمة لتسهيل اتصاله المباشر مع لوحات Arduino أو وحدات التحكم الدقيقة الأخرى. يتميز مصدر الطاقة الخاص به بالمرونة، ويمكن تشغيله بجهد 3.3 فولت و5 فولت، مما يجعله متعدد الاستخدامات للغاية من حيث التوافق مع الأنظمة المختلفة.
اتصالات مع اردوينو
يعد توصيل 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 هي قراءة قيم المجال المغناطيسي في جميع المحاور الثلاثة. للحصول على هذه القيم على الاردوينو نستخدم مكتبة تم تطويرها بواسطة 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);
}
في هذا الكود، تتم تهيئة مقياس المغناطيسية وتتم قراءة القيم على المحاور الثلاثة في حلقة. في كل مرة ننفذ فيها `الحلقة()`، سيتم عرض قيم المجال المغناطيسي في X وY وZ على الشاشة التسلسلية.
إعدادات النطاق والكسب
يسمح لك HMC5883L بضبط نطاق قياس المجال المغناطيسي بين ±0.88 غاوس و±8.1 غاوس مع مستويات كسب مختلفة. النطاق الافتراضي هو ±1.3 غاوس، ويمكنك تعديله ليناسب احتياجات مشروعك. يمكن القيام بذلك باستخدام السطر التالي داخل الكود:
magnetometro.setGain(value);
حيث قيمنا هو عدد صحيح بين 0 و7، والذي سيحدد مستوى الكسب. نعرض لك أدناه جدولاً بالقيم المقابلة:
بسالة | مرتبة | الربح (LSB/غاوس) |
---|---|---|
0 | ±0.88 جيجا | 1370 |
1 | ±1.3 جيجا | 1090 |
2 | ±1.9 جيجا | 820 |
3 | ±2.5 جيجا | 660 |
4 | ±4.0 جيجا | 440 |
5 | ±4.7 جيجا | 390 |
6 | ±5.6 جيجا | 330 |
7 | ±8.1 جيجا | 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 عبارة عن مستشعر حساس للتداخل الخارجي، مثل المعادن القريبة أو الحقول الناتجة عن التيارات العالية، والتي يمكن أن تغير القراءات.