آموزش راه اندازی ماژول GY-521 – ژیروسکوپ و شتاب سنج سه محوره MPU6050 با آردوینو

ویژگی های ماژول GY-521 (سنسور MPU6050)

ماژول GY-521 در حقیقت بر پایه سنسور MPU6050 که یک ژیروسکوپ و شتاب سنج 3 محوره است، طراحی شده است. پروتکل ارتباطی  این ماژول I2C بوده و با استفاده از 2 پایه SCL و  SDA می توانید خروجی های MPU6050 را بخوانید.

توجه

سنسور MPU6050 علاوه بر ژیروسکوپ و شتاب سنج ، دارای یک دماسنج دیجیتال هم می باشد.

دیتاشیت سنسور MPU6050 را می توانید از اینجا دانلود کنید.

معرفی پایه ها (Pinout) ماژول GY-521 (سنسور MPU6050)

ماژول GY-521 دارای 8 پایه به شرح زیر است:

  • VCC: تغذیه ماژول – 3 تا 5 ولت
  • GND: زمین
  • SCL: پایه کلاک پروتکل I2C
  • SDA: پایه دیتا پروتکل I2C
  • XDA: پایه دیتا پروتکل I2C کمکی
  • XCL: پایه کلاک پروتکل I2C کمکی
  • ADO: تنظیمات آدرس پروتکل I2C
  • INT: وقفه

پین اوت (Pinout) این ماژول را می توانید در تصویر زیر مشاهده کنید.

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

برد آردوینو Uno × 1
ماژول ژیروسکوپ و شتاب سنج MPU6050 × 1
سیم جامپر × 1

نرم افزارهای مورد نیاز

آردوینو IDE

راه اندازی ماژول GY-521 MPU6050 با آردوینو

گام اول: سیم بندی

مطابق مدار زیر، ماژول را به آردوینو وصل کنید.

گام دوم: نصب کتابخانه

به Library manager رفته و کتابخانه سنسور MPU6050 را نصب کنید.

توجه

اگر برای نصب کتابخانه نیاز به راهنمایی بیشتر دارید، به اینجا مراجعه کنید.

گام سوم: کد

کد زیر را روی برد آردوینو آپلود کنید. این کد خروجی سنسور ژیروسکوپ و شتاب سنج خوانده شده را در پنجره ی سریال نمایش می دهد. همچنین می توانید از Serial plotter برای رسم نمودار به صورت گرافیکی استفاده کنید.

    /*
  GY-521 (MPU6050) 3-Axis Accelerometer-Gyroscope Sensor
  modified on 28 Sep 2020
  by Mohammad Reza Akbari @ Electropeak
  Home<iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="&#8220;Home&#8221; &#8212; Electropeak" src="https://electropeak.com/learn/embed/#?secret=kfXo4lM0Qc" data-secret="kfXo4lM0Qc" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>

  Based on Adafruit Example
*/

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

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(115200);
  while (!Serial) {
    delay(10); // will pause Zero, Leonardo, etc until serial console opens
  }

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
  mpu.setGyroRange(MPU6050_RANGE_250_DEG);
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  //Serial.println("");
  delay(100);
}

void loop() {
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  Serial.print("Temperature:");
  Serial.print(temp.temperature);
  Serial.print("\tx-acceleration:");
  Serial.print(a.acceleration.x);
  Serial.print("\ty-acceleration:");
  Serial.print(a.acceleration.y);
  Serial.print("\tz-acceleration:");
  Serial.print(a.acceleration.z);
  Serial.print("\tx-gyro:");
  Serial.print(g.gyro.x);
  Serial.print("\ty-gyro:");
  Serial.print(g.gyro.y);
  Serial.print("\tz-gyro:");
  Serial.println(g.gyro.z);

  delay(10);
  }
Arduino

خروجی کد به شکل زیر است.

آموزش های مشابه

