在本篇Arduino使用加速度计的文章中,我们将使用物美价廉的ADXL345加速度计。
跟随我们的脚步,您将学会如何将ADXL345加速度计连接到Arduino Uno,利用Adafruit的ADXL345传感器库读取数据。
ADXL345是一款经济型的低功耗三轴MEMS加速度计,支持I2C和SPI串行接口。
MEMS是微型电子机械系统的缩写,这表明ADXL345包含一个微观的机械元件,用于确定加速度。
也可以在Raspberry Pi上使用这个ADXL345,但设置过程是相当不同,所以如果决定使用Pi,请务必查看教程。
设备清单
需要有以下设备来完成这个Arduino加速度计教程。
必备设备
- Arduino Uno
- 面包板
- 面包板线
- ADXL345加速度计
连接Arduino加速度计电路
ADXL345加速度计的电路相当简单,不需要任何复杂的部件和接线,可以直接连接到Arduino上。
下面的教程将包含所有步骤。
- 将ADXl345的GND引脚连接到Arduino的GND引脚。
- 将ADXL345的VCC引脚连接到Arduino的3v3引脚。
- 将 ADXL345 的 SCL 引脚与 Arduino 上的 SCL 引脚连接。
- 将ADXL345的SDA引脚连接到Arduino上的SCL引脚。
下面的电路图对连接Arduino和ADXL345可能更直观。
如果你使用的是Adafruit ADXL345板,你也可以使用5V连接,因为该板上有电路将电压降到3V。
导入控制库
使用库,编写读取加速度计数据的代码就非常简单了。
在这个Arduino项目中,我们利用”Adafruit Unified Sensor”库和”Adafruit ADXL345″库。
- 首先,在Arduino IDE中打开库菜单,进入Sketch (1.) -> Include Library (2.) -> Manage Libraries (3.)
- 在这个窗口中搜索Adafruit ADXL345(1.),找到 “Adafruit ADXL345 by Adafruit”(2.),应该是唯一的搜索结果。
- 现在,在同一个窗口中,搜索 “Adafruit Unified Sensor”(1.),找到库(2.)。
找到后,按 “Install”(3.)按钮进行安装。
编写加速度计代码
- 在Arduino IDE中输入以下代码
我们将对Arduino加速度计代码的每个部分进行解释,让你了解这一切是如何工作的,以及每个重要代码的作用。
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
首先包括所有的库头文件,这些文件将是我们程序的大部分功能所依赖的。
在ADXL345库中使用了 “Wire “库,这样Arduino可以使用i2C串行协议与加速度计进行通信。
需要使用 “Adafruit_Sensor “库,因为它是我们使用的ADXL345库的基础。它为ADXL345库处理一些不同的事情,并作为Adafruit的大部分传感器库的基础。
最后我们导入的库是 “Adafruit_ADXL345 “库。这个库负责处理与Arduino的加速度计的交互,我们利用这个库来读取传感器的加速度数据。
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified();
这一行将Adafruit ADXL345库实例化为 “accel “变量。
accel “变量将有一个自定义对象,允许访问许多帮助函数,用于与ADXL345加速度计交互。
void setup(void)
{
Serial.begin(9600);
if(!accel.begin())
{
Serial.println("No ADXL345 sensor detected.");
while(1);
}
}
当Arduino开机时,这个”setup()“函数会自动运行。
我们首先运行”Serial.begin()“函数,这样Arduino就可以通过串行连接发送消息。在这个函数中,我们输入了9600的波特率。
之后,我们利用 “accel “对象的 “begin()“函数来启动它与ADXL345加速度计的连接。
接下来,我们检查这个函数返回的结果。如果返回的结果为 “False”,就向串行监视器打印出一条消息,提醒用户我们访问ADXL345加速度计失败。
如果确实发生了错误,我们使用 “while(1) “运行一个无限循环,这样可以确保我们永远不会进入主循环。要退出这个循环,需要重新启动Arduino。
void loop(void)
{
sensors_event_t event;
accel.getEvent(&event);
Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" ");
Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" ");
Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
}
这个 “loop() “函数在 “setup() “函数执行完毕后自动运行。
在这个函数中,我们创建了一个名为”event”的变量,使用”sensor_event_t”结构。
接下来,我们使用 “accel”对象的”getEvent()“函数,传入我们之前定义的事件变量。
这个 “getEvent()“函数将从加速度计中获取数据,并将相关数据填入我们传入的结构(本例中是 “event”变量)。
然后我们打印出存储在 “事件 “变量中的X、Y和Z加速度值。所有这三个值都可以通过”event.acceleration “向量获得。
最后,我们通过使用 “delay()“函数来延迟循环运行500ms。
- 最终的代码应该会像下面所示的那样。
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified();
void setup(void)
{
Serial.begin(9600);
if(!accel.begin())
{
Serial.println("No ADXL345 sensor detected.");
while(1);
}
}
void loop(void)
{
sensors_event_t event;
accel.getEvent(&event);
Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" ");
Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" ");
Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
}
测试Arduino ADXL345加速度计
- 将代码上传到Arduino中,请点击 “Verify”按钮(1.),然后点击 “Upload”按钮(2)。
如果你遇到问题,请检查代码以确保一切正常。
另外,确认你的Arduino是否连接好了,并且在Tools -> Port下选择了它。
- Arduino加速度计现在应该已经启动并运行,并通过串行监控器展示数据。
现在是加载串行监控器的最佳时机,这样你就可以看到ADXL345加速度计正在进行的测量。
您可以通过点击 “Tools”(1.),然后点击 “Serial Monitor””(2.),打开Arduino串行监控器软件。
希望在本教程结束时,你的Arduino加速器能正常工作,数据也是你所期望的样子。
欢迎转载,请留下出处链接:Labno3 » 如何让Arduino使用ADXL345加速度计传感器