实验:温度湿度传感器的使用
一、实验目的(本次实验所涉及并要求掌握的知识点)
掌握温湿度传感器的基本原理和工作方式:
①学会正确连接温湿度传感器到微控制器(如 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 传感器数据时出现了问题。
解决办法:将数据线拆除重连