DHT11/DHT22 温湿度传感器 + MPU6050 加速度传感器驱动实战教程

89 阅读5分钟

一、前言

DHT11/DHT22(数字温湿度)和 MPU6050(三轴加速度 + 三轴陀螺仪)是物联网、单片机开发中最常用的入门传感器,广泛应用于环境监测、运动检测等场景。本文基于 Arduino 平台(兼容性强、上手快),详细讲解传感器接线、驱动代码及调试技巧,适合新手直接照搬实操。

二、硬件准备(新手必备清单)

组件数量用途
Arduino UNO/Nano1 块主控板
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 引脚辅助说明
VCC5VDHT11 支持 3.3V-5V,DHT22 建议 5V
GNDGND共地,避免信号干扰
DATAD4(数字引脚)任意数字引脚均可,代码需对应
(DHT11 额外)-10KΩ 电阻接 VCC 和 DATA 之间(拉上)

接线技巧:DHT 传感器 DATA 引脚若不接电阻,易出现数据跳变或读取失败,新手必接。

2. MPU6050 接线(I2C 通信)

传感器引脚Arduino 引脚说明
VCC3.3V务必接 3.3V!接 5V 会烧毁传感器
GNDGND共地连接
SDAA4(SDA 引脚)I2C 数据引脚,Arduino 默认 A4
SCLA5(SCL 引脚)I2C 时钟引脚,Arduino 默认 A5
AD0GND接地默认地址 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() {

&#x20; Serial.begin(9600);

&#x20; Wire.begin();  // 启动I2C通信

&#x20;&#x20;

&#x20; // 初始化MPU6050

&#x20; if (!mpu.begin()) {

&#x20;   Serial.println("找不到MPU6050传感器!检查接线或地址");

&#x20;   while (1) {

&#x20;     delay(500);

&#x20;   }

&#x20; }

&#x20; Serial.println("MPU6050启动成功!");

&#x20; mpu.setAccelerometerRange(MPU6050\_RANGE\_8\_G);  // 加速度范围±8G(可选±2G/±4G/±8G/±16G)

&#x20; mpu.setGyroRange(MPU6050\_RANGE\_500\_DEG);       // 陀螺仪范围±500°/s

&#x20; mpu.setFilterBandwidth(MPU6050\_BAND\_44\_HZ);    // 滤波带宽44Hz

&#x20; delay(100);

}

void loop() {

&#x20; sensors\_event\_t a, g, temp;

&#x20; mpu.getEvent(\&a, \&g, \&temp);  // 读取加速度、陀螺仪、温度数据

&#x20;&#x20;

&#x20; // 打印加速度数据(单位:m/s²)

&#x20; Serial.print("加速度 - X:");

&#x20; Serial.print(a.acceleration.x);

&#x20; Serial.print("  Y:");

&#x20; Serial.print(a.acceleration.y);

&#x20; Serial.print("  Z:");

&#x20; Serial.print(a.acceleration.z);

&#x20;&#x20;

&#x20; // 打印陀螺仪数据(单位:rad/s)

&#x20; Serial.print(" | 陀螺仪 - X:");

&#x20; Serial.print(g.gyro.x);

&#x20; Serial.print("  Y:");

&#x20; Serial.print(g.gyro.y);

&#x20; Serial.print("  Z:");

&#x20; Serial.print(g.gyro.z);

&#x20;&#x20;

&#x20; // 打印温度数据(传感器内置温度)

&#x20; Serial.print(" | 温度:");

&#x20; Serial.print(temp.temperature);

&#x20; Serial.println(" ℃");

&#x20;&#x20;

&#x20; delay(500);  // 每隔500ms读取一次

}

五、调试常见问题与解决方案

  1. DHT 传感器读取失败
  • 检查 10KΩ 拉上电阻是否接入;

  • 确认 VCC 电压(DHT22 接 5V 更稳定);

  • 数据引脚与代码中DHTPIN一致;

  • 避免传感器靠近热源或潮湿环境。

  1. MPU6050 找不到设备
  • 优先检查 VCC 是否接 3.3V(接 5V 已烧毁);

  • SDA/SDA 是否接 Arduino 的 A4/A5;

  • 若接了 AD0 引脚,代码中需改为mpu.begin(0x69)

  1. 数据跳变严重
  • DHT 传感器:增加读取间隔(≥2 秒),远离干扰源;

  • MPU6050:启用滤波(代码中已设置 44Hz),固定传感器避免晃动。