​一.硬件方案

智能家居环境监控系统的整体电路主要由stm32单片机最小系统,光MQ-2烟雾传感器电路,红外人体检测电路,DS18B20温度传感器,LCD1602显示电路,水泵驱动电路,风扇驱动电路,LED指示灯,蜂鸣器报警电路;原理图如图:

PCB如下:

二.设计功能

1.通过MQ-2烟雾传感器及检测电路对周围环境中的烟雾浓度值数据进行采集,由模数转换电路将mq-2检测电路输出的模拟量转换成数字量,根据电压值换算出当前烟雾浓度,通过DS18B20温度传感器检查当前环境温度,采用单总线的通信发送,最后将数据传送给微控制器,并由微控制器对数据进行处理分析。 2.单片机将烟雾传感器的检测数据显示在LCD1602液晶显示屏上,使烟雾温度浓度检测结果一目了然,方便人们随时随地的了解周围的烟雾浓度状况。 3.当系统检测到烟雾浓度超过报警值时,水泵开启,蜂鸣器报警,并发送短信。 4.如果温度浓度过高,便由微控制器通过报警电路进行必要的提醒,此时蜂鸣器响起,风扇开启,并发送短信。 5.人体红外通过热释电模块检查是否有人,如果开启防盗模式,检查到有人通过gsm来发送短信,并蜂鸣器报警。 6.设有的5个按键可对各个传感器参数的报警值进行调整;分别为设置键、加一键、减一键、一键报警键、报警开关键。

三.软件设计

主程序源码

int main(void)

{

u16 test_adc,count=0;

u8 shanshuo=0;

u8 RT_BJ = 0;

u8 send_flag1=0;

u8 send_flag2=0;

u8 send_flag3=0;

delay_init(); //延时函数初始化

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

KEY_IO_Init();

DS18B20_Init();

delay_ms(300);

BEEP_DISENABLE();

RTHW_Init();

LCD_Init(); // 1602初始化

LCD_Write_String(0,0," GSM Init... ");

Usart1_Init(9600);

gsm_init();//gsm初始化

Adc_Init();

delay_ms(100);

LCD_Write_String(0,0, "T: C SMOKE: %");//进入主页面,第一行显示的内容

LCD_Write_String(0,1, "FD:OFF ");//进入主页面,第二行显示的内容

LCD_Write_Char(4,0,0xDF);//温度的小圆圈

memset(STM32_RX1_BUF, 0, STM32_RX1BUFF_SIZE);//清除缓存

STM32_Rx1Counter = 0;

while(1)

{

SMS_Receive();

KEY_SCAN();//按键扫描

if(count++ >= 300 && setn==0)//大概延时300毫秒,执行以下代码

{

count = 0;

shanshuo =!shanshuo;

test_adc = Get_Adc_Average(ADC_Channel_9,20);//读取通道9的20次AD平均值

PPM = test_adc*99/4096;//转换成0-99百分比

PPM = PPM >= 99? 99: PPM;//最大只能到百分之99

Temperature = DS18B20_Get_Temp()/10;//读取温度

短信内容装载

TEXT1[23]=TEXT2[35]=Temperature/10+0x30;

TEXT1[27]=TEXT2[39]=Temperature%10+0x30;

TEXT1[51]=TEXT3[35]=PPM/10+0x30;

TEXT1[55]=TEXT3[39]=PPM%10+0x30;

if(Temperature>=Temperature_MAX && shanshuo)//温度超标,闪烁显示

{

LCD_Write_Char(2,0,' ');

LCD_Write_Char(3,0,' ');

LCD_Write_Char(4,0,' ');

LCD_Write_Char(5,0,' ');

}

else

{

LCD_Write_Char(2,0,'0'+Temperature/10);

LCD_Write_Char(3,0,'0'+Temperature%10);

LCD_Write_Char(4,0,0xDF);

LCD_Write_Char(5,0,'C');

}

if(PPM>=PPM_MAX && shanshuo)//烟雾超标,闪烁显示

{

LCD_Write_Char(13,0,' ');

LCD_Write_Char(14,0,' ');

LCD_Write_Char(15,0,' ');

}

else

{

LCD_Write_Char(13,0,'0'+PPM/10);

LCD_Write_Char(14,0,'0'+PPM%10);

LCD_Write_Char(15,0,'%');

}

if(sendFlag == 1)//判断它是否等于1

{

sendFlag = 0;

sim800_send(TEXT1);//发送短信

}

if(Temperature>=Temperature_MAX)//温度超标

{

BEEP=1;RELAY2=1;//开启风扇

if(send_flag1 == 0)//为了报警只发送一条短信

{

send_flag1 = 1;

sim800_send(TEXT2);//温度超标,发送短信

}

}else

{

send_flag1 = 0;RELAY2=0;

}

if(PPM>=PPM_MAX)//烟雾超标

{

BEEP=1;RELAY1=1;//开启水泵

if(send_flag2 == 0)

{

send_flag2 = 1;

sim800_send(TEXT3);//烟雾超标,发送短信

}

}else

{

send_flag2 = 0;RELAY1=0;

}

if(RTHW==1 && Mode==1)//在防盗模式下,检测到有人

{

BEEP=1;

LCD_Write_String(8,1, "Somebody");RT_BJ = 1;

if(send_flag3==0)

{

send_flag3 = 1;

sim800_send("8B66544AFF0168C06D4B523067094EBAFF01");//发送短信“警告!检测到有人!”

}

}

else

{

LCD_Write_String(8,1, " ");RT_BJ = 0;

send_flag3 = 0;

}

if(Temperature < Temperature_MAX && PPM < PPM_MAX && RT_BJ==0 && SD_baojing==0)BEEP=0;//关闭蜂鸣器

}

delay_ms(1);

}

}

资料链接:https://pan.baidu.com/s/1YH5I6bWCwr8lwUZNipetxQ?pwd=ssil 提取码:ssil

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: