(SKU:RB-02S073)LSM9DS0- 9轴姿态传感器

来自ALSROBOT WiKi
2015年10月9日 (五) 11:22Arduino77讨论 | 贡献的版本

跳转至: 导航搜索
9zzt.jpg

目录

产品概述

LSM9DS0-9轴姿态传感器选用的是LSM9DS0芯片,它是一种可实现动作感应的系统芯片,里面包括了一个3轴加速计,一个3轴陀螺仪和一个3轴磁力计。在LSM9DS0中,每种传感器都有良好的检测范围:LSM9DS0线性加速满量程为±2g/±4g/±6g/±8g/±16g;磁场满量程为±2 /±4 /±8 /±12高斯;陀螺仪满量程为±245 /±500 /±2000°/S。9轴姿态传感器还包含了I2C串行总线接口,支持标准和快速模式(100 kHz和400 kHz)及SPI串行接口标准。

规格参数

  1. 模拟电源电压范围:2.4V~3.6V
  2. 3轴加速度计:±2/±4/±6/±8/±16 g
  3. 3轴陀螺仪:±245/±500/±2000°/S
  4. 3轴磁力计:±2/±4/±8/±12高斯
  5. 16位的数据输出
  6. SPI/ I2C串行接口
  7. 嵌入式FIFO(先入先出的队列);
  8. 可编程中断发生
  9. 嵌入式自测试
  10. 嵌入式温度传感器
  11. 尺寸大小: 3.302cm x 1.524cm
  12. 重量大小:10g

使用方法

引脚定义

9轴姿态传感器 引脚定义
CSG 陀螺仪芯片操作方式选择引脚
CSXM 加速度芯片操作方式选择引脚
SDOG 地址选择引脚
SDOX SPI模式输出陀螺仪数据
SCL 信号时钟引脚
SDA 数据引脚
VDD 电源正极
GND 电源地
DEN 陀螺仪数据使能引脚
INTG 陀螺仪可编程中断
DRDYG 陀螺仪数据准备引脚
INT1XM 加速度中断1
INT2XM 加速度中断2


连接图示

首先需要安装一下LSM9DS0的Arduino库,然后图中右侧的小红色芯片为电平转换芯片。

9轴姿态传感器 Arduino
CSG、CSXM、SDOG、SDOXM、DEN、INTG 不接
SCL SCL
SDA SDA
VDD 3.3V
GND GND
DRDYG D4
INT1XM D2
INT2XM D3


9zzt1.jpg

应用例程

示例代码

库文件官方下载地址

#include <SPI.h> 
#include <Wire.h>
#include <SFE_LSM9DS0.h>
#define LSM9DS0_XM  0x1D 
#define LSM9DS0_G   0x6B 
LSM9DS0 dof(MODE_I2C, LSM9DS0_G, LSM9DS0_XM);
#define PRINT_CALCULATED
#define PRINT_SPEED 500
void setup()
{
  Serial.begin(115200); 
  uint16_t status = dof.begin();
  Serial.print("LSM9DS0 WHO_AM_I's returned: 0x");
  Serial.println(status, HEX);
  Serial.println("Should be 0x49D4");
  Serial.println();
}

void loop()
{
  printGyro();  // Print "G: gx, gy, gz"
  printAccel(); // Print "A: ax, ay, az"
  printMag();   // Print "M: mx, my, mz"
  printHeading((float) dof.mx, (float) dof.my);
  printOrientation(dof.calcAccel(dof.ax), dof.calcAccel(dof.ay), 
                   dof.calcAccel(dof.az));
  Serial.println();
  
  delay(PRINT_SPEED);
}

void printGyro()
{
  dof.readGyro();
  Serial.print("G: ");
#ifdef PRINT_CALCULATED
  Serial.print(dof.calcGyro(dof.gx), 2);
  Serial.print(", ");
  Serial.print(dof.calcGyro(dof.gy), 2);
  Serial.print(", ");
  Serial.println(dof.calcGyro(dof.gz), 2);
#elif defined PRINT_RAW
  Serial.print(dof.gx);
  Serial.print(", ");
  Serial.print(dof.gy);
  Serial.print(", ");
  Serial.println(dof.gz);
#endif
}

void printAccel()
{
  dof.readAccel();
  Serial.print("A: ");
#ifdef PRINT_CALCULATED
  Serial.print(dof.calcAccel(dof.ax), 2);
  Serial.print(", ");
  Serial.print(dof.calcAccel(dof.ay), 2);
  Serial.print(", ");
  Serial.println(dof.calcAccel(dof.az), 2);
#elif defined PRINT_RAW 
  Serial.print(dof.ax);
  Serial.print(", ");
  Serial.print(dof.ay);
  Serial.print(", ");
  Serial.println(dof.az);
#endif

}

void printMag()
{
  dof.readMag();
  Serial.print("M: ");
#ifdef PRINT_CALCULATED
  Serial.print(dof.calcMag(dof.mx), 2);
  Serial.print(", ");
  Serial.print(dof.calcMag(dof.my), 2);
  Serial.print(", ");
  Serial.println(dof.calcMag(dof.mz), 2);
#elif defined PRINT_RAW
  Serial.print(dof.mx);
  Serial.print(", ");
  Serial.print(dof.my);
  Serial.print(", ");
  Serial.println(dof.mz);
#endif
}
void printHeading(float hx, float hy)
{
  float heading;
  
  if (hy > 0)
  {
    heading = 90 - (atan(hx / hy) * (180 / PI));
  }
  else if (hy < 0)
  {
    heading = - (atan(hx / hy) * (180 / PI));
  }
  else // hy = 0
  {
    if (hx < 0) heading = 180;
    else heading = 0;
  }
  
  Serial.print("Heading: ");
  Serial.println(heading, 2);
}
void printOrientation(float x, float y, float z)
{
  float pitch, roll;  
  pitch = atan2(x, sqrt(y * y) + (z * z));
  roll = atan2(y, sqrt(x * x) + (z * z));
  pitch *= 180.0 / PI;
  roll *= 180.0 / PI;
  Serial.print("Pitch, Roll: ");
  Serial.print(pitch, 2);
  Serial.print(", ");
  Serial.println(roll, 2);
}

程序效果

下载完程序,然后打开串口监视器,将波特率调到115200,然后按照显示的内容输入相应数字进行功能选择,可以观察到多种数据。

RB-02S0731.jpg

产品相关推荐

Erweima.png

产品购买地址

9轴姿态传感器

周边产品推荐

Arduino 9 Axes Motion Shield 9轴运动扩展板

相关问题解答

Arduino 9 Axes Motion Shield 9轴运动扩展板 三轴加速度计

相关学习资料

产品应用视频 电路原理图
数据表(lmv324)
安装指南
GitHub(设计文件)
奥松机器人技术论坛