【STM32项目开源】基于STM32的智能厨房环境监控系统

目录

一、设计背景和意义

1.1设计背景

1.2设计意义

二、实物效果展示

2.1实物图片

2.2实物演示视频

三、硬件功能简介

3.1项目功能详解

3.2元器件清单

四、主框图与软件流程图

五、硬件PCB展示

六、软件程序设计

七、项目资料包内容

资料获取:查看主页介绍"充哥单片机设计"


一、设计背景和意义

1.1设计背景

在智能化浪潮席卷各行各业的今天,厨房作为家庭生活中频繁使用且风险较高的空间,其安全问题越来越受到关注。根据相关统计数据显示,家庭火灾事故中相当一部分源于厨房,原因主要包括燃气泄漏、火源未熄、温度过高、电器老化等。传统厨房安全管理方式往往依赖人工巡视或单一报警器,存在反应滞后、功能单一、不可远程监控等明显弊端,无法满足现代家庭对安全、智能、便捷的高标准要求。

1.2设计意义

课题采用STM32F103C8T6为主控平台,结合MQ-5燃气传感器、DHT11温湿度传感器、火焰传感器等多种常见传感器模块,配合ESP8266 WiFi模块接入机智云平台,具有良好的硬件适配性与平台兼容性。通过软件层面对系统逻辑的精细设计,不仅提升了系统的实用价值,也为后续拓展更多智能联动场景(如联控窗户、电磁阀等)提供了技术基础。

从学术研究角度看,本课题涵盖了传感器数据处理、嵌入式控制、无线通信、云平台交互、状态机逻辑控制等多个计算机与电子工程交叉领域,能够有效提升学生在软硬件协同开发、系统集成设计以及项目实践中的综合能力。同时,课题选题紧贴社会需求,注重工程实践,具有较高的现实价值和推广前景,符合"以应用促科研、以科研带实践"的工程教育导向。

二、实物效果展示

2.1实物图片

2.2实物演示视频

【开源】基于STM32的智能厨房安全监控系统

三、硬件功能简介

3.1项目功能详解

  1. 传感器:检测液化气和烟雾浓度、火情、环境温湿度
  2. 数据显示:0.96OLED屏幕
  3. 执行机构:舵机(燃气阀门)、风扇(通风)、水泵(灭火)、蜂鸣器(声光报警)
  4. 云平台:通过ESP8266 WIFI联网后,接入机智云平台
  5. App远程监控:App远程监控传感器数据,控制执行机构
  6. 数据设定:系统通过按键或APP设定阈值,切换自/手动模式
  7. 手动模式:手机App或按键控制开关执行机构
  8. 自动模式:燃气浓度超过阈值,自动打开通风扇,声光报警;检测到火焰,自动开启水泵灭火,声光报警

3.2元器件清单

  1. 主控STM32F103C8T6
  2. ESP8266联网WiFi
  3. 0.96OLED显示屏幕
  4. MQ-5燃气传感器
  5. DHT11温湿度传感器
  6. 火焰传感器
  7. 舵机(模拟阀门)
  8. 风扇(通风)、水泵(灭火)
  9. 蜂鸣器+LED声光报警
  10. 按键

四、主框图与软件流程图

主框图

流程图

五、硬件PCB展示

六、软件程序设计

cpp 复制代码
#include "sys.h"
#include "delay.h"
#include "adc.h"
#include "gpio.h"
#include "OLED_I2C.h"
#include "ds18b20.h"
#include "timer.h"
#include "usart1.h"
#include "esp8266.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

extern const unsigned char BMP[];

char  display[16];           //显示缓存区
short temperature=0;         //温度
u8    setTempValue  = 40;    //温度上限
u8    setSmokeValue = 60;    //烟雾上限
u8    alarmFlag = 0x00;      //蜂鸣器报警标志
u16   smoke=0;               //烟雾
u8    setn=0;                //记录设置按键按下的次数
u8 PWM=5;                   //PWM调节值,用于控制舵机

