|
如果你是第二次世界大战(WWII )的飞机或那个时代的其他类似机器的粉丝,就会发现陀螺仪的用处。在当时,M-7陀螺仪是现代技术的奇迹,但它个头比较大。这些陀螺仪的尺寸大小与内燃机类似。
70多年后,这些设备经历了令人难以置信的小型化。你会发现陀螺仪、加速度计,甚至是内置在单个芯片中的温度传感器 - 称为惯性测量单元(IMU) - 甚至比你的指甲还要小。这其中一个非常受欢迎的加速度计是InvenSense的MPU-6050,您可以同扩展板一同购买,以及需要使用的所有组件,大约一美元。
该芯片使用微机电系统(MEMS)技术根据外力改变内部电容值。虽然其内部工作非常吸引人,但芯片可以接收所有传感数据。将它产生的值输入到Arduino开发板或您选择的任何其他计算系统。更加方便的是,芯片以I2C格式输出这些数据,允许它使用两条线和一个中断引脚来检测: ● 加速数据 ● 陀螺仪数据 ● 温度数据
Arduino开发板连接加速度计
在本篇文章中,我们将使用带有MPU-6050芯片的GY-521模块,将数据传输到Arduino Uno开发板。各种开发板和计算系统都与I2C标准兼容,因此即使您使用不同的特定引脚和库,您也应该能够在许多情况下应用这些概念。
首先,我们将根据以下方式连接GY-521板: ● VCC:+ 5V ● GND:GND ● SCL:A5 ● SDA:A4 ● XDA:未连接 ● XCL:未连接 ● AD0:GND ● INT:DIO 2
我们还在SCL和地之间连接了一个4.7kΩ电阻,在SDA和地之间连接了另一个电阻。您可以找到不使用外部电阻的示例,因此对于每个应用可能都不需要。
原始数据 以下是获取原始数据的基本步骤: 1. 连接完所有内容后,在Arduino开发板上加载“Short Example Sketch”。 2. 打开串行监视器并将其设置为9600波特率。
然后,您将看到以下值: ● AcX:X方向的加速度计读数 ● AcY:加速度计在Y方向读数 ● AcZ:Z方向的加速度计读数 ● Tmp:温度读数 ● GyX:关于X轴的陀螺仪读数 ● GyY:关于Y轴的陀螺仪读数 ● GyZ:关于Z轴的陀螺仪读数
我们在下面的草图中说明了这些轴及其方向。每个值都应在设备移动时响应。当芯片上的字朝上放置时,Z轴将读为正,表示重力方向。如果X轴或Y轴朝上,它们将产生类似的读数。每个轴的曲线将指示滚动值。
关于滚动方向的注释:它遵循我们在物理学中遇到的“右手规则”。如果右拇指指向与轴相同的方向,则手指将沿正旋转方向弯曲。
传感器融合 您可以在许多应用程序中使用这些原始值,但MPU-6050还有另一个技巧:数字运动处理器(DMP)。该处理器可以融合加速度计和陀螺仪值,以获得更高的精度。
InvenSense在很大程度上对如何使用这些数据表示不满,但Jeff Rowberg广泛的I2C设备库(i2cdevlib)可以利用DMP的功能,使用巧妙的逆向工程工作。根据Rowberg的说法,此时代码需要一些更新,但他使用MPU6050库和附带的MPU6050_DMP6示例代码来生成偏航、俯仰和滚动的值。您还可以取消注释代码中的多个选项,以根据需要生成不同的输出。
加载代码后,请按照下列步骤操作: 1. 打开串行监视器,确保将其设置为115200波特。 2. 输入一个字符。
你会看到输出被列为偏航、俯仰和滚转的“ypr”,芯片上的X方向对应于飞机的前部。滚动和偏航的方向与您对我们之前讨论的原始值的预期方向相同。当理论飞机的机头指向下方时,俯仰会减小,但当机头指向上方时,其俯仰值会增加。用这种方式表达事物在飞行环境中是有意义的;告诉你“减少你的俯仰角”起飞的教练肯定会引起混乱 - 或者更糟。
无论您是制造模型飞机,还是设计新的游戏控制器,或者您只是想确保您的手机能够正常自动旋转,微型IMU芯片都可以实现这一切。凭借其低成本和预先编写的Arduino库,定制应用程序只需插入一些导线和编写代码即可。 |