储藏室温湿度监测系统.docx
《储藏室温湿度监测系统.docx》由会员分享,可在线阅读,更多相关《储藏室温湿度监测系统.docx(19页珍藏版)》请在冰点文库上搜索。
储藏室温湿度监测系统
“计算机控制系统〞
课程设计报告
题目储藏室温湿度监测系统
姓名
2013/1/16
一、项目背景
一般情况下储藏室内的温度与湿度等需要保持在一定的X围之内,尤其对于那些食物、粮食等需要进展生命活动的被储藏对象来说,维持温湿度的相对恒定尤为重要。
当温度或湿度偏离正常X围一定程度时,它们可能进展无氧呼吸甚至生长等,使得质量无法保障,达不到储藏的目的。
所以,我们设计了一个储藏室的温湿度监测系统。
当温度超过30℃或者相对湿度超过80%时报警,提醒仓库管理员进展通风降温等。
二、总体方案
为了实现设计的要求需要我们以单片机为控制核心,并利用热敏传感器测量环境的温度,利用湿敏传感器测量周围环境中的湿度;传感器的输出信号经过运算放大器的放大后经过单片机内置AD的采样输入到控制系统,控制系统根据采得的数据经过分析,将控制信号通过IO口输出,控制数码管将相应的数据显示出来,当采得的数据达到设定的阈值时通过IO口输出控制信号,经过驱动电路的放大,驱动蜂鸣器发出声音报警。
1、系统结构框图
2、系统工作流程
三、传感器与其它器件选择
该系统中需要用到两种传感器:
温度传感器与湿度传感器,另外由于显示与报警的要求,还需要用到数码管与蜂鸣器等器件。
1、温度传感器的选择
常用的温度传感器有热敏电阻器、铂电阻、热电偶等,其中热敏电阻通常具有负温度系数。
并且不能太高的温度下使用,其测量X围一般为-100~300℃。
热敏电阻的阻值与温度的关系如右图所示:
热敏电阻也有多重类型,如,批量生产可降低本钱的通用型热敏电阻器,热响应速度非常快的热敏电阻器,可在高温下使用的热敏电阻器,分散性小的高精度热敏电阻器等,电阻-温度特性呈线性变化的线性热敏电阻器,自动组装中不可缺少的片热式热敏电阻器,利用其自身加热的自加热型热敏电阻器。
在本项目中,需要测量的温度测量误差不大于1℃,测量X围在30℃以下。
根据测量要求,可以知道热敏电阻中的线性热敏电阻与通用型热敏电阻等。
其中通用型热敏电阻测量的温度上限为100℃,适合本系统的测量要求,并且价格廉价。
上图所示的热敏电阻器的电阻值变化与温度的特性不是线性关系。
但是,通过对热敏电阻器增加串联电阻或者并联电阻的方法可以实现线性化,不过灵敏度会下降,在50℃的温度跨度内,可以讲非线性误差控制在0.1℃以下,可以满足本项目的要求。
铂电阻是一种性能极其稳定、测量X围宽达-200~+650℃的温度传感器,是在高精度温度测量中不可欠缺的温度传感器,其电阻-温度特性如图上所示。
最近出现了适合于工业化生产的廉价的薄膜型或者厚膜型的铂电阻,这些膜式电阻的电阻除了可以跟随环境温度波动、具有热响应速度快的优点外,还由于容易获得高电阻值,而容易进展电路设计,测量电路如如下图所示。
热电偶是利用贝塞克效应进展温度测量的,其最大的优点在于温度测量的X围极宽,并且测量精度高。
但是,测量过程繁琐,所以不适合本系统采用。
由于铂热电阻器线性度很好,并且稳定,所以在该测量过程中选择铂热电阻作为温度传感器。
在铂热电阻器中,最为常用的是Pt100。
Pt100温度传感器的主要技术参数如下:
测量X围:
-200℃~+850℃;允许偏差值△℃:
A级±〔0.15+0.002│t│〕,B级±〔0.30+0.005│t│〕;热响应时间<30s。
另外,Pt100温度传感器还具有抗振动、稳定性好、准确度高、耐高压等优点。
为了提高温度测量的准确性,可以使A/D转换器的5V参考电源要稳定在mV级;在价格允许的情况下,Pt100传感器、A/D转换器和运放的线性度要高。
同时,利用软件矫正其误差,可以使测得温度的精度在±0.2℃左右。
2、湿度传感器
湿度测量传感器包括:
电阻值变化型相对湿度传感器,陶瓷型相对湿度传感器,电容量变化型相对湿度传感器,利用自加热型热敏电阻器制作的相对湿度传感器。
其中陶瓷型相对湿度传感器适用于长时间处于高湿环境的条件,不适合本项目采用。
电阻值变化型相对湿度传感器,其感湿局部使用的是高分子材料,由外壳和多分子薄膜保护着,经久耐用。
通常相对湿度传感器的使用湿度X围是20%~95%,高耐水性的湿度传感器可以在20%~100%的相对湿度下使用。
根据项目需求,在此只需要使用通用型相对湿度传感器即可。
电容量变化型相对湿度传感器与电阻值变化型相对湿度传感器具有线性输出的特点,所以不需要线性化电路或利用程序进展线性化处理等。
而且这种相对湿度传感器对于湿度的变化响应速度快,抗结露能力强,耐腐蚀性能好,即使在最高温度为180℃的环境气氛中也可以正常工作。
并且这种传感器比拟低廉,常用的型号是HS1101。
如如下图是其电容量变化型湿敏传感器响应特性图:
其测量电路如下所示:
3、数码管选择
系统设计要求使用同一组数码管进展显示,并且由于温度测量误差不大于1℃,相对湿度测量误差小于10%所以此题目中选择4位8段数码管,显示温度时最低位显示符号“C〞,显示湿度时最低位显示符号“H〞〔湿度的英文单词humidity首字母〕。
为了便于观察,数码管显示颜色选择为红色,并且选择大尺寸的数码管。
如如下图所示:
其电路图如下:
4、AD与运放
在本系统中需要先利用运放对传感器的输出信号进展放大,然后再利用AD将运放放大后的输出信号采样输入到控制单元当中。
为了防止运算放大器对负信号进展放大,以免使用负电源所以需要对传感器电路进展调节,最终使得当温度处于最低值时输出电压为正值。
此时可以选择通用的运算放大器,供电电压采用5V。
由于LM324四运放电路具有电源电压X围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路中。
所以,在本系统中选择LM324作为运放。
由于现今绝大局部单片机都内置有多路AD,所以我们选择使用单片机内置AD用于采样。
其采样速率与精度等都足以满足本系统的需求。
放大器电路原理图如下所示:
为了使得湿敏传感器的输入信号不被误识别,同样需要设计放大电路进展放大,使得高电平为5V。
并且由于HS1101电压输出典型参数如下:
RH/%
10
20
30
40
50
60
70
80
90
Vout/v
5、串口通信
串行接口是一种可以将承受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将承受的串行数据流转换为并行的数据字符供应CPU的器件。
在微机之间以与微机与计算机之间通信时,经常选择串口通信作为通信的方式。
在本监测系统当中,我们需要根据储藏室的大小合理的设定监控点的数量,对于需要多个监控点的储藏室,就需要不同的微机之间以与微机与计算机之间进展通信。
为了使用方便,我们在选择单片机时选择那些具有串口通信功能的型号即可满足使用的要求。
6、其它
在本系统中所有的器件都选择5V作为供电电源,所以我们选择AC-DC220V转5V的隔离电源模块——,其输出功率为5W足以满足整个系统的需要为了保证电源电压的稳定,在电源输出端增加一个较大的电解电容。
单片机输出报警信号,在驱动电路的驱动下蜂鸣器发出声音。
根据储藏室的大小,选择蜂鸣器的功率与设计驱动电路或选择驱动芯片。
在此选择HYD-3026,其声强达到85dB,供电电压为5V,40mA驱动电流。
为此设计如下驱动电路,由于9013的最大输出电流为625mA满足需要,所以三极管选择9013。
本系统需要用到单片机的内置AD采样、定时器、中断、IO口等资源,以与两个串口。
为此我们选择宏晶科技生产的STC12C5A系列单片机。
四、程序模块设计
1.AD采样程序
voidADC_Power_On()//AD转换电
{
ADC_CONTR|=0x80;
delay(5);//必要的延时
}
voidget_ad_result()
//取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为//AD采样数据
{
uinti,q=0;
for(i=0;i<10;i++)
{
tp=0;
ADC_RES=0;//高八位数据清零,STC12C5A60S2AD数//据存放名与STC12C54××系列不同
ADC_RESL=0;//低两位清零
ADC_CONTR|=0x08;//启动AD转换
while(!
tp)//判断AD转换是否完成
{
tp=0x10;
tp&=ADC_CONTR;
}
ADC_CONTR&=0xe7;
ad_average_result=ADC_RES;
q=q+ad_average_result;
}
ad_average_result=q/10;
}
voidcaiyang()//测电压
{
P1M0|=0x01;//设P1_0为开漏模式如:
P1_0=#00000000B
ADC_CONTR=0xe0;//设置P1.0为输入AD转换口
delay
(2);
get_ad_result();//取转换数据
Vin=ad_average_result;
}
2.定时器初始化程序
voidInit_timer0()
{
EA=1;//开总中断
ET0=1;//允许定时器0中断
TMOD=1;//定时器工作方式选为16位内部时钟计时
TL0=0x00;
TH0=0x00;
TR0=1;
}
3.外部中断初始化程序
voidinit_interrupt()
{
EA=1;
EX0=1;
IT0=1;//外部中断选择边沿触发
}
4.外部中断服务程序
voidint0_interrupt(void)interrupt0
{
TR0=0;
Timeus=256*TH0+TL0
TR0=1;
TH0=0;
TL0=0;
}
5.定时器中断服务程序
voidtimer0_interrupt(void)interrupt1using0
{
TL0=0x00;
TH0=0x00;
count++;
}
6.数码管显示程序
voidwrite(gw,sw,bw,sy)
{
we3=0;
P0=~table[sy];
we0=1;
we1=1;
we2=1;
delay_ms
(1);
we2=0;
P0=~(table[gw]+0x01);//点亮小数点
we0=1;
we1=1;
we3=1;
delay_ms
(1);
we1=0;
P0=~table[sw];
we0=1;
we3=1;
we2=1;
delay_ms
(1);
we0=0;
P0=~table[bw];
we3=1;
we1=1;
we2=1;
delay_ms
(1);
}
7.延时1ms程序
voiddelay_ms(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=240;j>0;j--);
}
8.串口通信程序
voidserial_port_one_initial()
{
//P0M1&=0X00;
//P0M0&=0X00;
SCON=0x50;//0101,00008位可变波特率,无奇偶校验位
TMOD=0x21;//0011,0001设置定时器1为8位自动重装计数器
TH1=RELOAD_COUNT;//设置定时器1自动重装数
TL1=RELOAD_COUNT;
TR1=1;//开定时器1
BRT=RELOAD_COUNT;
//BRTR=1,S1BRS=1,EXTRAM=1;//ENABLEEXTRAM
AUXR=0x11;//T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS
EA=1;//开总中断
ES=1;//允许串口中断
}
voidsend_UART_one(unsignedchari)
{
ES=0;//关串口中断
TI=0;//清零串口发送完成中断请求标志
SBUF=i;
while(TI==0);//等待发送完成
TI=0;//清零串口发送完成中断请求标志
ES=1;//允许串口中断
}
voidUART_one_Interrupt_Receive(void)interrupt4
{
if(RI==1)
{
RI=0;
delay_ms(5);
_flag=SBUF;
//send_UART_one(_flag);
/*if(k==0x55)
{
k=0;
_flag=1;
}*/
}
else
{
TI=0;
}
}
9.主程序
#include
#defineucharunsignedchar
#defineuintunsignedint
#include
#defineRELOAD_COUNT0xfd//11.0592MHz,12T,SMOD=0,9600bps
sbitwe0=P3^4;
sbitwe1=P3^5;
sbitwe2=P3^6;
sbitwe3=P3^7;
sbitled0=P2^0;
sbitled1=P2^1;
sbitled2=P2^2;
sbitled3=P2^3;
sbitled4=P2^4;
sbitled5=P2^5;
sbitled6=P2^6;
sbitled7=P2^7;
sbitbeep=P1^4;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x07f,0x6f,0x39,0x76};//0123456789CH
uchartp,ad_average_result=0,Vin=0,bw,sw,gw,sy,count=0;
uintTimeus=0,temperature,rh;
voidseparate(uintnum)
{
num=num*10;
bw=num/100;
sw=num%100/10;
gw=num%100%10;
}
voidmain()
{
ADC_Power_On();
Init_timer0();
init_interrupt();
while
(1)
{
caiyang();
temperature=Vin*3;
separate(temperature);
send_UART_one〔temperature〕;
sy=0x39;
write(gw,sw,bw,sy);
delay_ms(600);
rh=Timeus*3;
separate(rh);
send_UART_one〔rh);
sy=0x76;
write(gw,sw,bw,sy);
if(temperature>30|Timeus>80)
{
while
(1)
{
beep=1;
delay_ms(5);
beep=0;
}//重启后报警取消
}
}
}
五、调试要点
1、蜂鸣器调试:
在硬件电路的调试过程中根据对蜂鸣器的声强需求,调节电路中的R1使得声音大小适宜。
2、运算放大器调试:
由于热敏传感器与湿敏传感器输出信号未经测量,所以需要实际对其后的运放放大电阻进展调节,使得输出电压达到最适宜的X围。
3、软件调试:
对于主程序的温度与电压的关系以与周期与相对湿度的关系,需要根据测量结果进展修改。
六、总结
《计算机控制系统》课程设计是我做课程设计中学习到东西比拟多的一门课程设计,从开始的选题到后续的查阅资料并逐步完善以与仿真、调试等,整个流程完成后,使我们对项目的系统设计有了一个直观的认识。
在选题的过程中屡次更换选题,也使我积累了很多较好的设计方案。
我想这些对我以后的工作、事业会有极大的帮助。
另外,在课程设计的过程中我们很好地的相互配合,这对我们以后在工作中进展良好的协作、发挥自己在团队中的作用也具有很大的帮助。
另外,由于未进展实物调试,所以其中的局部参数设置的未必很适合。
七、参考文献
1、
2、