آموزش آردوینوپروژه های آردوینو

اتصال شتاب سنج و ژیروسکوپ MPU6050 به برد آردوینو

MPU6050 یک تراشه ژیروسکوپ و شتاب سنج بسیار محبوب است که دارای شش محور با وضوح اندازه گیری 16 بیت است. این دقت بالا در حس و هزینه ارزان آن را در بین مهندسان بسیار محبوب کرده است. حتی بسیاری از محصولات تجاری به MPU6050 مجهز هستند. ترکیب ژیروسکوپ و شتاب سنج معمولاً به عنوان واحد اندازه گیری اینرسی یا IMU نامیده می شود.

حسگرهای IMU در طیف گسترده ای از کاربرد ها مانند تلفن های همراه، تبلت ها، ماهواره ها، فضاپیماها، پهپادها، روباتیک و بسیاری موارد دیگر استفاده می شوند. آنها برای ردیابی حرکت، جهت گیری و تشخیص موقعیت، کنترل پرواز و … استفاده می شوند.

ماژول شتاب سنج MPU6050

ماژول MPU6050 در مجموع دارای 8 پین است. برای برقراری ارتباط استفاده از حداقل 4 پین آن ضروری است. پین اوت یک ماژول MPU6050 به شرح زیر است:

ماژول شتاب سنج MPU6050 

  • VCC برق ماژول را تامین می کند، به پین ​​5 ولت آردوینو متصل می شود.
  • GND به پایه GND آردوینو متصل شد.
  • ساعت سریال SCL برای ارائه پالس ساعت برای ارتباطات I2C استفاده می شود.
  • داده های سریال SDA برای انتقال داده ها از طریق ارتباط I2C استفاده می شود.
  • XDA Auxiliary Serial Data – می تواند برای ارتباط سایر ماژول های I2C با MPU6050 استفاده شود.
  • ساعت سریال کمکی XCL – می تواند برای ارتباط سایر ماژول های I2C با MPU6050 استفاده شود.
  • ADD/ADO پین انتخاب آدرس در صورت استفاده از چندین ماژول MPU6050
  • پین وقفه INT برای نشان دادن اینکه داده‌ها برای خواندن MCU در دسترس هستند.

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

تصویر زیر شماتیک مدار ارتباط MPU6050 با آردوینو را نشان می دهد. MPU6050 از ارتباط I2C برای ارتباط استفاده می کند. از آنجایی که پین‌های I2C تا 5 ولت تحمل دارند، می‌توانیم آنها را به آردوینو به صورت مستقیم متصل کنیم. پایه SCL به پایه SCL (A5) آردوینو متصل است. پایه SDA به پایه SDA (A4) آردوینو متصل است.

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

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد آردوینو برای شتاب سنج MPU6050

در این مثال، داده‌های شتاب‌سنج، ژیروسکوپ و دما را از ماژول MPU6050 می‌خوانیم و آن را روی نمایشگر سریال چاپ می‌کنیم. برای اینکار ابتدا باید کتابخانه های لازم را نصب کنیم. برای نصب کتابخانه ها، Library Manager را در Arduino IDE باز کنید. سپس کتابخانه های زیر را جستجو و نصب کنید: Adafruit MPU6050، Adafruit Unified Sensor Library و Adafruit Bus IO Library. مقاله نصب کتابخانه در آردوینو میتواند برای شما مفید باشد.

پس از اتمام کار، یک پروژه اردوینو جدید ایجاد کنید و کد را در آن قرار دهید. سپس آن را کامپایل و در آردوینو آپلود کنید. پس از آپلود، سریال مانیتور را باز کنید و نتیجه را در آنجا مشاهده کنید.

کد کامل فایل انتهای صفحه قرار داده شده است در اینجا قسمت های مهم کد را توضیح میدهیم. در ابتدا، کتابخانه Adafruit MPU6050، Adafruit Sensor و Wire Library را قرار داده ایم که برای برقراری ارتباط با MPU6050 و دریافت اطلاعات ضروری هستند. سپس یک نمونه جدید به نام mpu ایجاد کرده ایم که برای دریافت خوانش از MPU6050 IMU استفاده می شود.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;

در تابع setup، ما ارتباط سریال و IMU MPU6050 را مقداردهی اولیه کرده ایم. سپس پارامترهای محدوده شتاب سنج، محدوده ژیروسکوپ و پهنای باند فیلتر تنظیم می شوند. پارامترهای محدوده بر دقت خواندن تأثیر می گذارد. بنابراین، در صورت نیاز، می توان آنها را مطابق با مقادیر کتابخانه تغییر داد. پارامتر setFilterBandwidth پهنای باند فیلتر پایین گذر را تغییر می دهد.

void setup(void) {
  Serial.begin(115200);
  // MPU6050 IMU
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");
  // محدوده شتاب سنج
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  // محدوده ژیروسکوپ
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  // پهنای باند فیلتر
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  delay(100);
}

در تابع loop، مقادیر از MPU6050 با کمک کتابخانه Adafruit خوانده می شوند و سپس در سریال مانیتور چاپ می شوند. این کار هر ثانیه تکرار خواهد شد.

void loop() {
  /* دریافت داده های جدید از سنسور */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
  /* چاپ کردن مقادیر دریافت شده */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");
  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");
  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");
  Serial.println("");
  delay(1000);
}

فیلم زیر نشان می دهد که چگونه می توانیم یک MPU6050 را با آردوینو راه اندازی کنیم. می بینید که وقتی ماژول می چرخد، مقادیر سریال مانیتور تغییر می کند.

