يعد MPU-6050 جهازًا لتتبع الحركة 6 محاور مع جيروسكوب ومقياس التسارع ، مما يجعله مثاليًا لتطبيقات استشعار الحركة مثل الروبوتات والطائرات بدون طيار وإنترنت الأشياء. في هذا الدليل ، سوف تتعلم كيفية الاتصال واستخدام MPU-6050 مع Raspberry Pi لالتقاط بيانات الحركة والاتجاه.
ماذا ستحتاج
- التوت بي (أي نموذج يحمل دعم GPIO ، على سبيل المثال ، PI 3 ، PI 4)
- وحدة MPU-6050
- الأسلاك الأسلاك والبلوز
- جهاز كمبيوتر به وصول SSH إلى Raspberry Pi أو لوحة مفاتيح متصلة وشاشة
- Python مثبت على Raspberry Pi
الخطوة 1: توصيل MPU-6050 إلى Raspberry Pi
يتواصل MPU-6050 مع Raspberry Pi باستخدام بروتوكول I2C.
الاتصالات
MPU-6050 دبوس | التوت بي دبوس |
---|---|
VCC | 3.3V (دبوس 1) |
GND | الأرض (دبوس 6) |
SDA | SDA (PIN 3 ، GPIO2) |
SCL | SCL (PIN 5 ، GPIO3) |
ملحوظة: تأكد من أن وحدة MPU-6050 تعمل في 3.3 فولت. تشمل معظم الوحدات منظم الجهد ، مما يتيح لها تشغيل 5V.
الخطوة 2: تمكين واجهة I2C على Raspberry Pi
- افتح أداة تكوين Raspberry Pi:
sudo raspi-config
- انتقل إلى خيارات الواجهة> i2c وتمكينها.
- أعد تشغيل Raspberry Pi:
sudo reboot
الخطوة 3: تثبيت الأدوات والمكتبات المطلوبة
- قم بتحديث Raspberry Pi:
sudo apt update && sudo apt upgrade -y
- قم بتثبيت أدوات I2C:
sudo apt install -y i2c-tools
- تثبيت مكتبات Python للاتصالات ومعالجة البيانات I2C:
pip install smbus2
الخطوة 4: تحقق من الاتصال
- يستخدم
i2cdetect
للتحقق من اكتشاف MPU-6050 على حافلة I2C:sudo i2cdetect -y 1
- يجب أن ترى MPU-6050 على العنوان
0x68
(أو0x69
إذا تم سحب دبوس AD0 عالياً). إذا لم يكن كذلك:- تحقق من الأسلاك الخاصة بك.
- تأكد من تشغيل MPU-6050.
الخطوة 5: قراءة البيانات من MPU-6050
يقرأ نص Python التالي بيانات التسارع وجيروسكوب من MPU-6050.
مثال رمز بيثون
import smbus2
import time
# MPU-6050 Registers and Address
MPU6050_ADDR = 0x68
PWR_MGMT_1 = 0x6B
ACCEL_XOUT_H = 0x3B
GYRO_XOUT_H = 0x43
# Initialize I2C bus
bus = smbus2.SMBus(1)
# Wake up the MPU-6050
bus.write_byte_data(MPU6050_ADDR, PWR_MGMT_1, 0)
def read_raw_data(addr):
# Read two bytes of data from the given address
high = bus.read_byte_data(MPU6050_ADDR, addr)
low = bus.read_byte_data(MPU6050_ADDR, addr+1)
value = (high << 8) | low
# Convert to signed value
if value > 32767:
value -= 65536
return value
try:
while True:
# Read accelerometer data
accel_x = read_raw_data(ACCEL_XOUT_H)
accel_y = read_raw_data(ACCEL_XOUT_H + 2)
accel_z = read_raw_data(ACCEL_XOUT_H + 4)
# Read gyroscope data
gyro_x = read_raw_data(GYRO_XOUT_H)
gyro_y = read_raw_data(GYRO_XOUT_H + 2)
gyro_z = read_raw_data(GYRO_XOUT_H + 4)
# Convert raw data to meaningful values (optional scaling may be needed)
accel_x_scaled = accel_x / 16384.0
accel_y_scaled = accel_y / 16384.0
accel_z_scaled = accel_z / 16384.0
gyro_x_scaled = gyro_x / 131.0
gyro_y_scaled = gyro_y / 131.0
gyro_z_scaled = gyro_z / 131.0
print(f"Accelerometer: X={accel_x_scaled:.2f}, Y={accel_y_scaled:.2f}, Z={accel_z_scaled:.2f}")
print(f"Gyroscope: X={gyro_x_scaled:.2f}, Y={gyro_y_scaled:.2f}, Z={gyro_z_scaled:.2f}")
time.sleep(1)
except KeyboardInterrupt:
print("Exiting...")
الخطوة 6: تطبيقات MPU-6050
- تتبع الحركة: تتبع الحركة والتوجه في الروبوتات أو الأجهزة القابلة للارتداء.
- أنظمة الاستقرار: تنفيذ التثبيت الجيروسكوبي للطائرات بدون طيار أو gimbals.
- الألعاب: إنشاء وحدات تحكم اللعبة القائمة على الحركة.
- مشاريع إنترنت الأشياء: استخدم بيانات الحركة لتشغيل أحداث الأتمتة.
استكشاف الأخطاء وإصلاحها
-
لم يتم اكتشاف الجهاز:
- تحقق من اتصالات SDA و SCL.
- تأكد من تمكين واجهة I2C على Raspberry PI.
- تحقق من مصدر الطاقة إلى MPU-6050.
-
قراءات غير دقيقة:
- معايرة المستشعر عن طريق تنفيذ إزاحة لكل محور.
- تأكد من وضع المستشعر على سطح مستقر.
-
أخطاء I2C:
- تأكد من عدم وجود أجهزة متضاربة في حافلة I2C.
خاتمة
MPU-6050 هو مستشعر حركة متعدد الاستخدامات يمكن أن يضيف إمكانات دقيقة لتتبع الحركة إلى مشاريع Raspberry PI الخاصة بك. باتباع هذا الدليل ، يمكنك إعداد واستخدام MPU-6050 لتطبيقات مثل الروبوتات وأنظمة التثبيت وأتمتة إنترنت الأشياء. جرب البيانات وتصفية البيانات لضبط المستشعر لتلبية احتياجاتك!