فهم برمجة MPU-6050 باستخدام Arduino وبروتوكول I2C
فيما يتعلق بالشيفرة التي قدمتها، يبدو أنها تستخدم مستشعر MPU-6050 الذي يعمل عبر بروتوكول I2C. لنقم بتفسير الشيفرة خطوة بخطوة لفهم كيف يعمل البرنامج.
أولاً، يتم تضمين مكتبة Wire.h التي تستخدم للتحكم في تواصل I2C. يتم تحديد عنوان MPU-6050 كـ 0x68.
-
تحسين الكود: حل مشكلة الدورة في Java21/02/2024
-
فهم الفارق بين المراجع والمؤشرات في C++29/01/2024
في دالة setup():
- يتم بداية اتصال I2C باستخدام
Wire.begin()
. - يتم بداية اتصال I2C مع جهاز MPU-6050 باستخدام
Wire.beginTransmission(MPU)
. - يتم كتابة قيمة 0 إلى العنوان 0x6B في السجل PWR_MGMT_1 لتفعيل جهاز MPU-6050 باستخدام
Wire.write(0x6B)
. - يتم إنهاء اتصال I2C مع
Wire.endTransmission(true)
. - يتم بدء Serial communication بسرعة 9600 بت/ثانية.
في دالة loop():
- يتم بدء اتصال I2C مع جهاز MPU-6050 باستخدام
Wire.beginTransmission(MPU)
. - يتم كتابة عنوان البداية للقراءة (register 0x3B) باستخدام
Wire.write(0x3B)
. - يتم إنهاء اتصال I2C بـ
Wire.endTransmission(false)
. - يتم طلب 14 مستندًا من MPU-6050 باستخدام
Wire.requestFrom(MPU, 14, true)
. - يتم قراءة قيم التسارع (AcX، AcY، AcZ) ودرجة الحرارة (Tmp) وسرعة الدوران (GyX، GyY، GyZ) وتخزينها.
- تتم عمليات القراءة باستخدام الشيفرة
Wire.read()<<8|Wire.read()
للحصول على القيم بصيغة 16 بت. - يتم طباعة القيم المقروءة عبر Serial communication.
هذا البرنامج يستخدم I2C للتحكم في MPU-6050 واسترجاع قيم التسارع ودرجة الحرارة وسرعة الدوران. يمكنك فهمه كمثال على كيفية استخدام I2C للتحدث مع أجهزة إلكترونية عبر بروتوكول محدد. يفضل أن تكون قدرتك على فهم التحكم في I2C والاستفادة من البيانات التي يتم قراءتها من MPU-6050.
المزيد من المعلومات
تعتبر شيفرة البرنامج المُقدمة مبنية على لغة البرمجة C++ باستخدام لوحة تطوير Arduino. البرنامج يستخدم مكتبة Wire.h لإدارة تواصل I2C، وهو نوع من البروتوكولات الخاصة بالتواصل بين أجهزة متصلة في نفس الدائرة الإلكترونية.
في الجزء الخاص بإعداد البرنامج (دالة setup()
):
- تبدأ البرنامج بفتح اتصال I2C باستخدام
Wire.begin()
، ومن ثم يبدأ اتصال مع مستشعر MPU-6050 باستخدامWire.beginTransmission(MPU)
. - يتم كتابة القيمة 0 إلى عنوان السجل PWR_MGMT_1 باستخدام
Wire.write(0x6B)
، وهذا يعمل على إيقاظ جهاز MPU-6050. - يُنهي الاتصال I2C مع
Wire.endTransmission(true)
، ثم يتم بدء Serial communication بسرعة 9600 بت/ثانية باستخدامSerial.begin(9600)
.
في دالة loop()
:
- يتم بدء اتصال I2C مع جهاز MPU-6050 باستخدام
Wire.beginTransmission(MPU)
، ثم يتم كتابة عنوان السجل الذي نريد قراءته (0x3B
) باستخدامWire.write(0x3B)
. - يُنهي الاتصال I2C بـ
Wire.endTransmission(false)
. - يتم طلب 14 مستندًا (14 بايت) من MPU-6050 باستخدام
Wire.requestFrom(MPU, 14, true)
، حيث يتم قراءة هذه القيم باستخدامWire.read()
ومعالجتها للحصول على القيم النهائية. - يتم طباعة قيم التسارع (AcX، AcY، AcZ) ودرجة الحرارة (Tmp) وسرعة الدوران (GyX، GyY، GyZ) عبر Serial communication.
تُستخدم الدالة delay(333)
لتأخير البرنامج لمدة 333 مللي ثانية قبل بدء تكرار العملية مرة أخرى.
يعتبر البرنامج فعّالًا لقراءة البيانات من MPU-6050 وطباعتها عبر واجهة Serial لتتمكن من فحص القيم المسترجعة من التسارع ودرجة الحرارة وسرعة الدوران للتحكم في الأجهزة الإلكترونية بشكل فعّال.