100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 基于STM单片机和MQ2烟雾传感器人体感应温湿度有毒气体串口蜂鸣器报警光耦继电器降温控

基于STM单片机和MQ2烟雾传感器人体感应温湿度有毒气体串口蜂鸣器报警光耦继电器降温控

时间:2019-04-22 08:50:41

相关推荐

基于STM单片机和MQ2烟雾传感器人体感应温湿度有毒气体串口蜂鸣器报警光耦继电器降温控

1 开发环境

仿真图:proteus8.15

程序代码:KEIL5

原理图:proteus

2 功能说明介绍

结合实际情况,基于STM单片机和MQ2烟雾传感器人体感应温湿度有毒气体串口蜂鸣器报警光耦继电器降温控制proteus仿真设计。该系统应满足的功能要求为:

烟雾传感器值检测,人体红外感应,串口数据远程上传,DHT11温湿度检测,一氧化碳检测,STM32ADC模数转换、声光报警模块、1602液晶显示。

具体功能:

1、1602液晶实时监测及显示温度值、湿度值和烟雾浓度、人体感应值;

2、温度值超设定值启动风扇降温;

3、串口实时输出显示当前检测值;

4、温度、湿度、人体感应超过设定阈值时,蜂鸣器响灯亮起;

5、支持仿真定制。

工程文件使用keil5打开

代码

#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "wifi.h"#include "dht11.h"#include "lcd1602.h"#include "adc.h"#include "timer.h"u8 humi_value = 10,temp_value = 11;u16 smog_value = 111,beam_value=123;u16 smog_value_set = 1200;u16 co_value = 120;u8 humi_value_set = 65,temp_value_set = 22;int num = 0;//用于数据传输//0-3:温度值//4-7:烟雾值//8-11:光照值char value_buf[14]; char co_value_buf[14];//数据处理,显示、判断void Data_Deal(void){DHT11_Read_Data(&temp_value,&humi_value); //读取温湿度值smog_value = Get_Adc_Average(ADC_Channel_0,20); //读取人体感应值beam_value = Get_Adc_Average(ADC_Channel_2,20); //读取其他ADC值co_value = Get_Adc_Average(ADC_Channel_5,20);//湿度显示value_buf[12] = 0x30 + humi_value / 10;value_buf[13] = 0x30 + humi_value % 10;co_value_buf[0] = 0x30 + beam_value / 1000;co_value_buf[1] = 0x30 + beam_value % 1000 / 100;co_value_buf[2] = 0x30 + beam_value % 100 / 10;co_value_buf[3] = 0x30 + beam_value % 10;co_value_buf[4] = 0x30 + co_value / 1000;co_value_buf[5] = 0x30 + co_value % 1000 / 100;co_value_buf[6] = 0x30 + co_value % 100 / 10;co_value_buf[7] = 0x30 + co_value % 10;/*人体感应值显示*/value_buf[4] = 0x30 + smog_value / 1000;value_buf[5] = 0x30 + smog_value % 1000 / 100;value_buf[6] = 0x30 + smog_value % 100 / 10;value_buf[7] = 0x30 + smog_value % 10;//输出读取的值printf("temp: %d\r\nhumi: %d\r\nsmog: %d\r\nbeam: %d\r\nco_value:%d\r\nnum:%d\r\n\r\n", temp_value, humi_value, smog_value, beam_value,co_value,num);if(num > 5){if(num > 7){num =0; }LED_RED = ~LED_RED; LCD1602_Write_Cmd(0x80);LCD1602_Write_Dat('H');LCD1602_Write_Dat('a');LCD1602_Write_Dat('r');LCD1602_Write_Dat('m');LCD1602_Write_Dat('f');LCD1602_Write_Dat('u');LCD1602_Write_Dat('l');LCD1602_Write_Dat(':');LCD1602_Write_Dat(co_value_buf[4]);LCD1602_Write_Dat(co_value_buf[5]);LCD1602_Write_Dat(co_value_buf[6]);LCD1602_Write_Dat(co_value_buf[7]);LCD1602_Write_Dat(' ');LCD1602_Write_Dat(' ');LCD1602_Write_Dat(' ');LCD1602_Write_Dat(' ');}else{//温度值显示value_buf[0] = 0x30 + temp_value % 100 / 10;value_buf[1] = 0x30 + temp_value % 10;LCD1602_Write_Cmd(0x80);//LCD1602_Write_Dat('T');//LCD1602_Write_Dat(':');LCD1602_Write_Dat(value_buf[0]);LCD1602_Write_Dat(value_buf[1]);LCD1602_Write_Dat(0XDF);LCD1602_Write_Dat('C');LCD1602_Write_Dat(' ');LCD1602_Write_Dat(value_buf[12]);LCD1602_Write_Dat(value_buf[13]);LCD1602_Write_Dat('%');LCD1602_Write_Dat(' ');LCD1602_Write_Dat('C');LCD1602_Write_Dat(':');LCD1602_Write_Dat(co_value_buf[0]);LCD1602_Write_Dat(co_value_buf[1]);LCD1602_Write_Dat(co_value_buf[2]);LCD1602_Write_Dat(co_value_buf[3]);}//LCD显示数据//显示人体感应值LCD1602_Write_Cmd(0x80 + 0x40);LCD1602_Write_Dat('V');LCD1602_Write_Dat(':');LCD1602_Write_Dat(value_buf[4]);LCD1602_Write_Dat(value_buf[5]);LCD1602_Write_Dat(value_buf[6]);LCD1602_Write_Dat(value_buf[7]);LCD1602_Write_Dat(' ');LCD1602_Write_Dat('t');LCD1602_Write_Dat(':');LCD1602_Write_Dat(0x30 + temp_value_set % 100 / 10);LCD1602_Write_Dat(0x30 + temp_value_set % 10);LCD1602_Write_Dat(' ');LCD1602_Write_Dat('h');LCD1602_Write_Dat(':');LCD1602_Write_Dat(0x30 + humi_value_set % 100 / 10);LCD1602_Write_Dat(0x30 + humi_value_set % 10);if(temp_value >= temp_value_set){Moto = 0; }else{Moto = 1; }/* 声光报警判断 */if(humi_value >= humi_value_set || temp_value >= temp_value_set || smog_value >= smog_value_set ){Beep = 0;LED_RED = 0; }else /* 未达到声光报警条件,蜂鸣器和LED都不会工作 */{Beep = 1;LED_RED = 1;}}//系统硬件初始化void Sys_Init(void){u8 i;delay_init();//延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2uart_init(115200); //串口初始化为9600,用于调试LED_Init(); /* 蜂鸣器及LED初始化 */DHT11_Init(); //温湿度传感器初始化LCD1602_Init(); //LCD1602初始化Adc_Init();//AD值初始化,用于测量人体感应强调和ADC值printf("test\r\n");/*清屏幕*/LCD1602_Write_Cmd(0x80);for(i=0;i<16;i++){LCD1602_Write_Dat(' ');}}unsigned char key_flag = 0x00;void Key_init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA,PD端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.8}void KeyScan(void){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0){LED_RED = ~LED_RED; }//while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0);}}//主函数int main(void){Sys_Init();Key_init();Beep = 1;LED_RED = 1; Moto = 1; while(1){num++;Data_Deal(); //数据处理KeyScan();}}

基于STM单片机和MQ2烟雾传感器人体感应温湿度有毒气体串口蜂鸣器报警光耦继电器降温控制1602液晶显示proteus仿真设计

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。