【Arduino】168种传感器模块系列实验(48)---三轴ADXL345模块

2022-05-125.6万
AI 快速预览详细 收起
本文介绍了ADXL345三轴加速度传感器模块的实验步骤和实物照片。通过详细的实验步骤,你可以轻松掌握ADXL345传感器的使用方法。这种高精度传感器适用于测量三轴加速度,适用于机器人控制、运动监测等应用场景。
ADXL345三轴加速度传感器模块的实物照片

【Arduino】168种传感器模块系列实验(48)---三轴ADXL345模块图1

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(86)
余生逍遥
余生逍遥
老哥,我想用adxl345传感器检测Z轴上下晃动的频率高低,应该怎么写这个程序额。晃动的速度快,返回的值就大,晃动的速度慢,返回的值就小
驴友花雕
驴友花雕
作者
回复余生逍遥
早上好,你说的意思不是很理解,能否图示一下?
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]3)实验场景图[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]2)实验串口返回情况[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]程序十七:数据就绪中断在[/font] [font=宋体]Arduino 引脚 2 上触发中断(分配给 INT2)[/font][/align][align=left][font=宋体]([/font][font=Calibri]1[/font][font=宋体])[/font][font=Calibri]Arduino[/font][font=宋体]参考开源代码[/font][/align][align=left][font=宋体]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十七:数据就绪中断在 Arduino 引脚 2 上触发中断(分配给 INT2)
*/
#include
#include
#define ADXL345_I2CADDR 0x53
const int int2Pin = 2; // 中断引脚
volatile bool dataReady = false;
/* 有几种方法可以创建ADXL345对象:
ADXL345_WE myAcc = ADXL345_WE() -> uses Wire / I2C Address = 0x53
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2) -> uses the TwoWire object wire2 / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
*/
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(int2Pin, INPUT);
Serial.println("ADXL345实验程序 - 数据就绪中断");
Serial.println();
if (!myAcc.init()) {
Serial.println("ADXL345 未连接!");
}
myAcc.setDataRate(ADXL345_DATA_RATE_0_20);
myAcc.setRange(ADXL345_RANGE_2G);
attachInterrupt(digitalPinToInterrupt(int2Pin), dataReadyISR, RISING);
/* 默认中断引脚极性为高电平有效。如果您愿意,请更改 */
// myAcc.setInterruptPolarity(ADXL345_ACT_LOW);
myAcc.setInterrupt(ADXL345_DATA_READY, INT_PIN_2);
}
/* 在以下循环中,INT2 上只能出现一种中断类型。
如果您期望有更多的候选人,您可以检查如下:
uint8_t intType = myAcc.readAndClearInterrupts();
if(myAcc.checkInterrupt(intType, ADXL345_DATA_READY)){
Serial.println(“DATA READY CONFIRMED”);
}
*/
void loop() {
// 你看这里是无延迟控制输出速率
if (dataReady == true) {
xyzFloat g = myAcc.getGValues();
Serial.print("g-x = ");
Serial.print(g.x);
Serial.print(" | g-y = ");
Serial.print(g.y);
Serial.print(" | g-z = ");
Serial.println(g.z);
dataReady = false;
}
}
void dataReadyISR() {
dataReady = true;
}[/code]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]4)打开Arduino IDE——工具——串口绘图器,查看实验波形[/font][/align][align=left]实验串口绘图器返回情况[/align][align=left]
[/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]3)实验串口返回情况[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=Calibri]2[/font][font=宋体])[/font][font=Calibri]Arduino[/font][font=宋体]参考开源代码[/font][/align][align=left][font=宋体]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十六:ADXL345自由落体中断(激活并分配给 INT2)
*/
#include
#include
#define ADXL345_I2CADDR 0x53
const int int2Pin = 2;
volatile bool freeFall = false;
/* 有几种方法可以创建您的 ADXL345 对象:
ADXL345_WE myAcc = ADXL345_WE() -> uses Wire / I2C Address = 0x53
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2) -> uses the TwoWire object wire2 / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
*/
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(int2Pin, INPUT);
Serial.println("ADXL345_Sketch - ADXL345实验程序 - 自由落体中断");
Serial.println();
if (!myAcc.init()) {
Serial.println("ADXL345 未连接!");
}
/* 插入测试的数据并取消注释以获得更精确的结果 */
myAcc.setCorrFactors(-295.0, 255.0, -283.0, 264.0, -262.0, 265.0);
myAcc.setDataRate(ADXL345_DATA_RATE_25);
myAcc.setRange(ADXL345_RANGE_2G);
/* setFreeFallThresholds函数的参数为​​:
-g 阈值——不要选择太低的参数。 0.3 - 0.6 克就可以了。
- 以毫秒为单位的时间阈值,最大值为 1275。推荐为 100 - 350;
如果时间阈值太低,则可以将振动检测为自由落体。
*/
myAcc.setFreeFallThresholds(0.4, 100);
/* 你可以选择以下中断:
Variable name: Triggered, if:
ADXL345_OVERRUN - new data replaces unread data
ADXL345_WATERMARK - the number of samples in FIFO equals the number defined in FIFO_CTL
ADXL345_FREEFALL - acceleration values of all axes are below the threshold defined in THRESH_FF
ADXL345_INACTIVITY - acc. value of all included axes are < THRESH_INACT for period > TIME_INACT
ADXL345_ACTIVITY - acc. value of included axes are > THRESH_ACT
ADXL345_DOUBLE_TAP - double tap detected on one incl. axis and various defined conditions are met
ADXL345_SINGLE_TAP - single tap detected on one incl. axis and various defined conditions are met
ADXL345_DATA_READY - new data available
Assign the interrupts to INT1 (INT_PIN_1) or INT2 (INT_PIN_2). Data ready, watermark and overrun are
always enabled. You can only change the assignment of these which is INT1 by default.
You can delete interrupts with deleteInterrupt(type);
*/
myAcc.setInterrupt(ADXL345_FREEFALL, INT_PIN_2);
attachInterrupt(digitalPinToInterrupt(int2Pin), freeFallISR, RISING);
freeFall = false;
}
void loop() {
xyzFloat raw = myAcc.getRawValues();
xyzFloat g = myAcc.getGValues();
Serial.print("Raw-x = ");
Serial.print(raw.x);
Serial.print(" | Raw-y = ");
Serial.print(raw.y);
Serial.print(" | Raw-z = ");
Serial.println(raw.z);
Serial.print("g-x = ");
Serial.print(g.x);
Serial.print(" | g-y = ");
Serial.print(g.y);
Serial.print(" | g-z = ");
Serial.println(g.z);
Serial.println();
if (freeFall == true) {
Serial.println("Aaaaaaaaah!!!!! - 我是 faaaaallllling!");
delay(1000);
freeFall = false;
/* 通过读取中断寄存器清除中断 */
myAcc.readAndClearInterrupts();
/* 如果您还期望其他中断,您可以检查类型。对于此评论的上一行,
并替换为以下四行:*/
//byte intType = myAcc.readAndClearInterrupts();
//if(myAcc.checkInterrupt(intType, ADXL345_FREEFALL)){
// Serial.println("FREEFALL confirmed");
//}
}
delay(500);
}
void freeFallISR() {
freeFall = true;
}[/code]
驴友花雕
驴友花雕
作者
[align=left]16、程序十六:ADXL345自由落体中断(激活并分配给 INT2)[/align][align=left] [/align][align=left][font=宋体]([/font][font=宋体]1)[/font]ADXL345的中断特性[/align][align=left] [/align][align=left]有关中断功能的一般信息[/align][align=left]ADXL345区分了八个中断:[/align][align=left][font=宋体]([/font][font=宋体]a)[/font]溢出:当未读数据被覆盖时触发,即当数据速率大于数据检索的频率时。[/align][align=left][font=宋体]水印:如果[/font]FIFO缓冲器中的测量值数量与FIFO控制寄存器中定义的值相对应(稍后会更清晰)。[/align][align=left][font=宋体]([/font][font=宋体]b)[/font]自由落体:当所有轴上的加速度值在一段时间内低于某个值时,就会触发该值。[/align][align=left][font=宋体]([/font][font=宋体]c)[/font]不活动:在指定时间内超过指定轴上的加速度限制时。[/align][align=left][font=宋体]([/font][font=宋体]d)[/font]活动:当指定轴上的加速度超过极限时。[/align][align=left][font=宋体]([/font][font=宋体]e)[/font]单点:超过特定限制的最大持续时间的加速度。[/align][align=left][font=宋体]([/font][font=宋体]f)[/font]双击:两个峰值,两者都满足单点条件,并且它们之间也有一定的时间间隔。[/align][align=left][font=宋体]([/font][font=宋体]g)[/font]数据就绪:存在未读数据。[/align][align=left][font=宋体]([/font][font=宋体]h)[/font]使用函数:[font=宋体]激活中断。第一个参数是中断类型,第二个参数是确定中断输出的引脚。[/font]setInterrupt(type, pin1/pin2)[/align][align=left] [/align][align=left][font=宋体]请务必注意,[/font][font=宋体]“溢出”、“水印”和“数据就绪”的中断始终处于启用状态。因此,您无法禁用它们,只需更改输出引脚即可。默认值为 INT1。您必须先激活所有其他中断。您可以使用 停用它们。deleteInterrupt(type)[/font][/align][align=left] [/align][align=left][font=宋体]在中断寄存器中,在中断的情况下,存储中断类型。读取此寄存器将删除中断,以便可以触发新的中断。其函数为[/font] [font=宋体]。它将中断类型作为字节返回。如何[/font][font=宋体]“翻译”这可以在库文件ADXL345_WE.h中找到。或者,您可以检查特定类型。readAndClearInterrupts()checkInterrupt(source, type)[/font][/align][align=left] [/align][align=left][font=宋体]还有另一个通用功能,即[/font].这将设置中断引脚是低电平有效还是高电平有效(默认)。setInterruptPolarity(polarity)[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]3)实验串口返回情况[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]2)打开Arduino IDE——工具——串口绘图器,查看实验波形[/font][/align][align=left]实验串口绘图器返回情况[/align][align=left]
[/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font="][font=宋体]程序十五:将[/font][font=宋体]ADXL345置于休眠状态,并唤醒它[/font][/font][/align][align=left][font="][font=宋体]([/font][font=Calibri]1[/font][font=宋体])[/font][font=Calibri]Arduino[/font][font=宋体]参考开源代码[/font][/font][/align][align=left][font="]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十五:将ADXL345置于休眠状态,并唤醒它
*/
#include
#include
#define ADXL345_I2CADDR 0x53
/* 有几种方法可以创建您的 ADXL345 对象:
* ADXL345_WE myAcc = ADXL345_WE() -> uses Wire / I2C Address = 0x53
* ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
* ADXL345_WE myAcc = ADXL345_WE(&wire2) -> uses the TwoWire object wire2 / ADXL345_I2CADDR
* ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
*/
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("ADXL345实验程序 - 睡眠");
Serial.println();
if(!myAcc.init()){
Serial.println("ADXL345 未连接!");
}
myAcc.setDataRate(ADXL345_DATA_RATE_50);
myAcc.setRange(ADXL345_RANGE_2G);
}
void loop(){
myAcc.setSleep(true, ADXL345_WUP_FQ_1);
Serial.println("在睡眠模式下测量:");
doMeasurements();
myAcc.setSleep(false);
Serial.println("正常模式下测量:");
doMeasurements();
}
void doMeasurements(){
for(int i=0; i<10; i++){
xyzFloat g = myAcc.getGValues();
Serial.print("g-x = ");
Serial.print(g.x);
Serial.print(" | g-y = ");
Serial.print(g.y);
Serial.print(" | g-z = ");
Serial.println(g.z);
delay(60);
}
}[/code]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]3)打开Arduino IDE——工具——串口绘图器,查看实验波形[/font][/align][align=left]实验串口绘图器返回情况[/align][align=left]
[/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=Tahoma, Helvetica, SimSun, sans-serif](2)实验串口返回情况[/font][/align][align=left][font=Tahoma, Helvetica, SimSun, sans-serif]
[/font][/align][align=left][font=Tahoma, Helvetica, SimSun, sans-serif]