bool shanshuo=0;
bool shuaxin=0;
bool sendFlag = 1;
bool flameFlag=0;

void displayInitInterface(void)    //显示初始页面
{
	u8 i;
	for(i = 0;i < 6;i ++)OLED_ShowCN(i*16+16,0,i+0,0);    //显示中文: 厨房安全检测
	for(i = 0;i < 2;i ++)OLED_ShowCN(i*16,4,i+6,0);       //显示中文: 温度
	for(i = 0;i < 2;i ++)OLED_ShowCN(i*16,6,i+8,0);      //显示中文: 烟雾
	OLED_ShowChar(32,4,':',2,0);
    OLED_ShowChar(32,6,':',2,0);
}

void Get_Temperature(void)       //获取温度
{
	temperature=ReadTemperature();
	if(temperature>=setTempValue){
		if(!(alarmFlag&0x01)){
			alarmFlag|=0x01;
			shanshuo = 0;
		}
	}else{
		alarmFlag&=0xFE;
	}
	
	if(temperature>=setTempValue && shanshuo){
		OLED_ShowStr(40, 4,"      ", 2,0);  
	}else{
		sprintf(display," %d",temperature);
		OLED_ShowStr(40, 4, (u8*)display, 2,0);//显示温度
		OLED_ShowCentigrade(68, 4);   //显示摄氏度
	}
}

void Get_Smoke(void)    //获取烟雾浓度
{
	u16 test_adc=0;
	
	/* 获取烟雾浓度 */
	test_adc = Get_Adc_Average(ADC_Channel_9,10);//读取通道9的10次AD平均值
    smoke = test_adc*99/4096;//转换成0-99百分比
	
	if(smoke>=setSmokeValue){
		if(!(alarmFlag&0x02)){
			alarmFlag|=0x02;
			shanshuo = 0;
		}
	}else{
		alarmFlag&=0xFD;
	}
	
	if(smoke>=setSmokeValue && shanshuo){
		OLED_ShowStr(40, 6,"      ", 2,0);
    }else{
		printf(display," %02d %%",smoke);
		OLED_ShowStr(40, 6, (u8*)display, 2,0);//显示温度
	}
}

void displaySetValue(void) //显示设置值
{
	if(setn==1){
        OLED_ShowChar(56,4,setTempValue%100/10+'0',2,0);//显示
		OLED_ShowChar(64,4,setTempValue%10+'0',2,0);//显示
	}
    if(setn==2){
		OLED_ShowChar(56,4,setSmokeValue%100/10+'0',2,0);//显示
		OLED_ShowChar(64,4,setSmokeValue%10+'0',2,0);//显示
		OLED_ShowChar(72,4,'%',2,0);  
	}	
}

void keyscan(void)   //按键扫描
{
	u8 i;
	if(KEY1 == 0) //设置键
	{
        delay_ms(20);
		if(KEY1 == 0){
			while(KEY1 == 0);
			setn ++;
			if(setn == 1){
				OLED_CLS();//清屏
				for(i = 0;i < 4;i ++)OLED_ShowCN(i*16+32,0,i+10,0);//显示:设置温度
					OLED_ShowCentigrade(75, 4);   //显示摄氏度
				}
				if(setn == 2){
					for(i = 0;i < 4;i ++)OLED_ShowCN(i*16+32,0,i+14,0);//显示:设置烟雾
						  OLED_ShowChar(80,4,' ',2,0);  
					}
					if(setn >= 3){
						setn = 0;
						OLED_CLS();//清屏
						displayInitInterface();
					}
					displaySetValue();
			}
	 }
	 if(KEY2 == 0) //加键
	 {
			delay_ms(80);
		  if(KEY2 == 0)
			{
					if(setTempValue  < 99 && setn==1)setTempValue++;
				  if(setSmokeValue < 99 && setn==2)setSmokeValue++;
					displaySetValue();
			}
	 }
	 if(KEY3 == 0) //减键
	 {
			delay_ms(80);
		  if(KEY3 == 0)
			{
				  if(setTempValue  > 0 && setn==1)setTempValue--;
				  if(setSmokeValue > 0 && setn==2)setSmokeValue--;
					displaySetValue();
			}
	 }
}

