-
在我们的之前的博文中,我们讲过一模块
arduIMU 9DOF
p>
的使用,现在
稍稍升级下,今天来个
10D
OF
的!!
光从包含传感器的种类上
看,其实他们的区别不是很大,只是
10DOF
上包含了
9DOF
上没有的气压传感器
BMP085<
/p>
,只是
10DOF
模块上不再有
MCU
了
-
一纯
粹的传感器集模块!
下面就开始介绍
一、模块简介
模块板上集成了四种传
感器,分别是加速度传感器
ADXL345
、磁场强度传感器<
/p>
HMC5883L
、三轴陀螺仪
ITG3
205
,气压传感器
BMP085
,给
您带来
10
维的测
量空间,
它们彼此串联在一起,
这样在工作时能够补偿彼此的缺陷,
同时在使用
算法滤波时也给您提供了一个清晰的方向。
如果应用在机器人、
无人驾驶机、
自
动
汽车、
图像稳定系统中它将会是强有力的控制器,
这将不仅会大
大简化您的设
计,而且在控制效果方面也很令人满意!
还是先来看看模块长啥样吧
模块较小,结构紧凑!
二、模块的一些特征
1
、模块结构紧凑、尺寸小!
2
、预留了两个安装孔,方便安装
<
/p>
3
、集成了加速度传感器
ADXL345
4
、集成了磁场强度传感器
HMC58
83L
5
、集成了三轴陀螺仪
ITG3205
6
、集成了气压传感器
BMP085
7
、
3.3V
供电
8
、
I
2C
接口通信
三、板载传感器的简单介绍
^_^
ADXL345
:
是一款小而薄的超低功耗
3
轴加速度计,分辨率高
(13
位
)
,
测量范围达±
16g
。数字输出数据为
16
位
二进制补码格式,可通过
SPI(3
线或
4
线
)
或
I
2C
数字接口访问。
ADXL345
非
常适合移动设备应用,
它可以在倾斜检测应用中测量静态重力加速度,
< br>还可以测量运动或冲击
导致的动态加速度,
其高分辨率<
/p>
(3.9mg/LSB)
,
能够测量不到
1.0
°的倾
斜角度变化。
HMC5883L
:
是
一款带数字接口的弱磁传感器芯片,
主要应用于低成本罗
盘和磁
场检测领域,包括最先进的高分辨率
HMC118X
系列磁阻传
感器,
并附带霍尼韦尔专利的集成电路包括放大器、
自动消磁转
换器、偏差校
准、能使罗盘精度控制在
1°
到
2°
的
12
位模数转换器,简易的
I2C
总
线接口。采用霍尼韦尔各向异性磁阻(
AMR
)技术;
ITG3205<
/p>
:
输出为数字量,三个整合之
16-bi
t
的模数转换器
(ADCs)
,
提供陀螺仪同步取样,且不需额外的多任务器
(multiplexe
r)
。
一个用户
可选择的内部的数字低
通滤波器,
并可编程改变其带宽,并带有快速模
式(
400KHZ
)的
I2C
接口。此外,它还嵌入了温度传感器和精度为
2%
的内部晶振。
BMP085
:
高精度、低功耗的气压传感器,在一些先进的移动设备中都
有应用。它的测量范围<
/p>
300 - 1100hPa
,并且其绝对精度
< br>2.5hPa
,噪声干
扰仅有
0
.03hPa
。它的尺寸很小,采用
LCC
封装,通过
I2C
接口能很好
的与
移动设备中微控制器连接。
四、
模块使用指南
具体的引脚功能,模块板上都有丝印!!!
< br>下面是它与
Arduino
主控板的连接原理图
由于采用的是
I2
C
接口,他们之间的连接也很简单。。。。
< br>说到
I2C
接口,我们不得不注意了:
< br>I2C
器件地址的问题!!!
下面是该模块对应个传感器的
I2C
地址(这在程序设计中将会
用到)
ADXL345: 0x53
ITG3205
:
0x68
BMP085
:
0x77
HMC5883L:
0x1E
话不多说,
现在都跃跃欲试
了,
好像知道它会给我们带来怎样的体验!
!
< br>
五、模块演示
演示前的准备
1
、
Arduino
控制器
×
1
2
、
USB
数据线
×
1
3
、
10DOF
模块
×
1
按照上面的原理图先接好演示电路
先准备好测试代码
#include
包含
I2C
库文件;
#include
包含
HMC5883L
的库文件;<
/p>
HMC5883L compass;
//
定义类变量;
int
error = 0; //
记录电子罗盘可能出现的错误;
#define BMP085_ADDRESS 0x77 //BMP085
的
I2C
地址;
const unsigned char OSS = 0;
//
过采样设置;
int
ac1,ac2,ac3;
unsigned int ac4,ac5,ac6;
int b1,b2,mb,mc,md;
long
b5,pressure;
short temperature;
#define ACC 0x53 //ADXL345
的<
/p>
I2C
地址;
#define A_TO_READ (6)
#define GYRO 0x68 //ITG3205
的
I2C
地址(当
ADO
连接到
GND
,具体可参考原理图);
#define G_SMPLRT_DIV 0x15
#define G_DLPF_FS 0x16
#define G_INT_CFG 0x17
#define G_PWR_MGM 0x3E
#define G_TO_READ 8 //
每轴
2
字节;
intg_offx = 120;
//
偏移量校正
intg_offy
= 20;
intg_offz = 93;
inthx,
hy, hz, turetemp; //
定义
ITG320
5
输出变量;
void
initAcc() {
//
启动
ADXL345;
writeTo(ACC, 0x2D, 1<<3);
writeTo(ACC, 0x31, 0x0B);
writeTo(ACC, 0x2C, 0x09);
//
设置
ADXL345
的量程为
+-2g
;
writeTo(GYRO, G_PWR_MGM, 0x00);
//ITG3205 set
writeTo(GYRO,
G_SMPLRT_DIV, 0x07);
writeTo(GYRO,
G_DLPF_FS, 0x1E); // +/- 2000 dgrs/sec, 1KHz
writeTo(GYRO, G_INT_CFG, 0x00);
}
void initHMC()
//HMC5883L
初始化设置;
{
n(
compass =
HMC5883L();
n(
error =
le(1.3);
if(error != 0)
n(orText(error));
n(
error =
surementMode(Measurement_Continuous);
if(error != 0)
n(orText(error));
}
void bmp085Calibration()
//BMP085
初始化设置;
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2
= bmp085ReadInt(0xB8);
mb =
bmp085ReadInt(0xBA);
mc =
bmp085ReadInt(0xBC);
md =
bmp085ReadInt(0xBE);
}
void
getAccelerometerData(int * result)
{
intregAddress = 0x32;
//ADXL345
数据寄存器的首地址;
byte buff[A_TO_READ];
readFrom(ACC, regAddress, A_TO_READ,
buff); //
从
ADXL345
读取三轴加速度值;
result[0] =
(((int)buff[1]) << 8) | buff[0];
result[1] = (((int)buff[3])<< 8) |
buff[2];
result[2] = (((int)buff[5]) <<
8) | buff[4];
}
void
getGyroscopeData(int * result)
{
intregAddress = 0x1B;
//ITG3205
数据寄存器的首地址;
int temp, x, y, z;
byte
buff[G_TO_READ];
readFrom(GYRO,
regAddress, G_TO_READ, buff); //
从
ITG3205
读取陀螺仪值;
result[0] = ((buff[2] << 8) | buff[3])
+ g_offx;
result[1] = ((buff[4] << 8) |
buff[5]) + g_offy;
result[2] =
((buff[6] << 8) | buff[7]) + g_offz;
result[3] = (buff[0] << 8) | buff[1];
//
温度值
}
void setup()
{
(9600);
();