L3G4200D陀螺仪有点贵,好像要130左右,我买了散件回来自己焊接的,居然一次焊成功了,以前重来没焊过贴片工艺的板子,L3G4200D芯片太小了,不用镊子都拿不出,回想一下焊接过程还真的是很惊险刺激。来张焊好的作品:

其实这个板子和一个一元硬币差不多大,焊接手法还不错吧,哈。。

和ANDRIOD接线方式如下:

测试代码:

#include <Wire.h>

#define CTRL_REG1 0x20
#define CTRL_REG2 0x21
#define CTRL_REG3 0x22
#define CTRL_REG4 0x23
#define CTRL_REG5 0x24

int L3G4200D_Address = 105; //I2C address of the L3G4200D

int x;
int y;
int z;

void setup(){

Wire.begin();
  Serial.begin(9600);

Serial.println("starting up L3G4200D");
  setupL3G4200D(2000); // Configure L3G4200  - 250, 500 or 2000 deg/sec

delay(1500); //wait for the sensor to be ready 
}

void loop(){
  getGyroValues();  // This will update x, y, and z with new values

Serial.print("X:");
  Serial.print(x);

Serial.print(" Y:");
  Serial.print(y);

Serial.print(" Z:");
  Serial.println(z);

delay(100); //Just here to slow down the serial to make it more readable
}

void getGyroValues(){

byte xMSB = readRegister(L3G4200D_Address, 0x29);
  byte xLSB = readRegister(L3G4200D_Address, 0x28);
  x = ((xMSB << 8) | xLSB);

byte yMSB = readRegister(L3G4200D_Address, 0x2B);
  byte yLSB = readRegister(L3G4200D_Address, 0x2A);
  y = ((yMSB << 8) | yLSB);

byte zMSB = readRegister(L3G4200D_Address, 0x2D);
  byte zLSB = readRegister(L3G4200D_Address, 0x2C);
  z = ((zMSB << 8) | zLSB);
}

int setupL3G4200D(int scale){
  //From  Jim Lindblom of Sparkfun's code

// Enable x, y, z and turn off power down:
  writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111);

// If you'd like to adjust/use the HPF, you can edit the line below to configure CTRL_REG2:
  writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000);

// Configure CTRL_REG3 to generate data ready interrupt on INT2
  // No interrupts used on INT1, if you'd like to configure INT1
  // or INT2 otherwise, consult the datasheet:
  writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000);

// CTRL_REG4 controls the full-scale range, among other things:

if(scale == 250){
    writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000);
  }else if(scale == 500){
    writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000);
  }else{
    writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000);
  }

// CTRL_REG5 controls high-pass filtering of outputs, use it
  // if you'd like:
  writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000);
}

void writeRegister(int deviceAddress, byte address, byte val) {
    Wire.beginTransmission(deviceAddress); // start transmission to device 
    Wire.write(address);       // send register address
    Wire.write(val);         // send value to write
    Wire.endTransmission();     // end transmission
}

int readRegister(int deviceAddress, byte address){

int v;
    Wire.beginTransmission(deviceAddress);
    Wire.write(address); // register to read
    Wire.endTransmission();

Wire.requestFrom(deviceAddress, 1); // read a byte

while(!Wire.available()) {
        // waiting
    }

v = Wire.read();
    return v;

}

upload到andriod就可以通过COM口查看陀螺仪的测量结果了:

starting up L3G4200D
X:5 Y:0 Z:6
X:6 Y:1 Z:6
X:3 Y:1 Z:6
X:0 Y:2 Z:7
X:6 Y:0 Z:6
X:3 Y:0 Z:10
X:2 Y:0 Z:9
X:1 Y:0 Z:7
X:3 Y:3 Z:6
X:1 Y:0 Z:9
X:4 Y:1 Z:9
X:9 Y:1 Z:8
X:3 Y:1 Z:7
X:6 Y:1 Z:6
X:4 Y:1 Z:11
X:8 Y:0 Z:10
X:8 Y:0 Z:8
X:6 Y:1 Z:11
X:6 Y:1 Z:8
X:8 Y:1 Z:11
X:2 Y:0 Z:7
X:1 Y:1 Z:10
X:6 Y:1 Z:4
X:7 Y:1 Z:9
X:5 Y:2 Z:9
X:4 Y:9 Z:-5
X:14 Y:-5 Z:30
X:4 Y:0 Z:7
X:2 Y:0 Z:0
X:8 Y:0 Z:8
X:4 Y:0 Z:12
X:3 Y:1 Z:9
X:5 Y:2 Z:9

X:5 Y:0 Z:6

从结果看陀螺仪静止状态下数据还是有点跳动,这样就需要滤波,我准备配合加速度传感器利用卡尔曼滤波的方法来实现,目前尚在测试过程中。

下面是陀螺仪静止放在桌面上的Z轴角速度波形图:

陀螺仪运动中:

陀螺仪数据处理

陀螺仪的直接输出值是相对灵敏轴的角速率,角速率对时间积分即可得到围绕灵敏轴旋转过的角度值。由于系统采用微控制器循环采样程序获取陀螺仪角速率信息,即每隔一段很短的时间采样一次,所以采用累加的方法实现积分的功能来计算角度值: 

公式中angle n为陀螺仪采样到第n次的角度值;angle (n-1)为陀螺仪第n-1次采样时的角度值;gyro n 为陀螺仪的第n次采样得到的瞬时角速率值;dt为主运行一遍所用时间。可见,用陀螺仪输出值积分计算角度,要求处理器运算速度足够快,采样程序应尽量简练,程序循环一遍所用时间dt越小,采样频率越高,最后积分得到的角度值才能越精确。 

陀螺仪是用来测量角速度信号的,通过对角速度积分,能得到角度值。但由于温度变化、摩擦力和不稳定力矩等因素,陀螺仪会产成漂移误差。而无论多么小的常值漂移通过积分都会得到无限大的角度误差。因而,也不能单独使用陀螺仪作为本机器人倾角传感器。

转载于:https://www.cnblogs.com/relax/archive/2012/01/06/2314229.html

Ardoino L3G4200D 三轴数字陀螺仪测试相关推荐

  1. 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动

    移动设备的广泛应用增加对移动过程中各种参数的检测需求.ADXL345三轴数字加速度计可以用来检测加速度.进而测量倾斜角度等.在这一篇中,我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现. ...

  2. matlab编写转台程序,基于Matlab三轴惯导测试转台结构分析.doc

    基于Matlab三轴惯导测试转台结构分析 基于Matlab三轴惯导测试转台结构分析 摘 要:三轴惯导测试转台作为惯导测试设备,其精度直接影响惯导设备的精度,而中框回转精度在三轴精度相对较差.影响其中框 ...

  3. MEMS运动传感器:三轴数字输出陀螺仪——L3GD20

    一.框图和引脚说明   二.机械和电气规格 三.应用 四.数字框图 4.1 框图 4.2 FIFO L3GD20为三个输出通道(偏航.俯仰和滚转)分别嵌入了32个16位数据FIFO槽. 五种模式:By ...

  4. 【传感器大赏】6轴加速度计陀螺仪

    Grove-6 Axis AccelerometerAndGyroscope Grove - 6-Axis Accelerometer&Gyroscope 是一种把 Grove 接口和集成传感 ...

  5. Arduino I2C + 三轴加速度计ADXL345

    ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近.主要特性有: 工作电压:2.0 ~ 3.6V 功耗:待机功耗0.1μA:工作时与数据输出频率(ODR)有关,如ODR ...

  6. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器快速标定补偿方法

    第4期(总第173期) 2012年8月 机械工程与自动化 MECHANICAL ENGINEERING & AUTOMATION No.4Aug. 文章编号:1672-6413(2012)04 ...

  7. Arduino驱动MPU-6050三轴加速度+三轴陀螺仪模块

    目录 简介 模块引脚说明 接线 Arduino例程代码 总结 原文链接:https://www.yourcee.com/newsinfo/2926294.html 简介 点击图片购买 MPU-6050 ...

  8. 三轴陀螺仪与加速度计如何辅助Iphone定位的

    本文转自:http://ucdchina.com/snap/9797,谢谢作者! 去年的6月8日,伟大的苹果公司发布了最新一代iPhone 4G,这款新机器有很多硬件方面的升级,其中对游戏玩家来说来说 ...

  9. 解读:安卓手机上的三轴陀螺仪

    转载▼ 标签: 三轴陀螺仪 分类: 玩机小技巧    现在的手机市场上很多人都在关注硬件,各种参数满天飞,各种硬件都来过招,天天跑分,但是,好像很多人都忽视了一个东西,三轴陀螺仪. 三轴陀螺仪,是一个 ...

  10. 2022-2028年中国三轴陀螺仪行业市场深度分析及投资前景分析报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了三轴陀螺仪行业相关概述.中国三轴陀螺仪行业运行环境.分析了中国三轴陀 ...

最新文章

  1. 【Vegas原创】exp时,ORA-00932: 数据类型不一致解决方法
  2. iOS 地图定位 定位
  3. ios 视频知识补充---分解LFLiveKit
  4. Windows Hook(1)加载DLL
  5. java 数据纠错,纠错码简介
  6. 数据结构树的基本操作_数据结构二叉树的基本操作~~~~
  7. yoga11rt系统刷linux,【攻略贴】联想Yoga“一秒”变身安卓平板,Win8 Andriod双系统刷机攻略出炉!...
  8. 两个条件一个为false就运行_【上古十大神马,其中一个以虎为食,一个诛杀相柳,两个龙王之子】缅怀金庸—射雕英雄传200...
  9. sort numbers with three stacks
  10. chrome浏览器的跨域设置
  11. 我的FPA性格色彩测试结果
  12. *BZOJ2330: [SCOI2011]糖果
  13. 吴声年度演讲全文:场景品牌,新商业的此时此刻
  14. VS间接寻址级别不同
  15. IE8 证书错误,导航已阻止,解决方法(selenium)
  16. android 跳应用市场评分,Android 应用中跳转到应用市场评分示例
  17. android webview 跳转系统浏览器,webview 调用系统浏览器怎么解决
  18. wlh- beagle bone 通过uboot tftp 加载zImage 设备树 及 nfs 挂载根文件系统
  19. 中文分词_数据分析之中文分词
  20. 让人傻傻分不清的TDD、ATDD、BDD

热门文章

  1. java ADT的简单介绍
  2. java 解压文件夹_java新人,在学习解压缩文件时,解压文件后,里面的文件变文件夹...
  3. es6之模块化(module)--绝对能看懂
  4. java 区间api_Java 常用API(一)
  5. BTrace简介与使用说明
  6. 50多条mysql数据库优化建议
  7. 快排算法的非递归实现
  8. javascript给类添加的方法
  9. windbg学习---?? 和 ?
  10. SQL注入漏洞的判断