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

فهرست مطالب

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

ماژول IMU ده درجه آزادی و نه محور GY-87 یک ماژول با دقت بسیار بالا نسبت به مدل‌های مشابه خود همچون MPU9250 است که می‌تواند شتاب، تغییر زاویه و میدان مغناطیسی را در سه محور x، y و z با دقت بالا در اختیار بگذارد. این ماژول در اصل از ترکیب 3 سنسور MPU6050 ،HMC5883L و یک سنسور دما و فشار بارومتریک تشکیل شده است. سنسور دما و فشار بارومتریک استفاده شده می‌تواند BMP180 یا BMP085 باشد. پروتکل ارتباطی این ماژول نیز I2C است که کار با این ماژول را ساده کرده است.

معرفی پایه های (پین اوت) ماژول GY-87

ماژول IMU ده درجه آزادی و نه محور GY-87 دارای 8 پایه به شرح زیر است:

  • VCC_IN: تغذیه ماژول – 5 ولت
  • 3V: تغذیه ماژول – 3.3 ولت
  • GND: زمین
  • SCL: پایه کلاک برای پروتکل I2C
  • SDA:  پایه دیتا برای پروتکل I2C
  • FSYNC: ورودی دیجیتال سنکرون (تنظیم سرعت عملکرد I2C)
  • INTA: خروجی دیجیتال وقفه آی‌سی MPU6050
  • DRDY: پایه آماده بودن داده آی‌سی HMC5883L

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

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

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

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

نرم افزارهای کاربردی

آردوینو IDE

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

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

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

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

برای استفاده از هر یک از سنسورهای ماژول GY-87 نیاز به استفاده از کتابخانه مربوطه آن دارید. کتابخانه‌های MPU6050 ،HMC5883L_Simple و BMP085 را از لینک‌های زیر دانلود کنید.

سپس به قسمت Include Library رفته و کتابخانه‌ها را نصب کنید.

گام سوم: کد

کد زیر را روی برد آردوینو آپلود کنید. پس از آپلود کد، پنجره Serial Monitor را باز کنید.

/*
  Modified on Mar 16, 2021
  Modified by MehranMaleki from Arduino Examples
  https://electro
  peak.com/learn/
*/

#include "I2Cdev.h"
#include "MPU6050.h"
#include <Adafruit_BMP085.h>
#include <HMC5883L_Simple.h>


MPU6050 accelgyro;
Adafruit_BMP085 bmp;
HMC5883L_Simple Compass;


int16_t ax, ay, az;
int16_t gx, gy, gz;

#define LED_PIN 13
bool blinkState = false;

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

  // initialize devices
  Serial.println("Initializing I2C devices...");

  // initialize bmp085
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }

  // initialize mpu6050
  accelgyro.initialize();
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
  accelgyro.setI2CBypassEnabled(true); // set bypass mode for gateway to hmc5883L
  
  
  // initialize hmc5883l
  Compass.SetDeclination(23, 35, 'E');
  Compass.SetSamplingMode(COMPASS_SINGLE);
  Compass.SetScale(COMPASS_SCALE_130);
  Compass.SetOrientation(COMPASS_HORIZONTAL_X_NORTH);


  // configure Arduino LED for checking activity
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  Serial.print("Temperature = ");
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");

  Serial.print("Pressure = ");
  Serial.print(bmp.readPressure());
  Serial.println(" Pa");
  
  // Calculate altitude assuming 'standard' barometric
  // pressure of 1013.25 millibar = 101325 Pascal
  Serial.print("Altitude = ");
  Serial.print(bmp.readAltitude());
  Serial.println(" meters");
  Serial.print("Pressure at sealevel (calculated) = ");
  Serial.print(bmp.readSealevelPressure());
  Serial.println(" Pa");
  Serial.print("Real altitude = ");
  Serial.print(bmp.readAltitude(101500));
  Serial.println(" meters");

  
  // read raw accel/gyro measurements from device
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  
  // display tab-separated accel/gyro x/y/z values
  Serial.print("a/g:\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.println(gz);


  float heading = Compass.GetHeadingDegrees();
  Serial.print("Heading: \t");
  Serial.println( heading );


  // blink LED to indicate activity
  blinkState = !blinkState;
  digitalWrite(LED_PIN, blinkState);

  delay(500);
}

در کد بالا اطلاعات مختلف همچون دما، فشار، ارتفاع از سطح دریا، شتاب و میدان مغناطیسی در سه محور از ماژول دریافت و در خروجی نمایش داده می‌­شود.

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

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

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

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