ADXL345加速度传感器使用技巧
ADXL345是ADI公司推出的三轴数字加速度计,具有在16g下高分辨率(13Bit)测量能力,同时具备16Bit数字输出,高达4mg/LSB的灵敏度,可以用该芯片做角度传感器。下面小编就根据自己的,分享自己的理解思路。
操作方法
- 01
主要谈谈如何将加速度值转化为角度值。
- 02
首先,假设芯片水平静置时,X、Y方向的重力分量为0g,而Z轴方向的重力分量为g。我们假设芯片处理X、Y、Z轴的任意位置。
- 03
通过传感器输出来的加速度值假设为Ax,Ay,Az。(读出加速度值很简单吧,网上一大把,I2C接口的最多),此时,我们推导,三个角度应该是多少。将重力g分解在三个轴上,即g在各个轴上的投影,假设g轴与X、Y、Z轴的夹角分别为x1、y1、z1。此时就有Ax=g*cosx1,Ay=g*cosy1,Az=g*cosz1。根据立体几何中,g相当于立方体的对角线,Ax、Ay、Az相当于三条边。所以有Ax*Ax + Ay*Ay + Az*Az = g*g(g的平方)。
- 04
想象一下,对于X轴,与XOY平面有一定的角度,这个角度就是X轴的倾角(大家可以这样想象,g为一永远垂直于地面的轴,芯片比作一个立方体,立方体的一角与g轴相交于三边相交点上,相当于立方体仅一个角接触到地)X轴到地面的角度即为所求的倾角。这个角与夹角x1有什么关系呢,拿一个模型看看就知道了,假设所求的角度分别为x、y、z,x = 90 - x1,y = 90 - y1,z = 90 - z1。
- 05
拿x作为例子,Ax=g*sinx,sinx=Ax/g。cosx=squre(g*g-Ax*Ax)/g。所以有tanx=Ax/squre(g*g-Ax*Ax),又因为Ax*Ax + Ay*Ay + Az*Az = g*g,所以有 tanx=Ax/squre(Ay*Ay + Az*Az), 同理:tany=Ay/squre(Ax*Ax + Az*Az), tanz=Az/squre(Ax*Ax + Ay*Ay)。
- 06
看过正点原子的教程,可能有些朋友会有疑问,tanz错了,是因为正点原子将Z轴与X、Y轴看作一样,水平放置时,都为0度。实际上,Z轴与地面是90度。
- 07
好了,推导过程就是这些,文字的东西不好描述,自己画个图很好懂的,小编第一次也花了很多时间思考。可以自己作一个三画墙模型,g轴用一根木棍表示,让木棍穿过坐标原点,并与地面垂直,此时,问题变得简单多了。