硬件设计
当湿度过高时,单片机I/O口通过继电器驱动风扇的电动机使风扇运转来降低湿度。
2.6.2 报警模块
当所测温度或湿度超过设定值的上下限,就会报警。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
图12 电磁式蜂鸣器
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。S51增强型单片机实验板通过一个三极管来放大驱动蜂鸣器,原理图见下面图12:
第27页(共48页)
温室大棚温湿度控制系统
BUZ1BUZZERQ1855010kR2 图13 单片机驱动蜂鸣器 如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的I/O口控制,当该I/O输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当I/O口输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制I/O口的电平来使蜂鸣器发出声音和关闭。程序中改变单片机I/O口输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变单片机I/O口输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。
第28页(共48页)
软件设计
3.软件设计
与硬件设计相对应,软件设计也采用模块化程序设计的方式,包括主程序模块,初始化参数设置模块,无线通讯发送模块,无线通讯接收模块,数据采集程序模块,显示模块。
3.1 初始化子程序
初始化程序主要完成以下功能:当系统启动时确定电磁阀关闭、程序设置温湿度的上下限值的初始值、用于定时器T1、TO的初始化、串口中断的初始化。
/*------------------------------------------------ 定时器0初始化
------------------------------------------------*/ void TIM0init(void)//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; //重载值 TL0=0x00; //初始化值 ET0=1; //开中断
TR0=1; }
/*------------------------------------------------ 外部中断0初始化
------------------------------------------------*/ void EX0init(void) {
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; //使能外部中断 EA = 1; //开总中断 }
第29页(共48页)
温室大棚温湿度控制系统
3.2 数据采集模块
软件流程 准备开始标志:
当低电平低于18ms后,单片机将输出端口改为输入,开始读取DHT11的数据。然后将电平拉高,等待DHT11响应,DHT11将电平信号拉低以示响应单片机信号,而后将电平拉高准备发送数据信息。 读取数据过程:
DHT11先发送12—14us的低电平信号,然后紧跟高电平,如果在116—118us左右,将自动识别为1,如果在26—28us左右将识别为0。这样循环40次,共40位二进制数,每八位为一组,其中包括八位湿度整数位、八位湿度小数位、八位温度整数位,八位温度小数位、八位较检位。由于设计的需要,现只读取八位湿度整数值,将读取的湿度值传给单片机。 程序如下: #include%unsigned char wendu,shidu;
void delay_us() // 延时子程序 {
unsigned char i; i--; i--; i--; i--; i--; i--; }
void delayms(unsigned int x) // 根据给定值进行延时子程序
第30页(共48页)
软件设计
{
unsigned char n;
while((x--)!=0) {
for(n=0;n<115;n++){;} } }
char receive() {
unsigned int i; unsigned char temp,respond; unsigned char com_data=0; for(i=0;i<=7;i++) {
respond=2;
while((!TRH)&&respond++); delay_us(); delay_us(); delay_us();
if(TRH)
第31页(共48页)