Tìm hiểu cách hiệu chỉnh và so sánh hoạt động của các filter khác nhau.
- GY521_readCalibration_2 Tìm giá trị offset
- GY521_test_main So sánh hiệu quả Kalman filter và complementary filter
pin | Tên pin | Ý ngnghĩa | Chân Arduino |
---|---|---|---|
0 | VCC | +5V | 5V |
1 | GND | ground | GND |
2 | SCL | I2C clock | A5 |
3 | SDA | I2C data | A4 |
4 | XDA | auxiliary data | |
5 | XCL | auxiliary clock | |
6 | AD0 | address | |
7 | INT | interrupt |
Sketch file readCalibration2.ino trong examples để lấy giá trị offset axe aye aze gxe gye gze và lưu lại. Lưu ý không di chuyển cảm biến trong quá trình hiệu chỉnh
#include "GY521.h"
- GY521(uint8_t address = 0x69, , TwoWire*wire = &Wire) Constructor cho MPU với địa chỉ mặc định.
- bool begin() Returns true nếu phát hiện thiết bị trên I2C bus
Note cần gọi Wire.begin() trước begin().
- bool isConnected() returns true nếu có thiết bị đang sử dụng I2C bus
- bool setAccelSensitivity(uint8_t as) as = 0, 1, 2, 3 ==> 2g 4g 8g 16g
- uint8_t getAccelSensitivity() returns 0, 1, 2, 3
- bool setGyroSensitivity(uint8_t gs) gs = 0,1,2,3 ==> 250, 500, 1000, 2000 degrees/second
- uint8_t getGyroSensitivity() returns 0, 1, 2, 3
= void setNormalize(bool normalize = true) góc trả về trong khoảng(-180,180). = bool getNormalize() returns flag.
- int16_t read() đọc tất cả giá trị đo từ MPU6050. returns status = GY521_OK nếu thành công, giá trị góc đã qua bộ lọc complementary filter
- int16_t read_with_KF() đọc tất cả giá trị đo từ MPU6050. returns status = GY521_OK nếu thành công, giá trị góc đã qua bộ lọc Kalman filter
Trước tiên phải gọi read() hoặc read_with_KF().
- float getAccelX() Gia tốc trên phương X
- float getAccelY() Gia tốc trên phương Y
- float getAccelZ() Gia tốc trên phương Z
- float getAngleX() Giá trị góc row nếu chỉ sử dụng accelerator
- float getAngleY() Giá trị góc pitch nếu chỉ sử dụng accelerator
- float getAngleZ() Giá trị góc yaw nếu chỉ sử dụng accelerator
- float getGyroX() Giá trị Rate X nếu chỉ sử dụng gyroscope
- float getGyroY() Giá trị rate Y nếu chỉ sử dụng gyroscope
- float getGyroZ() Giá trị Rate Z nếu chỉ sử dụng gyroscope
- float getPitch() Trả về góc pitch(-180,180) sử dụng complementary filter
- float getRoll() Trả về góc roll(-180,180) sử dụng complementary filter
- float getYaw() Trả về góc yaw(-180,180)
- float get_pitch_kalman() Trả về góc pitch(-180,180) sử dụng Kalman filter
- float get_roll_kalman() Trả về góc roll(-180,180) sử dụng Kalman filter
- uint8_t setRegister(uint8_t reg, uint8_t value)
- uint8_t getRegister(uint8_t reg)
unit g = gravity == 9.81
Acceleration | value | notes |
---|---|---|
2 g | 0 | default |
4 g | 1 | |
8 g | 2 | |
16 g | 3 |
unit dps = degrees per second.
Gyroscope | value | notes |
---|---|---|
250 dps | 0 | default |
500 dps | 1 | |
1000 dps | 2 | |
2000 dps | 3 |
- Tín hiệu góc bị trôi theo thời gian.
- Sai số ở trạng thái nghỉ khoảng 0.1.
- Quay góc Roll 90 degree.
- Quay góc Pitch 90 degree.
- Kalman filter cho tín hiệu ổn định và không bị trôi theo thời gian.