كود أردوينو لـ MPU-6050 مع شاشة LCD1602 عبر I2C
في هذا الدرس سنتعلم كيفية توصيل مقياس التسارع والجيروسكوب MPU-6050 بشاشة LCD1602 باستخدام اتصال I2C. سيزوّد MPU-6050 بقياسات الزوايا التي سيتم عرضها على شاشة LCD. سيساعدك هذا المشروع على تصور زوايا MPU-6050 في الوقت الحقيقي، مما يعزز فهمك لبيانات المستشعر وواجهات توصيل العرض.


بحلول نهاية هذا البرنامج التعليمي، سيكون لديك إعداد عملي يعرض زوايا X وY وZ على شاشة LCD. هذه طريقة رائعة لاكتساب خبرة عملية في التعامل مع بيانات المستشعر وتقنيات العرض في مشاريع Arduino. لمزيد من التوضيح، تأكد من مشاهدة الفيديو (فيه عند 00:00).
شرح الأجهزة
المكونات الرئيسية لهذا المشروع هي المستشعر MPU-6050 ووحدة العرض LCD1602. يعتبر MPU-6050 مستشعرًا متعدد الاستخدامات يجمع بين مقياس تسارع ثلاثي المحاور وجيروسكوب ثلاثي المحاور، موفِّرًا قياسات زاوية في الوقت الحقيقي. يتواصل عبر I2C، مما يتيح تكاملاً سلسًا مع الأردوينو.
تستخدم شاشة LCD1602 بروتوكول I2C أيضاً، مما يبسط التوصيل ويقلل من عدد الدبابيس المطلوبة للاتصال. تسمح واجهة I2C بتوصيل عدة أجهزة على نفس الناقل، مما يجعلها فعّالة في المشاريع التي تحتوي على مستشعرات أو مكونات متعددة.
تفاصيل ورقة البيانات
| الشركة المصنعة | إنفينسينس |
|---|---|
| رقم القطعة | MPU-6050 |
| جهد المنطق/الإدخال والإخراج | 3.3 فولت / 5 فولت |
| جهد التغذية | 3.3 فولت إلى 5 فولت |
| معدل بيانات الإخراج | 1 كيلوهرتز (الحد الأقصى) |
| مدى الجيروسكوب | ±250, ±500, ±1000, ±2000 °/s |
| نطاق مقياس التسارع | ±2g، ±4g، ±8g، ±16g |
| حزمة | مغلف رباعي مسطح بدون دبابيس (QFN) |
| ملاحظات / تنويعات | يتضمن معالج الحركة الرقمي (DMP) |
- تحقق من عنوان I2C (الافتراضي هو 0x68).
- تأكد من أن جهد مصدر الطاقة مناسب (3.3 فولت أو 5 فولت).
- استخدم مقاومات سحب لخطّي SDA وSCL إذا لم تكن موجودة بالفعل على اللوحة.
- ضع في اعتبارك استخدام مكثفات فك الارتباط بالقرب من أطراف الطاقة لتحسين الاستقرار.
- تحقق من توصيلات الأسلاك لتجنب مشاكل الاتصال.
تعليمات الأسلاك

