功能介绍:
0.本系统采用STC89C52作为单片机
1.系统实时监测当前的雨滴、温湿度、风速,烟雾浓度
2.支持手动/自动两种模式
3.自动模式下
窗户关闭状态下,当烟雾浓度超过阈值,打开窗户,或者环境均在阈值范围以内,打开窗户。其中烟雾浓度过高的情况,蜂鸣器将报警,并需要手动解除报警
窗户开启状态下,当窗户外有人或温湿度超过阈值或风速过高,窗户关闭。其中窗户外有人的情况,蜂鸣器将报警,并需要手动解除报警
4.按键可设定阈值,手动控制窗户,切换工作模式
5.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB:
主程序:
#include "main.h"/*******************变量定义*********************/enum _MODE_DF_ dispMode;bit modeFlag = AUTO; //模式标记uchar motorFlag = 0; //标记当前控制状态,=0已关闭,=1过程中,=2已打开bit motorDir = 1;bit alarmFlag = 0; //报警标志char motorCnt=0;uchar setIndex = 0;uint humidity; //湿度uint temperature; //温度uint gas; //气体uint rain; //雨滴uint windSpeed; //风速//阈值设定uint hmMin= 25;uint hmMax= 50;uint tempMin = 25;uint tempMax = 40;uint gasMin = 30;uint gasMax = 60;uint rainMin = 30;uint rainMax = 60;uint windSpeedMin = 5;uint windSpeedMax = 20;bit dispFlag = 0;char dis[16];/********************************************************函数名称:void mian()函数作用:主函数参数说明:********************************************************/void main(){modeFlag = MANUAL;Timer0_Init(); //初始化定时器0LCD_Init(); //初始化液晶DelayMs(200); //延时有助于稳定LCD_DispStr(4, 0, "Welcome!");LCD_Clear(); //清屏BYJ48 = ((BYJ48 & 0xF0) | REV[0]); //取数据ULN_DQ3 = BIT3; ULN_DQ2 = BIT2; ULN_DQ1 = BIT1; ULN_DQ0 = BIT0;while (1) //死循环{if (dispFlag == 1){dispFlag = 0;if (dispMode == NORMAL){DispNormal();}}if (modeFlag == AUTO){if (motorFlag == 0 || motorFlag == 1) //已关闭或关闭状态中,优先处理气体浓度高的情况{if (gas > gasMax) //气体浓度过高,打开窗户{motorFlag = 1;motorDir = 0;alarmFlag = 1; //报警标志modeFlag = MANUAL; //切换至手动模式}else{if (IR_PIN