我爱编程AVR单片机开...

ADXL345

2018-07-23  本文已影响0人  禾灮

ADXL345B
ADXL345B模块

ADXL345 是一款小巧纤薄的低功耗三轴加速度计,可以对高达±16 g的加速度进行高分辨率(13 位)测量。数字输出数据为 16 位二进制补码格式,可通过SPI (3 线或 4 线)或者I2C数字接口访问。
ADXL345 非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。
它具有高分辨率(4 mg/LSB),能够测量约 0.25°的倾角变化。
使用 ADXL345 等数字输出加速度计时,无需进行模数转换,从而可以节省系统成本和电路板面积。
其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。


不多说了,老套路:直接用 兼容Arduino的禾灮智能机器人控制板 来个发烟测试。(板子上直接集成了ADXL345,IIC通信)

Arduino源码:

// Visual Micro is in vMicro>General>Tutorial Mode
// 
/*
    Name:       ADXL345.ino
    Created:    2018/7/23 2:03:35
    Author:     禾灮\HeGuang
*/

// Define User Types below here or use a .h file
//
#include <Wire.h> 
#include <LiquidCrystal.h>

// Define Function Prototypes that use User Types below here or use a .h file
//
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37

// Define Functions below here or use other .ino or cpp files
//
LiquidCrystal LCD1602(16,15,7,6,5,4);       //初始化LCD16021602
int ADXAddress = 0xA7>>1;  //转换为7位地址
int reading = 0;
int val = 0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;

// The setup() function runs once each time the micro-controller starts
void setup(){
    LCD1602.begin(16, 2);  //初始化LCD1602
    delay(100);
    Wire.begin();  //初始化I2C
    delay(100);
    Wire.beginTransmission(ADXAddress);
    Wire.write(Register_2D);
    Wire.write(8);
    Wire.endTransmission();
}

// Add the main program code into the continuous loop() function
void loop(){
    Wire.beginTransmission(ADXAddress);
    Wire.write(Register_X0);
    Wire.write(Register_X1);
    Wire.endTransmission();
    Wire.requestFrom(ADXAddress,2);
    if(Wire.available()<=2);
    {
        X0 = Wire.read();
        X1 = Wire.read();
        X1 = X1<<8;
        X_out = X0+X1;
    }

    Wire.beginTransmission(ADXAddress);
    Wire.write(Register_Y0);
    Wire.write(Register_Y1);
    Wire.endTransmission();
    Wire.requestFrom(ADXAddress,2);
    if(Wire.available()<=2){
        Y0 = Wire.read();
        Y1 = Wire.read();
        Y1 = Y1<<8;
        Y_out = Y0+Y1;
    }

    Wire.beginTransmission(ADXAddress);
    Wire.write(Register_Z0);
    Wire.write(Register_Z1);
    Wire.endTransmission();
    Wire.requestFrom(ADXAddress,2);
    if(Wire.available()<=2){
        Z0 = Wire.read();
        Z1 = Wire.read();
        Z1 = Z1<<8;
        Z_out = Z0+Z1;
    }

    Xg = X_out/256.00;      //把输出结果转换为重力加速度g,精确到小数点后2位。
    Yg = Y_out/256.00;
    Zg = Z_out/256.00;
    LCD1602.clear();         //清屏
    LCD1602.print("X=");        //使屏幕显示文字X=
    LCD1602.print(Xg);
    LCD1602.setCursor(8, 0);
    LCD1602.print("Y=");
    LCD1602.print(Yg);
    LCD1602.setCursor(0, 1);
    LCD1602.print("Z=");
    LCD1602.print(Zg);
    delay(300);         //延时0.3秒,刷新频率这里进行调整
}
测试结果

AVR单片机演示例程

下面,基于 禾灮智能机器人控制板,进行AVR单片机C语言程序设计:

                未完待续。。。

    感谢一直关注着禾灮成长进步的朋友们。你们的信任、支持和鼓励,鞭策着我们一路走到了今天。
    
    感谢所有的合作伙伴,我们相互促进,共同见证了彼此的成长。

    感谢所有曾经在禾灮彼此倚靠、相互鼓励、携手同心、砥砺同行的兄弟姐妹。这里承载了我们的青春与热血。

                禾灮,感谢有你。

    未来,我们将一如既往,砥砺前行。

                                        禾灮·小楊
                                       2018.07.23

上一篇下一篇

猜你喜欢

热点阅读