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

تسجيل بيانات Realtime MPU-6050 / A0 باستخدام Arduino و Android: 7 خطوات (بالصور)
تسجيل بيانات Realtime MPU-6050 / A0 باستخدام Arduino و Android: 7 خطوات (بالصور)

فيديو: تسجيل بيانات Realtime MPU-6050 / A0 باستخدام Arduino و Android: 7 خطوات (بالصور)

فيديو: تسجيل بيانات Realtime MPU-6050 / A0 باستخدام Arduino و Android: 7 خطوات (بالصور)
فيديو: Physics Toolbox Accelerometer 2024, يوليو
Anonim
تسجيل بيانات Realtime MPU-6050 / A0 باستخدام Arduino و Android
تسجيل بيانات Realtime MPU-6050 / A0 باستخدام Arduino و Android

لقد كنت مهتمًا باستخدام Arduino للتعلم الآلي. كخطوة أولى ، أرغب في إنشاء عرض بيانات في الوقت الفعلي (أو قريب جدًا منه) ومسجل باستخدام جهاز Android. أرغب في التقاط بيانات مقياس التسارع من MPU-6050 لذلك صممت الهيكل لاستخدام HC-05 عند 115200 باود. باستخدام هذا التكوين ، يمكن إرسال 4 قنوات من البيانات بمعدل 250 عينة في الثانية.

يحتوي البناء على بضع خطوات:

  • بناء الدرع أو اللوح
  • برمجة اردوينو
  • قم بتحميل تطبيق Android من Google Play أو فرع GitHub وقم بتجميعه بنفسك
  • قم بتوصيل MPU-6050 بشيء مثير للاهتمام يهتز (استخدمت سيارة R / C)
  • استخدم جهاز Android للاتصال بـ Arduino
  • ارسم البيانات وحفظها إذا كنت مهتمًا
  • الاستيراد إلى Python (أو نظام أساسي آخر) لمزيد من الاستخدام

هيا بنا نبدأ!

الخطوة 1: قم ببناء الدرع / اللوح

بناء الدرع / اللوح
بناء الدرع / اللوح
بناء الدرع / اللوح
بناء الدرع / اللوح

هذا هو مخطط الأسلاك لكل من Arduino و HC-05 و MPU-6050. بالإضافة إلى MPU-6050 ، لديّ المدخلات التناظرية A0 السلكية إلى مستشعر الضوء لإظهار أن ADC يعمل. يمكن إحضار أي إشارة 0-5 فولت إلى A0 ADC. هذه هي المكونات التي استخدمتها للبناء:

  • اردوينو اونو
  • HC-05 (يجب أن يعمل HC-06 أيضًا ، لكن بنيتي كان مع HC-05)
  • MPU-6050
  • Sparkfun المقاوم الضوئي
  • 10 كيلو أوم المقاوم (بني-أسود-برتقالي)

معظم وحدات HC-05 Bluetooth الافتراضية هي 9600 باود. لنقل البيانات بنجاح ، ستحتاج إلى إعادة برمجتها بمعدل 115200 باود. هناك HC-05 / HC-06 AT Command Instructable جيد يشرح كيفية القيام بذلك.

الخطوة 2: برمجة Arduino

برمجة اردوينو
برمجة اردوينو
برمجة اردوينو
برمجة اردوينو

لقد استخدمت إصدار Arduino IDE 1.6.7 لبرمجة Arduino. يمكن تنزيل الكود من الروابط الموجودة في هذه الخطوة أو من GitHub repo. لقد قمت بتضمين ثلاثة إصدارات: Firmware125.ino هو إصدار 125 هرتز ، و Firmware250.ino هو إصدار 250 هرتز ، و Firmware500.ino هو إصدار 500 هرتز. لجعل Arduino يدور بسرعة 500 هرتز ، لا يتم جمع A0 ADC.

يشتمل البرنامج الثابت على ساعة خروج على Pin 9 استخدمتها للتحقق من التوقيت. يوضح التتبع أن وقت الدورة هو 4 مللي ثانية (ما يعادل 1/250 هرتز). لقد اكتشفت أنه في حالة وجود مشكلات في الارتباط التسلسلي ، فلن يكون التوقيت موحدًا.

