Arduino中文教程----认识DHT11温湿度传感器并制作温度报警器
What Will I Learn?
认识Arduino 的DHT11温湿度传感器
编写程序获取温湿度传感器的数值
制作温度报警器
Requirements
Arduino UNO
Arduino IDE开发环境
Arduino DHT11温湿度传感器
Difficulty
基础
Tutorial Contents
一、认识Arduino 的DHT11温湿度传感器
DHT传感器由电容式湿度传感器和热敏电阻两部分组成。除此之外,模块内部还做了一些模拟信号到数字信号的转换,将温湿度以数字信号方式输出。
DHT11温湿度传感器特性如下:
- 成本较低,更适合于DIY
- 供电3.3-5V均可
- 2.5ma最大电流
- 20-80%湿度读数精度在5%之内
- 0-50°C温度读数在精度±2°C
- 频率不超过1赫兹,相当于每秒钟一次
- 模块尺寸较小,15.5mm x 12mm x 5.5mm
DHT11模块有三个引脚加一个LED
- VCC :连接供电电源的正极
- DAT :将数字信号输出
- GND : 连接供电电源的负极
- 电源指示 : 模块正常供电时会亮
二、编编写程序获取温湿度传感器的数值
连接Arudino UNO与DHT11温湿度传感器
如上图,DHT11温湿度传感器引脚有三个
- GND
- VCC
- DAT
Arduino UNO DHT11温湿度传感器 GND GND 5V VCC D8 DAT
编写程序获取DHT11温湿度传感器的数字信号
下载DHT11的库文件
解压文件并添加至arudino安装路径下的libraries
引入DHT11库文件
#include <dht11.h> dht11 DHT11;
定义变量
#define PIN_DHT11 8 float temp,humi;
setup()初始化。
这里大家可能会有疑惑,为什么要获取DHT11模块的数字信号,但是不用初始化设定该引脚为输入模式呢?
其实是需要的,但是已经在库文件中定义设定了,所以在这里不必重复设定
void setup() { Serial.begin(9600); temp=0; humi=0; }
loop()写入主体函数
void loop() { DHT11.read(PIN_DHT11); humi = (float)DHT11.humidity; temp = (float)DHT11.temperature; Serial.println(humi, 2); Serial.println(temp, 2); }
连接Arduino UNO至电脑
编译并上传程序至Arduino UNO
测试效果
接上USB运行Arduino程序的时候,可以见到DHT11模块的LED是亮着的,说明模块正常供电
测试的时候,可以向模块哈气,以增加温度与湿度看数据的输出变化
三、制作温度报警器
基于步骤二,连接LED与Arduino UNO
LED Arduino UNO 短脚 GND 长脚 D10 基础步骤二的程序整合上LED程序
需求分析,这里我们只是用到DHT11提供的温度
- 当温度大于23的时候,点亮LED
- 当温度小于23的时候,熄灭LED
定义变量
#define PIN_DHT11 8 float temp,humi;
setup()初始化
void setup() { Serial.begin(9600); pinMode(10,OUTPUT); temp=0; humi=0; }
loop()函数主体
void loop() { DHT11.read(PIN_DHT11); Serial.print("Humidity (%): "); humi = (float)DHT11.humidity; Serial.println(humi, 2); Serial.print("Temperature (oC): "); temp = (float)DHT11.temperature; Serial.println(temp, 2); if(temp > 23) digitalWrite(10,HIGH); else digitalWrite(10,LOW); delay(500); }
整合全部程序:
#include <dht11.h> dht11 DHT11; #define PIN_DHT11 8 float temp,humi; void setup() { Serial.begin(9600); pinMode(10,OUTPUT); temp=0; humi=0; } void loop() { DHT11.read(PIN_DHT11); Serial.print("Humidity (%): "); humi = (float)DHT11.humidity; Serial.println(humi, 2); Serial.print("Temperature (oC): "); temp = (float)DHT11.temperature; Serial.println(temp, 2); if(temp > 23) digitalWrite(10,HIGH); else digitalWrite(10,LOW); delay(500); }
编译并上传程序测试效果
Curriculum
- Arduino中文教程---认识Arduino的串口并编写程序操作串口
- Arduino中文教程---认识HC-SR501模块并制作人体感应LED
- Arduino中文教程---认识模拟输入并制作声控电灯
- Arduino中文教程---DIY一个按钮电灯
- Arduino中文教程---初识Arduino并点亮第一个LED
Posted on Utopian.io - Rewarding Open Source Contributors
Your contribution cannot be approved because it does not follow the Utopian Rules.
You can contact us on Discord.
[utopian-moderator]