C51单片机自动加湿器.docx
- 文档编号:30766017
- 上传时间:2023-08-23
- 格式:DOCX
- 页数:13
- 大小:254.92KB
C51单片机自动加湿器.docx
《C51单片机自动加湿器.docx》由会员分享,可在线阅读,更多相关《C51单片机自动加湿器.docx(13页珍藏版)》请在冰豆网上搜索。
C51单片机自动加湿器
自动加湿器
摘要
随着社会经济的发展和人们生活水平的提高,加湿器开始进入人们的视野。
工厂、车间、仓库、病房和卧室,随处可见加湿器在发挥着极其重要的作用。
但是,常规加湿器只是简单地持续加湿,而在现代化的工业生产及科学实验中,对空气湿度的重视程度日益提高,要求也越来越高,如果湿度不能满足要求,将会造成不同程度的不良后果。
而在居家生活中,空气太干太湿也都不适宜:
太干,细菌病毒容易滋生传播;太湿,容易滋生霉菌。
因此,我们选择了自动加湿器的设计来有效地控制湿度,当环境湿度偏低则加湿,达到设定湿度时就停止加湿,总会把环境湿度控制在适宜的状态下,做到智能、有效和健康地加湿。
目前市面上还没有具有此类功能的自动加湿器,因此必将有广阔的市场前景和极大的开发价值。
一、总体设计
1预期功能:
随着空气温度、湿度的变化自动控制加湿器的通断,依照各个工作环境最适宜的相对湿度控制调节加湿量,使其成为具备智能化恒定加湿功能的加湿器,可以在工厂、车间、仓库、医院及家庭中广泛使用。
2工作流程:
利用温湿度传感器等元件,将天气变化的参数模数转化输入ATmega16单片机,经既定程序与设定的温湿度参数值分析比较后,输出高低电平信号到继电器驱动电路,进而控制加湿器的通断,实现随着环境温湿度变化而自动调节加湿器,空气湿度偏低则加湿,达到设定湿度值时停止加湿的功能。
同时,使用数码管人性化直观显示室内湿度。
其硬件设计的原理图如下所示:
二、工作原理
电原理图如下图:
其中,左端为三位的七段数码管,可根据Mega16单片机的输出高低电平信号来显示环境的湿度值。
右端上部的DHT11为4针单排引脚封装、具有极高的可靠性与长期稳定性的数字温湿度传感器。
右端下部为继电器及其驱动电路,继电器起开关作用,控制与之相连的加湿器的通断。
三、硬件模块方案
1主控模块:
以Atmel公司的ATmaga16单片机作为主控模块。
Mega16是高性能、低功耗的8位AVR微处理器,具有先进的RISC结构,内部集成两个具有独立预分频器和比较器功能的8位定时器/计数器和一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器。
可通过JTAG对MCU进行程序烧写及仿真。
内置晶振,使用方便。
2电源与稳压模块:
经变压器电压转换后采用5V电压为单片机及其他逻辑单元进行供电,并为整个系统提供高电平标准。
3检测模块:
使用温湿度传感器DHT11来采集外部环境的数据,经模数转换后将湿度信号传入单片机。
此传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,具有超快响应、抗干扰能力强等优点。
应用电路为:
4控制模块:
使用继电器AGY2329来控制加湿器的通断。
继电器需要功率驱动,驱动电流往往需要几百毫安,超出了AVR本身I/O口的驱动能力,因此在外围硬件电路中使用了功率驱动电路。
Mega16的输出端PC0接驱动电路的电阻一端,输出电平信号来控制继电器,并实现加湿器的通断操作。
5显示模块:
使用三位七段数码管,数码管为共阳极型.
我们设计显示三位的空气湿度,由于湿度传感器的测试精度限制,最后小数点后我们设定一直显示零。
Mega16的PB4和PB5端口实现位选,PD0-PD6端口实现段选控制功能。
四、软件程序设计
1.总体介绍
本系统编程部分工作采用C语言完成,采用模块化的设计方法,利用各子程序实现各部分功能和过程的入口,完成温湿度变化识别、参数对比分析、控制继电器和湿度显示等功能。
程序设计的流程如下框图所示:
2软件功能
定义几个函数,分别为:
“dht11_start(void)//DHT11开始标志”在DHT11正式读数据前的准备工作,给DHT11一个长于18ms的低电平,以让DHT11准备读数。
“DHT11_getdata(void)//读数据函数”严格按照DHT11设计要求的时序读数。
当高电平长于100us时就按一计数,低于30us就按零记。
在每次高电平前有13us左右的低电平。
如此三十个周期。
“voiddht11_switchcode(void)//数据转换”,将采集数据的数据转化为十进制,并读出前八位湿度值。
在主函数分别严格调用这些函数,并将该数值勇气段数码管显示出来,同时判断其大小,当低于60的时候就启动继电器,以带动加湿器工作。
3软件流程
准备开始标志:
当低电平低于18ms后,单片机将输出端口改为输入,开始读取DHT11的数据。
然后将电平拉高,等待DHT11响应,DHT11将电平信号拉低以示响应单片机信号,而后将电平拉高准备发送数据信息。
读取数据过程:
DHT11先发送12--14us的低电平信号,然后紧跟高电平,如果在116—118us左右,将自动识别为1,如果在26—28us左右将识别为0。
这样循环40次,共40为二进制数,每八位为一组,其中包括八位湿度整数位、八位湿度小数位、八位温度整数位,八位温度小数位、八位较检位。
由于设计的需要,现只读取八位湿度整数值。
将读取的湿度值转化为十进制数,并用数码管显示,同时判断其大小是否符合60,如果不是就将加湿器打开,以给空气加湿到预定值。
如此循环,大约每一秒采集一次信息。
4软件功能
采集信息并将信息转化为数字量输出,同时判断其是否符合要求,并以此为依据开通或关闭加湿器。
五系统测试及指标参数
1湿度变化:
空气湿度的测量范围为20—60%RH,我们选择的工作区间为30%RH—60%RH,5-40℃,当湿度小于20%RH时加湿器开始工作,大于60%RH时加湿器停止工作。
2可以通过数码管实现空气湿度的人性化显示。
六所需资源
单片机开发板1个
面包板1个
DHT11湿度传感器芯片1个
继电器1个
三位数码管1个
二极管、三极管若干
电阻、电容、导线若干
七发展空间
传统加湿器只具有加湿功能,而我们设计的自动加湿器具有智能控制空气湿度的功能,极大地方便了人们的生活,提高了生活质量。
目前市面上尚无具有同等功能的加湿器,且此加湿器造价低廉,因而市场前景广阔。
适应于家居、车载、办公等小型场所,同时也可以应用于大型仓库和工厂、车间等环境的空气湿度的自动控制,有利于仓库管理和精准控制。
但是现在我们设计的加湿器还功能比较单一,只能实现湿度控制,而且湿度值必须提前设定好写入单片机,将来的发展可以通过外加键盘实现湿度阈值的可调性或者根据外界湿度值来控制加湿器工作速度的快慢变化,以实现更广阔的发展空间。
附—所用程序
/*****************************************************
Thisprogramwasproducedbythe
CodeWizardAVRV2.03.4Standard
AutomaticProgramGenerator
?
Copyright1998-2008PavelHaiduc,HPInfoTechs.r.l.
Project:
Version:
Date:
2009-6-12
Author:
Company:
Comments:
Chiptype:
ATmega16
Programtype:
Application
Clockfrequency:
1.000000MHz
Memorymodel:
Small
ExternalRAMsize:
0
DataStacksize:
256
*****************************************************/
#include
#include
#defineDHT11_DATAPORTA.0
#defineDHT11_DATA_SETDHT11_DATA=1
#defineDHT11_DATA_CLIDHT11_DATA=0
#defineDHT11_DATA_OUTDDRA.0=1
#defineDHT11_DATA_INDDRA.0=0
#defineDHT11_DATA_READPINA.0
unsignedintdht11_data[2];
unsignedintdht11_readdata;
bitdht11_flag=0;
unsignedcharhumidity;//湿度8位数据值
//unsignedcharhumidity1;
//unsignedchartemp;//温度8位数据值
unsignedcharflag;
unsignedcharx,y,t;
unsignedcharshidu;
flashunsignedcharled_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsignedchardht11_start(void)//dht11开始标志
{
unsignedcharcount=0;
DHT11_DATA_OUT;
DHT11_DATA_CLI;//将数据线拉低18ms以上
//delay_ms(18);//延迟18ms以上即可
for(t=1;t;t--)
{
PORTB=0x10;
PORTD=led_7[y];
delay_ms(5);
PORTB=0x20;
PORTD=led_7[x];
delay_ms(5);
}
DHT11_DATA_IN;
DHT11_DATA_SET;//释放数据线
while(DHT11_DATA_READ)
{
delay_us(5);
count++;
if(count>10)
return0;//延迟等待50us,超过则失败
}
while(!
DHT11_DATA_READ);//等待低电平结束
return1;//返回1,表示dht11响应
}
voiddht11_getdata(void)//读数据函数
{
unsignedchari=0,j=0,count=0;
while(DHT11_DATA_READ);//等待数据线高电平结束
for(j=0;j<2;j++)//舍去校验位
{
for(i=0;i<=15;i++)//读16位数据
{
while(!
DHT11_DATA_READ);//1bit开始低电平信号结束
delay_us(30);
if(DHT11_DATA_READ)
{
dht11_readdata<<=1;
dht11_readdata|=0x0001;
}
else
dht11_readdata<<=1;//判断位值
flag=2;
while(DHT11_DATA_READ&&flag++);
if(flag==1)break;//等待高电平结束
}
if(flag==1)break;
dht11_data[count++]=dht11_readdata;//将读出的16位数据一位位的放入数组保存
dht11_readdata=0;
}
dht11_flag=1;//40位数完成标识
}
voiddht11_switchcode(void)
{
humidity=dht11_data[0]>>8;
if((humidity>0)&&(humidity<100))//判断,如果湿度值大于100直接否定不取
shidu=humidity;
//temp=dht11_data[1]>>8;
//shis=humidity/10;
//shig=humidity%10;
}
voidmain()
{DDRD=0xFF;
PORTD=0xFF;
DDRB=0xFF;
PORTB=0x00;
DHT11_DATA_SET;
DHT11_DATA_OUT;
while
(1)
{
while(!
dht11_start());
dht11_getdata();
dht11_switchcode();
x=shidu%10;
y=shidu/10;
if(shidu<60)
{
PORTC=0x01;
//delay_ms(3);
}
else
PORTC=0x00;
t=2000;
for(;t;t--)
{
PORTB=0x10;
PORTD=led_7[y];
delay_ms(5);
PORTB=0xA0;
PORTD=led_7[x];
delay_ms(5);
PORTB=0x40;
PORTD=led_7[0];
delay_ms(5);
}
DHT11_DATA_SET;
DHT11_DATA_OUT;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 单片机 自动 加湿器