一、前言
DHT11/DHT22(数字温湿度)和 MPU6050(三轴加速度 + 三轴陀螺仪)是物联网、单片机开发中最常用的入门传感器,广泛应用于环境监测、运动检测等场景。本文基于 Arduino 平台(兼容性强、上手快),详细讲解传感器接线、驱动代码及调试技巧,适合新手直接照搬实操。
二、硬件准备(新手必备清单)
| 组件 | 数量 | 用途 |
|---|---|---|
| Arduino UNO/Nano | 1 块 | 主控板 |
| DHT11 或 DHT22 传感器 | 1 个 | 采集温湿度 |
| MPU6050 传感器 | 1 个 | 采集加速度 / 陀螺仪数据 |
| 杜邦线(公对母) | 10 根 | 接线传输信号 |
| 5V 面包板 | 1 块 | 方便接线测试 |
| 10KΩ 电阻(仅 DHT 系列) | 1 个 | 拉上电阻,稳定信号 |
注意:DHT11 精度低(温度 ±2℃,湿度 ±5% RH),响应快;DHT22 精度高(温度 ±0.5℃,湿度 ±2% RH),适合对数据要求高的场景,两者驱动逻辑一致。
三、传感器接线方法(Arduino 平台)
1. DHT11/DHT22 接线(数字信号)
| 传感器引脚 | Arduino 引脚 | 辅助说明 |
|---|---|---|
| VCC | 5V | DHT11 支持 3.3V-5V,DHT22 建议 5V |
| GND | GND | 共地,避免信号干扰 |
| DATA | D4(数字引脚) | 任意数字引脚均可,代码需对应 |
| (DHT11 额外) | - | 10KΩ 电阻接 VCC 和 DATA 之间(拉上) |
接线技巧:DHT 传感器 DATA 引脚若不接电阻,易出现数据跳变或读取失败,新手必接。
2. MPU6050 接线(I2C 通信)
| 传感器引脚 | Arduino 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 务必接 3.3V!接 5V 会烧毁传感器 |
| GND | GND | 共地连接 |
| SDA | A4(SDA 引脚) | I2C 数据引脚,Arduino 默认 A4 |
| SCL | A5(SCL 引脚) | I2C 时钟引脚,Arduino 默认 A5 |
| AD0 | GND | 接地默认地址 0x68,接 VCC 为 0x69 |
注意:MPU6050 是 3.3V 器件,VCC 接 5V 会直接损坏,接线前务必核对引脚标识。
四、驱动代码实现(直接复制运行)
1. DHT11/DHT22 温湿度传感器驱动
步骤 1:安装 DHT 库
打开 Arduino IDE → 项目 → 加载库 → 管理库 → 搜索「DHT sensor library」→ 安装(作者 Adafruit)。
步骤 2:完整代码
\#include HT.h>
// 定义传感器类型和引脚(根据实际修改)
\#define DHTTYPE DHT11 // 若用DHT22,改为DHT22
\#define DHTPIN 4 // 对应接线的数字引脚D4
// 初始化传感器
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600); // 串口波特率9600
  dht.begin(); // 启动传感器
  Serial.println("DHT传感器启动成功,等待数据...");
  delay(2000); // 传感器预热2秒
}
void loop() {
  // 每隔2秒读取一次(DHT传感器建议读取间隔≥1秒)
  delay(2000);
  
  // 读取温湿度数据
  float h = dht.readHumidity(); // 湿度(%RH)
  float t = dht.readTemperature(); // 温度(℃)
  
  // 校验数据是否有效
  if (isnan(h) || isnan(t)) {
  Serial.println("读取数据失败!检查接线或传感器");
  return;
  }
  
  // 串口打印结果
  Serial.print("湿度:");
  Serial.print(h);
  Serial.print(" %RH | 温度:");
  Serial.print(t);
  Serial.println(" ℃");
}
2. MPU6050 加速度 / 陀螺仪驱动
步骤 1:安装 MPU6050 库
Arduino IDE → 管理库 → 搜索「Adafruit MPU6050」→ 安装(需同时安装 Adafruit Unified Sensor 库)。
步骤 2:完整代码
\#include \<Adafruit\_MPU6050.h>
\#include ensor.h>
\#include \<Wire.h>
Adafruit\_MPU6050 mpu;
void setup() {
  Serial.begin(9600);
  Wire.begin(); // 启动I2C通信
  
  // 初始化MPU6050
  if (!mpu.begin()) {
  Serial.println("找不到MPU6050传感器!检查接线或地址");
  while (1) {
  delay(500);
  }
  }
  Serial.println("MPU6050启动成功!");
  mpu.setAccelerometerRange(MPU6050\_RANGE\_8\_G); // 加速度范围±8G(可选±2G/±4G/±8G/±16G)
  mpu.setGyroRange(MPU6050\_RANGE\_500\_DEG); // 陀螺仪范围±500°/s
  mpu.setFilterBandwidth(MPU6050\_BAND\_44\_HZ); // 滤波带宽44Hz
  delay(100);
}
void loop() {
  sensors\_event\_t a, g, temp;
  mpu.getEvent(\&a, \&g, \&temp); // 读取加速度、陀螺仪、温度数据
  
  // 打印加速度数据(单位:m/s²)
  Serial.print("加速度 - X:");
  Serial.print(a.acceleration.x);
  Serial.print(" Y:");
  Serial.print(a.acceleration.y);
  Serial.print(" Z:");
  Serial.print(a.acceleration.z);
  
  // 打印陀螺仪数据(单位:rad/s)
  Serial.print(" | 陀螺仪 - X:");
  Serial.print(g.gyro.x);
  Serial.print(" Y:");
  Serial.print(g.gyro.y);
  Serial.print(" Z:");
  Serial.print(g.gyro.z);
  
  // 打印温度数据(传感器内置温度)
  Serial.print(" | 温度:");
  Serial.print(temp.temperature);
  Serial.println(" ℃");
  
  delay(500); // 每隔500ms读取一次
}
五、调试常见问题与解决方案
- DHT 传感器读取失败:
-
检查 10KΩ 拉上电阻是否接入;
-
确认 VCC 电压(DHT22 接 5V 更稳定);
-
数据引脚与代码中
DHTPIN一致; -
避免传感器靠近热源或潮湿环境。
- MPU6050 找不到设备:
-
优先检查 VCC 是否接 3.3V(接 5V 已烧毁);
-
SDA/SDA 是否接 Arduino 的 A4/A5;
-
若接了 AD0 引脚,代码中需改为
mpu.begin(0x69)。
- 数据跳变严重:
-
DHT 传感器:增加读取间隔(≥2 秒),远离干扰源;
-
MPU6050:启用滤波(代码中已设置 44Hz),固定传感器避免晃动。