资讯详情

Arduino+DHT11+OLED显示温湿度信息(附详细文档+源码)

设计者:STCode (微信官方账号同名)

39545a8724cd30380098de2b2314441b.png

第一章 绪论

1.1培训设计的背景和意义

随着生活水平的提高和科技水平的发展,人们越来越考虑自己和家庭安全。越来越多的安全监控系统和设备进入人们的生活,如家庭防火系统、家庭防盗系统、家庭远程监控装置等。各种现代高科技逐渐应用于各个行业和领域,为人类社会生产力的发展形成了强大的动力。本设计将温湿度检测系统应用于家庭,通过检测家庭温湿度反映家庭环境的变化,在环境异常时,可以报警,使系统用户及时发现家庭安全风险,快速解决安全问题,具有一定的社会意义和应用价值。

1.2实训设计任务

本设计的任务主要是应用Arduino Uno配备温湿度传感器和主控制器led、蜂鸣器、OLED显示器等,实现温湿度检测功能和报警功能,在环境异常情况下,可及时通知系统用户处理异常,发挥良好的安全防范作用。

1.3实训具体内容

具体内容如下:

家庭安全监测系统的设计主要可以检测温湿度的两个关键环境变量,通过温湿度传感器DHT11获取,获取数据后判断,当环境异常时,如温度过高,可触发蜂鸣器报警,提示用户温度异常,疑似火灾;此外,当环境湿度变化时LED湿度低时,点亮LED灯,提醒用户当前环境干燥,可加湿。可视化当前环境的温湿度数据,将通过OLED显示器显示,方便用户随时监控环境。

1) 学习Arduino Uno熟悉使用方法Arduino编程语法,掌握其控制和操作原理,接收传感器数据作为主控制器,进行数据分析,然后控制某些部件的工作。

2) 学习和掌握温湿度传感器DHT使用11,掌握其库函数的用法。

3) 学习并掌握OLED使用显示器,掌握文本显示和变量显示的方法。

4) 掌握LED、使用蜂鸣器。

第二章 硬件设计

2.硬件设计理念

硬件设计包括硬件材料选择、通信模式和接线模式的设计。主控制器是Arduino Uno,其芯片为ATMEGA328P;传感器的主要应用是DHT11温湿度传感器,可检测温湿度信息;输出元件有OLED、蜂鸣器、LED。传感器将获取环境的温湿度信息并传输到Arduino,Arduino获取数据后,进行数据分析,根据设定的阈值设计声光报警,并对分析的温湿度信息进行分析OLED显示器。

2.2硬件选择

以下材料主要用于硬件选材:

1) 主控制器:Arduino Uno

2) 传感器:DHT11温湿度传感器

3) 显示元件:OLED液晶显示器

4) 发光元件:LED小灯

5) 声音元件:无源蜂鸣器

6) 面包板、数据线、杜邦线

2.2.1 DHT11温湿度传感器

1)硬件描述

该传感器是一种含有校准数字信号输出的温湿度复合传感器。采用特殊的数字模块采集技术和温湿度传感技术,保证产品的高可靠性和优异的长期稳定性。传感器包括电阻式感湿元件和NTC与高性能8位单片机连接的测温元件。因此,该产品具有品质优良、响应超快、抗干扰能力强、性价比高等优点。每个DHT在极其精确的湿度校验室中校准传感器。校准系数以程序的形式存储在OTP这些校准系数应调用于传感器内部的检测信号处理。单线串行接口使系统集成简单快捷。超小体积,功耗极低,信号传输距离可达20米以上,成为各种应用甚至最苛刻的应用场合的最佳选择。因此,本设计的选择DHT11作为环境检测的传感器。

2)硬件参数:

工作电压 :3.3V-5v

尺寸大小:40mm x 28mm

重量大小:3g

信号类型:数字信号

电流:最大2.5mA

温度范围:0-50℃,误差±2℃

湿度范围:当环境温度在时 0 ℃时为30-90%RH;当环境温度为25时℃时为20-90%RH ;当环境温度为50时℃时为20-80%RH

响应时间:1/e(63%) 6-30s

测量分辨率为:温度(8bit)湿度(8bit)

采样周期间隔:<1s

2.2.2 OLED显示器

1)硬件描述

0.96寸OLED模块亮度高,功耗低OLED屏幕,显示纯色,在阳光下有很好的视觉效果。模块电源可以是3.3V也可以是5V,不需要修改模块电路,OLED屏幕有多个控制指令,可以控制OLED亮度、对比度、开关升压电路等指令操作方便,功能丰富。因此,本设计选择了此设计OLED作为显示元件。

2)硬件参数

高分辨率:12864和12864LCD相同的分辨率,但是OLED屏幕单位面积像素点多)

超广视角:大于160°

超低功耗:正常显示时0.06W

宽供电范围:直流3V-5V

工业级:工作温度范围-30℃~70℃

