جدول المحتويات:

واجهة مستشعر جيروسكوب ثلاثي المحاور BMG160 مع Raspberry Pi: 5 خطوات
واجهة مستشعر جيروسكوب ثلاثي المحاور BMG160 مع Raspberry Pi: 5 خطوات

فيديو: واجهة مستشعر جيروسكوب ثلاثي المحاور BMG160 مع Raspberry Pi: 5 خطوات

فيديو: واجهة مستشعر جيروسكوب ثلاثي المحاور BMG160 مع Raspberry Pi: 5 خطوات
فيديو: MPU6050 Gyro Sensor Interfacing with ESP32 2024, يوليو
Anonim
Image
Image

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

في هذا البرنامج التعليمي ، سوف نوضح عمل BMG160 مع Raspberry pi ، باستخدام Java كلغة برمجة.

الأجهزة التي ستحتاجها لهذا الغرض هي كما يلي:

1. BMG160

2. Raspberry Pi

3. كابل I2C

4. I2C Shield لـ Raspberry Pi

5. كابل إيثرنت

الخطوة 1: نظرة عامة على BMG160:

ماذا تحتاج..!!
ماذا تحتاج..!!

بادئ ذي بدء ، نود أن نطلعك على الميزات الأساسية لوحدة المستشعر وهي BMG160 وبروتوكول الاتصال الذي تعمل عليه.

BMG160 عبارة عن مستشعر جيروسكوب رقمي 16 بت ثلاثي المحاور يمكنه قياس المعدلات الزاوية. إنه قادر على حساب المعدلات الزاوية في ثلاثة أبعاد متعامدة للغرفة ، المحور x و y و z ، وتوفير إشارات الخرج المقابلة. يمكنه التواصل مع لوحة raspberry pi باستخدام بروتوكول الاتصال I2C. تم تصميم هذه الوحدة الخاصة لتلبية متطلبات تطبيقات المستهلك وكذلك الأغراض الصناعية.

بروتوكول الاتصال الذي يعمل عليه المستشعر هو I2C. I2C تعني الدائرة المتكاملة. إنه بروتوكول اتصال يتم فيه الاتصال من خلال خطوط SDA (البيانات التسلسلية) و SCL (الساعة التسلسلية). يسمح بتوصيل أجهزة متعددة في نفس الوقت. إنه أحد أبسط بروتوكولات الاتصال وأكثرها كفاءة.

الخطوة الثانية: ماذا تحتاج..

ماذا تحتاج..!!
ماذا تحتاج..!!
ماذا تحتاج..!!
ماذا تحتاج..!!
ماذا تحتاج..!!
ماذا تحتاج..!!

تشمل المواد التي نحتاجها لتحقيق هدفنا مكونات الأجهزة التالية:

1. BMG160

2. Raspberry Pi

3. كابل I2C

4. I2C Shield لـ Raspberry Pi

5. كابل إيثرنت

الخطوة 3: ربط الأجهزة:

ربط الأجهزة
ربط الأجهزة
ربط الأجهزة
ربط الأجهزة

يشرح قسم توصيل الأجهزة بشكل أساسي اتصالات الأسلاك المطلوبة بين المستشعر و raspberry pi. يعد التأكد من التوصيلات الصحيحة ضرورة أساسية أثناء العمل على أي نظام للإخراج المطلوب. إذن ، الاتصالات المطلوبة هي كما يلي:

سيعمل BMG160 على I2C. فيما يلي مثال على مخطط الأسلاك ، يوضح كيفية توصيل كل واجهة من أجهزة الاستشعار.

خارج الصندوق ، تم تكوين اللوحة لواجهة I2C ، لذلك نوصي باستخدام هذا التوصيل إذا كنت غير مدرك. كل ما تحتاجه هو أربعة أسلاك!

مطلوب أربعة اتصالات فقط دبابيس Vcc و Gnd و SCL و SDA ويتم توصيلها بمساعدة كابل I2C.

هذه الوصلات موضحة في الصور أعلاه.

الخطوة 4: 3-Axis Gyroscope Measurement باستخدام Java Code:

3-Axis Gyroscope Measurement باستخدام Java Code
3-Axis Gyroscope Measurement باستخدام Java Code
3-Axis Gyroscope Measurement باستخدام Java Code
3-Axis Gyroscope Measurement باستخدام Java Code

تتمثل ميزة استخدام raspberry pi في أنه يوفر لك مرونة لغة البرمجة التي تريد برمجة اللوحة من أجل واجهة المستشعر معها. بتسخير هذه الميزة في هذا المنتدى ، نعرض هنا برمجته في Java. يمكن تنزيل كود Java الخاص بـ BMG160 من مجتمع github الخاص بنا وهو Dcube Store Community.

بالإضافة إلى سهولة المستخدمين ، نقوم بشرح الكود هنا أيضًا: كخطوة أولى في الترميز ، تحتاج إلى تنزيل مكتبة pi4j في حالة java ، لأن هذه المكتبة تدعم الوظائف المستخدمة في الكود. لذلك ، لتنزيل المكتبة يمكنك زيارة الرابط التالي:

pi4j.com/install.html

يمكنك نسخ كود جافا العامل لهذا المستشعر من هنا أيضًا:

