آموزش راه‌اندازی ماژول IMU نه محوره GY-801 با آردوینو

فهرست مطالب

ویژگی های ماژول IMU نه محوره GY-801

ماژول سنسور GY-801 یک سنسور 9 محوره فوق دقیق می‌باشد که شامل آی‌سی‌های L3G4200D (سنسور زاویه‌سنج) و ADXL345 (سنسور شتاب‌سنج) و MMC5883MC (سنسور قطب‌نمای دیجیتال) و BMP180 (سنسور فشار و دما) می‌باشد.

تمامی آی‌سی‌ها از پروتکل I2C جهت ارتباط استفاده می‌کنند. از این ماژول در ساخت ربات‌های پرنده و زمینی استفاده می‌شود.

جهت دریافت دیتاشیت ماژول GY-801 اینجا کلیک کنید.

جهت دریافت دیتاشیت L3G4200D اینجا کلیک کنید.

جهت دریافت دیتاشیت ADXL345 اینجا کلیک کنید.

جهت دریافت دیتاشیت MMC5883MC اینجا کلیک کنید.

جهت دریافت دیتاشیت BMP180 اینجا کلیک کنید.

معرفی پایه ها (Pinout) ماژول IMU نه محوره GY-801

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

  • VIN: تغذیه ماژول 5 ولت
  • 3.3V: تغذیه ماژول 3.3 ولت
  • GND: زمین
  • SLC: همزمان سازی برای پروتکل I2C
  • SDA: اطلاعات برای پروتکل I2C
  • M_DRDY: آماده شدن اطلاعات برای ماژول MMC5883
  • A_INT1: آماده شدن اطلاعات برای ماژول ADXL345
  • A_INT2: آماده شدن اطلاعات برای ماژول ADXL345
  • G_INT1: آماده شدن اطلاعات برای ماژول L3G4200D
  • G_INT2: آماده شدن اطلاعات برای ماژول L3G4200D

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

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

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

آردوینو UNO R3 × 1
ماژول GY-801 × 1
سیم جامپر نری به مادگی × 1

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

آردوینو IDE

راه‌اندازی ماژول IMU نه محوره GY-801 با آردوینو

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

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

گام دوم: کد

تمامی فایل ها را از اینجا دانلود کرده و در یک پوشه قرار دهید.

فایل CodeArduino را باز کرده و بر روی برد آردوینوی خود آپلود کنید.

/*
  Create on May 19, 2021
  Create by MohammedDamirchi base of https://github.com/DMohammed/GY-801
  https://electropeak.com/learn/
*/


#include <Arduino.h>
#include "Wire.h"
#include "MMC5883.h"
#include <I2Cdev.h>
#include "L3G4200D.h"
#include "ADXL345.h"
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP085_U.h"


L3G4200D gyro;
ADXL345 accel;
MMC5883MA MMC5883(Wire);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);

int16_t ax, ay, az;
int16_t avx, avy, avz;
double baseline; // baseline pressure

void setup()
{
  Serial.begin(9600);
  Wire.begin();

  Serial.println("Initializing I2C devices...");
  gyro.initialize();
  accel.initialize();

  // verify connection
  Serial.println("Testing device connections...");
  Serial.println(gyro.testConnection() ? "L3G4200D connection successful" : "L3G4200D connection failed");
  Serial.println("Testing device connections...");
  Serial.println(accel.testConnection() ? "ADXL345 connection successful" : "ADXL345 connection failed");

  // data seems to be best when full scale is 2000
  gyro.setFullScale(2000);

  if (!bmp.begin())
    Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");

Serial.print("MMC5883MA ");
  MMC5883.begin();
  MMC5883.calibrate();
}