体积小:27mm27mm*2mm

通信方式:SPI、IIC

程序指令可以控制亮度和对比度

使用寿命不少于16000小时

OLED屏幕内部驱动芯片:SSD1306

2.2.3无源蜂鸣器

蜂鸣器是一种采用直流电源供电的综合结构电子信息器。广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话、定时器等电子产品。蜂鸣器主要分为有源蜂鸣器和无源蜂鸣器。本设计采用无源蜂鸣器控制PWM蜂鸣器的鸣叫频率可以控制。

2.2.4 LED小灯

Led小灯为一种发光二极管,能够发出不同颜色的灯光,本设计使用led当湿度不符合我们的要求时,目的是提醒用户环境,led闪烁可以提醒用户。

2.3电路连接

采用电路连接Altium Designer软件绘制,温湿度传感器为5V信号输出端连接到电源Arduino的8号I/O引脚上;OLED显示器的通信方式是IIC通信,所以除了两条电源线,只需要一条信号线SDA时钟线SCK就可以。无源蜂鸣器的正极I/O原因是引脚Arduino的3号引脚支持PWM输出,以控制蜂鸣器的鸣叫频率;LED小灯正极接4号I/O引脚。

第三章 软件设计

本设计的主控制器为Arduino Uno,控制控制器最常用的语言是C/C 这种语言也用于混合编程,编译和上传代码的环境是Arduino IDE软件。软件设计主要分为两部分,一是输入元件的编程,即DHT11传感器内容;第二部分是输出元件的编程,主要是OLED显示设计,LED蜂鸣器的闪烁和鸣叫。

3.输入元件程序设计

本设计的输入元件的输入元件DHT在程序设计中,将11温湿度传感器引入其库函数DHT.h通过初始化传感器和调用获得温湿度的函数,可以直接获得数据处理的温湿度变量,然后根据这些变量控制输出元件。

一些程序解释:

#include

DHT引入11传感器库;

#define DHTPIN 8

定义了这句话DHT11传感器信号线连接到Arduino数字引脚8;

#define DHTTYPE DHT11

宏定义;

DHT dht(DHTPIN, DHTTYPE);

定义对象,并匹配引脚输入和类型;

dht.begin();

温湿度传感器初始化;

void get_temp_humi() //

{

HH = int(dht.readHumidity()); //获得湿度

TT = int(dht.readTemperature()); //获得温度

Serial.print("Temp: "); ////串口显示温湿度信息

Serial.println(TT);

Serial.print("Humi: ");

Serial.println(HH);

}

其中定义了一个子函数HH存储湿度数据的变量,TT用户可以打开变量存储温度数据并打开串口Arduino的串口监视器查看当前的温湿度数据。该子函数将在循环函数loop里面调用。

3.2.输出元件程序设计

有三个输出元件,分别是OLED显示器、LED、蜂鸣器。

3.2.1 OLED显示器

从以上电路图可以知道,OLED的数据线SDA接到A4,时钟线SCK接到A5,因为Arduino的IIC接口正是A4\A5,当然,A4\A5接口也可以作为普通数字IO口用,这里属于引脚复用。

一些程序解释:

#include "U8glib.h"

OLED引入显示器库函数;

设置通讯方式为IIC通讯;

void dis_play() //OLED数据显示子函数

{

u8g.firstPage(); // OLED首页

do

{

char buffer1[1]; //定义字符buffer1

// 将int转为char显示出来

itoa(TT, buffer1, 10); //10:10进制显示

u8g.setFont(u8g_font_gdr10r); //设置字体

u8g.drawStr(25, 26, "Temp:"); //第26行25列显示“Temp:”

u8g.drawStr(70, 26, buffer1); //第26行70列显示温度数据

char buffer2[1]; //定义字符buffer2

// 将int转为char显示出来

itoa(HH, buffer2, 10); //10:10进制显示

u8g.setFont(u8g_font_gdr10r); //设置字体

u8g.drawStr(25, 60, "Humi:"); //第60行25列显示“Humi:”

u8g.drawStr(70, 60, buffer2); //第60行70列显示湿度数据

} while (u8g.nextPage()); //执行配置

}

上述代码为OLED显示文本和数据的子函数,在第26行25列显示温度数据,在第26行70列显示湿度数据,并且该子函数将在循环函数loop里面调用。

3.2.2 LED灯

LED灯的功能在于当湿度小于某个阈值的时候闪烁,这里设置的值为30,湿度过小,代表环境干燥,提示用户适当进行加湿。

部分代码讲解:

int led = 4;

定义LED引脚4;

pinMode(led, OUTPUT);

设置LED引脚为输出模式;

if (HH < 30)

{

digitalWrite(led, HIGH);

delay(50);

digitalWrite(led, LOW);

delay(50);

}

当湿度小于30的时候,LED灯将进行间隔50ms的闪烁,提醒用户当前环境的湿度情况。