Comments (37)

  • محمد Reply

    سلام یه سوال میشه ۶ تا از این ماژول رو به برد اردوینو وصل کرد و خروجی رو وايرلس بفرسته ؟

    جولای 15, 2021 at 1:28 ق.ظ
    • مهران ملکی Reply

      سلام،
      بله مشکلی نداره و امکان این کار وجود داره.
      از اون جایی پروتکل ارتباطی این ماژول i2c هست و آدرس i2c یکسانی هم دارند، شما نمیتونید مستقیما بیش از یک عدد از این ماژول رو به پایه‌های i2c آردوینو متصل کنید. برای وصل کردن ماژول‌هایی که آدرس i2c یکسانی دارند به آردوینو میتونید از ماژول توسعه 8 کاناله i2c به اسم tca9548a استفاده کنید:
      “https://thecaferobot.com/store/tca9548a-1-to-8-i2c-8-way-multi-channel-expansion-board”
      با استفاده از این برد میتونید تا 8 ماژول با آدرس یکسان رو به برد آردوینو متصل کنید.
      برای ارسال اطلاعات به صورت وایرسل هم، میتونید این کار رو با انواع ماژول‌های بلوتوثی یا ارتباط رادیویی مثل ماژول‌های nrf انجام بدید. میتونید برای ارسال اطلاعات به صورت وایرلس، این آموزش رو هم مطالعه کنید:
      “https://thecaferobot.com/learn/interfacing-nrf24l01-wireless-2-4-ghz-transceiver-module-with-arduino/”

      جولای 17, 2021 at 11:53 ق.ظ
  • امیرحسین طباطبایی Reply

    با سلام

    ببخشید من مو به مو تمام کار هایی که گفتید انجام دادم و تمامی اموزش های توی نت رو امتحان کردم اما همش تو سریال مانیتورم یه سری پیام عجیب قریب میاد که اصلا معلوم نیست چی هستند .

    تمام پروژه هارو که تست میکنم این جوریه

    میشه راهنماییم کنید چون نه سریال مانیتور نه سریال پلاتر چیز درستی نشون نمیدن و فقط یه سری علامت عجیب قریبه

    اکتبر 28, 2021 at 10:17 ب.ظ
    • مهران ملکی Reply

      سلام.
      چک کنید که baudrate سریال مانیتور رو حتما رو همون مقداری تنظیم کرده باشید که تو کد مورد استفادتون هم نوشته شده. مثلا در کد این آموزش، همونطور که در خط 11 میبینید، baudrate روی 115200 قرار داده شده، در نتیجه وقتی شما هم میخواید چیزی رو توی سریال مانیتور نمایش بدید، باید بعد از باز کردن سریال مانیتور، baudrate اون رو روی 115200 بذارید در غیر این صورت دیتای دریافت شده به صورت بی معنا نمایش داده میشه.

      اکتبر 31, 2021 at 9:46 ق.ظ
    • آراش کماندور Reply

      توی این کد تو قسمت Serial.begin(115200); نوشته شده . شما وقتی سریال مانیتور رو باز میکنی باید baund رو روی 115200 بزاری. وگرنه علامتای عجیب غریب میبینی . باید ببینید Serial begin برنامه هات چیه.

      ژانویه 25, 2023 at 3:15 ب.ظ
      • آراش کماندور Reply

        نوار پایین توی سریال مانیتور هست .

        ژانویه 25, 2023 at 3:20 ب.ظ
    • مهدی Reply

      سلام پورت سریالتو درست انتخاب نکردی .
      مثلا 9600 یا 115200 . این مقدار توی setup تعیین میشه تا پیام ها با این بادریت جابجا بشن .

      جولای 7, 2024 at 10:24 ب.ظ
  • امیر Reply

    سلام میشه راهنمایی کنید که سریال مانیتور را چطوری میتونم پیدا کنم

    ژانویه 3, 2022 at 12:00 ب.ظ
    • مهران ملکی Reply

      سلام
      در نرم افزار آردوینوتون، از قسمت Tools -> Serial Monitor میتونید Serial Monitor را باز کنید. از میانبر CTRL+Shift+M هم میتونید Serial Monitor رو پیدا کنید. یک راه دیگه ای هم که هست، یک آیکون شبیه ذره‌بین در قسمت بالا راست نرم افزار آردوینو قرار داده شده که با کلیک کردن روی اون هم Serial Monitor باز میشه.

      ژانویه 4, 2022 at 9:21 ق.ظ
  • سجاد عابدی طامه Reply

    یه سوال
    اردوینو من سوخته ؟

    کد های قبل رو اجرا می کنه
    مو به مو
    اما زمانی که خواستم کد شما رو بریزم دیگه فلش نمی کنه
    و error
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x1b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x1b

    avrdude done. Thank you.

    هر کاری شد هم کردم خواستم ایسی رو بر دارم و روی یه برد دیگه امتحان کنم
    اما باز هم همین
    راستی تو پروژم نوشته بودم که سریال رو بیاره و یه عددی رو نشون بده اما اون هم نمیاد اما برد رو می شناسه
    و سریال مانیتور باز می شه
    اما چیزی ارسال می کنم LED های RX TX تکون نمی خورن
    چه ارسال می کنم
    چه در یافت می کنم
    انگار LED ها سوخته
    اما سالمه امتخان کردم LED ها رو

    جولای 10, 2022 at 5:43 ب.ظ
    • مهران ملکی Reply

      سلام.
      بعد از امتحان کد مربوط به این آموزش این اتفاق افتاد؟ و بعد از این با کدهای دیگه هم همین مشکل وجود داره؟ امکانش هست که بهر دلیلی مثل کم و زیاد شدن ولتاژ یا دلایل دیگه یا آردوینوتون سوخته باشه یا اینکه فریمورش پریده باشه. همچین میتونید این سوالتون رو توی بخش انجمن کافه‌ربات در لینک زیر مطرح کنید تا مشاوره بهتری بگیرید.
      https://thecaferobot.com/forum/

      جولای 15, 2022 at 10:42 ب.ظ
  • رضا مسافر Reply

    سلام . ممنون برای توضیحات خوبتون .
    یک سئوالی داشتم .
    امکان داره خط 1 و 2 در void loop را توضیح بدید که چه می کنند و چی داره میگه ؟
    منظورم دو خط زیر هست :
    sensors_event_t a, g, temp
    mpu.getEvent(&a, &g, &temp)
    ممنون

    سپتامبر 20, 2022 at 6:43 ق.ظ
    • مهران ملکی Reply

      سلام.
      در خط اول a و g و temp به ترتیب به عنوان eventهای شتاب (accelaration)، مقدار میدان مغناطیسی (gyro) و دما (temperature) تعریف شدن و در خط دوم به عنوان ورودی برای تابع سنسور mpu در نظر گرفته شدن. به این ترتیب این تابع این مقادیر رو از سنسور دریافت میکنه.

      اکتبر 28, 2022 at 5:11 ب.ظ
  • صدرا Reply

    سلام خسته نباشید چجوری میشه کتابخانه های این ماژول و ماژول های دیگه رو خودمون بنویسیم

    اکتبر 17, 2022 at 10:54 ب.ظ
    • مهران ملکی Reply

      سلام.
      نوشتن کتابخونه نیاز به تسلط و تجربه کافی در برنامه‌نویسی به زبان C و ++C و همچنین درک بالا از پروتکل‌های ارتباطی در میکروکنترلرها مثل UART، SPI و I2C داره. اگر تسلط کافی به این موارد داشته باشید میتونید با مطالعه دقیق دیتاشیت یک ماژول، کتابخونه اون رو بنویسید.

      اکتبر 28, 2022 at 3:48 ب.ظ
  • صدرا Reply

    سلام چگونه میشه کتابخانه هارو توابع شون رو خودم پیدا کنم و استفاده کنم
    مثل ماژول DS3231 توابع کتابخانه اش هیجا نبود میشه خودم برم داخل کتابخانه اونجا آیا نوشته؟؟؟

    نوامبر 3, 2022 at 1:12 ب.ظ
    • Ali Narimani Reply

      سلام
      بله میشه
      فقط باید اون فایل h. رو باز کنی و توابعی که توش ذکر شده رو هر کدوم که می خواستی ببینی چی کار می کنه رو توی فایل cpp. سرچ کنی
      اکثر کتابخونه ها برا این توابع کامنت گذاشتند یا از اسم متغیر ها میشه فهمید که چی کار می کنن

      نوامبر 6, 2022 at 7:23 ق.ظ
  • محمد Reply

    سلام لطفا همین اموزش رو برای برد esp32 هم بذارین

    آوریل 24, 2023 at 2:18 ق.ظ
    • محمد دمیرچی Reply

      با سلام
      با تشکر از نظر خوبتون.
      برای راه‌اندازی این آموزش در سمت ESP ها نیازی به تغییر کد نمی باشد و فقط کافی است شما سیم کشی های خود را به پایه های I2C میکروکنترلر ESP خود وصل کنید.

      آوریل 25, 2023 at 9:27 ق.ظ
  • امین Reply

    با سلام.
    نمیدونم چرا وقتی مقادیر رو یکی یکی روی سریال مانیتور نمایش دادم مقادیر y و z رو جابه جا نشون داد نمیدونم مشکل از کجا بوده. یه کمکی میتونید بکنید. ممنون

    آگوست 20, 2023 at 12:26 ق.ظ
  • فرشاد رضوان Reply

    جناب آقای اکبری
    و دیگر دوستان و مشارکت کنندگان

    من این ژیروسکوپ را به آردوینو پرو میکرو ( لنوناردو ) بستم. اول مقاومت پول آپ نگذاشتم. بعد مقاومت های پول آپ 5.6 کیلو یکبار و یکبار 2.2 کیلو و یکبار هم 1 کیلو را امتحان کردم. همیشه بعد از حدود یک دقیقه یا سی ثانیه ارسال و دریافت، آردینو هنگ می کند و باید ریست شود. جستجوهای من نشان از این دارد که باس I2C با ولتاژ 5 خوب کار نمی کند و مثلا ولتاژ high برای سیستم 5 ولت لااقل 3.5 ولت است و سیستم 3.3 ولت نمی تواند ان را تامین کند. و کتابخانه wire.h با دیدن کوجکترین خطا هنگ می کند. بنابرین باید برای وقتی که سنسور می خواهیم به میکرو ببندیم و این سنسور از باس i2c استفاده می کند، بهتر است از میکرو هایی استفاده کنیم که خودشان 3.3 ولت هستند.

    اکتبر 16, 2023 at 10:55 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      این مورد که از میکرو های 3.3 ولتی استفاده بشود یکی از پیشنهاد های همیشگی بنده می باشد، اما در بعضی از پروژه ها امکان این کار وجود ندارد.
      در مورد سطح ولتاژ، تا زمانی که ولتاژ پالس های دیتا بالاتر از 2.5 ولت (نصف 5 ولت) باشد میکروکنترلر آن را به عنوان دیتا HIGH در نظر میگیرد. مگر اینکه دیتا دارای نویز زیادی باشد که باعث بشود ریز پالس های زیر 2.5 ولت بخورد.
      برای حل این مشکل استفاده از خازن اضافی در ورودی برق ( روی لاین دیتا نگذارید)
      استفاده از میکرو دیگر (گاهی میکرو ها یک مقدار حساسیت بیشتری دارند و درست عمل نمیکنند)
      استفاده از Logic Level Converter برای تبدیل سطح ولتاژ 3.3 به 5 و برعکس.
      اما به صورت کلی پیشنهاد بنده استفاده از میکرو های 3.3 ولتی می باشد که هم سرعت بالاتری دارند و هم دقت بالاتری برای مثال ESP ها و STM ها گزینه های مناسبی می باشند.

      اکتبر 17, 2023 at 8:09 ق.ظ
  • محمد Reply

    سلام وقتتون بخیر ببخشید من میخوام از این سنسور برای کنترل پایداری ربات(زیر دریایی) استفاده کنم ولی هنوز اول راه هستم میتونید یک نقشه کلی رو برام توضیح بدین که چطور تعادل رباتم رو تنظیم کنم ؟

    می 15, 2024 at 2:24 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      برای این موارد باید یک PID بنویسید، کد های آماده این موارد داخل اینترنت می توانید پیدا کنید و از آنها استفاده کنید.

      می 18, 2024 at 4:52 ب.ظ
  • ایمان Reply

    سلام،من میخوام موشک بسازم که با زاویه ۹۰ درجه رو به بالا حرکت کنه،میتونم از این ژیرسکوپ استفاده کنم؟

    ژوئن 18, 2024 at 12:00 ب.ظ
    • محمد دمیرچی Reply

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

      ژوئن 19, 2024 at 9:54 ق.ظ
  • ابوالفضل جعفری Reply

    سلام وقت بخیر میتونیم ازین ماژول برای تعیین مقدار جابجایی استفاده کنیم؟از مقدار شتاب ۲بار انتگرال بگیریم که مقدار جابجایی بدست بیاد
    اگ میشه لطفا اطلاع بدید

    آگوست 14, 2024 at 12:26 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      از ماژول های ژیروسکوپ برای این موضوع استفاده میشود.
      شما میتوانید از دیتا های دریافتی توسط سنسور انتگرال بگیرید
      پیشنهاد میکنم نمونه مثال های داخل اینترنت در مورد این موضوع را مطالعه نمایید.

      آگوست 14, 2024 at 5:52 ب.ظ
  • علی Reply

    سلام من میخوام یه سیستم تعلیق هوشمند بسازم که به این فکر رسیدم با ژیروسکوپ بسازم اما متاسفانه کسی نتونست منو راهنمایی کنه که این امکان وجود داره یا نه .
    از اون طرف هم کار با اردونیو رو بلد نیستم و تازه میخوام شروع کنم
    ممنون میشم جواب بدید ?

    آگوست 24, 2024 at 6:07 ق.ظ
    • محمد دمیرچی Reply

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

      آگوست 24, 2024 at 10:32 ق.ظ
  • امیر Reply

    سلام من برای موقعیت یا بی استفاده کردم در سرعت پایین دقیق .مثلا اگر داخل کوچه بچرخی وبعد به موقعیت اول برگردی درسته اما اگر سرعت بیشتری داشته باشی (مثلا با ماشین تو دو تا خیابون بگردی وبه جای اول برگردی جای اول را با خطا میبینی .که احتمالا باتوجه سرعت کم نمونه گیری سنسور و انتگرال گیری این خطا پیش آمده است. کسی تجربه ای در این مورد دارد.

    آگوست 26, 2024 at 6:05 ب.ظ
  • بابک Reply

    سلام برنامه ی من داره کار میکنه ولی شتاب z را در حالت بدون حرکت عدد 11.4 نشون میده. درسته یا؟؟؟؟

    سپتامبر 2, 2024 at 1:29 ق.ظ
    • محمد دمیرچی Reply

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

      سپتامبر 3, 2024 at 12:41 ب.ظ
      • بابک Reply

        در همین آموزش شما هم ظاهرا همین طور هست. خط نارنجی رنگ را ببینید.

        سپتامبر 6, 2024 at 8:19 ق.ظ
      • امیر Reply

        من با سه ماژول تست کردم و هر سه موقعی که بی حرکت هستند خروجی شان تقییر میکند.
        یک لینک هم هست که همین مشکل را بیان کرده :https://www.youtube.com/watch?v=3-IBOJ5FQvI&list=PLnq7JUnBumAx–5D-zOeUzBDUzy10e3_-
        نظر شما چیست؟

        سپتامبر 22, 2024 at 11:24 ق.ظ
  • Ryazd Reply

    سلام وقت بخیر
    ایا با این ماژول میشه شتاب فشار دست هنگام cpr رو اندازه گرفت و روی مانیتور نشان داد؟

    اکتبر 29, 2024 at 7:46 ب.ظ
    • محمد دمیرچی Reply

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

      نوامبر 17, 2024 at 12:15 ب.ظ

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

نشانی ایمیل شما منتشر نخواهد شد.