📜  Arduino加速度计

📅  最后修改于: 2020-12-27 10:00:00             🧑  作者: Mango

Arduino加速度计

在本主题中,我们将讨论一个基于加速度计的项目。该值将从加速度计系列中读取,并在Arduino IDE的串行监视器中接收。这意味着将通过串行端口读取和接收数据。

我们将使用三轴加速度计,该加速度计可将每个轴的加速度作为单独引脚的模拟电压。

我们将使用ADXL3xx加速度计系列。例如,ADXL320,ADXL322,ADXL321,ADXL335等。

在该项目中,我们将使用ADXL335加速度计。

什么是加速度计?

加速度计是一种能够检测加速度形式的运动变化的设备。它还可以测量结构的振动。

加速度定义为速度或速度随时间的变化。

运动传感器位于加速度计内部。

加速度计如何工作?

加速度(运动变化)或振动会产生使压电材料受力的力。存在于其中的微观晶体结构从应力中产生电压。加速度计解释该电压。该电压还用于确定方向和速度。

加速度计的用途

下面列出了加速度计的用途:

  • 它用于检测由于存在运动传感器而引起的地震。
  • 它存在于笔记本电脑中,可以保护硬盘驱动器免受损坏。
  • 它用于创建自定义项目。
  • 它可以确定对象的运动(上坡等)。

ADXL335加速度计

ADXL335的结构如下所示:

三个轴(X轴,Y轴和Z轴)的位置将根据ADXL335加速度计的位置而变化。

如果我们将电路板固定在不同的位置,则三轴方向也会改变。沿特定方向移动电路板会导致相应轴的电压发生变化。我们可以测量Arduino上变化的电压。

当我们将板子放平时,在Z轴上会出现9.8m / s ^ 2的测量加速度。

也称为重力。这里,

哪里,

G是地球重力引起的加速度。

ADXL335加速度计的灵敏度为:

s = 0.33V / G。

每个ADC(模数转换器)单位的重力为:

这是因为传感器需要3.3V才能工作。

静止时的加速度计将读取其最大模拟电压的一半。

注意:有些加速度计工作在5V,有些则工作在3.3V。我们需要确定电压,因为5V电源可能会损坏3.3V加速度计。

让我们开始这个项目。

所需硬件

该项目所需的组件如下:

  • 1个ADXL335加速度计
  • 1个Arduino UNO R3

原理

我们可以直接将加速度计插入Arduino。这是因为加速度计以最小的电流工作。

Arduino UNO有六个模拟引脚。三个模拟引脚将连接到Vcc,自测和接地引脚。其他三个模拟引脚将用于读取加速度计的模拟输出。

结构体

该项目的结构如下所示:

连接

上述项目的连接说明如下:

  • 将加速度计的X连接到Arduino板的模拟引脚A3。
  • 将加速度计的Y连接到Arduino板的模拟引脚A2。
  • 将加速度计的X连接到Arduino板的模拟引脚A1。
  • 将加速度计的Vcc连接到Arduino板的模拟引脚A5。
  • 将加速度计的GND连接到Arduino板的模拟引脚A4。
  • 将加速度计的ST连接到Arduino板的模拟引脚Ao。

草图

我们将代码上传到与加速度计连接的Arduino上。在Arduino IDE的串行监视器上可以清楚地看到输出。

考虑下面的代码:

const int GND = A4;
const int PowerPIN = A5;        
const int pinOfX = A3;                
 const int pinOfY= A2;                
const int pinOfZ= A1; 
void setup()
{
Serial.begin(9600);
pinMode(GND , OUTPUT);   
pinMode(PowerPIN , OUTPUT);   
digitalWrite(GND , LOW);   // configuring the GND pin as LOW
digitalWrite(PowerPIN , HIGH); // configuring the power pin HIGH (5V/3.3V)
}
void loop()
{
   // It prints the values of the sensors
Serial.print(analogRead(pinOfX));   // print a tab between values:   
Serial.print("\t");  
 Serial.print(analogRead(pinOfY));   
Serial.print("\t");   
Serial.print(analogRead(pinOfZ));   
Serial.println();   // It delays before next reading
delay(100); 
}