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