Hướng dẫn sử dụng module cảm biến gia tốc góc - MPU9255

Xin chào các bạn, hôm nay chúng ta cùng đến với module cảm biến gia tốc (IMU) MPU 9255. Bạn có bao giờ tự hỏi tại sao chiếc fly cam có thể giữ cân bằng hay chiếc smartphone của mình có thể tự động xoay màn hình khi nghiêng đi không? Đó là nhờ chiếc cảm biến gia tốc nhỏ bé này đây.  Hy vọng qua bài viết này sẽ giúp các bạn tự làm cho mình những dự án thật đỉnh nhé. Enjoy it :)

Qua bài viết này bạn biết được những gì?

+ Giới thiều về IMU 10 DOF MPU9255: Đặc điểm, ứng dụng, thông số kỹ thuật, kết nối phần cứng.

+ Thư viện hỗ trợ MPU9255 và BMP180, chương trình mẫu.

10 DOF IMU SENSOR, Intertial Measurement Unit, Lower  Power Consumption.

+ Tổng quan: 10 DOF IMU là cảm biến rất tốt để giám sát chuyển động, cũng như xác định vị trí, độ cao, nhiệt độ. Nó được ứng dụng vào việc chế tạo thiết bị fly cam, robot cân bằng hay các thiết bị điều khiển.

+ Đặc trưng sản phẩm:

§  Công cụ xử lý chuyển động kỹ thuật số nội bộ (DMP ™), giảm tải phức tạp, đồng bộ hóa cảm biến, nhận dạng cử chỉ, v.v ...

§  So với MPU6050 thì MPU9255 tiêu thụ ít điện năng hơn và dễ dàng kết nối với các thiết bị khác.

§  Cảm biến nhiệt độ được nhúng vào để đo nhiệt độ.

+ Thông số kỹ thuật:

§  Độ phân giả: 16bit.

§  Thang đo (có thể cấu hình): ±2, ±4, ±8, ±16g

§  Dòng hoạt động: 450uA.

§  Độ phân giả: 16bit.

§  Thang đo (có thể cấu hình):  ±250, ±500, ±1000, ±2000°/sec.

§  Dòng hoạt động: 3.2A.

§  Độ phân giả: 14 hoặc 16bit.

§  Thang đo: ±4800µT.

§  Dòng hoạt động: 280uA.

§  Độ phân giả: 16 ~ 19bit.

§  Thang đo: 300~1100hPa ( Độ cao:-500m~9000m).

§  Độ chính xác: 0.02hPa (0.17m)

+ Giao tiếp i2c

PIN NO.

Ký hiệu

Mô tả

1

Vcc

3.3~5.5V

2

GND

Ground

3

SDA

I2C Date pin

4

SCL

I2C Clock pin

5

INT

MPU9255 digital interrupt output

6

FSYNC

MPU9255 vertical sync signal

 

 

Link sản phẩm: http://mlab.vn/1157776-module-cam-bien-gia-toc-goc-mpu9255-10-dof-imu-sensor.html

+ Lập trình:

Link thư viện:

MPU9255: https://github.com/Galch/MPU9255

BMP180: https://github.com/Seeed-Studio/Grove_Barometer_Sensor

Code:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
#include "Barometer.h"
#include <SparkFunMPU9250-DMP.h>
#define SerialPort Serial
MPU9250_DMP imu;

float temperature;
float pressure;
float atm;
float altitude;
Barometer myBarometer;

void setup() 
{
  SerialPort.begin(115200);
  myBarometer.init();
  // Gọi hàm imu.begin() để kiểm tra giao tiếp và
  // kết nối với MPU-9250.
  if (imu.begin() != INV_SUCCESS)
  {
    while (1)
    {
      SerialPort.println("Unable to communicate with MPU-9250");
      SerialPort.println("Check connections, and try again.");
      SerialPort.println();
      delay(5000);
    }
  }

  // Sử dung hàm setSensor để mở/tắt các cảm biến.
  // Tất cả các biến dưới đây đều có thể kết hợp:
  // INV_XYZ_GYRO, INV_XYZ_ACCEL, INV_XYZ_COMPASS,
  // INV_X_GYRO, INV_Y_GYRO,  INV_Z_GYRO
  // Mở tất cả các cảm biến:
  imu.setSensors(INV_XYZ_GYRO | INV_XYZ_ACCEL | INV_XYZ_COMPASS);

  // Sử dụng setGyroFSR() và setAccelFSR() để cấu hình
  // thang đo gia tốc và gia tốc góc.
  // Các thang đo của gia tốc góc là: +/- 250, 500, 1000, or 2000 dps (degree per second) độ/giây;
  imu.setGyroFSR(2000); // đặt giá trị: 2000 dps
  // Các thang đo của gia tốc là: +/- 2, 4, 8, or 16 g (1g= 9.8 m/s2)
  imu.setAccelFSR(2); // Đặt giá trị là +/-2g
  // Lưu ý: Mpu9250 mặc định thang đo của từ kế là  
  // +/- 4912 uT (micro-tesla's)

  // setLPF() có thể được dử dụng để đặt giá trị số low/pass của bộ lọc
  // của gia tốc và gia tốc góc.
  // Các giá trị có thể là: 188, 98, 42, 20, 10, 5
  // (Đơn vị Hz).
  imu.setLPF(5); 

  // Số lần lấy mẫu trong 1s của accel/gyro ccó thể cài đặt sử dụng
  // setSampleRate. Các giá trị được chấp nhận: từ 4Hz đến 1kHz
  imu.setSampleRate(10); // Chọn giá trị 10Hz

  // Cũng như vậy, số lần lấy mẫu của từ kế có thể
  // cài đặt nhờ hàm setCompassSampleRate().
  // Gía trị cho phép: 1-100Hz
  imu.setCompassSampleRate(10); // Đặt giá trị: 10Hz
}

