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 |