某多平台花12元钱买了一个MPU-6050模块(三轴陀螺仪+三轴加速度),网上关于MPU-6050的文章比较多,但与Pico连接试验的文章还不多,我先参考了peppe8o.com上的一篇文章。
芯片的模样(图片取自网络):
我买到的质量看来不行,字迹不太清楚,中间的核心芯片字迹更模糊,标明方向的字符“Y”被旁边的小洞吃掉,但读取的数据还是正常的。
peppe8o的文章说只需连接四根线: 1)VCC,连接3.3V引脚 2)GND,接地 3)SDA和SCL,可以看出是I2C接口,连接Pico的一组I2C接口即可,我用GP16和GP17 实际连线:
别人已经写好了类库,从micropython-IMU下载imu.py和vector3d.py两个文件到自己的Pico上。
开始写主程序:
import machine
import utime
import imu
i2c = machine.I2C(0, sda=machine.Pin(16), scl=machine.Pin(17), freq=400000)
print("I2C addr: ", i2c.scan()[0])
sensor = imu.MPU6050(i2c)
while True:
#print(sensor.accel.xyz, sensor.gyro.xyz, sensor.temperature)
print("加速度:{:7.2f}{:7.2f}{:7.2f} 陀螺仪:{:9.2f}{:9.2f}{:9.2f} 温度:{:5.1f}" \
.format(sensor.accel.x, sensor.accel.y, sensor.accel.z, \
sensor.gyro.x, sensor.gyro.y, sensor.gyro.z, \
sensor.temperature))
utime.sleep(1)
可惜一开始程序报错,在调用MPU6050的chip_id()函数时抛出异常,查了半天文档也没找到原因,一度怀疑我买到的芯片是假货。
后面看到一篇文章,说最好把AD0引脚接地,AD0代表i2c的地址,AD0为0时,i2c地址为104(十六进制0x68),AD0为1时,i2c地址为105(十六进制0x69)。如果AD0不接地,可能它的电位状态不稳定。
AD0接地后,程序运行正常!不断地输出传感器的数据,前三个是加速度计,接着输出三个是陀螺仪数据,最后还有一个温度数据。我把面包板拿起来乱晃了一阵,可以看见数据发生变化,可惜现在还不明白如何使用这些数据来分析物体的动作状态。 看到文章和程序中经常出现imu,就查了一下:
惯性测量单元(英文:Inertial measurement unit,简称 IMU)是测量物体三轴姿态角(或角速率)以及加速度的装置。 一般的,一个IMU内会装有三轴的陀螺仪和三个方向的加速度计,来测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。为了提高可靠性,还可以为每个轴配备更多的传感器。一般而言IMU要安装在被测物体的重心上。 IMU大多用在需要进行运动控制的设备,如汽车和机器人上。也被用在需要用姿态进行精密位移推算的场合,如潜艇、飞机、导弹和航天器的惯性导航设备等。
参考资料
https://peppe8o.com/using-gyroscope-and-accelerometer-with-mpu6050-raspberry-pi-pico-and-micropython/
https://www.bilibili.com/read/cv7648341
https://moore.live/news/98685/detail/
https://zhuanlan.zhihu.com/p/98113366
https://mekesim.com/esp32/MPU6050%E5%8A%A0%E9%80%9F%E5%BA%A6%E8%AE%A1%20%E9%99%80%E8%9E%BA%E4%BB%AA%E4%BC%A0%E6%84%9F%E5%99%A8/
https://stackoverflow.com/questions/1586658/combine-gyroscope-and-accelerometer-data
|