يستخدم كود Arduino إخفاء البت لإضافة رقم قناة إلى كل حزمة لأن العينات تسقط أحيانًا عبر Bluetooth. أستخدم البتات الثلاثة الأكثر أهمية لتخزين رقم القناة. بالنسبة للأعداد الصحيحة الموقعة ، يتم حجز البت الأكثر أهمية (MSB) للإشارة. نظرًا لأنني أرغب في استخدام MSB لعناني ، بدلاً من علامة العدد الصحيح ، فلا بد لي من تحويل جميع قيم مقياس التسارع الموقعة إلى أعداد صحيحة بدون إشارة. أفعل ذلك عن طريق إضافة 32768 إلى كل قيمة (عدد ADC للتسارع MPU +32768 إلى -32768) وإلقاءه كأعداد صحيحة غير موقعة:

(غير موقعة int) ((طويلة) iAccelData + 32767) ،

رقم القناة هو نفسه لكل مقياس تسارع ومنفذ A0 بحيث يمكن اكتشاف الحزمة المسقطة إذا كانت أرقام القنوات معطلة. بالنسبة للحزم القادمة من البلوتوث على Arduino ، فإن النمط الثنائي هو (الإشارات تتغير قليلاً):

(بتات عنوان xacc 3 = 0x00 ، 13 بت بدون توقيع) (بتات عنوان yacc 3 = 0x01 ، 13 بت غير موقعة) (بتات عنوان zacc 3 = 0x02 ، 13 بت غير موقعة) (3 بتات عنوان = 0x03 ، iadc13bit غير موقعة)

(بتات عنوان xacc 3 = 0x00 ، 13 بت غير موقعة) (بتات عنوان yacc 3 = 0x01 ، 13 بت غير موقعة) (بتات عنوان zacc 3 = 0 x02 ، 13 بت غير موقعة) (3 بتات عنوان = 0 x03 ، iadc13bit غير موقعة) (بت عنوان xacc 3 = 0x00 ، 13 بت بدون توقيع) (بتات عنوان yacc 3 = 0x01 ، 13 بت غير موقعة) (بتات عنوان zacc 3 = 0x02 ، 13 بت غير موقعة) (3 بتات عنوان = 0x03 ، iadc13bit غير موقعة) …

إذا كنت تستخدم شيئًا آخر غير تطبيق Accel Plot Android لقراءة بيانات Bluetooth ، فإليك الخطوات لاستخراج العنوان (أستخدم الأسماء المتغيرة من ملف Accel Plot Bluetooth.java من GitHub repo):

- اقرأ في عدد 16 عدد صحيح غير موقعة

- استخرج البايت العالي واحفظه إلى btHigh.

- استخرج البايت المنخفض واحفظه في btLow.

- استرجع العنوان من btHigh باستخدام: (btHigh >> 5) & 0x07. يتحول هذا البيان إلى btHigh 5 بتات إلى اليمين لتحريك بتات العنوان الثلاثة إلى أدنى ثلاثة سجلات. العلامة & هي منطقية AND التي تفرض أن تكون البتات 4 وما فوق صفراً وتطابق البتات الثلاثة الأخيرة مع بتات العنوان. نتيجة هذا البيان هي عنوانك.

لا داعي للقلق بشأن استخراج العنوان إذا كنت تستخدم Accel Plot.

الخطوة 3: قم بتحميل تطبيق Android من Google Play أو فرع GitHub

قم بتحميل تطبيق Android من Google Play أو فرع GitHub
قم بتحميل تطبيق Android من Google Play أو فرع GitHub

لديك خياران لتحميل تطبيق Android على جهازك. إذا كنت تريد تجنب الترميز ، فيمكنك البحث عن "Accel Plot" وسيظهر التطبيق في متجر Google Play. اتبع تعليمات المتجر للتثبيت.

رغبتي في Instructable هذه هي حقًا تشجيع الآخرين على بناء مشاريع ، لذا فقد قمت أيضًا بنشر الكود في GitHub repo. يجب أن تكون قادرًا على تفريع هذا وبناءه وتعديله كما تراه مناسبًا. لقد قمت بنشر الكود بموجب ترخيص MIT لذا استمتع!

الخطوة 4: الاتصال بـ Arduino بشيء مثير للاهتمام (استخدمت سيارة R / C)

قم بتوصيل Arduino بشيء مثير للاهتمام (استخدمت سيارة R / C)
قم بتوصيل Arduino بشيء مثير للاهتمام (استخدمت سيارة R / C)

أريد في النهاية استخدام الجهاز لاكتشاف سطح الطريق ، لذلك اعتقدت أن سيارة صغيرة يتم التحكم فيها عن بعد (R / C) ستكون مناسبة. أعتقد أنه من المفيد في الخطوة التالية إذا كان من الممكن أن تكون الإضافات على شيء يتحرك أو يهتز.

