目前使用的板子為MPU9250,九軸。呼叫函式庫為 MPU6050。
包含三軸偵測重力加速度,可用來辨識傾斜角度。故水平旋轉無法辨識。
三軸偵測轉速,停止時轉速為零,故無法用來偵測停止轉角為何。
MPU6500使用IIC傳輸,接到Arduino上的SCL和SDA。
以下為Arduino 程式碼,可在Arduino UNO 及 D1 mini 執行
=====================
- #include <I2Cdev.h>
- #include <MPU6050.h>
- #include "Wire.h"
- MPU6050 flagMPU6050;
- int16_t ax, ay, az, gx, gy, gz; // 16位元帶號數
- int Ax, Ay, Az, Gx, Gy, Gz;
- // setup() 會先被執行且只會執行一次
- void setup() {
- flagMPU6050.initialize(); // 初始化
- Serial.begin(9600);
- pinMode(D4, OUTPUT);
- Wire.begin();
- }
- void loop() {
- flagMPU6050.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // 取得六軸資料
- // flagMPU6050.getAcceleration(&ax, &ay, &az); // 取得三軸加速度
- // flagMPU6050.getRotation(&gx, &gy, &gz); // 取得三軸轉速
- // flagMPU6050.getAccelerationX(); // 僅取得 x軸加速度
- // flagMPU6050.getRotationX(); // 僅取得 x軸轉速
- Ax = int(ax * 2.0 / 32.768); // 把16位元的資料,轉換為2G m/s^2
- Ay = int(ay * 2.0 / 32.768); // 把16位元的資料,轉換為2G m/s^2
- Az = int(az * 2.0 / 32.768); // 把16位元的資料,轉換為2G m/s^2
- Gx = int(gx * 2.0 / 250); // 把16位元的資料,轉換為轉速
- Gy = int(gy * 2.0 / 250); // 把16位元的資料,轉換為轉速
- Gz = int(gz * 2.0 / 250); // 把16位元的資料,轉換為轉速
- Serial.print(String(u8" ax: ") +String(Ax));
- Serial.print(String(u8", ay: ") +String(Ay));
- Serial.print(String(u8", az: ") +String(Az));
- // Serial.print(String(u8", gx: ") +String(Gx));
- // Serial.print(String(u8", gy: ") +String(Gy)); // 目前測試無輸出
- // Serial.print(String(u8", gz: ") +String(Gz)); // 目前測試無輸出
- Serial.println(" ");
- delay(100); // 取得資料間隔
- }