void loop() 
{
  // dataReady() kiểm tra có giá trị accel/gyro mới không
  // Nó sẽ trả lại giá tị true or false
  // (Giá trị mới của từ kế không thể kiểm tra, as the library
  //  bởi thư viện chạy cảm biến này ở chế độ chuyển đổi đơn (Single-conversion mode) .)
  if ( imu.dataReady() )
  {
    // Gọi hàm update() để cập nhật dữ liệu cảm biến.
    // Bạn có thể chỉ rõ cảm biến nào được cập nhật:
    // UPDATE_ACCEL, UPDATE_GYRO, UPDATE_COMPASS,
    // UPDATE_TEMPERATURE.
    imu.update(UPDATE_ACCEL | UPDATE_GYRO | UPDATE_COMPASS);
    printIMUData();
  }
}
  // Chương trình con hiển thị giá trị   
void printIMUData(void)
{  
  // Sử dụng hàm calcAccel, calcGyro, và calcMag để
  // để chuyển đổi dữ liệu thô đọc từ cảm biến ( Gía trị 16-bit)
  // thành các đơn vị riêng tương ứng với nó.
  float accelX = imu.calcAccel(imu.ax);
  float accelY = imu.calcAccel(imu.ay);
  float accelZ = imu.calcAccel(imu.az);
  float gyroX = imu.calcGyro(imu.gx);
  float gyroY = imu.calcGyro(imu.gy);
  float gyroZ = imu.calcGyro(imu.gz);
  float magX = imu.calcMag(imu.mx);
  float magY = imu.calcMag(imu.my);
  float magZ = imu.calcMag(imu.mz);
  
  temperature = myBarometer.bmp085GetTemperature(myBarometer.bmp085ReadUT()); //Đọc nhiệt độ từ Bmp180    
  pressure = myBarometer.bmp085GetPressure(myBarometer.bmp085ReadUP());//Đọc áp suất từ Bmp180
  atm = pressure / 101325; // Aps suất theo atmosphere   
  altitude = myBarometer.calcAltitude(pressure); //Tính độ cao theo "met"
  // Hiển thị dữ liệu qua Serial monitor
  SerialPort.println("Accel: " + String(accelX) + ", " + String(accelY) + ", " + String(accelZ) + " g");
  SerialPort.println("Gyro: " + String(gyroX) + ", " + String(gyroY) + ", " + String(gyroZ) + " dps");
  SerialPort.println("Mag: " + String(magX) + ", " + String(magY) + ", " + String(magZ) + " uT");
  SerialPort.println("Time: " + String(imu.time) + " ms");
  SerialPort.println("Temperature: " + String(temperature) + " deg C");
  SerialPort.println("Pressure: " + String(pressure) + " Pa");
  SerialPort.println("Ralated Atmosphere: " + String(atm) + " atm");
  SerialPort.println("Altitude: " + String(altitude) + " m");
  SerialPort.println();
}

Video demo sản phẩm:

Nếu có bất kỳ thắc mắc hãy để lại ở phần bình luận phía dưới, chúng tôi sẽ giải đáp cho các bạn. Chúc các bạn một ngày tốt đẹp và hoàn thành được dự án của riêng mình.

                                                                                     Tác giả: Thích ăn mỳ

   

Bài viết liên quan       

Hướng dẫn sử dụng Module cảm biến khí CO (MQ-7 Sensor)
 
Hướng dẫn sử dụng Module cảm biến chuyển động HC - SR501
 
Hướng dẫn sử dụng Module cảm biến khí Gas (MQ5 - Gas Sensor )
 
Hướng dẫn sử dụng Module RFID Reader with Cards Kit 13.56MHz
 

Viết đánh giá

Họ và tên:


Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML!

Bình chọn: Dở            Hay

Nhập mã bảo vệ: