شتاب و ژایرو پروژه های آردوینو

ماژول شتاب سنج ۹ محوره MPU9150 به آردوینو

heart--digispark
نوشته شده توسط شهاب کمالی

در این مقاله میخواهیم نحوه اتصال ماژول MPU9150 به آردوینو را آموزش دهیم 🙂 در ادامه  آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

این ماژول یک ماژول شتاب سنج ۹ محوره بسیار دقیق می باشد که دارای دقت بسیار بالا و سیستم پیشرفته پردازش حرکت دیجیتال داخلی (DMP) می باشد. این ماژول دارای دو چیپ مجزا است و با توجه به رابط I2C این ماژول به راحتی می توانید آن را به کمک آردوینو یا هر میکروکنترل دیگری راه اندازی نمایید. سنسور gyro سه محوره با دقت ۱۶ بیت و رنج اندازه گیری ۲۰۰۰ درجه بر ثانیه، سنسور شتاب سه محوره با دقت ۱۶ بیت و رنج اندازه گیری تا ۱۶g. سنسور قطب نمای ۳ محوره با دقت ۱۳ بیت همچنین دارای بافر FIFO با ظرفیت ۱۰۲۴ بایت و سنسور دما با رنج اندازه گیری ۴۰- تا ۸۵+ درجه سانتیگراد از قابلیتهای این ماژول می باشد. تعداد زیادی از این نوع سنسور ها در کارخانه های تلفن های هوشمند و تبلت ها استفاده میشود. در گوشی های هوشمند در ساخت اپلیکیشن ها، بازی ها و راهنما های مسیر(navigation) و … بکاربرده میشود. با این قابلیت میتوان حرکات یک شخص را دقیقا بررسی کرد و در برنامه های سه بعدی مانند برنامه های سلامت سنجی و تناسب اندام گرفته تا سرویس های مکان نما و … به کار برد.

 

سخت افزار مورد نیاز

آردوینو UNO

ماژول MPU-9150

 

اتصالات

زمین(GND) به زمین (GND) آردوینو
اتصال vcc به ۳٫۳ آردوینو
اتصال SDA به A4 آردوینو
اتصال SCL به A5 آردوینو
اتصال INT به پین ۲ آردوینو

 

arduino-to-9150

arduino-to-9150

 

کد نویسی:

جهت کامپایل برنامه نیاز به کتابخانه ی 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);
output-arduino

output-arduino

درباره نویسنده

شهاب کمالی

تبادل نظر و رفع عیب با ثبت دیدگاه

۹ دیدگاه

  • با سلام
    ضمن عرض سلام وخسته نباشید به خاطر آموزشهای بسیار عالی شماوآقای قربانی
    متاسفانه جای خالی آموزش GLCD در این آموزشها کاملا مشهوده ومیشود خروجی تمام این آموزشها را داخل GLCD نمایش داد.آموزشOLED فوق العاده بود ولی به دلیل سایز کوچکترنسبت بهGLCD امکان مانور دادن زیادی نداره.
    در هر صورت از زحمتهای شما وآقای قربانی ممنونم.

    • سلام دوست عزیز ما قبلا آموزش ال سی دی کاراکتری و لمسی تی اف تی رو گذاشتیم انشالاه در آینده نمایشگر های گرافیکی بیشتری آموزش میدیم

  • سلام
    خیلی ممنونم بابت آموزشتون، من برای ربات جنگجو میخواستم سنسور ضربه بزارم که با ضربات و جابجایی ناگهانی شتاب، دور موتورها را برعکس کنه، بعد یهو رسیدم به آموزش شما، به نظرم این سنسور مناسب باشه چون باهاش میتونم موقعیت در زمین را هم شناسایی کنم.

  • سلام
    مرسی از اموزشتون
    اگر پایه اینتراپت رو هم وصل نکنیم مشکلی پیش نمیاد؟؟؟
    چون تو بعضی جاها من دیدم بدون پایه اینتراپت وصل کردن 😐

  • با سلام
    کد در برنامه خطا میدهد
    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.