回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕学编程】Arduino动手做(239)---GY-61 ADXL335更改Arduino的模拟参考 AREF 电压 获得精确结果 简单

头像 驴友花雕 2025.05.09 8 0

0-.jpg
02.jpg
04.jpg
05.jpg
05--.jpg

ADXL335加速度计连接到 Arduino UNO

首先将加速计放在试验板上。将 VCC 引脚连接到 Arduino 的 5V 引脚,将 GND 引脚连接到 Arduino 的 Ground 引脚。将 X、Y 和 Z 输出连接到 Arduino 的模拟引脚 A0、A1 和 A2。

这里更改 Arduino 的模拟参考 (AREF) 电压才能获得精确的结果。这可以通过将 Arduino 的 3.3V 引脚连接到 AREF 引脚来实现。


【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十九:GY-61 ADXL335模拟量加速度模块 倾斜角度三轴加速度传感器
项目之二:更改Arduino 的模拟参考 AREF 电压 获得精确结果

实验开源代码

代码
/*
  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百三十九:GY-61 ADXL335模拟量加速度模块 倾斜角度三轴加速度传感器
  项目之二:更改Arduino 的模拟参考 AREF 电压 获得精确结果
*/

const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

// Take multiple samples to reduce noise
const int sampleSize = 10;

void setup()
{
  analogReference(EXTERNAL);
  Serial.begin(9600);
}

void loop()
{
  //Read raw values
  int xRaw = ReadAxis(xInput);
  int yRaw = ReadAxis(yInput);
  int zRaw = ReadAxis(zInput);

  // Convert raw values to ‘milli-Gs”
  long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
  long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
  long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

  // re-scale to fractional Gs
  float xAccel = xScaled / 1000.0;
  float yAccel = yScaled / 1000.0;
  float zAccel = zScaled / 1000.0;

  Serial.print("X, Y, Z  :: ");
  Serial.print(xRaw);
  Serial.print(", ");
  Serial.print(yRaw);
  Serial.print(", ");
  Serial.print(zRaw);
  Serial.print(" :: ");
  Serial.print(xAccel, 0);
  Serial.print("G, ");
  Serial.print(yAccel, 0);
  Serial.print("G, ");
  Serial.print(zAccel, 0);
  Serial.println("G");

  delay(200);
}

// Take samples and return the average
int ReadAxis(int axisPin)
{
  long reading = 0;
  analogRead(axisPin);
  delay(1);
  for (int i = 0; i < sampleSize; i++)
  {
    reading += analogRead(axisPin);
  }
  return reading / sampleSize;
}

代码解读

这段代码使用 模拟传感器(如加速度计) 采集 X、Y、Z 轴数据 并转换为 加速度值(单位 G),核心逻辑如下:

1. 传感器连接
✅ const int xInput = A0; → X 轴信号连接到 A0
✅ const int yInput = A1; → Y 轴信号连接到 A1
✅ const int zInput = A2; → Z 轴信号连接到 A2

2. 初始化
✅ analogReference(EXTERNAL); → 使用外部参考电压,提高精度
✅ Serial.begin(9600); → 启动串口通信

3. 读取并处理数据
✅ ReadAxis(xInput); → 采集 X、Y、Z 轴数据
✅ map(xRaw, RawMin, RawMax, -3000, 3000); → 将 ADC 值映射到 milli-G(±3G)
✅ / 1000.0 → 转换为 G(加速度单位)

4. 串口输出
✅ Serial.print(xAccel, 0); → 打印 X 轴加速度(单位 G)
✅ Serial.print(yAccel, 0); Serial.print(zAccel, 0); → 打印 Y、Z 轴加速度
✅ 以格式化方式输出数据,便于查看

5. 采样优化
✅ sampleSize = 10; → 每次采集 10 次求平均值,减少噪声
✅ delay(1); → 防止连续读取过快,提高稳定性

这段代码让 加速度传感器不断采集 XYZ 数据,并在串口显示。

实验串口返回情况

07-3.jpg

实验串口绘图器返回情况

07-4.jpg
07-5.jpg
07-6.jpg


实验记录视频(36秒)

【【花雕学编程】Arduino动手做(239)---测试GY-61 ADXL335三轴加速度传感器#单片机开发 #电子爱好者 #嵌入式 #科技改变生活 #编程】

https://www.bilibili.com/video/BV12e5VzqEnM/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

07-1.jpg

下图显示了串行监视器上不同位置的加速度计输出。

 

07-7.jpg
07-8.jpg

评论

user-avatar
icon 他的勋章
    展开更多