الخطوة 5: استخدم جهاز Android للاتصال بـ Arduino

استخدم جهاز Android للاتصال بـ Arduino
استخدم جهاز Android للاتصال بـ Arduino
استخدم جهاز Android للاتصال بـ Arduino
استخدم جهاز Android للاتصال بـ Arduino
استخدم جهاز Android للاتصال بـ Arduino
استخدم جهاز Android للاتصال بـ Arduino

إذا لم تكن قد قمت بذلك بالفعل ، فستحتاج أولاً إلى إقران HC-05 بجهاز Android الخاص بك. أعتقد أنه في معظم الأجهزة يمكنك القيام بذلك من خلال الانتقال إلى الإعدادات. سيكون رقم التعريف الشخصي الافتراضي لمعظم أجهزة HC-05 هو 1234 أو 1111.

افتح تطبيق AccelPlot على جهاز Android. عند فتح التطبيق ، وقبل الاتصال بـ HC-05 ، يمكنك تغيير معدل أخذ العينات (تم تعيينه في كود Arduino) ، ومقاييس التسارع (المحددة أيضًا في كود Arduino) ، وعدد العينات التي سيتم حفظها.

بمجرد إجراء هذه الإعدادات ، انقر فوق الزر "اتصال". يجب أن يعرض أجهزة Bluetooth ويجب أن يتم سرد جهازك. حدده وبمجرد أن ينشئ الرمز الاتصال ، سترى نخب "متصل" منبثق.

استخدم زر السهم الخلفي للعودة إلى Accel Plot. اضغط على زر "بدء البث" لعرض البيانات من جهاز HC-05. يجب عليك أيضًا الأزرار المتاحة لحفظ البيانات أو تشغيل محتوى معدل التردد من خلال مقبس الصوت.

الخطوة 6: الحصول على البيانات ورسمها

Image
Image
الاستيراد إلى Python (أو نظام أساسي آخر) للاستخدام الإضافي
الاستيراد إلى Python (أو نظام أساسي آخر) للاستخدام الإضافي

يجب تمكين زر "بدء البث". اضغط عليه لبدء دفق البيانات إلى الشاشة.

سيتم أيضًا تمكين زر "حفظ البيانات" ، انقر فوقه لتخزين البيانات.

يتضمن Accel Plot أيضًا خيارًا لإخراج إشارة معدلة على قنوات الصوت. تشير القناتان في تطبيق Accel Plot إلى القناتين اليسرى واليمنى لمقبس إخراج الصوت على جهاز Android. يكون هذا مفيدًا إذا كنت تريد إحضار بيانات MPU-6050 في نظام منفصل لتسجيل البيانات ، مثل National Instruments.

يُظهر الفيديو مثالاً على نظام يجمع البيانات على سيارة R / C.

الخطوة 7: الاستيراد إلى Python (أو نظام أساسي آخر) للاستخدام الإضافي

الاستيراد إلى Python (أو نظام أساسي آخر) للاستخدام الإضافي
الاستيراد إلى Python (أو نظام أساسي آخر) للاستخدام الإضافي

يتم حفظ الملفات على جهاز Android. سيتم تخزين الملفات ضمن دليل "AccelPlot" لنظام Android API 18 وما فوق. يضع الرمز ملفات.dat في مجلد "\ Tablet / Documents / AccelPlot" لـ API 19 (KitKat 4.4) والإصدارات الأحدث. لقد واجهت مشكلة مع بعض أجهزة Android التي تعرض الملفات عند الاتصال عبر USB. في بعض الحالات ، اضطررت إلى إعادة تشغيل جهاز Android لحملهم على الظهور. لست متأكدًا من سبب ذلك ، ولكن يجب أن يكون هناك أربعة ملفات ، واحد لكل قناة. يمكن نسخها إلى دليل محلي لعمل إضافي.

لقد استخدمت Anaconda / Python 2.7 لفتح الملفات وعرض البيانات. يحتوي ملف "ExploratoryAnalysis.ipynb" على ملف IPython Notebook الذي سيفتح جميع ملفات البيانات ويرسم بيانات العينة. يتم تضمين ملفات العينة في GitHub repo. يتم حفظ البيانات على هيئة عوامات كبيرة بحجم 4 بايت ('> f') لذلك يجب أن يكون أي برنامج تحليل قادرًا على فتحها.

لقد قمت أيضًا بتضمين ملف أبسط يسمى "ReadDataFiles.ipynb" يوضح كيفية القراءة في ملف واحد بالاسم.

موصى به: