فهرست مطالب:

Realtime MPU-6050/A0 Logging Data with Arduino and Android: 7 Step (with Pictures)
Realtime MPU-6050/A0 Logging Data with Arduino and Android: 7 Step (with Pictures)

تصویری: Realtime MPU-6050/A0 Logging Data with Arduino and Android: 7 Step (with Pictures)

تصویری: Realtime MPU-6050/A0 Logging Data with Arduino and Android: 7 Step (with Pictures)
تصویری: IMU | Ep.1: Preparing an experiment to test linear positions (ft. MPU6050, GY-BNO055) 2024, جولای
Anonim
ثبت بی سابقه MPU-6050/A0 با آردوینو و اندروید
ثبت بی سابقه MPU-6050/A0 با آردوینو و اندروید

من علاقه مند به استفاده از آردوینو برای یادگیری ماشین هستم. به عنوان اولین قدم ، من می خواهم یک نمایش داده و ثبت اطلاعات در زمان واقعی (یا تقریباً نزدیک به آن) با یک دستگاه Android ایجاد کنم. من می خواهم داده های شتاب سنج را از MPU-6050 بگیرم ، بنابراین من ساختار را برای استفاده از HC-05 در 115200 baud طراحی کردم. با این پیکربندی می توان 4 کانال داده را با 250 نمونه در ثانیه منتقل کرد.

ساخت چند مرحله دارد:

  • سپر یا تخته نان را بسازید
  • آردوینو را برنامه ریزی کنید
  • برنامه Android را از Google Play بارگیری کنید یا GitHub را شاخه کنید و خودتان آن را کامپایل کنید
  • MPU-6050 را به چیزی جالب که ارتعاش دارد وصل کنید (من از ماشین R/C استفاده کردم)
  • برای اتصال به آردوینو از دستگاه Android استفاده کنید
  • داده ها را ترسیم کنید ، در صورت تمایل ذخیره کنید
  • برای استفاده بیشتر به پایتون (یا پلت فرم دیگر) وارد کنید

بیایید شروع کنیم!

مرحله 1: Shield/breadboard را بسازید

سپر/تخته نان را بسازید
سپر/تخته نان را بسازید
سپر/تخته نان را بسازید
سپر/تخته نان را بسازید

این نمودار سیم کشی برای 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 به طور پیش فرض روی 9600 baud تنظیم شده است. برای اینکه داده ها با موفقیت منتقل شوند ، باید آنها را با نرخ بارگذاری 115200 برنامه ریزی مجدد کنید. یک دستورالعمل HC-05/HC-06 AT وجود دارد که نحوه انجام آن را توضیح می دهد.

مرحله 2: آردوینو را برنامه ریزی کنید

آردوینو را برنامه ریزی کنید
آردوینو را برنامه ریزی کنید
آردوینو را برنامه ریزی کنید
آردوینو را برنامه ریزی کنید

من از Arduino IDE نسخه 1.6.7 برای برنامه ریزی Arduino استفاده کردم. کد را می توان از پیوندهای این مرحله یا از مخزن GitHub بارگیری کرد. من سه نسخه را وارد کرده ام: Firmware125.ino نسخه 125 هرتز ، Firmware250.ino نسخه 250 هرتز و Firmware500.ino نسخه 500 هرتز است. Adu ADC جمع آوری نمی شود تا آردوینو با 500 هرتز دوچرخه سواری کند.

سیستم عامل شامل یک ساعت خاموش در پین 9 است که از آن برای بررسی زمان استفاده کردم. ردیابی نشان می دهد که زمان چرخه 4 میلی ثانیه (معادل 1/250 هرتز) است. من دریافتم که اگر مشکلات پیوند سریال وجود داشته باشد ، زمان بندی یکنواخت نخواهد بود.

کد آردوینو از بیت ماسک برای افزودن شماره کانال به هر بسته استفاده می کند ، زیرا نمونه ها گاهی از طریق بلوتوث رها می شوند. من از سه بیت مهم برای ذخیره شماره کانال استفاده می کنم. برای اعداد صحیح امضا شده ، بیشترین بیت (MSB) برای علامت محفوظ است. از آنجا که من می خواهم از MSB برای آدرس خود استفاده کنم ، نه علامت صحیح ، باید تمام مقادیر شتاب سنج امضا شده را به اعداد صحیح بدون علامت تبدیل کنم. من این کار را با افزودن 32768 به هر مقدار (تعداد ADC شتاب سنج MPU +32768 تا -32768) انجام می دهم و به عنوان اعداد صحیح بدون علامت ارسال می کنم:

(بدون امضا int) ((طولانی) iAccelData+32767) ؛

شماره کانال برای هر شتاب سنج و پورت A0 یکسان است تا در صورت خرابی شماره کانال ، بسته حذف شده تشخیص داده شود. برای بسته هایی که از بلوتوث روی آردوینو می آید ، الگوی دودویی به این شکل است (علائم کمی تغییر می کند):

(xacc 3 bits address = 0x00، 13bit unsigned) (yacc 3 bits address = 0x01، 13bit unsigned) (zacc 3 bits address = 0x02، 13bit unsigned) (3 بیت آدرس = 0x03، iadc13bit بدون امضا)

(xacc 3 bits address = 0x00، 13bit unsigned) (yacc 3 bits address = 0x01، 13bit unsigned) (zacc 3 bits address = 0x02، 13bit unsigned) (3 بیت آدرس = 0x03، iadc13bit بدون امضا) (xacc 3 بیت آدرس = 0x00 ، 13 بیت بدون امضا) (yacc 3 بیت آدرس = 0x01 ، 13 بیت بدون امضا) (zacc 3 بیت آدرس = 0x02 ، 13 بیت بدون امضا) (3 بیت آدرس = 0x03 ، iadc13bit بدون امضا)…

اگر از چیزی غیر از برنامه Accel Plot Android برای خواندن داده های بلوتوث استفاده می کنید ، در اینجا مراحل استخراج آدرس آمده است (من از نام متغیرهای فایل Accel Plot Bluetooth.java از repo GitHub استفاده می کنم):

- در 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 ظاهر شود. برای نصب دستورالعمل های فروشگاه را دنبال کنید.

تمایل من با استفاده از این دستورالعمل این است که دیگران را تشویق کنم تا پروژه بسازند ، بنابراین من کد را در repo GitHub نیز منتشر کرده ام. شما باید بتوانید این را منشعب کنید ، بسازید و آنطور که مناسب می دانید اصلاح کنید. من کد را تحت مجوز MIT منتشر کردم ، بنابراین لذت ببرید!

مرحله 4: به Arduino به چیزی جالب وصل شوید (من از ماشین R/C استفاده کردم)

به Arduino به چیزی جالب وصل شوید (من از ماشین R/C استفاده کردم)
به Arduino به چیزی جالب وصل شوید (من از ماشین R/C استفاده کردم)

من می خواهم در نهایت از دستگاه برای تشخیص سطح جاده استفاده کنم بنابراین فکر کردم یک ماشین کوچک کنترل از راه دور (R/C) مناسب خواهد بود. من فکر می کنم اگر قدم بر روی چیزی که حرکت می کند یا ارتعاش می کند باشد ، در مرحله بعد کمک می کند.

مرحله 5: از دستگاه Android برای اتصال به آردوینو استفاده کنید

برای اتصال به آردوینو از دستگاه Android استفاده کنید
برای اتصال به آردوینو از دستگاه Android استفاده کنید
برای اتصال به آردوینو از دستگاه Android استفاده کنید
برای اتصال به آردوینو از دستگاه Android استفاده کنید
برای اتصال به آردوینو از دستگاه Android استفاده کنید
برای اتصال به آردوینو از دستگاه Android استفاده کنید

اگر قبلاً این کار را نکرده اید ، ابتدا باید HC-05 را با دستگاه Android خود جفت کنید. من معتقدم که در اکثر دستگاه ها می توانید این کار را با رفتن به تنظیمات انجام دهید. پین پیش فرض برای اکثر دستگاههای HC-05 1234 یا 1111 خواهد بود.

برنامه AccelPlot را در دستگاه Android باز کنید. وقتی برنامه باز می شود و قبل از اتصال به HC-05 ، می توانید نرخ نمونه برداری (این در کد آردوینو تنظیم شده است) ، مقیاس های شتاب سنج (همچنین در کد آردوینو تنظیم شده است) و تعداد نمونه هایی که باید ذخیره شوند را تغییر دهید.

پس از انجام این تنظیمات ، روی دکمه "اتصال" کلیک کنید. باید دستگاه های بلوتوث را نمایش دهد و دستگاه شما باید در لیست باشد. آن را انتخاب کنید و هنگامی که کد اتصال را برقرار کرد ، یک نان تست "متصل" ظاهر می شود.

برای بازگشت به Accel Plot از دکمه پیکان عقب استفاده کنید. برای نمایش داده ها از دستگاه HC-05 روی دکمه "شروع جریان" ضربه بزنید. همچنین باید دکمه های موجود برای ذخیره داده ها یا پخش محتوای تعدیل شده فرکانس از طریق جک صدا را در اختیار داشته باشید.

مرحله 6: به دست آوردن و ترسیم داده ها

Image
Image
برای استفاده بیشتر به پایتون (یا پلتفرم دیگر) وارد کنید
برای استفاده بیشتر به پایتون (یا پلتفرم دیگر) وارد کنید

دکمه "شروع جریان" باید فعال باشد. روی آن ضربه بزنید تا جریان داده ها روی صفحه شروع شود.

دکمه "ذخیره داده ها" نیز فعال می شود ، روی آن ضربه بزنید تا داده ها ذخیره شوند.

Accel Plot همچنین دارای گزینه ای برای خروج سیگنال تعدیل شده بر روی کانال های صوتی است. 2 کانال موجود در برنامه Accel Plot به کانال های چپ و راست جک خروجی صدا در دستگاه Android اشاره دارد. اگر می خواهید داده های MPU-6050 را به یک سیستم ثبت داده جداگانه ، مانند National Instruments ، بیاورید ، مفید است.

در این ویدئو نمونه ای از سیستم جمع آوری داده ها در ماشین R/C نشان داده می شود.

مرحله 7: برای استفاده بیشتر به پایتون (یا پلتفرم دیگر) وارد کنید

برای استفاده بیشتر به پایتون (یا پلتفرم دیگر) وارد کنید
برای استفاده بیشتر به پایتون (یا پلتفرم دیگر) وارد کنید

فایل ها در دستگاه Android ذخیره می شوند. فایلها تحت فهرست "AccelPlot" برای Android API 18 و بالاتر ذخیره می شوند. کد فایل های.dat را در پوشه "\ Tablet / Documents / AccelPlot" برای API 19 (KitKat 4.4) و بالاتر قرار می دهد. من با برخی از دستگاه های Android که هنگام اتصال از طریق USB فایل ها را نشان می دهند مشکل داشتم. در برخی موارد ، مجبور شدم دستگاه Android را مجدداً راه اندازی کنم تا ظاهر شود. مطمئن نیستم که چرا اینطور است ، اما باید چهار فایل وجود داشته باشد ، یک فایل برای هر کانال. برای کارهای بیشتر می توان آنها را در یک فهرست محلی کپی کرد.

من از Anaconda/Python 2.7 برای باز کردن فایل ها و نمایش داده ها استفاده کردم. فایل "ExploratoryAnalysis.ipynb" دارای فایل نوت بوک IPython است که تمام فایل های داده را باز کرده و داده های نمونه را ترسیم می کند. فایل های نمونه در repo GitHub گنجانده شده است. داده ها به صورت شناور 4 بایت بزرگ ('> f') ذخیره می شوند ، بنابراین هر برنامه تجزیه و تحلیل باید بتواند آنها را باز کند.

من همچنین یک فایل ساده تر به نام "ReadDataFiles.ipynb" قرار داده ام که نحوه خواندن در یک فایل را با نام نشان می دهد.

توصیه شده: