L3G4200D是意法(ST)半导体公司推出的一款MEMS运动传感器:三轴数字输出陀螺仪。可选-250~250、-500~500、-2000-2000dps

开发环境:
系统:XP
单板:Arduino Leonardo
平台:arduino-1.0.1

目标:读三轴陀螺仪的原始数据,并通过串口显示

一、硬件介绍

三轴陀螺仪L3G4200D模块的原理图如下:

这里只用到SCL、SDA、VCC_3.3V、GND分别连接到Arduino的对应接口上。Arduino Leonardo上直接标有SDA、SCL连上即可,其它Arduino根据自己的板子连接。

二、编写测试代码

现在的arduino版本高,在网上找的例程都编译通不过,换了个低版本才编译通过。可以参考这个上面的代码 https://github.com/pololu/L3G4200D/tree/66f1448d7f6767e12d0fe0c5c50d4e037aedc27c/L3G4200D 找到这两个文件L3G4200D.cpp   L3G4200D.h,但文件好像不能直接下,代码都贴在网页上,直接copy下来。然后还要在arduino-1.0.1-windows\arduino-1.0.1\libraries下新建L3G4200D目录,将L3G4200D.cpp   L3G4200D.h拷到刚建的L3G4200D,就可以在Android中使用L3G4200D类。

文件L3G4200D.cpp

#include <L3G4200D.h>
#include <Wire.h>
#include <math.h>// Defines // The Arduino two-wire interface uses a 7-bit number for the address,
// and sets the last bit correctly based on reads and writes
#define GYR_ADDRESS (0xD2 >> 1)// Public Methods //// Turns on the L3G4200D's gyro and places it in normal mode.
void L3G4200D::enableDefault(void)
{// 0x0F = 0b00001111// Normal power mode, all axes enabledwriteReg(L3G4200D_CTRL_REG1, 0x0F);
}// Writes a gyro register
void L3G4200D::writeReg(byte reg, byte value)
{Wire.beginTransmission(GYR_ADDRESS);Wire.write(reg);Wire.write(value);Wire.endTransmission();
}// Reads a gyro register
byte L3G4200D::readReg(byte reg)
{byte value;Wire.beginTransmission(GYR_ADDRESS);Wire.write(reg);Wire.endTransmission();Wire.requestFrom(GYR_ADDRESS, 1);value = Wire.read();Wire.endTransmission();return value;
}// Reads the 3 gyro channels and stores them in vector g
void L3G4200D::read()
{Wire.beginTransmission(GYR_ADDRESS);// assert the MSB of the address to get the gyro // to do slave-transmit subaddress updating.Wire.write(L3G4200D_OUT_X_L | (1 << 7)); Wire.endTransmission();Wire.requestFrom(GYR_ADDRESS, 6);while (Wire.available() < 6);uint8_t xla = Wire.read();uint8_t xha = Wire.read();uint8_t yla = Wire.read();uint8_t yha = Wire.read();uint8_t zla = Wire.read();uint8_t zha = Wire.read();g.x = xha << 8 | xla;g.y = yha << 8 | yla;g.z = zha << 8 | zla;
}void L3G4200D::vector_cross(const vector *a,const vector *b, vector *out)
{out->x = a->y*b->z - a->z*b->y;out->y = a->z*b->x - a->x*b->z;out->z = a->x*b->y - a->y*b->x;
}float L3G4200D::vector_dot(const vector *a,const vector *b)
{return a->x*b->x+a->y*b->y+a->z*b->z;
}void L3G4200D::vector_normalize(vector *a)
{float mag = sqrt(vector_dot(a,a));a->x /= mag;a->y /= mag;a->z /= mag;
}

文件L3G4200D.h:

#ifndef L3G4200D_h
#define L3G4200D_h#include <Arduino.h> // for byte data type// register addresses#define L3G4200D_WHO_AM_I      0x0F#define L3G4200D_CTRL_REG1     0x20
#define L3G4200D_CTRL_REG2     0x21
#define L3G4200D_CTRL_REG3     0x22
#define L3G4200D_CTRL_REG4     0x23
#define L3G4200D_CTRL_REG5     0x24
#define L3G4200D_REFERENCE     0x25
#define L3G4200D_OUT_TEMP      0x26
#define L3G4200D_STATUS_REG    0x27#define L3G4200D_OUT_X_L       0x28
#define L3G4200D_OUT_X_H       0x29
#define L3G4200D_OUT_Y_L       0x2A
#define L3G4200D_OUT_Y_H       0x2B
#define L3G4200D_OUT_Z_L       0x2C
#define L3G4200D_OUT_Z_H       0x2D#define L3G4200D_FIFO_CTRL_REG 0x2E
#define L3G4200D_FIFO_SRC_REG  0x2F#define L3G4200D_INT1_CFG      0x30
#define L3G4200D_INT1_SRC      0x31
#define L3G4200D_INT1_THS_XH   0x32
#define L3G4200D_INT1_THS_XL   0x33
#define L3G4200D_INT1_THS_YH   0x34
#define L3G4200D_INT1_THS_YL   0x35
#define L3G4200D_INT1_THS_ZH   0x36
#define L3G4200D_INT1_THS_ZL   0x37
#define L3G4200D_INT1_DURATION 0x38class L3G4200D
{public:typedef struct vector{float x, y, z;} vector;vector g; // gyro angular velocity readingsvoid enableDefault(void);void writeReg(byte reg, byte value);byte readReg(byte reg);void read(void);// vector functionsstatic void vector_cross(const vector *a, const vector *b, vector *out);static float vector_dot(const vector *a,const vector *b);static void vector_normalize(vector *a);
};#endif

文件L3G4200D.ino

#include <Wire.h>
#include <L3G4200D.h>L3G4200D gyro;void setup() {Serial.begin(9600);Wire.begin();gyro.enableDefault();
}void loop() {gyro.read();Serial.print("G ");Serial.print("X: ");Serial.print((int)gyro.g.x);Serial.print(" Y: ");Serial.print((int)gyro.g.y);Serial.print(" Z: ");Serial.println((int)gyro.g.z);delay(100);
}

三、编译测试

Arduino还是很方便操作的,选择好单板、参考,直接点上面的“对勾”就开始编译,编译没问题,点“->”箭头状的,开始上传程序,直至上传进度条完成。


接着打开Tools/Serial Monitor 显示如下:

这是水平放置的结果,倾斜模块会看到值变化。

Arduino笔记五三轴陀螺仪L3G4200D相关推荐

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

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

  2. Arduino 使用 MPU6050三轴加速传感器

    相关资料链接 链接:https://pan.baidu.com/s/1eE0rkaSJsKJMU_RUorS5OA 提取码:3ujh 1.1 介绍: 本模块是一款高性能三轴加速度+三轴陀螺仪的六轴传感 ...

  3. 三轴加速度计、三轴陀螺仪、三轴磁力计

    1.今天要做的事情 列出:可能影响因素,对影响因素做实验.如何设置对比实验? 如何设置对比实验? 三轴加速度计 1.加速度计的原理 三轴加速度:输出的速度是去掉重力后的整体加速度,因此,三轴加速度计可 ...

  4. 三轴陀螺仪MPU3050驱动解析

    MPU3050是invensense公司的三轴陀螺仪芯片,三轴陀螺仪最大的作用就是"测量角速度,以判别物体的运动状态,所以也称为运动传感器. 下图是MPU3050的系统框图,芯片有1个中断引 ...

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

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

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

    三轴陀螺仪与加速度计如何辅助 iPhone 定位的 在所有之前解释一下陀螺仪 根据Wiki的定义:「陀螺仪是用于测量角度或维持方向的设备,基于角动量守恒原理.」 这句话的要点是测量角度或维持方向,这是 ...

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

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

  8. matlab三轴陀螺标定,一种mems三轴陀螺仪误差标定方法

    一种mems三轴陀螺仪误差标定方法 [专利摘要]本发明涉及一种MEMS三轴陀螺仪的误差标定方法,属于试验[技术领域].本发明方法通过建立MEMS三轴陀螺仪的误差校正模型,采用双轴速率转台对MEMS陀螺 ...

  9. 无人机中的IMU单元(MEMS 三轴加速计、三轴陀螺仪、三轴磁力计)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨autotian@CSDN 编辑丨古月居 三轴加速度计 (1)测量比力 三轴加速度计是一种惯性传 ...

  10. 实践 基于 Arduino I2C读取 MPU6050 三轴陀螺仪数据

    一.Arduino与MPU-6050的接线 六轴传感器模块MPU6050连线在Arduino UNO板子上,SDA接口对应的是A4引脚,SCL对应的是A5引脚.MPU6050需要5V的电源,可由UNO ...

最新文章

  1. 北京智源人工智能研究院2020年博士后招收简章
  2. crnn自编码网络(类似递归)
  3. NDK交叉编译及so库导入Android项目
  4. 南京林业大学计算机专升本,2018江苏专转本学校之:南京林业大学
  5. 5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,
  6. 映客上云 助力《疫战到底》系列课程吸引数千万用户观看
  7. java atlas mysql_使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置
  8. c语言 年月日比较大小
  9. 移动网络设备睁开均盘绕Linux睁开
  10. javaee互联网轻量级框架整合开发_企业开发:Spring框架的简易、高效切入篇
  11. pku 1149 PIGS(最大流)
  12. plc模拟器软件_举例说明 你的PLC和触摸屏为什么总是通讯不上?
  13. Spring Security:自动登录(降低安全风险)
  14. 【附源码】Python计算机毕业设计汽车4S店管理系统
  15. 【协议分析】PC QQ协议聊天内容破解
  16. 关于解决windows10和ubuntu18.04.2 双系统时win10时间不对的问题
  17. 移动硬盘在Mac上无法拷贝或删除文件的解决办法
  18. 外网如何连接学校服务器
  19. 2019-02-13 扇贝自动打卡贼简单版
  20. 基于Problem Solving with Algorithms and Data Structures using Python的学习记录(4)——Recursion

热门文章

  1. 大数据概述(尚硅谷)
  2. 行政界线类型代码_行政区划代码的代码表
  3. sonar下载安装配置教程
  4. Scratch3.0安装教程
  5. exe反编译为py文件
  6. 国内可外用免费语料库下载资源汇总, 语言翻译必备:国内外23个语料库推荐
  7. 基于TensorFlow的深度学习 揭示数据隐含的奥秘3 卷积神经网络
  8. 如何构建自己的计算机,第四部分:安装Windows和加载驱动程序
  9. RDP报表工具2.4.2版本
  10. Json时间格式转换