因为准备DIY一个载人平衡车,其中最核心的传感器就是车身的姿态角度传感器(MPU6050),用于对车身倾斜角度、倾斜趋势等做测量,所以准备先用简单的电路连接MPU6050,并写代码来获取传感器数据。 MPU6050芯片被广泛的应用到各类工业产品中,现在通过Arduino可以很方便的连接6050,并制作如平衡车、无人机等产品。 我用了一款JY-61P的模块,核心芯片还是MPU6050,模块除了能读取原始数据外,还可以通过积分算法获取当前的角位置,并且角位置经过卡尔曼滤波,可以很平稳的输出,先来看下传感器的各项参数。
JY-61P模块参数电压: 3.3V – 5V 电流:< 40mA 尺寸:51.3mm × 36mm × 15mm 焊盘间距:上下10mil(2.54mm),左右600mil(15.24mm) 测量维度:加速度3维,角速度3维,角度3维 量程:加速度±16g,角速度±2000°/s,角度±180° 分辨率:加速度6.1e-5g,角速度7.6e-3°/s 稳定性:加速度0.01g,角速度0.05°/s 测量误差:0.01° 输出内容:时间、加速度、角速度、角度、端口状态,数据输出频率0.1Hz-200Hz 数据接口:串口(TTL电平,波特率支持2400、4800、9600、19200、38400、57600、115200、230400、460800、921600)、IIC(最大支持高速率400K) 扩展口功能:模拟输入(0~VCC)、数字输入、数字输出、PWM输出(周期1us~65535us,分辨率1us)
JY-61P模块最后我选用了带外壳的模块-型号WT61PC,如下图:
其内部就是这样的一个芯片:
之所以选用带外壳的WT61PC,是因为一方面接线更容易,另外还具备一定的防尘作用,功能上是完全一样的。 WT61P的接口有4个引脚,分别是VCC、GND、TX、RX,如果希望使用IIC来读取数据,可以直接使用无外壳版本,因为IIC模式可以读取底层数据,但无法读取通过积分算法得到的角度值,所以这里就以串口通信的方式来说明如何连接和使用WT61P姿态传感器。 轴向说明
如上图所示,模块的轴向外壳上标示出来,蓝色轴为X轴,红色轴为Y轴,垂直与 模块向外为Z轴。旋转的方向按右手法则定义,即右手大拇指指向轴向,四指弯曲的方向即为绕该轴旋转的方向。X 轴角度即为绕 X 轴旋转方向的角度,Y轴角度即为绕Y轴旋转方向的角度,Z轴角度即为绕Z轴旋转方向的角度。 硬件连接 连线非常简单,VCC接Arduino的3.3V电源口,GND接GND,TX口接Arduino的RX口,JY61的RX口空置,这里的Arduino可以是UNO、NANO或其他兼容的板子,连接后,JY61就可以通过串口向Arduino传送数据了。下面通过代码来实现位置状态数据的打印。 Arduino代码 #include <Wire.h>
#include <JY901.h>
void setup()
{
Serial.begin(115200);
}
void loop()
{
//加速度
Serial.print("Acc:");Serial.print((float)JY901.stcAcc.a[0]/32768*16);Serial.print(" ");Serial.print((float)JY901.stcAcc.a[1]/32768*16);Serial.print(" ");Serial.println((float)JY901.stcAcc.a[2]/32768*16);
//角加速度
Serial.print("Gyro:");Serial.print((float)JY901.stcGyro.w[0]/32768*2000);Serial.print(" ");Serial.print((float)JY901.stcGyro.w[1]/32768*2000);Serial.print(" ");Serial.println((float)JY901.stcGyro.w[2]/32768*2000);
//角度
Serial.print("Angle:");Serial.print((float)JY901.stcAngle.Angle[0]/32768*180);Serial.print(" ");Serial.print((float)JY901.stcAngle.Angle[1]/32768*180);Serial.print(" ");Serial.println((float)JY901.stcAngle.Angle[2]/32768*180);
Serial.println("");
delay(500);
}
void serialEvent()
{
while (Serial.available())
{
JY901.CopeSerialData(Serial.read()); //Call JY901 data cope function
}
}
上述代码会打印出芯片当前的三轴方向的加速度、三轴的角加速度及三轴的角度,JY61P已经对角度做了卡尔曼滤波,所以能平稳的输出,如果你的芯片没有内置滤波,则需要通过代码实现。 WT61P资料链接: http://wiki.wit-motion.com/doku.php?id=%E6%95%B0%E5%AD%97%E5%80%BE%E8%A7%92%E4%BB%AA
内容来源网络,侵权联系删除
|