موارد موجود در فایل : فایل سورس کامل

5 (4 نفر)

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

26 نظر

  1. سلام و عرض ادب
    آقا یه سوال . الآن وقتی ماژول من در حالت عادی هست ، شتاب هیچکدوم از محورهای من صفر نیست. چیکار باید بکنم که شتاب هر سه محورم در حالت عادی صفر باشه؟

    1. سلام خدمت همگی عزیزان. من این مشکل رو مدتیه که خودم اوکیش کردم و خواستم راهکار را با بقیه دوستان هم به اشتراک بذارم که اگه کسی دیگه به این مشکل برخورد بدونه که راهکارش چیه. رفقا اگه توی سریال مانیتور یا نحوه کارکرد و یا خروجی کار به مشکل برخوردین حالا به هرنحوی مثلا گیر کرد یا محورها صفر نمیشد، اول اینکه ماژول رو به شکل صحیح دست بگیرید یا جاسازی کنید و دوم اینکه از تابع () millis استفاده کنید. اینجوری دیگه به مشکل بر نمیخورید. و سوم هم اینکه سعی کنیدبآود ریتتون زیاد بالا نباشه ینی دیگه حدددداکثرش روی 115200 تنظیمش کنید اگه نیاز به بآود ریت بالا داشتید.
      ایام به کام🖐🏻

  2. سلام مهندس چگونه میتوانم وارد انجمن شوم ممنون میشم راهنماییم کنید

  3. سلام مهندس من وقتی که کد رو آپلود میکنم و بعد به سریال مانیتور میرم یک سری عدد هست که هیچ نشونه ای ندارد که کدام دماسنج وکدام شتاب سنج و کدام ژیروسکوپ است ممنون میشم راهنماییم کنید

    1. سلام وقت بخیر
      یک تصویر از نتیجه در سریال مانیتور در انجمن ارسال کنید

  4. بزرگوار سلام خسته نباشید . من اتصالات رو روی nodemsu وصل کردم برنامه رو هم بهش دادم و درست اپلود میشه وقتی میرم تو سرایل مانیتور و دکمه rstبرد رو میزنم چیزای عجیب غریب مینویسه (l⸮|⸮⸮l⸮#|⸮⸮⸮⸮⸮|2c⸮c⸮⸮no⸮lNo⸮⸮⸮cp)این قسمتی از چیزیه که نشون میده baud رو هم روی 115200 گزاشتم ممنون میشم راهنمایی کنید

    1. سلام عزیز
      زمانی که دکمه ریست را میزنید یک سری اطلاعات از سمت برد در سریال مانیتور نمایش داده میشود که اگر باود ریت روی 115200 باشد باید متن ها را بتوانید ببینید.

  5. سلام مجدد . برای راه اندازی به پین vcc ژیروسکوپ حتما باید 5 ولت وصل کنیم چون تو nodemsu 5v نداریم ممنون میشم کمک کنید

  6. سلام وقتتون بخیر . من میخوام با استفاده از برد nodemsu esp8266 این سنسور رو راه اندازی کنم امکانش هست ؟ از همین کد میشه استفاده کرد ؟

  7. راه حلی وجود داره که توی خروجی سریال مانیتور خط ها تغییر یا اپدیت نشن؟
    یعنی بعد از هر delay خط جدیدی اضافه نشه اما اطلاعاتش تغییر کنن

  8. سلام
    ببخشید آیا میشه این سنسور رو به موتور پله ای متصل کرد به گونه ای که با تغییر زاویه محور z موتور بچرخه ؟

    1. سلام عزیز
      بله این سنسور رو به آردوینو متصل کنید و یک شرط ایجاد کنید که با تغییر z استپر موتور حرکت کنه

  9. سلام
    من طبق روال بالا جلو رفتم سریال مانیتور رو که باز میکنم پیام زیر نوشته میشه تو همون حالت میمونه
    Failed to find MPU6050 chip

    1. سلام عزیز
      اتصالاتتون رو باید بررسی کنید

  10. سلام
    فایل موجود در لینک دانلود سورس کامل نیست کلا 17 خط برنامه است که شامل دو تا تابع می باشد

    1. سلام عزیز
      ممنون از اطلاع رسانی شما، اصلاح شد

  11. هم تو آموزش شما. هم آموزش های مشابه تو سایت های دیگه، پایه های scl و sda رو به a4 و a5 وصل کردن. ولی تو کد نوشته شده پایه هارو به عنوان ورودی تعریف نکردیم. میشه توضیح بدید دلیلش چیه؟

    1. سلام عزیز
      ارتباط I2C هست و از این پایه ها scl برای تنظیم کلاک هست و sda برای انتقال داده ها که هم ورودی میتونه باشه و هم خروجی. جهت کسب اطلاعات بیشتر میتونید مقاله ارتباط i2c رو مطالعه کنید

  12. فایل کد کامل مربوط به این پروژه نیست. لطفا چک کنید. ممنونم

    1. سلام عزیز
      بررسی شد فایل صحیح هست. با نرم افزار WinRAR باز کنید

  13. سلام. دستتون درد نکنه بابت مطالب عالی.
    یه سوال داشتم. خروجی شتاب و زاویه از mpu چه بازه ای هست؟ عددی که نمایش داده میشه از چه مقدار تا چه مقدار تغییر میکنه؟

    1. سلام عزیز
      دما -40 تا 85°C
      چرخش ±250°/s, ±500°/s, ±1000°/s و ±2000°/s
      شتاب ±2g, ±4g, ±8g و ±16g

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *