“(SKU:RB-02S073)LSM9DS0- 9轴姿态传感器”的版本间的差异
来自ALSROBOT WiKi
(→产品相关推荐) |
|||
第99行: | 第99行: | ||
==应用例程== | ==应用例程== | ||
===示例代码=== | ===示例代码=== | ||
− | + | [https://github.com/sparkfun/SparkFun_LSM9DS0_Arduino_Library 库文件官方下载地址]<br/> | |
− | + | <pre style='color:blue'> | |
− | + | #include <SPI.h> | |
− | + | ||
− | https://github.com/sparkfun/ | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | #include <SPI.h> | + | |
#include <Wire.h> | #include <Wire.h> | ||
#include <SFE_LSM9DS0.h> | #include <SFE_LSM9DS0.h> | ||
− | + | #define LSM9DS0_XM 0x1D | |
− | + | #define LSM9DS0_G 0x6B | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | #define LSM9DS0_XM 0x1D | + | |
− | #define LSM9DS0_G 0x6B | + | |
− | + | ||
− | + | ||
− | + | ||
LSM9DS0 dof(MODE_I2C, LSM9DS0_G, LSM9DS0_XM); | LSM9DS0 dof(MODE_I2C, LSM9DS0_G, LSM9DS0_XM); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
#define PRINT_CALCULATED | #define PRINT_CALCULATED | ||
− | + | #define PRINT_SPEED 500 | |
− | + | ||
− | #define PRINT_SPEED 500 | + | |
− | + | ||
void setup() | void setup() | ||
{ | { | ||
− | Serial.begin(115200); | + | Serial.begin(115200); |
− | + | ||
− | + | ||
uint16_t status = dof.begin(); | uint16_t status = dof.begin(); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Serial.print("LSM9DS0 WHO_AM_I's returned: 0x"); | Serial.print("LSM9DS0 WHO_AM_I's returned: 0x"); | ||
Serial.println(status, HEX); | Serial.println(status, HEX); | ||
第221行: | 第124行: | ||
printAccel(); // Print "A: ax, ay, az" | printAccel(); // Print "A: ax, ay, az" | ||
printMag(); // Print "M: mx, my, mz" | printMag(); // Print "M: mx, my, mz" | ||
− | |||
− | |||
printHeading((float) dof.mx, (float) dof.my); | printHeading((float) dof.mx, (float) dof.my); | ||
printOrientation(dof.calcAccel(dof.ax), dof.calcAccel(dof.ay), | printOrientation(dof.calcAccel(dof.ax), dof.calcAccel(dof.ay), | ||
dof.calcAccel(dof.az)); | dof.calcAccel(dof.az)); | ||
Serial.println(); | Serial.println(); | ||
− | + | ||
delay(PRINT_SPEED); | delay(PRINT_SPEED); | ||
} | } | ||
第233行: | 第134行: | ||
void printGyro() | void printGyro() | ||
{ | { | ||
− | |||
− | |||
− | |||
dof.readGyro(); | dof.readGyro(); | ||
− | |||
− | |||
− | |||
Serial.print("G: "); | Serial.print("G: "); | ||
#ifdef PRINT_CALCULATED | #ifdef PRINT_CALCULATED | ||
− | |||
− | |||
− | |||
Serial.print(dof.calcGyro(dof.gx), 2); | Serial.print(dof.calcGyro(dof.gx), 2); | ||
Serial.print(", "); | Serial.print(", "); | ||
第261行: | 第153行: | ||
void printAccel() | void printAccel() | ||
{ | { | ||
− | |||
− | |||
− | |||
dof.readAccel(); | dof.readAccel(); | ||
− | |||
− | |||
− | |||
Serial.print("A: "); | Serial.print("A: "); | ||
#ifdef PRINT_CALCULATED | #ifdef PRINT_CALCULATED | ||
− | |||
− | |||
− | |||
Serial.print(dof.calcAccel(dof.ax), 2); | Serial.print(dof.calcAccel(dof.ax), 2); | ||
Serial.print(", "); | Serial.print(", "); | ||
第290行: | 第173行: | ||
void printMag() | void printMag() | ||
{ | { | ||
− | |||
− | |||
− | |||
dof.readMag(); | dof.readMag(); | ||
− | |||
− | |||
− | |||
Serial.print("M: "); | Serial.print("M: "); | ||
#ifdef PRINT_CALCULATED | #ifdef PRINT_CALCULATED | ||
− | |||
− | |||
− | |||
Serial.print(dof.calcMag(dof.mx), 2); | Serial.print(dof.calcMag(dof.mx), 2); | ||
Serial.print(", "); | Serial.print(", "); | ||
第315行: | 第189行: | ||
#endif | #endif | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
void printHeading(float hx, float hy) | void printHeading(float hx, float hy) | ||
{ | { | ||
float heading; | float heading; | ||
− | + | ||
if (hy > 0) | if (hy > 0) | ||
{ | { | ||
第339行: | 第206行: | ||
else heading = 0; | else heading = 0; | ||
} | } | ||
− | + | ||
Serial.print("Heading: "); | Serial.print("Heading: "); | ||
Serial.println(heading, 2); | Serial.println(heading, 2); | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
void printOrientation(float x, float y, float z) | void printOrientation(float x, float y, float z) | ||
{ | { | ||
− | float pitch, roll; | + | float pitch, roll; |
− | + | ||
pitch = atan2(x, sqrt(y * y) + (z * z)); | pitch = atan2(x, sqrt(y * y) + (z * z)); | ||
roll = atan2(y, sqrt(x * x) + (z * z)); | roll = atan2(y, sqrt(x * x) + (z * z)); | ||
pitch *= 180.0 / PI; | pitch *= 180.0 / PI; | ||
roll *= 180.0 / PI; | roll *= 180.0 / PI; | ||
− | |||
Serial.print("Pitch, Roll: "); | Serial.print("Pitch, Roll: "); | ||
Serial.print(pitch, 2); | Serial.print(pitch, 2); | ||
Serial.print(", "); | Serial.print(", "); | ||
Serial.println(roll, 2); | Serial.println(roll, 2); | ||
− | }</pre> | + | } |
+ | </pre> | ||
===程序效果=== | ===程序效果=== | ||
下载完程序,然后打开串口监视器,将波特率调到115200,然后按照显示的内容输入相应数字进行功能选择,可以观察到多种数据。 | 下载完程序,然后打开串口监视器,将波特率调到115200,然后按照显示的内容输入相应数字进行功能选择,可以观察到多种数据。 |
2015年10月9日 (五) 11:22的版本
目录 |
产品概述
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串行接口标准。
规格参数
- 模拟电源电压范围:2.4V~3.6V
- 3轴加速度计:±2/±4/±6/±8/±16 g
- 3轴陀螺仪:±245/±500/±2000°/S
- 3轴磁力计:±2/±4/±8/±12高斯
- 16位的数据输出
- SPI/ I2C串行接口
- 嵌入式FIFO(先入先出的队列);
- 可编程中断发生
- 嵌入式自测试
- 嵌入式温度传感器
- 尺寸大小: 3.302cm x 1.524cm
- 重量大小: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 |
应用例程
示例代码
#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,然后按照显示的内容输入相应数字进行功能选择,可以观察到多种数据。
产品相关推荐
产品购买地址
周边产品推荐
Arduino 9 Axes Motion Shield 9轴运动扩展板
相关问题解答
Arduino 9 Axes Motion Shield 9轴运动扩展板 三轴加速度计