找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2972|回复: 1
收起左侧

Arduino气象站程序:利用DHT11测量温度和湿度,并在LCD1602屏幕上显示这些值

[复制链接]
ID:940978 发表于 2021-9-2 20:15 | 显示全部楼层 |阅读模式
需要零件:Arduino板、面包板、跳线、50kΩ电位器、16×2 LCD 屏幕、DHT11温湿度传感器
所需程序库:   ·LiquidCrystal                       ·DHT
工作原理:本项目使用的湿度传感器是相对廉价的DHT11,它测量湿度和温度。它使用电容式湿度传感器和电阻式温度传感器从其环境中读取读数。它将此读数作为电压发送到Arduino,Arduino将其转换为屏幕上显示的可读值。为了获得最佳效果,应该将温湿度传感器安装在外墙上,并留有相当大的开放空间。需要你的LCD屏幕安装在室内,以防止其受到环境因素的影响。
                                                                     DHT11.jpg                        
     DHT11 数字温湿度传感器是一种集温度、湿度一体的复合传感器,它能把温度和湿度物理测量通过温、湿度敏感元件和相应电路转换成方便计算机或者数据采集设备直接读取的数字量,它具有校准数字信号输出功能,采用单总线串行接口,输出数据一共 5 个字节,分别表示:湿度整数位、湿度小数位、温度整数位、温度小数位及校验和,其中校验和为湿度与温度之和的最低 8 位数据。

DHT11 数字温度传感器模块共引出 3 个引脚,分别是地线 GND、电源Vcc 和数据线 S。 实际应用时,将 S 端接在 Arduino UNO 的一个数字输入接口。
LCD1602 概述
液晶显示器简称LCD(Liquid Crystal Display),其构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置 TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过 TFT 上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光射出的目的。

1602 液晶也叫 1602 字符型液晶,是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5×7 或者 5×11 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到字符间距和行间距的作用。因此,1602 型液晶非常适合便携式及低功耗测试设备。
                                                          LCD引脚.png      
构建
1.首先,按照前面“准备LCD屏幕”中的焊接说明准备好LCD屏幕。将DHT11传感器插入面包板。当它的前面朝向你时,DHT11引脚从左侧编号为1~4(或3)。将引脚1(VCC)连接到 +5V电源轨,将引脚2(DATA)直接连接到Arduino引脚8,将引脚4(或3)(GND)连接到GND。
            DHT11连接图.jpg                                  LCD连接图.jpg
2.将LCD屏幕插入面包板,并将引脚连接到Arduino,如上表所示。GND和 +5V电源导轨将有多个连接。将LCD屏幕插入面包板。
3.将电位器插入面包板,将中心引脚连接到LCD引脚3,将一个外侧引脚连接到 +5V导轨,另一侧引脚连接到GND导轨。
4. 将面包板的电源轨连接到Arduino GND和 +5V。确认你的设置与图中的接线图相符,并上传代码。
                                                            连接图5.jpg
这个程序使用了Arduino IDE自带的LiquidCrystal库,以及需要从Arduino社区下载和安装的DHT库。DHT库控制传感器的功能,LCD库在屏幕上显示读数。
相关代码:

#include <LiquidCrystal.h>
#include"DHT.h"                 //调用 DHT 库
#define DHTPIN 8               //连接到DHT的引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define DHTTYPE DHT11                  //定义 DHT 模块类型
DHT dht(DHTPIN, DHTTYPE);            //DHT.h 库命令
void setup()
{
 dht.begin();                            //开启传感器
 lcd.begin(16, 2);                      //LCD 屏幕是每行16个字符,一共两行
}
voidloop()
{
 float h = dht.readHumidity();                       //湿度值
 float t = dht.readTemperature();                  //温度值
 t = t * 9/5 + 32;                                           //将读数从摄氏度转换成华氏度
if (isnan(t) || isnan(h))                                       //检查DHT传感器是否工作
{  lcd.setCursor(0, 0);
  lcd.print("Failed to read from DHT");         //如果DHT不工作,
                                                               //显示这个
 }
else                                                                //否则在屏幕上显示读数

{   lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Humidity: ");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(t);
    lcd.print("f");
 }
}


评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:970692 发表于 2021-10-9 11:51 | 显示全部楼层
大哥能分享一下dht11的库吗,万分感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表