لتوصيل MPU-6050 وشاشة LCD1602 بـ Arduino، اتبع التوصيلات التالية:
- قم بتوصيل الـ
VCCدبوس الـMPU-6050 إلى الـ5Vدبوس على الأردوينو. - قم بتوصيل الـ
GNDدبوس الـMPU-6050 إلى الـGNDالدبوس على الأردوينو. - وصل الـ
SDAدبوس الـMPU-6050 إلى الـA4دبوس على لوحة الأردوينو. - وصل الـ
SCLدبوس الـMPU-6050 إلى الـA5الدبوس على الأردوينو. - بالنسبة لشاشة LCD1602، قم بتوصيل الـ
VCCتثبيت إلى5Vعلى الأردوينو. - قم بتوصيل
GNDدبوس الـLCD1602 إلى الـGNDدبوس على الأردوينو. - وصل الـ
SDAالدبوس الخاص بـ LCD1602 إلى نفسهA4الدبوس المستخدم لـ MPU-6050. - قم بتوصيل الـ
SCLدبوس الـ LCD1602 إلى نفسهA5الدبوس المستخدم لوحدة MPU-6050.
تأكد من التحقق مرة أخرى من اتصالاتك، إذ قد يؤدي التوصيل غير الصحيح إلى خلل في الجهاز أو إلى فشل في الاتصال بشكل صحيح.
أمثلة على الكود وشرح خطوة بخطوة
يبدأ الكود بتضمين المكتبات اللازمة لـ MPU-6050 وشاشة LCD. المقتطف التالي يوضح كيفية تهيئة MPU-6050:
MPU6050 mpu6050(Wire);هنا نقوم بإنشاء الـMPU6050الكائن، الذي سيُستخدم لقراءة البيانات من المستشعر. بعد ذلك، نحتاج إلى إعداد الجهاز في الـsetup()دالة:
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
lcd.begin();
lcd.backlight();
}يقوم هذا الكود بتهيئة الاتصال التسلسلي، وناقل I2C، ومستشعر MPU-6050. كما يهيئ شاشة LCD ويشغل إضاءتها الخلفية. تحتوي الحلقة على المنطق لتحديث وعرض الزوايا:
void loop() {
mpu6050.update();
lcd.clear();
lcdDisplay(0, 0, "X:", 2, 0, mpu6050.getAngleX());
lcdDisplay(13, 0, "Y:", 0, 1, mpu6050.getAngleY());
lcdDisplay(7, 1, "Z:", 9, 1, mpu6050.getAngleZ());
delay(100);
}في هذه الحلقة، تُحدَّث زوايا المحاور X وY وZ وتُعرض على شاشة LCD. الدالةlcdDisplay()يُستخدم لتنسيق المخرجات بشكل صحيح. يمكنك العثور على الكود الكامل الموجود أسفل المقال.
عرض توضيحي / ما الذي تتوقعه
عند اكتمال الإعداد وتحميل الكود، يجب أن ترى زوايا المحاور X وY وZ معروضة على شاشة LCD في الوقت الحقيقي. إذا كانت كل الوصلات موصولة بشكل صحيح، فستتجدد الشاشة كل 100 ميلي ثانية لتعرض الوضعية الحالية لوحدة MPU-6050.
من الأخطاء الشائعة التأكد من أن وصلات I2C صحيحة وأن مصدر الطاقة مستقر. إذا لم يتم تهيئة MPU-6050 بشكل صحيح، فقد ترى بيانات خاطئة أو لا تظهر أي بيانات على شاشة LCD (في الفيديو عند 01:15).
/*
*
* This code is basic usage of the MPU-6050 accelerometer and gyroscope.
* Running this code, you will get angles only.
* The angles at X, Y, and Z are displayed on the LCD1602-I2C display module.
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 05, 2018 at 22:19 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/uIz6WIis4dc
*
* You will need to watch two videos before following the instructions in this video:
* 1-MPU6050 Introduction video and code: https://youtu.be/uhh7ik02aDc
* 2-LCD1602 with I2C module video and code: https://youtu.be/q9YC_GVHy5A
*/
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
}
void loop() {
mpu6050.update();
Serial.print("angleX : ");
Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");
Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");
Serial.println(mpu6050.getAngleZ());
lcd.clear();// clearn previous values from screen
lcdDisplay(
// to print X:
0, // character 0
0, // line 0
"X:",
// to print AngleX
2, // character 2
0, // line 0
mpu6050.getAngleX()
);
lcdDisplay(
// to print Y:
13, // character 13
0, // line 0
"Y:",
// to print AngleY
0, // character 0
1, // line 1
mpu6050.getAngleY()
);
lcdDisplay(
// to print Z:
7, // character 7
1, // line 1
"Z:",
// to print AngleZ
9, // character 9
1, // line 0
mpu6050.getAngleZ()
);
delay(100);
}// loop end
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56)
*
* tc is the character number (0)
* tr is the row number in the LCD (1)
* title is the text ("Voltage:")
* vc is the character number for the value
* vr is the row number for the value
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
// Robojax.com MPU6050 Demo
lcd.setCursor (tc,tr); //
lcd.print(title);
lcd.setCursor (vc,vr); //
lcd.print(value);
}
الأشياء التي قد تحتاجها
-
أمازوناشترِ LCD1602-I2C من أمازونamzn.to
-
أمازوناشترِ MPU-6050 من أمازونamzn.to
-
إي بايشراء LCD1602-I2C من eBayebay.us
-
علي إكسبريسشراء 10 قطع من LCD1602-I2C من علي إكسبريسs.click.aliexpress.com
الموارد والمراجع
-
خارجيموقع الشركة المصنعةinvensense.com
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
مكتبة LCD1602 لـ Arduino من Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
مكتبة Arduino لـ MPU9250
robojax-MPU9250-master.zip3.38 MB
Fritzing File
-
وحدة LCD LCD1602-I2C مع 4 أسلاك
LCD1602-I2C.fzpz0.01 MB -
لوحة MPU-6050 GY-521
MPU-6050 Board GY-521.fzpz0.01 MB