جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
MPU-6000 عبارة عن مستشعر تتبع للحركة من 6 محاور يحتوي على مقياس تسارع ثلاثي المحاور وجيروسكوب ثلاثي المحاور مضمن فيه. هذا المستشعر قادر على التتبع الفعال للموضع الدقيق وموقع كائن ما في المستوى ثلاثي الأبعاد. يمكن استخدامه في الأنظمة التي تتطلب تحليل الموقع بأعلى دقة.
في هذا البرنامج التعليمي ، تم توضيح التفاعل بين وحدة الاستشعار MPU-6000 مع فوتون الجسيمات. لقراءة قيم التسارع وزاوية الدوران ، استخدمنا الجسيمات مع محول I2c ، هذا المحول I2C يجعل الاتصال بوحدة المستشعر أسهل وأكثر موثوقية.
الخطوة 1: الأجهزة المطلوبة:
تشمل المواد المطلوبة لإنجاز مهمتنا مكونات الأجهزة المذكورة أدناه:
1. MPU-6000
2. جسيم الفوتون
3. كابل I2C
4. I2C Shield للفوتون الجسيمي
الخطوة 2: ربط الأجهزة:
يشرح قسم توصيل الأجهزة بشكل أساسي اتصالات الأسلاك المطلوبة بين المستشعر وفوتون الجسيمات. يعد التأكد من التوصيلات الصحيحة ضرورة أساسية أثناء العمل على أي نظام للإخراج المطلوب. إذن ، الاتصالات المطلوبة هي كما يلي:
سيعمل MPU-6000 فوق I2C. فيما يلي مثال على مخطط الأسلاك ، يوضح كيفية توصيل كل واجهة من أجهزة الاستشعار.
خارج الصندوق ، تم تكوين اللوحة لواجهة I2C ، لذلك نوصي باستخدام هذا التوصيل إذا كنت غير مدرك. كل ما تحتاجه هو أربعة أسلاك!
مطلوب أربعة اتصالات فقط دبابيس Vcc و Gnd و SCL و SDA ويتم توصيلها بمساعدة كابل I2C.
هذه الوصلات موضحة في الصور أعلاه.
الخطوة الثالثة: رمز تتبع الحركة:
لنبدأ الآن برمز الجسيمات.
أثناء استخدام وحدة الاستشعار مع arduino ، نقوم بتضمين مكتبة application.h و spark_wiring_i2c.h. تحتوي مكتبة "application.h" و spark_wiring_i2c.h على الوظائف التي تسهل اتصال i2c بين المستشعر والجسيم.
يتم توفير رمز الجسيمات بالكامل أدناه لراحة المستخدم:
# include # include // عنوان MPU-6000 I2C هو 0x68 (104) #define Addr 0x68 int xGyro = 0، yGyro = 0، zGyro = 0، xAccl = 0، yAccl = 0، zAccl = 0 ؛ إعداد باطل () {// تعيين متغير Particle.variable ("i2cdevice"، "MPU-6000") ؛ Particle.variable ("xAccl" ، xAccl) ؛ Particle.variable ("yAccl" ، yAccl) ؛ Particle.variable ("zAccl"، zAccl) ؛ Particle.variable ("xGyro" ، xGyro) ؛ Particle.variable ("yGyro" ، yGyro) ؛ Particle.variable ("zGyro"، zGyro) ؛ // تهيئة اتصال I2C باعتباره Master Wire.begin () ؛ // تهيئة الاتصال التسلسلي ، ضبط معدل الباود = 9600 Serial.begin (9600) ؛ // بدء تحويل I2C Wire.beginTransmission (Addr) ؛ // حدد سجل تكوين جيروسكوب Wire.write (0x1B) ؛ // نطاق المقياس الكامل = 2000 dps Wire.write (0x18) ؛ // إيقاف سلك نقل I2C.endTransmission () ؛ // بدء تحويل I2C Wire.beginTransmission (Addr) ؛ // حدد سجل تكوين مقياس التسارع Wire.write (0x1C) ؛ // نطاق المقياس الكامل = +/- 16 جرام Wire.write (0x18) ؛ // إيقاف سلك نقل I2C.endTransmission () ؛ // بدء تحويل I2C Wire.beginTransmission (Addr) ؛ // حدد سجل إدارة الطاقة Wire.write (0x6B) ؛ // PLL مع مرجع xGyro Wire.write (0x01) ؛ // إيقاف سلك نقل I2C.endTransmission () ؛ تأخير (300) ؛ } void loop () {unsigned int data [6]؛ // بدء تحويل I2C Wire.beginTransmission (Addr) ؛ // حدد سجل البيانات Wire.write (0x3B) ؛ // إيقاف سلك نقل I2C.endTransmission () ؛ // طلب 6 بايت من البيانات Wire.requestFrom (Addr، 6) ؛ // قراءة 6 بايت من البيانات إذا (Wire.available () == 6) {data [0] = Wire.read ()؛ البيانات [1] = Wire.read () ، البيانات [2] = Wire.read () ، البيانات [3] = Wire.read () ؛ البيانات [4] = Wire.read () ؛ البيانات [5] = Wire.read () ؛ } تأخير (800)؛ // تحويل البيانات xAccl = ((البيانات [1] * 256) + البيانات [0]) ؛ إذا (xAccl> 32767) {xAccl - = 65536 ؛ } yAccl = ((data [3] * 256) + data [2]) ؛ إذا (yAccl> 32767) {yAccl - = 65536 ؛ } zAccl = ((data [5] * 256) + data [4]) ؛ إذا (zAccl> 32767) {zAccl - = 65536 ؛ } تأخير (800)؛ // بدء تحويل I2C Wire.beginTransmission (Addr) ؛ // حدد سجل البيانات Wire.write (0x43) ؛ // إيقاف سلك نقل I2C.endTransmission () ؛ // طلب 6 بايت من البيانات Wire.requestFrom (العنوان ، 6) ؛ // قراءة 6 بايت من البيانات إذا (Wire.available () == 6) {data [0] = Wire.read ()؛ البيانات [1] = Wire.read () ، البيانات [2] = Wire.read () ؛ البيانات [3] = Wire.read () ؛ البيانات [4] = Wire.read () ؛ البيانات [5] = Wire.read () ؛ } // تحويل البيانات xGyro = ((البيانات [1] * 256) + البيانات [0]) ؛ إذا (xGyro> 32767) {xGyro - = 65536 ؛ } yGyro = ((data [3] * 256) + data [2]) ؛ إذا (yGyro> 32767) {yGyro - = 65536 ؛ } zGyro = ((data [5] * 256) + data [4]) ؛ إذا (zGyro> 32767) {zGyro - = 65536 ؛ } // إخراج البيانات إلى لوحة أجهزة القياس Particle.publish ("تسريع في المحور X:" ، سلسلة (xAccl)) ؛ تأخير (1000) ؛ Particle.publish ("Acceleration in Y-Axis:"، String (yAccl))؛ تأخير (1000) ؛ Particle.publish ("تسريع في المحور Z:" ، سلسلة (zAccl)) ؛ تأخير (1000) ؛ Particle.publish ("X-Axis of Rotation:"، String (xGyro)) ؛ تأخير (1000) ؛ Particle.publish ("Y-Axis of Rotation:"، String (yGyro)) ؛ تأخير (1000) ؛ Particle.publish ("Z-Axis of Rotation:"، String (zGyro)) ؛ تأخير (1000) ؛ }
تنشئ الدالة Particle.variable () المتغيرات لتخزين إخراج المستشعر وتعرض وظيفة Particle.publish () الإخراج على لوحة القيادة بالموقع.
يظهر خرج المستشعر في الصورة أعلاه للرجوع إليها.
الخطوة 4: التطبيقات:
MPU-6000 عبارة عن مستشعر تتبع الحركة ، والذي يجد تطبيقه في واجهة الحركة للهواتف الذكية والأجهزة اللوحية. في الهواتف الذكية ، يمكن استخدام هذه المستشعرات في تطبيقات مثل أوامر الإيماءات للتطبيقات والتحكم في الهاتف ، والألعاب المحسّنة ، والواقع المعزز ، والتقاط الصور البانورامية وعرضها ، وملاحة المشاة والمركبة. يمكن لتقنية MotionTracking تحويل الهواتف المحمولة والأجهزة اللوحية إلى أجهزة ذكية ثلاثية الأبعاد قوية يمكن استخدامها في تطبيقات تتراوح من مراقبة الصحة واللياقة البدنية إلى الخدمات المستندة إلى الموقع.