前言
学习使用 bpi-bit 板子上的 MPU9250 制作指南针
-
首先需要安装库:MPU9250库
-
库安装方法:安装方法(wiki)
软硬件
测试使用的开发板: bpi-bit
应用到的外设: MPU9250
测试使用的软件:Arduino IDE 1.8.9
函数解析
int MPU9250::setAccelRange(AccelRange range)
将加速度计满刻度范围设置为默认值以外的值
int MPU9250::setGyroRange(GyroRange range)
将陀螺仪满刻度范围设置为默认值以外的值
int MPU9250::setDlpfBandwidth(DlpfBandwidth bandwidth)
将DLPF带宽设置为默认值以外的值
int MPU9250::calibrateMag()
找到磁强计的偏差和比例因子校准,传感器应以画8的方式旋转,直到完成;校准功能
double atan2(double y, double x)
返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。也可以理解为计算复数 x+yi 的辐角
代码讲解
MPU9250 IMU(i2c0, 0x68);//V1.4
//we need to modify the I2C address according to the hardware.
//Hardware Version 1.2 >MPU9250 IMU(i2c0, 0x69);<
//Hardware Version 1.4 >MPU9250 IMU(i2c0, 0x68);<
创建 MPU9250 对象。i2c0 是 I2C 的 pin 脚,0x68 是 I2C 的地址
(如果 bpibit 的版本为 1.2,则 I2C 的地址为 0x69)
Serial.printf("\r\n Yaw %.6f ", float(atan2(IMU.getMagY_uT(), IMU.getMagX_uT())) * RAD_TO_DEG);
delay(20);
打印出 x y 方向的倾斜角度
使用示例
要对代码进行测试,只需使用Arduino IDE对其进行编译并上传到 bpibit 开发板即可
#include "MPU9250.h"
MPU9250 IMU(i2c0, 0x68);//V1.4
//we need to modify the I2C address according to the hardware.
//Hardware Version 1.2 >MPU9250 IMU(i2c0, 0x69);<
//Hardware Version 1.4 >MPU9250 IMU(i2c0, 0x68);<
int status;
void setup()
{
// serial to display data
Serial.begin(9600);
while (!Serial)
{
}
// start communication with IMU
status = IMU.begin();
if (status < 0)
{
Serial.println("IMU initialization unsuccessful");
Serial.println("Check IMU wiring or try cycling power");
Serial.print("Status: ");
Serial.println(status);
while (1)
{
}
}
// setting the accelerometer full scale range to +/-8G
IMU.setAccelRange(MPU9250::ACCEL_RANGE_2G);
// setting the gyroscope full scale range to +/-500 deg/s
IMU.setGyroRange(MPU9250::GYRO_RANGE_250DPS);
// setting DLPF bandwidth to 20 Hz
IMU.setDlpfBandwidth(MPU9250::DLPF_BANDWIDTH_41HZ);
// setting SRD to 19 for a 50 Hz update rate
// IMU.setSrd(19);
IMU.calibrateMag();
}
#define RAD_TO_DEG 57.295779513082320876798154814105 // 180/π
void loop()
{
// read the sensor
IMU.readSensor();
Serial.printf("\r\n Yaw %.6f ", float(atan2(IMU.getMagY_uT(), IMU.getMagX_uT())) * RAD_TO_DEG);
delay(20);
}
现象
通过串口返回板载MPU9250磁力计获得的地磁数据转化来的南北角度。
角度与方向(LED面板向上):
方向 | 角度 |
---|---|
东 | +90 |
南 | ±180 |
西 | -90 |
北 | ±0 |
bpibit 板子金手指边的朝向越接近于南,则打印出来的倾斜度就越接近于0
一开始会有几秒钟的校准,在视频没有显示出来