原文链接:https://www.arduino.cc/en/Tutorial/ADXL3xx
ADXL3xx加速度传感器
本教程将为你展示如何读取Analog Devices的ADXL3xx系列加速度计(例如:ADXL320,ADXL321,ADXL322,ADXL330)传感器的值,并将加速度的值传送到电脑,通过串口窗口(ArduinoIDE)或使用另一个串口软件显示数据。
本教程基于sparkfun ADXL3xx传感器,adafruit的加速度计也能够用于此例程,不过,它们的接线不同。
ADXL3xx加速度传感器输出各轴上的加速度的模拟信号电压在0-5V之间。为了读取这个数据,你需要用到 analogRead()
这个函数。
硬件要求
-
Arduino 或者 Genuino 开发板
-
ADXL3xx加速度传感器
电路
加速度传感器工作电流很小,所以它可以直接接到开发板上从数字输出引脚获得电压。因此,需要使用三个模拟输入引脚作为数字I/O引脚,分别用于VCC、GND 以及自检引脚。你将使用其他三个模拟输入引脚来读取加速度传感器的模拟输出。
图片使用Fritzing开发。 有关更多电路示例,请参见Fritzing项目页
原理图
点击图片放大
如果你使用加速度传感器模块的话,接线引脚如下:
模块引脚 | Self-Test | Z轴输出 | Y轴输出 | x轴输出 | GND | VCC |
---|---|---|---|---|---|---|
Arduino模拟输入引脚 | 0 | 1 | 2 | 3 | 4 | 5 |
如果你仅仅使用加速度传感器而非模块的话,接线引脚如下:
ADXL3xx引脚 | Self-Test | Z轴输出 | Y轴输出 | x轴输出 | GND | VCC |
---|---|---|---|---|---|---|
Arduino引脚 | None(悬空) | A1 | A2 | A3 | GND | 5V |
请注意,某些加速度传感器使用3.3V供电,如果使用5V供电可能会导致损坏。请查阅厂商的文档来确定正确的使用电压。
代码
加速度传感器的连接引脚在初始化中被定义为常量,使用A4和A5作为电源时可使它们工作在数字模式(D18,D19)。同理,可以将A0定义为D14、A1定义为D15等。
const int groundpin = 18;
const int powerpin = 19;
设置引脚19(A5)为高电平,将引脚18(A4)为低电平来为加速度传感器提供5V电压几毫安大小的电流使它正常运作。
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);
这种连接方案允许sparkfun的传感器模块直接连接到你的Arduino 或者 Genuino 开发板。不同的板可能需要连接到标准的5V或3.3V以及GND引脚。如果你直接使用了标准供电和GND引脚的话,请在void setup()
部分内注释掉对应的代码。
/* ADXL3xx Reads an Analog Devices ADXL3xx accelerometer and communicates the acceleration to the computer. The pins used are designed to be easily compatible with the breakout boards from Sparkfun, available from: http://www.sparkfun.com/commerce/categories.php?c=80 http://www.arduino.cc/en/Tutorial/ADXL3xx 读取 Analog Devices ADXL3xx 加速度传感并把读数传到计算机上。引脚的使用 ,是为了更容易兼容 Sparkfun 的传感器模块,请参阅 http://www.sparkfun.com/commerce/categories.php?c=80 The circuit: // 电路连接 analog 0: accelerometer self test // ST analog 1: z-axis // Z轴 analog 2: y-axis // Y轴 analog 3: x-axis // X轴 analog 4: ground // Gnd analog 5: vcc // Vcc created 2 Jul 2008 by David A. Mellis modified 30 Aug 2011 by Tom Igoe This example code is in the public domain. */ // these constants describe the pins. They won't change: const int groundpin = 18; //A4定义为Gnd const int powerpin = 19; //A5定义为Vcc const int xpin = A3; //传感器的X轴输出接A3 const int ypin = A2; // Y轴输出接A2 const int zpin = A1; // Z轴输出接A1 (仅在三轴模式) void setup() { // 初始化串口通信 Serial.begin(9600); //使用模拟输入(A0~A5)引脚作为正常数据引脚提供接地和电源。 //这使得可以将加速度传感器直接连接到Arduino。 //如果您使用Arduino上的正常5V和GND引脚, //则可以删除以下代码。 pinMode(groundpin, OUTPUT); pinMode(powerpin, OUTPUT); digitalWrite(groundpin, LOW); digitalWrite(powerpin, HIGH); } void loop() { //输出传感器的值 Serial.print(analogRead(xpin)); //在值之间打印制表符 Serial.print("\t"); Serial.print(analogRead(ypin)); //在值之间打印制表符 Serial.print("\t"); Serial.print(analogRead(zpin)); Serial.println(); //下次读取前延迟 delay(100); }
数据
以下是通过将ADXL322 2g加速度计的y轴摆放成与地面成不同角度而收集到的一些加速度计读数。其他轴的值应该相同,但会根据设备的灵敏度而有所不同。在水平轴(即平行于地面或0°)的情况下,加速度计读数应当在512左右,但是对于不同的加速度计(例如ADXL3052g)其它角度的值会不同的。
角 | -90 | -80 | -70 | -60 | -50 | -40 | -30 | -20 | -10 | 0 |
---|---|---|---|---|---|---|---|---|---|---|
加速度 | 662 | 660 | 654 | 642 | 628 | 610 | 589 | 563 | 537 | 510 |
角 | 0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
---|---|---|---|---|---|---|---|---|---|---|
加速度 | 510 | 485 | 455 | 433 | 408 | 390 | 374 | 363 | 357 | 355 |
参考
pinMode()
digitalWrite()
analogRead()
serial.begin()
serial.print()
Analog Input - 使用电位器去控制 LED 的闪烁
Analog In Out Serial - 读取模拟输入,映射结果值,并使用该值去使 LED 变亮或变暗
Knock - 使用压电传感器来检测敲击
Memsic2125 - 两轴加速度传感器
Ping - 使用超声波模块来检测物件
由SM最后更新,时间戳:2015/07/28
QQ 群
欢迎加入我们的大家庭 点击加入 硬创联盟 Arduino 群号 8580606
翻译:硬创联盟翻译组翻译员 – 广东小木
审核:硬创联盟翻译组技术语文审核 - 神奇海螺,Lepton-华,成都阿杰