_SKU_SEN0178 SEN0181_FXLN83XX三轴加速度传感器 - jimaobian/DFRobotWikiCn GitHub Wiki

File:

概述

三轴加速度传感器是一种可以对物体运动过程中的加速度进行测量的电子设备,典型互动应用中的加速度传感器可以用来对物体的姿态或者运动方向进行检测,比如WII游戏机手柄和iPhone的游戏应用等。这些都是利用设备内部传感器,给出基础的运动数据,然后通过后期的算法折算,计算出当前的运动方向。Misfit,小米手环之类用的都是同样的原理。 FXLN83XXQR1系列是款低功耗,高精度三轴加速传感器,拥有其类别中最高的带宽(2.7kHz)。并且模拟输出,兼容性广泛。

性能描述

  • 供电电压:3.3-8V
  • 可选灵敏度:±2g/8g(FXLN8361QR1和FXLN8371QR1);±4g/16g(FXLN8362QR1和FXLN8372QR1);
  • 低功耗,工作时电流为180μA;
  • 高灵敏度;
  • 低通滤波器具有内部信号调理功能;
  • 设计稳定,防震能力强。
  • 模块尺寸:37.44X26.43mm

用户指南

FXLN83XXQR1正面示意图 FXLN83XXQR1反面示意图
SKU 芯片 H L Bandwidth
SEN0178 FXLN8361 ±2g ±8g Low
SEN0179 FXLN8362 ±4g ±16g Low
SEN0180 FXLN8371 ±2g ±8g High
SEN0181 FXLN8372 ±4g ±16g High

| 注意:"H"代表高分辨率,低量程;"L"代表低分辨率,高量程 |

在传感器出厂后,背面白框中会有一栏被选中,选中那栏为您的传感器芯片型号、测量范围、滤波器种类。 测量范围的可根据模块上拨动开关进行选择:

   例如:您的传感器芯片型号为“FXLN8361QR1”,将拨动开关拨到“H”,您选择的量程为±2g;将拨动开关拨到“L”,您选择的量程为±8g;

使用教程

在本教程中,我们会分几步来教你,如何读取正确的加速度数值,这边我们将以SEN0178为例子。

准备

  • 硬件
    • DFRduino UNO R3 x1
    • I/O扩展板 V7 x1
    • 三轴加速度传感器 x1
  • 软件

接线图

SEN0178_Arduino_Connection.png

数据校准

由于每个传感器存在个体差异,我们需要对每个传感器做一次数据校准。(当然,你也可以跳过这一步,直接使用样例代码,但这样会存在一些误差)

  • 步骤一

调节开关至"H"高精度模式,按图连接传感器至Arduino UNO主控板,烧入校准测试代码。


/***************************************************
DFRobot 3-axis calibration code

X——A0
Y——A1
Z——A2
*****************************************************/

void setup()
{
  Serial.begin(9600);
}
void loop()
{
      int x,y,z;
      x=analogRead(0);
      y=analogRead(1);
      z=analogRead(2);
      Serial.print("x= ");
      Serial.print(x*5/1024.0,3);
      Serial.print(',');
      Serial.print("y= ");
      Serial.print(y*5/1024.0,3);
      Serial.print(',');
      Serial.print("z= ");
      Serial.println(z*5/1024.0,3);
      delay(500);
}
  • 步骤二

Z轴正向向上,传感器静止水平放置在桌面上,打开串口监视器,记录一组数据,列如:

    x= 0.776,y= 0.776,z= 1.157

同理,Z轴负向向上,传感器静止水平放置在桌面上,记录另一组数据

    x= 0.776,y= 0.781,z= 0.688

此时,观察得到的两组数据,应当发现x,y的数据相等或者相差很小,但Z轴的数据相差较大。这是因为,在传感器静止水平放置的时候,x和y轴上没有存在加速度,但由于引力的关系,z轴上会存在一个方向竖直向下的重力加速度,物理学上,我们称之为g。 所以当Z轴正向放置时,z轴上的数据会是 z=Z+g;当Z轴反向放置时,z轴上的数据会是 z=Z-g。由此可以计算出z的初始值Z和重力加速度g对应的电压值变量。

    Z=(1.157+0.688)/2=0.923 mV     g=(1.157-0.688)/2=0.235 mV/g

同理,可得到传感器在X和Y轴上的初始值和g对应的加速度。(过程略)

| 注意:重力加速度g的方向是始终朝下的,我们把g的方向规定为正方向。例如:当物体在外力的作用下,以加速度a向上运动时,它所受到的加速度为g+a。 |

SEN0178_position.png

  • 步骤三

在完成校准之后,我们得到了每个轴上面的初始值和每个轴上重力加速度g所对的电压变化量。 烧入样例代码,你就可以得到完美的三轴加速度数值。

| 备注,为了尽可能的得到精确的数值,需要在每一根坐标轴上都进行一次校准。 |

Arduino 样例代码

打开你之前下载的Arduino IDE,复制样例代码至IDE窗口,点击下载。


/***************************************************
* Triple Axis Accelerometer
* ****************************************************
* This procedure is to calculate the XYZ three acceleration values

* @version  V1.0
* @date  2015-7-2

* GNU Lesser General Public License.
* See <http://www.gnu.org/licenses/> for details.
* All above must be included in any redistribution
* ****************************************************/

float X=0.774;
float gx=0.237;

float Y=0.781;
float gy=0.21;

float Z=0.923;
float gz=0.235;

void setup()
{
  Serial.begin(9600);    //Baudrate 9600
}
void loop()
{
  int x,y,z;
  x=analogRead(0);
  y=analogRead(1);
  z=analogRead(2);
  Serial.print("x= ");
  Serial.print((x*5/1024.0 - X)/gx,2);
  Serial.print(',');
  Serial.print("y= ");
  Serial.print(((y*5/1024.0- Y)/gy),2);
  Serial.print(',');
  Serial.print("z= ");
  Serial.println(((z*5/1024.0-Z)/gz),2);
  delay(100);
}

SEN0178_result.png 可以看到,水平放置的时候,只有z轴上有一个g的加速度。

Micropython 样例代码

from machine import ADC,Pin
import time

X=0.774
gx=0.237

Y=0.781
gy=0.21

Z=0.923
gz=0.235

x_adc=ADC(Pin(36))
y_adc=ADC(Pin(39))
z_adc=ADC(Pin(34))

while True:
  x=x_adc.read()
  y=y_adc.read()
  z=z_adc.read()
  print("x=",(x*5/1024.0 - X)/gx)
  print("y=",(y*5/1024.0 - Y)/gy)
  print("z=",(z*5/1024.0 - Z)/gz)
  time.sleep_ms(50)

疑难解答

| 问:那其他量程怎么测得加速度数值? |

  • 答:原理是一样的,这个方法可以从基础原理上实现了任何量程的数据采集。

| 更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖! |

更多

进阶知识——关于Roll/Pitch/Yaw的数据转换 FXLN83XX datasheet

shopping_car.png DFRobot商城购买链接 |}