int main(void)
{
    delay_init();	           //延时函数初始化	 
    NVIC_Configuration();	   //中断优先级配置
	I2C_Configuration();     //IIC初始化
	delay_ms(200); 
	OLED_Init();             //OLED液晶初始化
	OLED_CLS();              //清屏
	OLED_ShowStr(0, 2, "   loading...   ", 2,0);//显示加载中
    ESP8266_Init();       //ESP8266初始化
	Adc_Init();           //adc初始化
	KEY_GPIO_Init();        //按键引脚初始化
	MOTOR_GPIO_Init();     //舵机初始化
	DS18B20_GPIO_Init();    //温度初始化
	DS18B20_Init();         //初始化显示
	OLED_CLS();              //清屏
	displayInitInterface(); //显示初始界面
	TIM3_Init(99,71);   //定时器初始化,定时100us
	while(1)
	{ 
		keyscan();  //按键扫描
		if(setn == 0){
			if(shuaxin == 1)   //大概300ms刷新一次数据
			{
				Get_Temperature();   //获取温度
				Get_Smoke();         //获取烟雾	  
				shuaxin = 0;
			}
			if(FLAME == 0)          //检测到火焰
			{
				delay_ms(10);
				if(FLAME == 0){
					if(flameFlag == 0){
						OLED_DrawBMP(88,4,120,8,(unsigned char *)BMP);  //显示火焰图片
					}
					flameFlag = 1;
					RELAY = 1;  //检测到有火,开启水泵
				}
			}else{
				if(flameFlag == 1){
					OLED_ShowStr(88, 4, "    ", 2,0);
					OLED_ShowStr(88, 6, "    ", 2,0);
			    }
				flameFlag = 0;
				RELAY = 0;  //关闭水泵
			}
			if(temperature>=setTempValue || smoke>=setSmokeValue || flameFlag)BEEP=1;else BEEP=0;  //检测到温度烟雾超标火焰蜂鸣器报警
			if(temperature>=setTempValue || smoke>=setSmokeValue)FAN=1;else FAN=0;      //烟雾温度超标都开启风扇
			if(smoke>=setSmokeValue || flameFlag)PWM=15;else PWM=5;                    //烟雾超标或者是检测到火焰,舵机动作,模拟关闭阀门
			 }
			 UsartSendReceiveData();
			 delay_ms(10);
		}
}

七、项目资料包内容

资料获取:查看主页介绍"充哥单片机设计"

相关推荐
爱倒腾的老唐3 小时前
03、51 单片机介绍
单片机·嵌入式硬件
国科安芯4 小时前
抗辐照MCU芯片在低轨商业卫星原子钟中的适配与优化
单片机·嵌入式硬件·fpga开发·架构·risc-v
赋能大师兄12 小时前
单片机3.3V和5V电压等级
单片机·3.3v·5v
BreezeJuvenile12 小时前
外设模块学习(6)——DHT11温湿度传感器(STM32)
stm32·单片机·dht11·温湿度传感器
桃里桑12 小时前
【嵌入式软件】STM32 UART转485通信问题
stm32·单片机·嵌入式硬件
萧技电创EIIA14 小时前
基于wifi摄像头与单片机的串口透传及二次开发
单片机·51单片机·硬件工程·个人开发
三佛科技-1341638421214 小时前
迷你加湿器方案开发,加湿器/香薰机MCU控制方案开发设计
单片机·嵌入式硬件·智能家居·pcb工艺
hazy1k14 小时前
51单片机基础-矩阵按键
嵌入式硬件·矩阵·51单片机
一支闲人15 小时前
带你了解STM32:SPI通信(硬件部分)
stm32·单片机·嵌入式硬件·基础知识