استيراد com.pi4j.io.i2c. I2CBus ؛

استيراد com.pi4j.io.i2c. I2CDevice ؛

استيراد com.pi4j.io.i2c. I2CFactory ؛

استيراد java.io. IOException ؛

فئة عامة BMG160

{

يطرح main static void main (String args ) استثناء

{

// إنشاء ناقل I2C

حافلة I2CBus = I2CFactory.getInstance (I2CBus. BUS_1) ؛

// احصل على جهاز I2C ، عنوان BMG160 I2C هو 0x68 (104)

جهاز I2CDevice = bus.getDevice (0x68) ؛

// حدد سجل النطاق

// تكوين نطاق المقياس الكامل ، 2000 نقطة في الثانية

device.write (0x0F ، (بايت) 0x80) ؛

// حدد سجل النطاق الترددي

// عرض النطاق الترددي 200 هرتز

device.write (0x10 ، (بايت) 0x04) ؛

Thread.sleep (500) ؛

// قراءة 6 بايت من البيانات

// xGyro lsb و xGyro msb و yGyro lsb و yGyro msb و zGyro lsb و zGyro msb

بايت بيانات = بايت جديد [6] ؛

قراءة الجهاز (0x02 ، البيانات ، 0 ، 6) ؛

// تحويل البيانات

int xGyro = ((data [1] & 0xFF) * 256 + (data [0] & 0xFF)) ؛

إذا (xGyro> 32767)

{

xGyro - = 65536 ؛

}

int yGyro = ((data [3] & 0xFF) * 256 + (data [2] & 0xFF)) ؛

إذا (yGyro> 32767)

{

yGyro - = 65536 ؛

}

int zGyro = ((data [5] & 0xFF) * 256 + (data [4] & 0xFF)) ؛

إذا (zGyro> 32767)

{

zGyro - = 65536 ؛

}

// إخراج البيانات للشاشة

System.out.printf ("المحور السيني للدوران:٪ d٪ n"، xGyro)؛

System.out.printf ("المحور Y للدوران:٪ d٪ n"، yGyro)؛

System.out.printf ("المحور Z للدوران:٪ d٪ n"، zGyro)؛

}

}

المكتبة التي تسهل اتصال i2c بين المستشعر واللوحة هي pi4j ، وتساعد حزمها المختلفة I2CBus و I2CDevice و I2CFactory على إنشاء الاتصال.

استيراد com.pi4j.io.i2c. I2CBus ؛ استيراد com.pi4j.io.i2c. I2CDevice ؛ استيراد com.pi4j.io.i2c. I2CFactory ؛ استيراد java.io. IOException ؛

هذا الجزء من الكود يجعل المستشعر يقيس المعدل الزاوي عن طريق كتابة الأوامر المعنية باستخدام وظيفة الكتابة () ثم قراءة البيانات باستخدام وظيفة القراءة ().

// حدد سجل النطاق // تكوين نطاق المقياس الكامل ، 2000 dps device.write (0x0F ، (بايت) 0x80) ؛ // حدد سجل النطاق الترددي // النطاق الترددي 200 هرتز device.write (0x10 ، (بايت) 0x04) ؛ Thread.sleep (500) ؛

// قراءة 6 بايت من البيانات

// xGyro lsb، xGyro msb، yGyro lsb، yGyro msb، zGyro lsb، zGyro msb byte data = new byte [6]؛ قراءة الجهاز (0x02 ، البيانات ، 0 ، 6) ؛

يتم تحويل البيانات الواردة من المستشعر إلى التنسيق المناسب باستخدام ما يلي:

int xGyro = ((data [1] & 0xFF) * 256 + (data [0] & 0xFF)) ؛ إذا (xGyro> 32767) {xGyro - = 65536 ؛ } int yGyro = ((data [3] & 0xFF) * 256 + (data [2] & 0xFF)) ؛ إذا (yGyro> 32767) {yGyro - = 65536 ؛ } int zGyro = ((data [5] & 0xFF) * 256 + (data [4] & 0xFF)) ؛ إذا (zGyro> 32767) {zGyro - = 65536 ؛ }

تتم طباعة الإخراج باستخدام وظيفة System.out.println () بالتنسيق التالي.

System.out.println ("المحور السيني للدوران:٪ d٪ n"، xGyro)؛ System.out.println ("المحور الصادي للدوران:٪ d٪ n" ، yGyro) ؛ System.out.println ("المحور Z للدوران:٪ d٪ n"، zGyro)؛

يظهر خرج المستشعر في الصورة أعلاه.

الخطوة 5: التطبيقات:

التطبيقات
التطبيقات

يحتوي BMG160 على عدد متنوع من التطبيقات في الأجهزة مثل الهواتف المحمولة وأجهزة واجهة الإنسان والآلة. تم تصميم وحدة المستشعر هذه لتلبية متطلبات تطبيقات المستهلك مثل تثبيت الصورة (DSC وهاتف الكاميرا) ، وأجهزة الألعاب والتأشير. يتم استخدامه أيضًا في الأنظمة التي تتطلب التعرف على الإيماءات والأنظمة المستخدمة في التنقل الداخلي.

موصى به: