در برخی از پروژه ها، مانند ساخت برخی از تجهیزات بازی های واقعیت مجازی لازم است حرکت یک شیء پردازش شود. اگر شما نیز امروز در انجام پروژه خود به این موضوع نیاز دارید پس بهتر است بدانید برای پردازش حرکت یک جسم در فضا و زمان واقعی لازم است پارامترهایی همانند: شتاب خطی، زاویه ها و قطب ها آن شیء را داشته باشیم. اما چگونه!
ماژول شتاب سنج 9 محوره MPU9250
ماژول MPU9250 یک ماژول بسیار کامل جهت پردازش حرکت یک جسم در زمان واقعی است. با استفاده از این ماژول شما می توانید به کمیت هایی همچون: شتاب سنج (accelerometer)، ژیروسکوپ (gyroscope)، قطب نما دسترسی داشته باشید. در تصویر زیر می توانید نمای ظاهری و ترتیب پایه های ماژول شتاب سنج 9 محوره MPU9250 را مشاهده کنید.
ویژگی های ماژول MPU9250
:: دارای سنسور شتاب سنج سه محره با دقت 16 بیت و اندازه گیری شتاب تا 16g
:: دارای سنسور ژیروسکوپ سه محوره با دقت 16 بیت و اندازه گیری تا 2000 درجه بر ثانیه
:: دارای سنسور قطب نمای سه محوره
:: دارای سنسور دمای داخلی جهت اندازه گیری دما در بازه منفی 40 الی مثبت 85 درجه سانتی گراد
:: پشتیبانی از پروتکل ارتباطی I2C
:: پشتیبانی از پروتکل ارتباطی SPI
:: ولتاژ کاری 2/4 الی 3/6 ولت DC
:: جریان مصرفی 3/7 میلی آمپر (mA) در مد مصرفی نرمال و 8 میکرو آمپر (uA) در مد توان مصرفی کم
نحوه اتصال ماژول MPU9250 به برد آردوینو Arduino
معرفی کتابخانه MPU9250.h
کتابخانه MPU9250.h یکی از کتابخانه های بسیار کامل و البته بهینه برای آردوینو Arduino جهت راه اندازی ماژول شتاب سنج 9 محوره MPU9250 می باشد. با استفاده از کتابخانه MPU9250.h شما می توانید بدون اینکه خودتان را درگیر برنامه نویسی جهت برقراری ارتباط با ماژول MPU9250 کنید به راحتی می توانید با نوشتن یک خط دستور به تمامی کمیت های لازم جهت پردازش حرکت یک شیء همانند: شتاب، زاویه و قطب نما درسترسی داشته باشید.
فراخوانی کتابخانه MPU9250.h
برای استفاده از کتابخانه MPU9250.h ابتدا باید آنرا از انتهای همین مطلب دانلود کنید و سپس کتابخانه را در قسمت libraries نزم افزار آردوینو خود اضافه کنید. برای این منظور می توانید مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه Bolder_Flight_Systems_MPU9250 را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
پس از افزودن کتابخانه MPU9250.h به نرم افزار آردوینو، حال می توانید جهت استفاده از امکانات آن در برنامه خود از طریق کد دستوری زیر کتابخانه را در برنامه خود فراخوانی کنید.
1 |
#include "MPU9250.h" |
تعریف آبجکت
پس از فراخوانی کتابخانه MPU9250.h جهت ارتباط با آن و خواندن مقادیر شتاب، زاویه و قطب نما، نیاز به تعریف یک آبجکت با نام دلخواه داریم، تا در طول برنامه با آن نام آبجکت را فراخوانی کنیم. برای این منظور می توانیم از دستور زیر استفاده کنیم.
1 |
MPU9250 IMU(Wire, 0x68); |
IMU : در صورت تمایل به جای این کلمه می توانید از نام دلخواه مورد نظر خود استفاده کنید.
فعال سازی ارتباط آردوینو با ماژول MPU9250
با استفاده از دستور زیر می توانیم ارتباط بین برد آردوینو و ماژول MPU9250 را فعال کنیم.
1 |
IMU.begin(); |
برگرداندن مقدار شتاب در سه محور X و Y و Z
1 2 3 4 |
IMU.readSensor(); IMU.getAccelX_mss(); IMU.getAccelY_mss(); IMU.getAccelZ_mss(); |
مثال : می خواهیم مقادیر مربوط به شتاب را برای سه محور X و Y و Z از ماژول MPU9250 توسط برد آردوینو بخوانیم و در محیط سریال آردوینو چاپ کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include "MPU9250.h" MPU9250 IMU(Wire, 0x68); void setup() { Serial.begin(115200); IMU.begin(); } void loop() { IMU.readSensor(); Serial.print(IMU.getAccelX_mss(), 6); Serial.print("\t"); Serial.print(IMU.getAccelY_mss(), 6); Serial.print("\t"); Serial.println(IMU.getAccelZ_mss(), 6); delay(100); } |
برگرداندن مقادیر سنسور ژیروسکوپ در سه محور X و Y و Z
1 2 3 4 |
IMU.readSensor(); IMU.getGyroX_rads(); IMU.getGyroY_rads(); IMU.getGyroZ_rads(); |
مثال : می خواهیم مقادیر مربوط به سنسور ژیروسکوپ را برای سه محور X و Y و Z از ماژول MPU9250 توسط برد آردوینو بر حسب رادیان بخوانیم و در محیط سریال آردوینو چاپ کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include "MPU9250.h" MPU9250 IMU(Wire, 0x68); void setup() { Serial.begin(115200); IMU.begin(); } void loop() { IMU.readSensor(); Serial.print(IMU.getGyroX_rads(), 6); Serial.print("\t"); Serial.print(IMU.getGyroY_rads(), 6); Serial.print("\t"); Serial.println(IMU.getGyroZ_rads(), 6); delay(100); } |
برگرداندن مقادیر سنسور قطب نما در سه محور X و Y و Z
1 2 3 4 |
IMU.readSensor(); IMU.getMagX_uT(); IMU.getMagY_uT(); IMU.getMagZ_uT(); |
مثال : می خواهیم مقادیر مربوط به سنسور قطب نما را برای سه محور X و Y و Z از ماژول MPU9250 توسط برد آردوینو بخوانیم و در محیط سریال آردوینو چاپ کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include "MPU9250.h" MPU9250 IMU(Wire, 0x68); void setup() { Serial.begin(115200); IMU.begin(); } void loop() { IMU.readSensor(); Serial.print(IMU.getMagX_uT(), 6); Serial.print("\t"); Serial.print(IMU.getMagY_uT(), 6); Serial.print("\t"); Serial.println(IMU.getMagZ_uT(), 6); delay(100); } |
برگرداندن مقدار دما
1 2 |
IMU.readSensor(); IMU.getTemperature_C(); |
مثال : می خواهیم مقادیر مربوط به سنسور دماسنج ماژول MPU9250 را توسط برد آردوینو بخوانیم و در محیط سریال آردوینو چاپ کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include "MPU9250.h" MPU9250 IMU(Wire, 0x68); void setup() { Serial.begin(115200); IMU.begin(); } void loop() { IMU.readSensor(); Serial.println(IMU.getTemperature_C(),6); delay(100); } |
پروژه ساخت موس کامپیوتر با ماژول MPU9250
در این پروژه آردوینو از مبحث آموزش آردوینو می خواهیم شما را با نحوه برنامه نویسی و ساخت یک موس کامپیوتر با آردوینو و ماژول MPU9250 آشنا کنیم. در پروژه های گذشته ما مطلبی منتشر کردیم که در آن به صورت کامل نحوه ساخت یک موس کامپیوتر با برد آردوینو توسط ماژول جوی استیک را آموزش دادیم. حال می خواهیم در این پروژه دوباره با برد آردوینو یک موس کامپیوتر بسازیم ولی با این تفاوت که اینبار قرار است از سنسور ژیروسکوپ (gyroscope) ماژول MPU9250 به جای جوی استیک برای کنترل جهت حرکت موس بر روی صفحه کامپیوتر استفاده کنیم. به این ترتیب جهت حرکت موس بر روی صفحه کامپیوتر را می توانیم با چرخاندن ماژول MPU9250 در دو محور X و Y تعیین کنیم.
لیست قطعات مورد نیاز
برد آردوینو مدل Arduino Leonardo R3 | 1 عدد |
ماژول ژیروسکوپ، شتاب سنج و میدان مغناطیسی MPU9250 | 1 عدد |
تک سوئیچ 2 پایه DIP سایز 6x6x5 میلیمتر | 1 عدد |
برد بورد (پروجکت برد) مدل GL | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
نقشه شماتیک پروژه
برنامه پروژه در نرم افزار آردوینو
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include "MPU9250.h" #include <Mouse.h> MPU9250 IMU(Wire, 0x68); const int LEFT_CLICK = 4; const int RIGHT_CLICK = 5; const int speed_mouse = 1; void setup() { IMU.begin(); Mouse.begin(); pinMode(LEFT_CLICK, INPUT_PULLUP); pinMode(RIGHT_CLICK, INPUT_PULLUP); } void loop() { IMU.readSensor(); Mouse.move(IMU.getAccelX_mss(), IMU.getAccelY_mss(), 0); readClick(LEFT_CLICK, MOUSE_LEFT); readClick(RIGHT_CLICK, MOUSE_RIGHT); delay(speed_mouse); } void readClick(int pin, char mouse_command) { if (digitalRead(pin) == LOW) { if (!Mouse.isPressed(mouse_command)) { Mouse.press(mouse_command); } } else { if (Mouse.isPressed(mouse_command)) { Mouse.release(mouse_command); } } } |
ویلانتان بمانه کتاب خانه موس چرا نزاشتین
سلام دوست عزیز
فایل کتابخانه موس به فایل پروژه افزوده شد.
سلام برنامتون کار نمیکنه همه ای کتابخانه ها هم ادد شده ولی کار نمیکنه
سلام دوست عزیز
این پروژه 100 درصد عملی می باشد و برنامه آن توسط تیم فنی الکترونیک98 آزمایش شده است و فیلم راه اندازی پروژه نیز در توضیحات موجود است، لطفا اتصالات و صحت عملکرد قطعات را در مدار خود بررسی فرمایید.
سلام وقتتون بخیر
برای تنظیم x y z چیکار کنم
مکانما میره یه گوشه
سلام دوست عزیز
نیازی به تنظیم خاصی نیست و اگر وضعیت ماژول صحیح باشد (همانند فیلم آزمایش پروژه) باید با تغییر زاویه ماژول نشانگر موس نیز تغییر وضعیت دهید.
ببخشید هر کاری میکنم مکانما میزه یه گوشی وایمیسه