[/font][/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]程序十四:测量[/font] [font=宋体]ADXL345 的俯仰角和滚动角与校正角度法的对比[/font][/align][align=left][font=宋体][font=宋体]([/font][font=Calibri]1[/font][font=宋体])[/font][font=Calibri]Arduino[/font][font=宋体]参考开源代码[/font][/font][/align][align=left][font=宋体][font=宋体]
[/font]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十四:测量 ADXL345 的俯仰角和滚动角与校正角度法的对比
*/
#include
#include
#define ADXL345_I2CADDR 0x53 // 如果 SDO = HIGH,则为 0x1D
/* 有几种方法可以创建您的 ADXL345 对象:
ADXL345_WE myAcc = ADXL345_WE() -> uses Wire / I2C Address = 0x53
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2) -> uses the TwoWire object wire2 / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
*/
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("ADXL345 程序 - 俯仰和横滚与校正角度");
Serial.println();
if (!myAcc.init()) {
Serial.println("ADXL345 未连接!");
}
/* 添加您使用 ADXL345_calibration.ino 找到的最小和最大原始值。
顺序是:setCorrFactors(min x, max x, min y, max y, min z, max z)。
setCorrFactors 校准斜率并假设零点
是(最小+最大)/2。您必须将 setCorrFactors 函数添加到所有草图
您想在其中使用它。
*/
myAcc.setCorrFactors(-295.0, 255.0, -283.0, 264.0, -262.0, 265.0);
/* 在下一步中,角度的偏移被校正以获得相当精确的校正
角度 x 和 y 高达 ~60°。额外的 offsetCorrection 仅用于校正
角度测量,不适用于俯仰和滚动。该过程只是确保从 0° 开始。
*/
Serial.println("将您的 ADXL345 平放,不要移动它");
delay(2000);
myAcc.measureAngleOffsets();
Serial.println("....完成");
/* 选择数据速率 Hz
ADXL345_DATA_RATE_3200 3200
ADXL345_DATA_RATE_1600 1600
ADXL345_DATA_RATE_800 800
ADXL345_DATA_RATE_400 400
ADXL345_DATA_RATE_200 200
ADXL345_DATA_RATE_100 100
ADXL345_DATA_RATE_50 50
ADXL345_DATA_RATE_25 25
ADXL345_DATA_RATE_12_5 12.5
ADXL345_DATA_RATE_6_25 6.25
ADXL345_DATA_RATE_3_13 3.13
ADXL345_DATA_RATE_1_56 1.56
ADXL345_DATA_RATE_0_78 0.78
ADXL345_DATA_RATE_0_39 0.39
ADXL345_DATA_RATE_0_20 0.20
ADXL345_DATA_RATE_0_10 0.10
*/
myAcc.setDataRate(ADXL345_DATA_RATE_50);
Serial.print("数据速率:");
Serial.print(myAcc.getDataRateAsString());
/* 选择测量范围
ADXL345_RANGE_16G 16g
ADXL345_RANGE_8G 8g
ADXL345_RANGE_4G 4g
ADXL345_RANGE_2G 2g
*/
myAcc.setRange(ADXL345_RANGE_2G);
Serial.print("/g 范围:");
Serial.println(myAcc.getRangeAsString());
Serial.println();
}
void loop() {
//xyzFloat g = myAcc.getGValues();
xyzFloat corrAngles = myAcc.getCorrAngles();
/* 修正后的角度使用修正后的原始数据和额外的角度
抵消。该方法为 x/y 提供了相当精确的值
角度向上 60°。
*/
Serial.print("角度 x = ");
Serial.print(corrAngles.x);
Serial.print(" | 角度 y = ");
Serial.print(corrAngles.y);
Serial.print(" | 角度 z = ");
Serial.println(corrAngles.z);
/* 俯仰和横滚使用更正的坡度,但没有额外的偏移。
所有轴都被考虑用于计算。
*/
float pitch = myAcc.getPitch();
float roll = myAcc.getRoll();
Serial.print("俯仰 ="); //将x轴的倾斜角度称为“俯仰”
Serial.print(pitch);
Serial.print(" | 滚动 = ");//将y轴的倾斜角度称为“滚动”
Serial.println(roll);
Serial.println();
delay(1000);
}[/code]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]2)实验串口返回情况[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]
[align=left][font=宋体]([/font][font=宋体]3)实验说明[/font][/align][align=left][font=宋体]可以看到,[/font]z 轴的校正 g 值现在看起来要好得多。由于剩余的偏移,角度具有一定的偏差。另一方面,校正的角度(“校正角cAngles”)波动接近于零。[/align][align=left] [/align]
驴友花雕
驴友花雕
作者
[align=left]程序十三:通过输入程序十二中获得的值来应用校准(导入实测的修正值)[/align][align=left][font=宋体][font=宋体]([/font][font=Calibri]1[/font][font=宋体])[/font][font=Calibri]Arduino[/font][font=宋体]参考开源代码[/font][/font][/align][align=left][font=宋体][font=宋体]
[/font]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十三:通过输入程序十二中获得的值来应用校准(导入实测的修正值)
*/
#include
#include
#define ADXL345_I2CADDR 0x53
/*有几种方法可以创建ADXL345对象:
ADXL345_WE myAcc = ADXL345_WE() -> uses Wire / I2C Address = 0x53
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2) -> uses the TwoWire object wire2 / ADXL345_I2CADDR
ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
*/
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("ADXL345准备就绪!");
Serial.println();
if (!myAcc.init()) {
Serial.println("ADXL345 未连接!");
}
myAcc.setCorrFactors(-295.0, 255.0, -283.0, 264.0, -262.0, 265.0);
/* 在下一步中,角度偏移被校正,以获得相当精确的校正
x 和 y 的角度可达 ~60°。附加偏移校正仅用于
校正角度测量。该过程仅确保从0°开始。
*/
Serial.println("将ADXL345平放,不要移动它");
delay(2000);
myAcc.measureAngleOffsets();
Serial.println("....完成");
myAcc.setDataRate(ADXL345_DATA_RATE_25);
myAcc.setRange(ADXL345_RANGE_2G);
}
void loop() {
xyzFloat raw = myAcc.getRawValues();
xyzFloat g = myAcc.getGValues();
xyzFloat angle = myAcc.getAngles();
xyzFloat corrAngles = myAcc.getCorrAngles();
/* 仍然是未更正的原始值!!*/
Serial.print("Raw-x = ");
Serial.print(raw.x);
Serial.print(" | Raw-y = ");
Serial.print(raw.y);
Serial.print(" | Raw-z = ");
Serial.println(raw.z);
/* g 值使用校正后的原始数据 */
Serial.print("g-x = ");
Serial.print(g.x);
Serial.print(" | g-y = ");
Serial.print(g.y);
Serial.print(" | g-z = ");
Serial.println(g.z);
/* 角度使用校正后的 Raw。角度由以下公式简单计算
角度 = 弧度(g 值) */
Serial.print("角度 x = ");
Serial.print(angle.x);
Serial.print(" | 角度 y = ");
Serial.print(angle.y);
Serial.print(" | 角度 z = ");
Serial.println(angle.z);
/* 校正后的角度使用校正的原始数据和额外的角度
偏移以确保它们从 0° 开始
*/
Serial.print("校正角 x = ");
Serial.print(corrAngles.x);
Serial.print(" | 校正角 y = ");
Serial.print(corrAngles.y);
Serial.print(" | 校正角 z = ");
Serial.println(corrAngles.z);
Serial.print("模块的方向: ");
Serial.println(myAcc.getOrientationAsString());
Serial.println();
delay(1000);
}[/code]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]4)实验说明:见上图红点处,这里确定的六个值是:[/font][/align][align=left][font=宋体]
[/font][/align][align=left]X(最小值)=-295[/align][align=left]X(最大值)=255[/align][align=left]Y(最小值)=-283[/align][align=left]Y(最大值)=264[/align][align=left]Z(最小值)=-262[/align][align=left]Z(最大值)=265[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]([/font][font=宋体]3)实验串口返回情况[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]
驴友花雕
驴友花雕
作者
[align=left][font=宋体][font=宋体]([/font][font=Calibri]2[/font][font=宋体])[/font][font=Calibri]Arduino[/font][font=宋体]参考开源代码[/font][/font][/align][align=left][font=宋体][font=宋体]
[/font]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十二:校准ADXL345的指南
*/
#include
#include
#define ADXL345_I2CADDR 0x53
/* 有几种方法可以创建ADXL345对象:
* ADXL345_WE myAcc = ADXL345_WE() -> uses Wire / I2C Address = 0x53
* ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
* ADXL345_WE myAcc = ADXL345_WE(&wire2) -> uses the TwoWire object wire2 / ADXL345_I2CADDR
* ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
*/
ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("ADXL345校准程序准备就绪");
Serial.println();
if(!myAcc.init()){
Serial.println("ADXL345 未连接!");
}
Serial.println("校准程序:");
Serial.println(" - 保持全分辨率");
Serial.println(" - 电源电压有影响(至少对于模块)");
Serial.println(" ->选择您将在项目中使用的相同电压!");
Serial.println(" - 慢慢地转动你的 ADXL (!)找到最小和最大原始 x,y 和 z 值");
Serial.println(" - 一个或两个单位的偏差并不重要");
Serial.println(" - 校准改变 g 与原始的斜率,并假设零为 (最小值 + 最大值)/2 ");
Serial.println(" - 记下六个值 ");
Serial.println(" - 您可以尝试实验中得到的校准值");
Serial.println(" - 准备好了吗?然后键入任何密钥并发送。 ");
while(!Serial.available());
Serial.read();
Serial.println();
Serial.println();
Serial.println();
}
void loop() {
xyzFloat raw = myAcc.getRawValues();
Serial.print("Raw-x = ");
Serial.print(raw.x);
Serial.print(" | Raw-y = ");
Serial.print(raw.y);
Serial.print(" | Raw-z = ");
Serial.println(raw.z);
delay(1000);
}[/code]
驴友花雕
驴友花雕
作者
[align=left][font=宋体]程序十二:校准[/font][font=宋体]ADXL345的指南[/font][/align][align=left][font=宋体]([/font][font=宋体]1)实验接线示意图[/font][/align][align=left][font=宋体]
[/font][/align][align=left]

[/align]