void loop()
{

  Serial.print(MMC5883.readData());

  Serial.print("     ");
  gyro.getAngularVelocity(&avx, &avy, &avz);

  Serial.print("gyro X:");
  Serial.print(avx);
  Serial.print("\tY:");
  Serial.print(avy);
  Serial.print("\tZ:");
  Serial.print(avz);
  // read raw accel measurements from device
  accel.getAcceleration(&ax, &ay, &az);

  // display tab-separated accel x/y/z values
  Serial.print("\taccel X:");
  Serial.print(ax);
  Serial.print("\tY:");
  Serial.print(ay);
  Serial.print("\tZ:");
  Serial.print(az);
  /* Get a new sensor event */
  sensors_event_t event;
  bmp.getEvent(&event);

  /* Display the results (barometric pressure is measure in hPa) */
  if (event.pressure)
  {
    /* Display atmospheric pressue in hPa */
    Serial.print("\tPressure:");
    Serial.print(event.pressure);
    Serial.print(" hPa");

    /* First we get the current temperature from the BMP085 */
    float temperature;
    bmp.getTemperature(&temperature);
    Serial.print("\tTemp:");
    Serial.print(temperature);
    Serial.print(" C");

    /* Then convert the atmospheric pressure, and SLP to altitude         */
    /* Update this next line with the current SLP for better results      */
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    Serial.print("\tAltitude:");
    Serial.println(bmp.pressureToAltitude(seaLevelPressure,
                                        event.pressure));
  }
  else
  {
    Serial.println("BME Sensor error");
  }
  delay(1000);
 }

پس از آپلود کد در سریال مانیتور مشاهده می کنید.

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

Comments (7)

  • فاطمه Reply

    سلام . موقع فروش ماژول نوشته شده بود که قطب نما ممکنه روی محصول MMCیا HMC باشه . چطور می تونم مطمئن شم کدوم چیپ روی ماژول هست تا از کتابخونه ش داخل برنامه استفاده کنم؟

    ژانویه 20, 2022 at 11:35 ق.ظ
    • مهران ملکی Reply

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

      ژانویه 29, 2022 at 10:47 ق.ظ
  • امیر علی Reply

    سلام چطوری میتونم این رو روی esp32 اجرا کنم ؟

    می 12, 2022 at 10:17 ب.ظ
  • ارش Reply

    سلام
    میشه از این مجموعه بعنوان اتوپایلوت و رکوردر حالتهای پرواز استفاده کرد ؟

    جولای 20, 2023 at 1:14 ق.ظ
    • محمد دمیرچی Reply

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

      جولای 22, 2023 at 10:25 ق.ظ
  • ارش Reply

    سلام محمدآقا خوبین
    من میخوام با جی وای 801 و آردینیو سیستمی درست کنم که روی هواپیما نصب بشه و حالتهای پرواز رو ثبت و ضبط کنه یعنی رکورد کنه
    سوال 1 با کدوم مدل آردینیو این ماژول بهتر مچ میشه
    2_ چه ماژول دیگری نیاز هست برای ریکورد اظلاعات
    و اینها رو از کجا بخرم ؟
    ممنون

    09011229780 لفا پیام بدین تماس میگیرم

    جولای 23, 2023 at 1:13 ق.ظ
    • محمد دمیرچی Reply

      با سلام
      هیچ تفاوتی بین کدام نسخه آردوینو یا میکروکنترلر های دیگر برای ذخیره سازی داده ندارد.
      برای ذخیره سازی حالت های پرواز که داشته اید اکثر اتوپایلت ها این کار را انجام میدهند، در هر صورت این کار انجام نشود می توانید از هر مدل میکروکنتلر به همراه یک ماژول SD یا MicroSD که یک حافظه رم را به آن اضافه کنید و دیتا های مورد نظر را در آن ذخیره کنید و سپس در برنامه اکسل به پردازش داده های خود بپردازید.
      پیشنهاد میکنم مابین داده های خود از , یا هر کارکتر خاصل دیگری استفاده کنید و آخر هر لاین با اینتر به خط بعدی بروید و بر روی حافظه ذخیره کنید. چون به این صورت شما میتوانید فایل را به فرمت csv تغییر بدهید و در اکسل باز کنید.

      جولای 23, 2023 at 10:12 ق.ظ

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

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