لقد تطور عالم أجهزة الاستشعار بالقصور الذاتي بسرعة، وأصبحت أجهزة مثل MPU9250، التي تجمع بين مقياس التسارع والجيروسكوب ومقياس المغناطيسية في وحدة واحدة، قطعة أساسية لمشاريع الروبوتات والطائرات بدون طيار والأنظمة التي تتطلب التقاط الحركات الصغيرة والكبيرة بدقة. في هذه المقالة، سنستكشف كيفية استخدام هذا المستشعر مع Arduino، وما هي ميزاته البارزة، بالإضافة إلى بعض أمثلة التعليمات البرمجية للبدء به.
إن استخدام MPU9250 ليس مفيدًا للهواة فحسب، بل أيضًا للمحترفين الذين يحتاجون إلى قياس الاتجاه والحركة بدقة. ويتيح هذا الحل تطوير أنظمة التثبيت والمركبات ذاتية القيادة والروبوتات التي تتطلب معرفة تحركاتها في المحاور المختلفة. إن تعدد استخدامات المستشعر، إلى جانب دقته وتكلفته المنخفضة، أكسبه سمعة طيبة بين المطورين.
ما هو MPU9250؟
El MPU9250 إنها وحدة تتضمن مقياس التسارع والجيروسكوب ومقياس المغناطيسية على جهاز واحد. باستخدام هذا المزيج، يكون المستشعر قادرًا على قياس كل من التسارع الخطي والسرعة الزاوية والمجال المغناطيسي لبيئته. يتمتع حساس Invensense هذا بـ 9 درجات من الحرية، مما يعني أنه يمكنه القياس في ثلاثة محاور مختلفة، سواء التسارع أو الدوران (الجيروسكوب) أو المجال المغناطيسي (مقياس المغناطيسية)، مما يعطي إمكانية حساب الاتجاه الكامل للجهاز.
تم تصميم الوحدة ل التواصل باستخدام SPI أو I2Cمما يتيح له الاتصال بسهولة بمنصات مفتوحة المصدر مثل Arduino أو Raspberry Pi. علاوة على ذلك، بفضل معالج الحركة الرقمية (DMP)، قادر على إجراء حسابات معقدة لدمج البيانات التي تم الحصول عليها بواسطة أجهزة الاستشعار الثلاثة وتوفير قياسات أكثر دقة.
الملامح الرئيسية للMPU9250
تتميز MPU9250 بوجود عدد كبير من الميزات التي تجعلها وحدة مثيرة جدًا للاهتمام للمشروعات التي تتطلب التقاط حركات دقيقة، ومن بينها:
- مقياس التسارع: نطاق تسارع قابل للتعديل بين ±2 جرام، ±4 جرام، ±8 جرام، و±16 جرام.
- جيروسكوب: نطاق قابل للبرمجة ±250 درجة/ثانية، ±500 درجة/ثانية، ±1000 درجة/ثانية، ±2000 درجة/ثانية.
- مقياس المغناطيسية: حساسية 0.6μT/LSB ونطاق قابل للبرمجة يصل إلى 4800μT.
- المستهلكون: منخفض جدًا، مثالي للأجهزة المحمولة أو الأجهزة التي تتطلب التشغيل لفترات طويلة (3.5 مللي أمبير في الوضع النشط).
ربط وحدة MPU9250 مع الاردوينو
يعد توصيل الوحدة بجهاز Arduino الخاص بك إجراءً بسيطًا بفضل حقيقة أنه يعمل من خلال بروتوكول I2C. هو مخطط اتصال نموذجي بين MPU9250 و Arduino Uno هو:
- VCC: الاتصال بـ 3.3 فولت.
- GND: إلى الأرض (GND).
- SDA: قم بتوصيله بدبوس A4 من Arduino.
- SCL: قم بتوصيله بدبوس A5 من Arduino.
من المهم التأكد من أن الطاقة صحيحة حتى يتمكن المستشعر من العمل بشكل صحيح. تحتوي معظم الوحدات بالفعل على منظم جهد لتتمكن من استخدام 5V من Arduino دون إتلافه.
أمثلة التعليمات البرمجية لـ MPU9250
نوضح لك أدناه كيف يمكنك البدء في برمجة MPU9250 في Arduino، وقراءة البيانات من مقياس التسارع والجيروسكوب ومقياس المغناطيسية. المكتبة MPU9250.h
إنه مفيد جدًا لتسهيل البرمجة، وفي مثالنا نوضح بالتفصيل كيفية قراءة البيانات الأولية:
#include <Wire.h>
#include <MPU9250.h>
MPU9250 imu(Wire, 0x68);
void setup() {
Wire.begin();
Serial.begin(115200);
if (imu.begin() != 0) {
Serial.println("Error al iniciar MPU9250");
} else {
Serial.println("MPU9250 iniciado");
}
}
void loop() {
imu.readSensor();
Serial.print("Aceleracion: ");
Serial.print(imu.getAccelX_mss());
Serial.print(", ");
Serial.print(imu.getAccelY_mss());
Serial.print(", ");
Serial.print(imu.getAccelZ_mss());
Serial.println();
delay(1000);
}
يقرأ هذا الرمز المكونات الثلاثة للتسارع. يمكن إجراء قراءات الجيروسكوب ومقياس المغناطيسية بالمثل باستخدام الطرق getGyroX_rads()
y getMagX_uT()
على التوالي.
تطبيقات عملية
هناك تطبيقات متعددة حيث يصبح MPU9250 أداة لا غنى عنها. دعنا نستكشف بعضًا من أهمها:
- الطائرات بدون طيار والروبوتات: أحد الاستخدامات الأكثر شيوعًا لـ MPU9250 هو تثبيت الطيران وأنظمة الروبوتات، حيث يعد الحصول على التوجيه في الوقت الفعلي أمرًا ضروريًا.
- الواقع الافتراضي: ومن خلال التقاط الاتجاه والحركة بدقة، يمكن استخدام المستشعر للتتبع في تطبيقات ألعاب الفيديو أو محاكيات الواقع الافتراضي.
- أنظمة الملاحة: بالاشتراك مع أجهزة استشعار أخرى، مثل GPS، يتم استخدام MPU9250 في الملاحة بالقصور الذاتي لفهم الحركات واكتشاف الاتجاه.
معايرة مقياس المغناطيسية
إحدى أهم الخطوات عند استخدام MPU9250 هي معايرة مقياس المغناطيسية. يعد مقياس المغناطيسية ضروريًا للتخلص من الأخطاء الناتجة عن البيئة المغناطيسية (مثل لقطات البناء أو التداخل من المعدات الإلكترونية الأخرى)، لذا فإن إجراء المعايرة المناسبة أمر بالغ الأهمية للحصول على قياسات دقيقة.
لمعايرة مقياس المغناطيسية بشكل صحيح، يمكننا استخدام مكتبة RTIMULib-Arduino. إليك برنامج معايرة بسيط:
#include <RTIMULib.h>
RTIMU *imu;
RTIMUSettings settings;
void setup() {
Wire.begin();
Serial.begin(115200);
imu = RTIMU::createIMU(&settings);
imu->IMUInit();
imu->setCalibrationMode(true);
}
void loop() {
if (imu->IMURead()) {
RTVector3 mag = imu->getCompass();
Serial.print("Magnetómetro: ");
Serial.print(mag.x());
Serial.print(", ");
Serial.print(mag.y());
Serial.print(", ");
Serial.print(mag.z());
Serial.println();
}
}
يقرأ الكود أعلاه البيانات من مقياس المغناطيسية حتى تتمكن من إجراء حركات على المحاور وتغطية النطاق الكامل للقراءات المحتملة. ويساعد ذلك في تحديد تشوهات المجال المغناطيسي وتحسين حسابات الاتجاه.
مرشحات لتحسين الدقة
لتحسين دقة قراءات MPU9250، أحد الأساليب الأكثر شيوعًا هو تنفيذ التصفية التي تجمع بين البيانات التي تم الحصول عليها من الجيروسكوب ومقياس التسارع ومقياس المغناطيسية.
El مرشح تكميلي إنه حل فعال وبسيط للتنفيذ. ويعتمد هذا الفلتر على الجيروسكوب للحصول على نتائج سريعة، بينما يقوم مقياس التسارع ومقياس المغناطيسية بتصحيح الانحرافات طويلة المدى عن الجيروسكوب (المعروفة باسم الانجراف). يمكن رؤية الكود البسيط الذي يقوم بتنفيذ هذا المرشح في المثال التالي:
#include <ComplementaryFilter.h>
ComplementaryFilter cf;
void setup() {
cf.setAccelerometerGain(0.02);
cf.setMagnetometerGain(0.98);
}
void loop() {
// Integrar lecturas de acelerómetro y giroscopio
cf.update(sensorData.accelX, sensorData.gyroX);
float pitch = cf.getPitch();
float roll = cf.getRoll();
Serial.print("Pitch: ");
Serial.print(pitch);
Serial.print(" Roll: ");
Serial.println(roll);
}
يعد هذا الفلتر ضروريًا للتخلص من انحراف الجيروسكوب وإنشاء اتجاه أكثر استقرارًا. بالإضافة إلى ذلك، يعد التنفيذ على وحدات التحكم الدقيقة مثل Arduino أسرع بكثير من الطرق الأخرى الأكثر تعقيدًا مثل مرشح كالمان، الذي يستهلك المزيد من الموارد.
يعد MPU9250 حلاً متعدد الاستخدامات بشكل لا يصدق لمجموعة واسعة من المشاريع التي تتطلب توجيهًا دقيقًا وقياس الحركة. يعد توصيله بـ Arduino والحصول على القراءات الأساسية أمرًا بسيطًا نسبيًا، ومن خلال استخدام بعض المرشحات، يمكنك الحصول على نتائج دقيقة ومفيدة للغاية لمجموعة واسعة من التطبيقات.