الدليل الكامل لاستخدام HMC5883L مع Arduino

  • اتصال HMC5883L مع Arduino عبر اتصال I2C.
  • رمز لقراءة محاور X، Y، Z للمجال المغناطيسي.
  • إنشاء بوصلة رقمية عن طريق ضبط الانحراف المغناطيسي.

كود hmc5883l اردوينو-3

مقياس المغناطيسية HMC5883L هو مستشعر يستخدم على نطاق واسع في مشاريع Arduino لقدرته على قياس المجالات المغناطيسية في ثلاثة محاور. وهذا يجعلها خيارًا ممتازًا لإنشاء بوصلات رقمية وأنظمة ملاحة للطائرات بدون طيار وغيرها من المركبات ذاتية القيادة. بالإضافة إلى كونه ميسور التكلفة، فإن تكامله بسيط بفضل واجهة I2C، مما يجعله مثاليًا للمبتدئين.

في هذه المقالة سوف نتعمق في الميزات الرئيسية لـ HMC5883L، وارتباطه بمختلف لوحات Arduino والأمثلة العملية لاستخدامه. في النهاية، ستتمكن من تنفيذ مشروع البوصلة الرقمية الخاص بك باستخدام Arduino، مع الاستفادة من الإمكانات الكاملة لهذا المستشعر القوي.

ما هو HMC5883L وكيف يعمل؟

يُعدّ جهاز HMC5883L مقياسًا مغناطيسيًا ثلاثي المحاور يقيس مركبات المجال المغناطيسي للأرض على طول المحاور X وY وZ. ولا يقتصر دوره على رصد المجالات المغناطيسية فحسب، بل يُمكّن أيضًا من تحديد الاتجاه من خلال حسابات تستند إلى القياسات المُحصلة. هذه الخصائص تجعله المستشعر الأمثل لإنشاء أنظمة تحديد الاتجاه، مثل البوصلة الرقمية.

عادة ما يتم العثور على المستشعر في وحدات مثل طراز GY-273، والذي يتضمن أيضًا الإلكترونيات اللازمة لتسهيل اتصاله المباشر مع لوحات Arduino أو وحدات التحكم الدقيقة الأخرى. يتميز مصدر الطاقة الخاص به بالمرونة، ويمكن تشغيله بجهد 3.3 فولت و5 فولت، مما يجعله متعدد الاستخدامات للغاية من حيث التوافق مع الأنظمة المختلفة.

اتصالات مع اردوينو

يُعدّ توصيل شريحة HMC5883L بلوحة أردوينو أمرًا في غاية السهولة بفضل واجهة I2C الخاصة بها. لا يتطلب هذا الاتصال سوى منفذين: SDA و SCL ، واللذان يجب توصيلهما بالمنافذ المقابلة على لوحة أردوينو.

  • إلى 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 في قراءة قيم المجال المغناطيسي على ثلاثة محاور. وللحصول على هذه القيم على أردوينو، نستخدم مكتبة برمجية طورها جيف روبرغ. يمكنك العثور على هذه المكتبة في مستودعه على GitHub وتنزيلها لاستخدامها مع بيئة تطوير أردوينو المتكاملة (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);

حيث يمثل `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 عبارة عن مستشعر حساس للتداخل الخارجي، مثل المعادن القريبة أو الحقول الناتجة عن التيارات العالية، والتي يمكن أن تغير القراءات.


أضف كمصدر مفضل في جوجل