- المكونات المطلوبة:
- مستشعر جيروسكوبي MPU6050:
- وصف:
- مخطط الدائرة وشرحها:
- تكوين Raspberry Pi لمستشعر الدوران MPU6050:
- شرح البرمجة:
يحتوي مستشعر MPU6050 على العديد من الوظائف على شريحة واحدة. وهو يتألف من مقياس تسارع MEMS وجيروسكوب MEMS ومستشعر درجة الحرارة. هذه الوحدة دقيقة للغاية أثناء تحويل القيم التناظرية إلى رقمية لأنها تحتوي على جهاز محول تناظري 16 بت إلى رقمي لكل قناة. هذه الوحدة قادرة على التقاط قناة x و y و z في نفس الوقت. يحتوي على واجهة I2C للتواصل مع وحدة تحكم المضيف. هذه الوحدة MPU6050 عبارة عن شريحة مدمجة بها كل من مقياس التسارع والجيروسكوب. هذا جهاز مفيد للغاية للعديد من التطبيقات مثل الطائرات بدون طيار والروبوتات وأجهزة استشعار الحركة. ويسمى أيضًا الجيروسكوب أو مقياس التسارع ثلاثي المحاور.
سنقوم اليوم في هذه المقالة بتوصيل MPU6050 مع Raspberry Pi وإظهار القيم التي تزيد عن 16x2 LCD.
المكونات المطلوبة:
- فطيرة التوت
- MPU-6050
- 10 كيلو وعاء
- سلك توصيل
- اللوح
- مزود الطاقة
مستشعر جيروسكوبي MPU6050:
MPU-6050 عبارة عن 8 دبوس 6 محاور الدوران ومقياس التسارع في شريحة واحدة. تعمل هذه الوحدة على الاتصال التسلسلي I2C افتراضيًا ولكن يمكن تهيئتها لواجهة SPI عن طريق تكوين تسجيلها. بالنسبة لـ I2C ، يحتوي هذا على خطوط SDA و SCL. جميع المسامير تقريبًا متعددة الوظائف ولكننا هنا نتابع فقط دبابيس وضع I2C.
تكوين الدبوس:
Vcc: - يستخدم هذا الدبوس لتشغيل وحدة MPU6050 فيما يتعلق بالأرض
GND: - هذا دبوس أرضي
SDA: - يستخدم SDA pin للبيانات بين وحدة التحكم ووحدة mpu6050
SCL: - يستخدم دبوس SCL لإدخال الساعة
XDA: - هذا هو خط بيانات مستشعر I2C SDA للتكوين والقراءة من المستشعرات الخارجية ((اختياري) غير مستخدم في حالتنا)
XCL: - هذا هو خط ساعة المستشعر I2C SCL للتكوين والقراءة من المستشعرات الخارجية ((اختياري) غير مستخدم في حالتنا)
ADO: - I2C Slave Address LSB (لا ينطبق في حالتنا)
المترجم: - دبوس المقاطعة للإشارة إلى البيانات جاهزة.
لقد قمنا سابقًا بتوصيل MPU6050 مع Arduino.
وصف:
في هذه المقالة ، نعرض قراءات درجة الحرارة والدوران والتسارع على شاشة LCD باستخدام MPU6050 مع Raspberry Pi. إذا كنت جديدًا على Raspberry Pi ، فانتقل إلى قسم دروس Raspberry Pi التعليمية وتعلم كيفية بدء استخدام Raspberry Pi.
في هذا المشروع ، أظهرنا أولاً قيمة درجة الحرارة على شاشة LCD وبعد مرور بعض الوقت نعرض قيم الدوران ، ثم بعد مرور بعض الوقت ، لدينا قراءات مقياس التسارع كما هو موضح في الصور أدناه:
مخطط الدائرة وشرحها:
مخطط الدائرة ، لربط MPU6050 مع Raspberry Pi ، بسيط للغاية هنا استخدمنا شاشة LCD و MPU6050. يتم استخدام وعاء 10 كيلو للتحكم في سطوع شاشة LCD. فيما يتعلق بـ MPU6050 ، أجرينا 4 اتصالات قمنا فيها بتوصيل مصدر طاقة 3.3 فولت وأرضي MPU6050 إلى 3.3 فولت وأرض Raspberry Pi. تتصل دبابيس SCL و SDA الخاصة بـ MPU6050 بدبوس Raspberry المادي 3 (GPIO2) والدبوس 5 (GPIO3) شاشات الكريستال السائل RS و RW و EN متصلة مباشرة بـ GPIO18 و 23 من raspberry pi. يتم توصيل دبوس البيانات مباشرة برقم التعريف الرقمي GPIO24 و GPIO25 و GPIO8 و GPIO7. تعرف على المزيد حول توصيل شاشة LCD مع Raspberry Pi هنا.
تكوين Raspberry Pi لمستشعر الدوران MPU6050:
قبل بدء البرمجة ، نحتاج إلى تمكين i2c من Raspberry Pi باستخدام طريقة معينة:
الخطوة 1: تمكين اتصال I2C
قبل تثبيت مكتبة Adafruit SSD1306 ، نحتاج إلى تمكين اتصال I2C في Raspberry Pi.
للقيام بهذا النوع في وحدة تحكم Raspberry Pi:
سودو raspi -config
وبعد ذلك ستظهر شاشة زرقاء. الآن حدد خيار الواجهة
بعد ذلك ، نحتاج إلى تحديد I2C
بعد ذلك ، نحتاج إلى تحديد نعم والضغط على إدخال ثم موافق
بعد ذلك ، نحتاج إلى إعادة تشغيل raspberry pi بإصدار الأمر التالي:
إعادة تشغيل sodo
الخطوة 2: قم بتثبيت python-pip و GPIO Library
sudo apt-get install build-basic python-dev python-pip
بعد ذلك ، نحتاج إلى تثبيت مكتبة raspberry pi GPIO
تقوم sudo pip بتثبيت RPi.GPIO
الخطوة 3: قم بتثبيت مكتبة smbus
أخيرًا ، نحتاج إلى تثبيت مكتبة smbus في Raspberry Pi باستخدام الأمر المحدد:
sudo apt-get install python-smbus
الخطوة 4: قم بتثبيت مكتبة MPU6050
بعد ذلك نحتاج إلى تثبيت مكتبة MPU6050 باستخدام أمر معين
sudo pip تثبيت mpu6050
الآن يمكننا أن نجد أمثلة على الأكواد في الأمثلة. يمكن للمستخدم اختبار هذا الرمز عن طريق التحميل مباشرة إلى Raspberry Pi أو تخصيصه وفقًا للمتطلبات. هنا قمنا بعرض قيم محور X و Y و Z لـ MPU6050 على شاشة LCD مقاس 16 × 2 يمكنك العثور على كود Python الكامل في نهاية البرنامج التعليمي.
شرح البرمجة:
يتم تقديم كود Python الكامل في النهاية هنا ، ونحن نوضح بعض الأجزاء المهمة من الكود.
في برنامج Python ، قمنا باستيراد بعض المكتبات المطلوبة مثل time و smbus و GPIO.
استيراد وقت استيراد smbus استيراد RPi.GPIO كـ gpio
بعد ذلك ، نحتاج إلى أخذ بعض عناوين التسجيل لتهيئة MPU6050 والحصول على القيم من نفس العنوان. لقد اتخذنا أيضًا بعض المتغيرات لمعايرة وتهيئة الحافلة لـ I2C.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = # 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x47 TEMP = 0x41 الناقل AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
ثم قمنا بكتابة بعض الوظائف للقيادة 16x2LCD مثل def begin () ، def cmd (ch) ، def الكتابة (ch) ، def Print (str) ، def clear () إلخ . يمكنك أيضًا التحقق من واجهة شاشة LCD مع Raspberry Pi.
بعد ذلك ، نحتاج إلى تهيئة وحدة MPU6050
def InitMPU (): bus.write_byte_data (Device_Address، DIV، 7) bus.write_byte_data (Device_Address، PWR_M، 1) bus.write_byte_data (Device_Address، CONFIG، 0) bus.write_byte_data (Device_Address، GYRO_CONFIGby، 24) ، INT_EN، 1) time.sleep (1)
بعد ذلك ، نحتاج إلى كتابة بعض الوظائف لقراءة القيم من MPU6050 وعرضها على شاشة LCD. يتم استخدام وظيفة معينة لقراءة البيانات من MPU6050
def readMPU (addr): high = bus.read_byte_data (Device_Address، addr) low = bus.read_byte_data (Device_Address، addr + 1) value = ((high << 8) - low) if (value> 32768): value = value - 65536 قيمة إرجاع
يتم استخدام وظيفة معينة لقراءة بيانات مقياس التسارع ومقياس الدوران
def تسريع (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) display (Ax، Ay، Az) time.sleep (.01) def gyro (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0 - GxCal Gy = y / 131.0 - GyCal Gz = z / 131.0 - GzCal #print "X =" + str (Gx) عرض (Gx، Gy، Gz) time.sleep (. 01)
بعد ذلك ، قمنا بكتابة دالة قراءة درجة الحرارة
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "٪. 2f"٪ tempC print tempC setCursor (0،0) Print ("Temp:") Print (str (tempC)) الوقت. النوم (.2)
يتم استخدام وظيفة def calibrate () لمعايرة MPU6050 ويتم استخدام وظيفة عرض def () لعرض القيم على شاشة LCD. تحقق من هذه الوظائف في الكود الكامل الوارد أدناه.
بعد ذلك بدأنا شاشات الكريستال السائل، وتهيئة معايرة MPU6050 ثم في أثناء حلقة طالبنا كل مجموعة ثلاثة فقط من القيم من MPU- درجة الحرارة، والتسارع والدوران وأظهر لهم على LCD.
ابدأ()؛ طباعة ("واجهة MPU6050") setCursor (0،1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () for i in range (20): temp () مسح () Print ("Accel") time.sleep (1) لـ i في النطاق (30): تسريع () مسح () Print ("Gyro") time.sleep (1) لـ i في النطاق (30): جيرو ()
يتم استخدام كل من MPU6050 الدوران ومقياس التسارع لاكتشاف موضع واتجاه أي جهاز. يستخدم الجيروسكوب الجاذبية الأرضية لتحديد مواضع المحور x و y و z ويكشف مقياس التسارع بناءً على معدل تغير الحركة. لقد استخدمنا بالفعل مقياس التسارع مع Arduino في العديد من مشاريعنا مثل:
- مقياس التسارع القائم على لفتة اليد الروبوت التحكم
- نظام تنبيه حوادث المركبات القائم على اردوينو
- إنذار للكشف عن الزلازل باستخدام Arduino