در این مقاله میخواهیم نحوه اتصال ماژول MPU9150 به آردوینو را آموزش دهیم 🙂 در ادامه آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.
این ماژول یک ماژول شتاب سنج ۹ محوره بسیار دقیق می باشد که دارای دقت بسیار بالا و سیستم پیشرفته پردازش حرکت دیجیتال داخلی (DMP) می باشد. این ماژول دارای دو چیپ مجزا است و با توجه به رابط I2C این ماژول به راحتی می توانید آن را به کمک آردوینو یا هر میکروکنترل دیگری راه اندازی نمایید. سنسور gyro سه محوره با دقت ۱۶ بیت و رنج اندازه گیری ۲۰۰۰ درجه بر ثانیه، سنسور شتاب سه محوره با دقت ۱۶ بیت و رنج اندازه گیری تا ۱۶g. سنسور قطب نمای ۳ محوره با دقت ۱۳ بیت همچنین دارای بافر FIFO با ظرفیت ۱۰۲۴ بایت و سنسور دما با رنج اندازه گیری ۴۰- تا ۸۵+ درجه سانتیگراد از قابلیتهای این ماژول می باشد. تعداد زیادی از این نوع سنسور ها در کارخانه های تلفن های هوشمند و تبلت ها استفاده میشود. در گوشی های هوشمند در ساخت اپلیکیشن ها، بازی ها و راهنما های مسیر(navigation) و … بکاربرده میشود. با این قابلیت میتوان حرکات یک شخص را دقیقا بررسی کرد و در برنامه های سه بعدی مانند برنامه های سلامت سنجی و تناسب اندام گرفته تا سرویس های مکان نما و … به کار برد.
سخت افزار مورد نیاز
اتصالات
زمین(GND) به زمین (GND) آردوینو
اتصال vcc به ۳٫۳ آردوینو
اتصال SDA به A4 آردوینو
اتصال SCL به A5 آردوینو
اتصال INT به پین ۲ آردوینو
کد نویسی:
جهت کامپایل برنامه نیاز به کتابخانه ی I2Cdev.hو MPU6050.h داریم این فایلها را دانلود کنید. دانلود
پس از دانلود فایل زیپ را در مسیر دلخواه قرار دهید و توسط مسیر زیر کتابخانه را به آردوینو اضافه کنید.
Import Library–> add Library
یکبار محیط آردوینو را ببندید و دوباره باز کنید.
کد نویسی:
#include "Wire.h" // I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files // for both classes must be in the include path of your project #include "I2Cdev.h" #include "MPU6050.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU6050 accelgyro; int16_t ax, ay, az; int16_t gx, gy, gz; int16_t mx, my, mz; #define LED_PIN 13 bool blinkState = false; void setup() { // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication // (۳۸۴۰۰ chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(38400); // initialize device Serial.println("Initializing I2C devices..."); accelgyro.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); } void loop() { // read raw accel/gyro measurements from device accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz); // these methods (and a few others) are also available //accelgyro.getAcceleration(&ax, &ay, &az); //accelgyro.getRotation(&gx, &gy, &gz); // display tab-separated accel/gyro x/y/z values Serial.print("a/g/m:t"); Serial.print(ax); Serial.print("t"); Serial.print(ay); Serial.print("t"); Serial.print(az); Serial.print("t"); Serial.print(gx); Serial.print("t"); Serial.print(gy); Serial.print("t"); Serial.print(gz); Serial.print("t"); Serial.print(mx); Serial.print("t"); Serial.print(my); Serial.print("t"); Serial.println(mz); // blink LED to indicate activity blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); delay(1000); }
شرح برنامه:
جهت خواندن ،نوشتن در رجیستر های ماژول و به طور کلی تنظیمات حرفه ای تر میتوانید فایل دیتاشیت ماژول را مطالعه کنید.دانلود.
متغییر های شتاب سنج
داده ها به صورت ۱۶ بیتی است.
خروجی دیجیتال برای سه محور x, y و z در رنج قابل برنامه ریزی ±۲، ±۴، ±۸ و ۱۶± درجه بر ثانیه
به صورت پیش فرض در مد ۱۶± است.
متغییر az,ay,ax به ترتیب مقدار شتاب در محور های z,y,x را در خود نگه میدارد.
ژایرو:
داده ها به صورت ۱۶ بیتی است.
خروجی دیجیتال برای سه محور y,x و z در رنج قابل برنامه ریزی ±۲۵۰، ±۵۰۰، ±۱۰۰۰ و ۲۰۰۰± درجه بر ثانیه
به صورت پیش فرض در مد ±۲۵۰ است.
متغییر gz,gy,gx به ترتیب مقدار حرکت در محور های z,y,x را در خود نگه میدارد.
قطب نما:
خروجی دیجیتال برای سه محور x, y و z در رنج ±۱۲۰۰µT
متغییر mz,my,mx به ترتیب مقدار قطب نما در محور های z,y,x را در خود نگه میدارد.
جهت نمایش خروجی آن از tab استفاده کردیم.
Serial.print("a/g/m:t"); Serial.print(ax); Serial.print("t"); Serial.print(ay); Serial.print("t"); Serial.print(az); Serial.print("t"); Serial.print(gx); Serial.print("t"); Serial.print(gy); Serial.print("t"); Serial.print(gz); Serial.print("t"); Serial.print(mx); Serial.print("t"); Serial.print(my); Serial.print("t"); Serial.println(mz);
با سلام
ضمن عرض سلام وخسته نباشید به خاطر آموزشهای بسیار عالی شماوآقای قربانی
متاسفانه جای خالی آموزش GLCD در این آموزشها کاملا مشهوده ومیشود خروجی تمام این آموزشها را داخل GLCD نمایش داد.آموزشOLED فوق العاده بود ولی به دلیل سایز کوچکترنسبت بهGLCD امکان مانور دادن زیادی نداره.
در هر صورت از زحمتهای شما وآقای قربانی ممنونم.
سلام دوست عزیز ما قبلا آموزش ال سی دی کاراکتری و لمسی تی اف تی رو گذاشتیم انشالاه در آینده نمایشگر های گرافیکی بیشتری آموزش میدیم
سلام
خیلی ممنونم بابت آموزشتون، من برای ربات جنگجو میخواستم سنسور ضربه بزارم که با ضربات و جابجایی ناگهانی شتاب، دور موتورها را برعکس کنه، بعد یهو رسیدم به آموزش شما، به نظرم این سنسور مناسب باشه چون باهاش میتونم موقعیت در زمین را هم شناسایی کنم.
سلام
مرسی از اموزشتون
اگر پایه اینتراپت رو هم وصل نکنیم مشکلی پیش نمیاد؟؟؟
چون تو بعضی جاها من دیدم بدون پایه اینتراپت وصل کردن 😐
اگه MPU6050.h رو نداشته باشیم یا نخوایم استفاده کنیم چه جوری باید عمل کرد؟
با سلام
کد در برنامه خطا میدهد
Arduino: 1.8.1 (Windows 10), Board: “Arduino/Genuino Uno”
In file included from sketch\MPU6050.cpp:37:0:
sketch\MPU6050.h:40:20: fatal error: I2Cdev.h: No such file or directory
#include “I2Cdev.h”
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
با سلام
ضمن تشکر ازتوجه شما، این ارور مربوط به عدم نصب بودن کتابخانه I2Cdev.h میباشد. برای اطلاعات بیشتر به آموزش نصب کتابخانه در نرم افزار آردوینو Arduino IDE مراجعه کنید.
سلام کتابخونه نصب نمیشه از طریق add zip همچنین استخراج هم نمیشه مطالب داخلش
لطفا برسی کنید
با سلام
کتابخانه را از مسیر اصلی نصب کتابخانه در آردوینو نصب کنید.