设计功能
(1)主要采用51单片机+最小系统+LCD1602液晶显示模块+MQ-2烟雾模块+ADC0832模块+DS18B20温度模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+风扇模块+按键模块。
(2)LCD1602液晶显示、DS18B20温度传感器、MQ-2烟雾传感器或MQ-5可燃气体传感器及ADC0832模数转换芯片构成一套火灾控制系统设计;
(3)实时显示当前的烟雾值和温度值;温度和烟雾的报警值可以通过按键设定;
(4)当前温度值超过上限时,红灯亮,蜂鸣器响;当前烟雾值超过上线时,黄灯亮,蜂鸣器响;
(5)四个按键功能:减、设置、加、单独的是复位按键;
原理图:
原理图绘制软件采用AD2013。烟雾浓度是由MQ-2烟雾传感器把非电量转换为电量,传感器输出的是0-5伏的电压值且电压值稳定,外部干扰小等。因此,可以直接把传感器输出电压值经过A/D转换器转换得到数据送入单片机进行处理。此外,温度传感器采用数字型温度传感器DS18B20,无需复杂电路,只需将传感器连接上电源,信号线接到单片机引脚上,通过传感器控制时序即可读取出温度值。
其总体硬件原理图如图所示。
仿真设计
仿真软件采用Protues7.8。烟雾传感器采用电位器模拟代替。
程序设计
程序采用C作为编程语言,使用Keil5作为编程软件;
void main (void)
{
u8 key;
wendu=check_wendu(); //初始化时调用温度读取函数 防止开机85°C
Init1602(); //调用初始化显示函数
LCD_Write_String(0,0,"SET T:00 E:000"); //开机界面
LCD_Write_String(1,0,"NOW T:00.0 E:000");
delay_ms(1000);
wendu=check_wendu(); //初始化时调用温度读取函数 防止开机85°C
while (1) //主循环
{
key=Key_Scan(); //按键扫描
yanwu=Adc0832(0); //读取烟雾值
wendu=check_wendu(); //读取温度值
if(key==KEY_SET)
{
Mode++;
}
switch(Mode) //判断模式的值
{
case 0: //监控模式
{
Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu); //显示预设温度,预设烟雾,温度值,烟雾值
if(yanwu>=yushe_yanwu) //烟雾值大于等于预设值时
{
Led_Reg=0; //烟雾指示灯亮
Fan=0;
Buzzer=0; //蜂鸣器报警
}
else //烟雾值小于预设值时
{
Led_Reg=1; //关掉报警灯
Fan=1;
}
if(wendu>=(yushe_wendu*10)) //温度大于等于预设温度值时(为什么是大于预设值*10:因为我们要显示的温度是有小数点后一位,是一个3位数,25.9°C时实际读的数是259,所以判断预设值时将预设值*10)
{
Buzzer=0; //打开蜂鸣器报警
Led_Yellow=0; //打开温度报警灯
}
else //温度值小于预设值时
{
Led_Yellow=1; //关闭报警灯
}
if((yanwu<yushe_yanwu)&&(wendu<(yushe_wendu*10))) //当烟雾小于预设值并且温度也小于预设值时 (&&:逻辑与,左右两边的表达式都成立(都为真,也就是1)时,该if语句才成立)
{
Buzzer=1; //停止报警
}
break;
}
case 1://预设温度模式
{
SelectPosition(0,5) ; //指定位置
write_com(0x0d); //阴影闪烁
if(key==KEY_ADD) //加键按下
{
yushe_wendu++; //预设温度值(阀值)加1
if(yushe_wendu>=99) //当阀值加到大于等于99时
yushe_wendu=99; //阀值固定为99
LCD_Write_Char(0,6,yushe_wendu,2) ;//显示预设温度
}
if(key==KEY_MINUS) //减键按下
{
if(yushe_wendu<=1) //当温度上限值减小到1时
yushe_wendu=1; //固定为1
yushe_wendu--; //预设温度值减一,最小为0
LCD_Write_Char(0,6,yushe_wendu,2) ;//显示预设温度
}
break; //执行后跳出switch
}
case 2: //预设烟雾模式
{
SelectPosition(0,12) ; //指定位置
write_com(0x0d); //打开显示 无光标 光标闪烁
if(key==KEY_ADD) //加键按下
{
if(yushe_yanwu>=255) //当阀值加到大于等于255时
yushe_yanwu=254; //阀值固定为254
yushe_yanwu++; //预设烟雾值(阀值)加1,最大为255
LCD_Write_Char(0,13,yushe_yanwu,3) ;//显示预设烟雾
}
if(key==KEY_MINUS) //减键按下
{
if(yushe_yanwu<=1) //当烟雾上限值减小到1时
yushe_yanwu=1; //固定为1
yushe_yanwu--; //预设温度值减一,最小为0
LCD_Write_Char(0,13,yushe_yanwu,3) ;//显示预设烟雾
}
break;
}
default :
{
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
Mode=0; //恢复正常模式
break;
}
}
}
}