3.2.3 无源蜂鸣器

无源蜂鸣器在该设计的作用是当环境的温度大于50度的时候,产生鸣叫,从而提醒使用者环境温度超标,可能有火情出现。

部分代码讲解:

int buzzer = 3;

定义蜂鸣器所接引脚为3;

pinMode(buzzer, OUTPUT);

设置蜂鸣器所接引脚为输出模式;

if (TT > 50)

analogWrite(buzzer, 100);

else

analogWrite(buzzer, 0);

当温度数值大于50度的时候,蜂鸣器响起,提醒使用者当前环境的温度值超标,可能出现火情,当温度值小于50的时候,蜂鸣器不鸣叫。

第四章 系统调试

系统调试分为硬件调试和软件调试。硬件调试中主要为确保接线的正确性,软件部分主要为检测各功能是否满足预设的目标,调试发现,给Arduino上电后,OLED显示器立即显示由DHT11温湿度传感器获得的数据,可以显示出当前环境的温湿度情况,与实际温湿度情况大体一致,并且拿到干燥地方,led灯会闪烁,当环境温度超过50摄氏度的时候,无源蜂鸣器会鸣叫,调试各功能顺利,基本满足预设要求。

第四章 系统调试

系统调试分为硬件调试和软件调试。硬件调试中主要为确保接线的正确性,软件部分主要为检测各功能是否满足预设的目标,调试发现,给Arduino上电后,OLED显示器立即显示由DHT11温湿度传感器获得的数据,可以显示出当前环境的温湿度情况,与实际温湿度情况大体一致,并且拿到干燥地方,led灯会闪烁,当环境温度超过50摄氏度的时候,无源蜂鸣器会鸣叫,调试各功能顺利,基本满足预设要求。

第五章 实物展示

1)整体实物图

第六章 总结

这次实训本人设计的家庭安全监测系统,可以有效地监测家庭温度和湿度的情况,并且具有预警功能,达到很好的提醒作用。随着人们生活水平的提高和安全防范意识的日渐加强,智能防火防盗系统也在不断升级,防火防盗设备也在不断更新,希望此设计能给家庭安全设备提供一定的思路。

附件:程序清单

#include //引入头文件

#include "U8glib.h"//引入Oled头文件

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); //设置通讯方式为IIC通讯

#define DHTPIN 8//湿度传感器OUT接8号口

#define DHTTYPE DHT11//定义DHT11传感器

DHT dht(DHTPIN, DHTTYPE); //定义湿度传感器OUT与8号口连接并且读取温湿度传感器的数值

int buzzer = 3; //定义蜂鸣器引脚3

int led = 4; //定义led引脚4

int HH; //定义HH变量,用于储存湿度数据

int TT; //定义TT变量,用于储存温度数据

void setup()

{

pinMode(buzzer, OUTPUT); //设置蜂鸣器引脚为输出模式

pinMode(led, OUTPUT); //设置led引脚为输出模式

Serial.begin(9600); //串口波特率

dht.begin(); //温湿度传感器初始化

}

void loop()

{

get_temp_humi(); //获得温湿度子函数

dis_play(); //oled显示数据子函数

if (TT > 50) //如果温度大于50°,蜂鸣器响

analogWrite(buzzer, 100);

else //否则,蜂鸣器不响

analogWrite(buzzer, 0);

if (HH < 30) //如果湿度小于30,led闪烁

{

digitalWrite(led, HIGH);

delay(50);

digitalWrite(led, LOW);

delay(50);

}

else //否则,led熄灭

digitalWrite(led, LOW);

}

void get_temp_humi() //获取温湿度数据子函数

{

HH = int(dht.readHumidity()); //获得湿度

TT = int(dht.readTemperature()); //获得温度

Serial.print("Temp: "); //串口显示温湿度信息

Serial.println(TT);

Serial.print("Humi: ");

Serial.println(HH);

}

void dis_play() //OLED数据显示子函数

{

u8g.firstPage(); // OLED首页

do

{

char buffer1[1]; //定义字符buffer1

// 将int转为char显示出来

itoa(TT, buffer1, 10); //10:10进制显示

u8g.setFont(u8g_font_gdr10r); //设置字体

u8g.drawStr(25, 26, "Temp:"); //第26行25列显示“Temp:”

u8g.drawStr(70, 26, buffer1); //第26行70列显示温度数据

char buffer2[1]; //定义字符buffer2

// 将int转为char显示出来

itoa(HH, buffer2, 10); //10:10进制显示

u8g.setFont(u8g_font_gdr10r); //设置字体

u8g.drawStr(25, 60, "Humi:"); //第60行25列显示“Humi:”

u8g.drawStr(70, 60, buffer2); //第60行70列显示湿度数据

} while (u8g.nextPage()); //执行配置

}

标签: 8数字式温湿度传感器芯片芯片

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台