实验:温度湿度传感器的使用

一、实验目的(本次实验所涉及并要求掌握的知识点)

掌握温湿度传感器的基本原理和工作方式:

学会正确连接温湿度传感器到微控制器(如 Arduino)。

②学会编写程序读取温湿度传感器的数据。

学会将温湿度数据通过显示器(如 LCD 屏幕、OLED 屏幕或串口监视器)进行显示。

④培养对传感器数据采集和处理的实践能力,为后续更复杂的物联网项目或自动化系统开发奠定基础。

 

二、实验内容(设计思路)

实验原理:温湿度传感器是一种能够同时测量环境温度和湿度的传感器。以常见的 DHT22 为例,它采用单总线接口,通过一个引脚与微控制器通信。传感器内部集成了温度和湿度测量元件,能够将测量到的温度和湿度值转换为数字信号输出。微控制器通过特定的通信协议(如单总线协议)读取这些数据,并将其存储或显示出来。

使用温湿度传感器采集温湿度数据,可选做以下实验内容(全做加分):

1)使用Arduino UNO读取温湿度传感器信息并在LCD屏中显示。(简单)

2)使用ThingSpeak物联网服务器通过互联网监控DHT11传感器的温度和湿度数据。(复杂)

 

三、实验环境(本次实验所使用的平台和相关软)

Win10    wokwi

 

实验步骤和调试过程(实验步骤、测试结果分析)

(一)硬件连接

连接 DHT22 温湿度传感器

VCC 引脚:连接到 Arduino UNO 5V 引脚。这为 DHT22 传感器提供工作电源。

GND 引脚:连接到 Arduino UNO GND 引脚。用于建立电气回路。

DATA 引脚:连接到 Arduino UNO 的一个数字引脚,例如数字引脚 2。该引脚用于传输传感器与 Arduino 之间的数据,遵循单总线协议进行通信。

连接 LCD1602 显示屏

VSS 引脚(第 1 脚):连接到 Arduino UNO GND 引脚。此引脚为显示屏提供接地参考。

VDD 引脚(第 2 脚):连接到 Arduino UNO 5V 引脚。为 LCD1602 显示屏提供工作电源。

VO 引脚(第 3 脚):直接连接到 GND 引脚。在不使用电位器调节对比度的情况下,这样连接可以使显示屏以默认对比度显示。虽然无法调节对比度,但能满足基本显示需求。

SDA 引脚(第 4 脚,数据 / 命令选择引脚):连接到 Arduino UNO 的数字引脚 12。用于选择是向 LCD 写入数据还是命令。

RW 引脚(第 5 脚,读写控制引脚):连接到 GND 引脚。因为在本实验中只进行写操作,所以将其接地。

E 引脚(第 6 脚,使能引脚):连接到 Arduino UNO 的数字引脚 11。用于使能 LCD 进行数据传输。

D4 引脚(第 11 脚):连接到 Arduino UNO 的数字引脚 5

D5 引脚(第 12 脚):连接到 Arduino UNO 的数字引脚 6

D6 引脚(第 13 脚):连接到 Arduino UNO 的数字引脚 7

D7 引脚(第 14 脚):连接到 Arduino UNO 的数字引脚 8。这些数据引脚(D4 - D7)用于向 LCD1602 传输 8 位数据(在 4 位模式下使用)。

(二)代码编译:

#include <LiquidCrystal.h>

#include <DHT.h>

#include <DHT_U.h>

 

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

 

// 定义LCD引脚

LiquidCrystal lcd(12, 11, 5, 6, 7, 8);

 

void setup() {

  Serial.begin(9600);

  lcd.begin(16, 2);

  lcd.print("Initializing...");

 

  // 初始化DHT传感器

  dht.begin();

}

 

void loop() {

  // 读取温度

  float temperature = dht.readTemperature();

  // 读取湿度

  float humidity = dht.readHumidity();

 

  // 检查读取是否成功

  if (isnan(temperature) || isnan(humidity)) {

    Serial.println("Failed to read from DHT sensor!");

    delay(2000);

    return;

  }

 

  Serial.print("Temperature: ");

  Serial.print(temperature);

  Serial.println(" °C");

  Serial.print("Humidity: ");

  Serial.print(humidity);

  Serial.println(" %");

 

  // 在LCD上显示温湿度

  lcd.setCursor(0, 0);

  lcd.print("Temp: ");

  lcd.print(temperature);

  lcd.print(" C ");

  lcd.print("Hum: ");

  lcd.print(humidity);

  lcd.print(" %");

 

  delay(2000); // 每2秒读取一次数据

}

  

(三)结果截图:

1.观察串口监视器或显示器上显示的温湿度数据,记录数据的变化情况。

2.分析数据是否符合当前环境的实际温湿度情况。如果数据明显异常,检查硬件连接是否正确,传感器是否损坏,或者代码中是否存在错误。

3.通过多次测量,了解温湿度传感器的稳定性和精度。

 

 

 

 

、实验总结(实验中遇到的问题及解决过程、实验体会和收获)      

通过本次实验,我深入理解了温湿度传感器的工作原理和使用方法。在实验里,我学会了利用 Arduino UNO 读取温湿度数据,并将其显示在 LCD 屏幕上,这有助于我掌握基本的数据采集和显示操作。而这次实验则让我接触到了物联网的概念,通过 wokwi服务器实现了远程数据监控,拓宽了我们的知识面和理论向实践转化的能力。

遇到的问题及解决办法:

传感器数据读取错误:LCD 屏幕显示 “Error reading data”,或者 ThingSpeak 服务器接收不到有效数据。

解决办法:检查传感器的连接是否稳固,引脚是否正确;确认传感器的供电是否正常;查看代码中传感器的类型和引脚定义是否与实际情况相符。

②代码问题1:出现 'class DHT_Unified' has no member named 'takeEvent' 错误,说明使用的 DHT_Unified 类没有 takeEvent 这个成员函数,这通常是由于库版本差异导致的。

解决办法:类的使用,将 DHT_Unified 类替换为 DHT 类,因为在一些库版本中,DHT 类更常用且能直接使用 readTemperature readHumidity 函数

代码问题2:错误提示 fatal error: DHTesp.h: No such file or directory 表示你的 Arduino 环境中没有安装 DHTesp 库,导致编译器找不到对应的头文件

解决办法:在 Wokwi 平台中添加 DHTesp 库,在点击 Add library(添加库)按钮后添加

③运行后显示问题:输出出现 “fail to read” 错误提示时,通常表示代码在读取 DHT11 传感器数据时出现了问题。

解决办法:将数据线拆除重连

posted @ 2025-05-10 23:33  刘倩_网安2211  阅读(53)  评论(0)    收藏  举报