009基于物联网的智能厨房安全监测系统

目录

一、这个毕设是干什么的?

二、它解决什么问题?

三、核心功能?

四、用到哪些技术?

五、系统是怎么工作的?

六、大概怎么做?

七、硬件清单与接线

1、硬件清单

2、接线表

八、核心器件原理简述

[1、MQ-2 / MQ-9 燃气传感器](#1、MQ-2 / MQ-9 燃气传感器)

2、燃气电磁阀(常闭型)

3、分级报警阈值

九、分级报警与数据设计

1、报警分级

2、上报数据

十、开发环境搭建

[十一、软件设计(.h / .c 多文件工程)](#十一、软件设计(.h / .c 多文件工程))

1、工程文件结构

[2、config.h ------ 全局配置](#2、config.h —— 全局配置)

[3、gas.h / gas.c ------ 燃气传感器模块](#3、gas.h / gas.c —— 燃气传感器模块)

[4、env.h / env.c ------ 温湿度模块](#4、env.h / env.c —— 温湿度模块)

[5、valve.h / valve.c ------ 电磁阀控制模块](#5、valve.h / valve.c —— 电磁阀控制模块)

[6、alarm.h / alarm.c ------ 分级声光报警模块](#6、alarm.h / alarm.c —— 分级声光报警模块)

[7、cloud.h / cloud.c ------ 数据上传与推送模块](#7、cloud.h / cloud.c —— 数据上传与推送模块)

[8、display.h / display.c ------ OLED 显示模块](#8、display.h / display.c —— OLED 显示模块)

[9、main.c ------ 主程序](#9、main.c —— 主程序)

十二、代码要点讲解

十三、功能测试与验收

十四、能给你什么启发?

[十五、开题报告 & 答辩要点](#十五、开题报告 & 答辩要点)

1、开题报告可直接改用的表述

2、答辩常见问题


难度定位 :★★★☆☆(中等安全型)|适合:想做一个「居家安全刚需 + 硬件便宜 + 逻辑简单好调试」选题、基础中等的同学|预估周期:3~4 周

一、这个毕设是干什么的?

一句话:做一套能实时监测厨房燃气泄漏、超标自动关掉燃气阀、多级声光报警、还能记录历史数据的智能厨房安全系统。

再展开说:厨房里最怕的就是燃气泄漏和高温。这套系统用 ESP32 主控,接上燃气传感器(检测可燃气体浓度)、温湿度传感器(监测厨房环境)。平时它安安静静地监测,浓度正常就显示数据;一旦燃气浓度升高(比如做饭忘关火、管道漏气),系统进入分级报警 :浓度稍高先黄灯 + 短鸣提醒你;浓度继续升高到危险值,红灯长鸣 + 蜂鸣器刺耳报警,同时自动驱动电磁阀关闭燃气阀门 切断气源,并通过微信给你推送告警。所有数据都会记录,事后可以查。

二、它解决什么问题?

  • 燃气泄漏发现不及时 → 传感器实时监测,超标立刻报警,不用靠鼻子闻;

  • 发现泄漏了也来不及关阀 → 系统自动关掉燃气电磁阀,第一时间切断气源;

  • 单一蜂鸣器报警不够醒目 → 多级报警(预警 + 危险),不同浓度不同响应,更合理;

  • 出事后不知道当时什么情况 → 历史数据记录,浓度、温度、时间都有据可查;

  • 厨房高温/湿度过高隐患 → 顺带监测温湿度,环境异常也能提醒。

本质是:把「靠人闻、靠人记、靠人关」的被动厨房,升级成「实时监测 + 自动切断 + 分级报警 + 数据留痕」的主动安全厨房,这正是居家安全从「亡羊补牢」走向「防患未然」的方向。

三、核心功能?

功能 说明
燃气泄漏实时检测 MQ-2/MQ-9 传感器实时采集可燃气体浓度
分级报警 浓度低→预警(黄灯+短鸣);浓度高→危险(红灯+长鸣)
自动关阀 危险级别自动驱动电磁阀关闭燃气阀门
温湿度监测 DHT11 实时采集厨房温度、湿度
本地显示 OLED 显示燃气浓度、温湿度、报警状态
微信推送 危险告警推送手机微信(含浓度与时间)
历史数据记录 上传云平台,记录浓度曲线与告警事件
手动复位 排除隐患后按键/远程复位电磁阀,恢复供气

四、用到哪些技术?

类别 具体 作用
主控 ESP32 采集判断、分级报警、控制阀门、联网
燃气检测 MQ-2(可燃气体)/ MQ-9(CO+可燃气体) 检测燃气浓度
温湿度 DHT11 采集厨房温湿度
执行 燃气电磁阀(常闭型)+ 继电器 危险时切断气源
报警 蜂鸣器 + 双色 LED(红/黄) 多级声光提示
通信 ESP32 内置 WiFi + HTTP/MQTT 推送告警、上传历史数据
显示 SSD1306 OLED(I2C) 本地显示
开发 Arduino IDE + C 语言 编写烧录程序

安全提醒 :MQ-2/MQ-9 传感器工作时会发热,属正常现象;燃气电磁阀必须选「常闭型」------断电即关闭,这样停电/断线时也能自动切断气源,更安全。涉及燃气管道的安装务必请专业人员操作,毕设演示可用模拟气源(打火机气体)测试,切勿真的改动家中燃气管道。

五、系统是怎么工作的?

复制代码
厨房环境
  ↓ 燃气传感器(MQ-2/MQ-9) + 温湿度(DHT11)
ESP32 主控(ADC 采样 → 浓度判断 → 分级)
  ↓
┌───────────┬───────────────┬──────────────┐
│ 正常      │ 预警(低浓度)   │ 危险(高浓度)  │
│ 显示数据  │ 黄灯+短鸣      │ 红灯+长鸣     │
│          │              │ → 关电磁阀    │
│          │              │ → 微信推送    │
└───────────┴───────────────┴──────────────┘
  ↓
历史数据 / 告警记录上传云平台

一句话串起来:传感器采集浓度 → 主控分级判断 → 正常显示、预警声光、危险关阀+推送;所有数据留痕上传。

这套「浓度分级 + 自动执行 + 声光报警 + 数据上报」的架构,是所有安全监测类毕设的通用骨架,也可扩展成工业气体泄漏、实验室安全监测。

六、大概怎么做?

  1. 买齐硬件(ESP32 + MQ-2/MQ-9 + DHT11 + 常闭燃气电磁阀 + 继电器 + 蜂鸣器 + 双色 LED + OLED);

  2. 分别调通:MQ 传感器加热后能随气体浓度变化、DHT11 读数正常、电磁阀能通断;

  3. 标定浓度阈值:用打火机气体靠近传感器,记录 ADC 值,定出「预警阈值」和「危险阈值」;

  4. 写分级逻辑:正常 / 预警 / 危险三档,对应不同声光与动作;

  5. 写关阀与推送:危险时断电关阀 + 微信推送;

  6. 加 OLED 显示与历史记录上传;

  7. 联调:喷一点气体,先预警、再危险,阀自动关、手机收到推送,链路跑通即完成。

核心难点是「传感器预热与阈值标定 + 分级报警逻辑」,程序本身不复杂。下面逐步展开。

七、硬件清单与接线

1、硬件清单

器件 型号/规格 数量
主控板 ESP32 DevKitC 1
燃气传感器 MQ-2(或 MQ-9) 1
温湿度传感器 DHT11 1
燃气电磁阀 常闭型(断电关闭)+ 继电器 1
蜂鸣器 5V 有源蜂鸣器 1
双色 LED 红/黄共阴或共阳 1
OLED 显示屏 SSD1306 128×64(I2C) 1
按键 轻触按键(复位) 1
电源 5V 适配器 1
面包板 + 杜邦线 --- 若干

2、接线表

ESP32 引脚 连接器件 说明
GPIO34 MQ-2 AO ADC 读取气体浓度
GPIO4 DHT11 DATA 单总线读温湿度
GPIO26 继电器 IN 控制电磁阀(低电平触发)
GPIO27 蜂鸣器 报警发声
GPIO25 红色 LED 危险指示
GPIO33 黄色 LED 预警指示
GPIO32 复位按键 排除隐患后复位阀门
GPIO21 OLED SDA I2C 数据线
GPIO22 OLED SCL I2C 时钟线
5V 传感器/继电器 VCC 按模块要求供电
GND 所有器件地线 必须共地

提醒 :MQ-2 需要预热 24 小时(首次使用),短时间测试也至少预热几分钟再标定;常闭电磁阀「断电关、通电开」,所以程序里危险时给继电器断电即关阀,这种失效安全的设计很重要。

八、核心器件原理简述

1、MQ-2 / MQ-9 燃气传感器

  • 半导体式气体传感器,内部加热丝让敏感材料达到工作温度,遇到可燃气体电阻下降,输出电压升高;

  • 输出两路:AO 模拟量(随浓度连续变化,接 ADC)、DO 数字量(超过电位器阈值输出高低电平);

  • 特点:对可燃气体(甲烷、液化气、烟雾)敏感,价格便宜,但需要预热、受温湿度影响、有漂移,所以阈值要实测标定、定期校准;

  • 毕设里用 AO 做连续浓度判断,做分级更直观。

2、燃气电磁阀(常闭型)

  • 电磁阀靠线圈通电打开、断电靠弹簧复位关闭;常闭型默认断电关闭,通电才打开供气;

  • 用继电器控制其通断:正常时给电(阀开、通气),危险/断电时断开(阀关、断气);

  • 这种「断电关阀」是失效安全(fail-safe)设计,停电/断线也能保护。

3、分级报警阈值

  • 预警阈值:浓度超过正常背景值但还不危险,如 ADC 超过 1200(需实测),提示「有气体,注意检查」;

  • 危险阈值:浓度明显升高,如 ADC 超过 2500(需实测),立即关阀 + 长鸣 + 推送;

  • 两档阈值之间要留缓冲,避免在临界点反复跳变(可加迟滞)。

九、分级报警与数据设计

1、报警分级

级别 条件 声光 动作
正常 浓度 < 预警阈值 全灭 正常显示、上传数据
预警 预警阈值 ≤ 浓度 < 危险阈值 黄灯亮、蜂鸣器短鸣 提示检查,继续监测
危险 浓度 ≥ 危险阈值 红灯亮、蜂鸣器长鸣 关电磁阀、微信推送、记录

2、上报数据

复制代码
{"gas":2450,"temp":28.5,"humi":62,"level":2,"ts":1762500000}

level:0=正常,1=预警,2=危险。

十、开发环境搭建

  1. 安装 Arduino IDE(2.x);

  2. 添加 ESP32 板卡(开发板管理器搜索 esp32 安装);

  3. 安装库:DHT sensor library、Adafruit SSD1306、Adafruit GFX、PubSubClient(MQTT);

  4. 选择开发板 ESP32 Dev Module,烧录失败按住 BOOT 键重试。

十一、软件设计(.h / .c 多文件工程)

代码按功能拆分:头文件(.h)只放宏、结构体、函数声明,源文件(.c)放具体实现,职责清晰、符合正式工程规范。

1、工程文件结构

复制代码
esp32_kitchen_safety/
├── config.h      // 全局配置:引脚、阈值、WiFi、推送
├── gas.h         // 燃气传感器模块声明
├── gas.c         // 浓度采集与分级判断实现
├── env.h         // 温湿度模块声明
├── env.c         // DHT11 采集实现
├── valve.h       // 电磁阀模块声明
├── valve.c       // 阀门开/关控制实现
├── alarm.h       // 声光报警模块声明
├── alarm.c       // 分级声光实现
├── cloud.h       // 数据上传/推送模块声明
├── cloud.c       // 上报与微信推送实现
├── display.h     // OLED 显示模块声明
├── display.c     // OLED 显示实现
└── main.c        // 主程序:setup() / loop()

2、config.h ------ 全局配置

复制代码
#ifndef CONFIG_H
#define CONFIG_H
​
/* 引脚 */
#define PIN_GAS        34     /* MQ-2 AO */
#define PIN_DHT        4      /* DHT11 DATA */
#define PIN_RELAY      26     /* 电磁阀继电器 */
#define PIN_BUZZER     27     /* 蜂鸣器 */
#define PIN_LED_RED    25     /* 危险红灯 */
#define PIN_LED_YEL    33     /* 预警黄灯 */
#define PIN_KEY        32     /* 复位按键 */
​
/* OLED (I2C) */
#define PIN_SDA        21
#define PIN_SCL        22
​
/* 分级阈值(ADC 0~4095,必须实测标定) */
#define GAS_WARN       1200   /* 预警阈值 */
#define GAS_DANGER     2500   /* 危险阈值 */
​
/* WiFi / 推送(换成自己的) */
#define WIFI_SSID      "your_wifi"
#define WIFI_PASS      "your_pass"
#define PUSH_KEY       "your_sendkey"
#define PUSH_URL       "https://sctapi.ftqq.com/" PUSH_KEY ".send"
​
#endif

3、gas.h / gas.c ------ 燃气传感器模块

gas.h(声明):

复制代码
#ifndef GAS_H
#define GAS_H
#include <stdint.h>
​
typedef enum { GAS_NORMAL = 0, GAS_WARN_LV, GAS_DANGER_LV } gas_level_t;
​
void gas_init(void);
uint16_t gas_read_adc(void);        /* 读一次 ADC 原始值 */
gas_level_t gas_level(uint16_t adc);/* 按阈值分级 */
#endif

gas.c(实现,含多次采样取平均):

复制代码
#include "gas.h"
#include "config.h"
​
void gas_init(void) {
    analogReadResolution(12);
    pinMode(PIN_GAS, INPUT);
}
​
/* 采 10 次取平均,减少波动 */
uint16_t gas_read_adc(void) {
    uint32_t sum = 0;
    for (int i = 0; i < 10; i++) {
        sum += analogRead(PIN_GAS);
        delay(10);
    }
    return (uint16_t)(sum / 10);
}
​
gas_level_t gas_level(uint16_t adc) {
    if (adc >= GAS_DANGER) return GAS_DANGER_LV;
    if (adc >= GAS_WARN)   return GAS_WARN_LV;
    return GAS_NORMAL;
}

4、env.h / env.c ------ 温湿度模块

env.h(声明):

复制代码
#ifndef ENV_H
#define ENV_H
#include <stdbool.h>
​
typedef struct { float temp; float humi; bool valid; } env_data_t;
​
void env_init(void);
env_data_t env_read(void);
#endif

env.c(实现):

复制代码
#include "env.h"
#include "config.h"
#include <DHT.h>
​
static DHT dht(PIN_DHT, DHT11);
​
void env_init(void) { dht.begin(); }
​
env_data_t env_read(void) {
    env_data_t d;
    d.temp  = dht.readTemperature();
    d.humi  = dht.readHumidity();
    d.valid = !isnan(d.temp) && !isnan(d.humi);
    return d;
}

5、valve.h / valve.c ------ 电磁阀控制模块

valve.h(声明):

复制代码
#ifndef VALVE_H
#define VALVE_H
#include <stdbool.h>

void valve_init(void);
void valve_close(void);    /* 断电关阀(危险时) */
void valve_open(void);     /* 通电开阀(正常时) */
bool valve_is_closed(void);
#endif

valve.c(实现,常闭阀失效安全):

复制代码
#include "valve.h"
#include "config.h"

static bool closed = false;

void valve_init(void) {
    pinMode(PIN_RELAY, OUTPUT);
    valve_open();            /* 上电默认通气 */
}

/* 常闭阀:断电=关闭。继电器断开即给阀断电 → 阀关 */
void valve_close(void) {
    digitalWrite(PIN_RELAY, HIGH);   /* 低电平触发,断开输出 = 阀断电 */
    closed = true;
}

void valve_open(void) {
    digitalWrite(PIN_RELAY, LOW);    /* 通电 = 阀开 = 通气 */
    closed = false;
}

bool valve_is_closed(void) { return closed; }

6、alarm.h / alarm.c ------ 分级声光报警模块

alarm.h(声明):

复制代码
#ifndef ALARM_H
#define ALARM_H
#include "gas.h"

void alarm_init(void);
void alarm_apply(gas_level_t lv);   /* 按级别更新声光 */
void alarm_tick(void);              /* 循环中调用,处理节奏 */
#endif

alarm.c(实现,非阻塞节奏):

复制代码
#include "alarm.h"
#include "config.h"

static gas_level_t cur = GAS_NORMAL;
static uint32_t lastMs = 0;
static bool phase = false;

void alarm_init(void) {
    pinMode(PIN_BUZZER, OUTPUT);
    pinMode(PIN_LED_RED, OUTPUT);
    pinMode(PIN_LED_YEL, OUTPUT);
    alarm_apply(GAS_NORMAL);
}

void alarm_apply(gas_level_t lv) {
    cur = lv;
    /* 先清灯,再按级别点灯 */
    digitalWrite(PIN_LED_RED, LOW);
    digitalWrite(PIN_LED_YEL, LOW);
    if (lv == GAS_WARN_LV)   digitalWrite(PIN_LED_YEL, HIGH);
    if (lv == GAS_DANGER_LV) digitalWrite(PIN_LED_RED, HIGH);
}

/* 预警:2 秒短鸣一次;危险:持续长短交替 */
void alarm_tick(void) {
    if (cur == GAS_NORMAL) { digitalWrite(PIN_BUZZER, LOW); return; }

    uint32_t interval = (cur == GAS_WARN_LV) ? 2000 : 400;
    if (millis() - lastMs < interval) return;
    lastMs = millis();

    phase = !phase;
    digitalWrite(PIN_BUZZER, phase ? HIGH : LOW);
}

7、cloud.h / cloud.c ------ 数据上传与推送模块

cloud.h(声明):

复制代码
#ifndef CLOUD_H
#define CLOUD_H
#include <stdbool.h>
#include "gas.h"
#include "env.h"

bool cloud_init(void);
bool cloud_upload(uint16_t gas, const env_data_t *e, gas_level_t lv);
bool cloud_push_alert(uint16_t gas);
#endif

cloud.c(实现,关键逻辑):

复制代码
#include "cloud.h"
#include "config.h"
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

bool cloud_init(void) {
    WiFi.begin(WIFI_SSID, WIFI_PASS);
    while (WiFi.status() != WL_CONNECTED) delay(500);
    return true;
}

/* 上报数据(这里以 HTTP 为例,也可换 MQTT) */
bool cloud_upload(uint16_t gas, const env_data_t *e, gas_level_t lv) {
    if (WiFi.status() != WL_CONNECTED) return false;
    StaticJsonDocument<160> doc;
    doc["gas"]   = gas;
    doc["temp"]  = e->temp;
    doc["humi"]  = e->humi;
    doc["level"] = (int)lv;
    char buf[120];
    serializeJson(doc, buf, sizeof(buf));

    HTTPClient http;
    http.begin("http://your-server/api/kitchen");
    http.addHeader("Content-Type", "application/json");
    int code = http.POST(buf);
    http.end();
    return code == 200;
}

/* 危险时推送微信告警 */
bool cloud_push_alert(uint16_t gas) {
    if (WiFi.status() != WL_CONNECTED) return false;
    HTTPClient http;
    http.begin(PUSH_URL);
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");

    String title = "【厨房安全】检测到燃气泄漏";
    String desp  = "当前浓度 ADC=" + String(gas) + ",已自动关闭燃气阀,请立即检查!";
    int code = http.POST("title=" + title + "&desp=" + desp);
    http.end();
    return code == 200;
}

8、display.h / display.c ------ OLED 显示模块

display.h(声明):

复制代码
#ifndef DISPLAY_H
#define DISPLAY_H
#include "gas.h"
#include "env.h"

void display_init(void);
void display_show(uint16_t gas, gas_level_t lv, const env_data_t *e, bool closed);
#endif

display.c(实现):

复制代码
#include "display.h"
#include "config.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

static Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void display_init(void) {
    Wire.begin(PIN_SDA, PIN_SCL);
    oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    oled.clearDisplay();
    oled.setTextColor(SSD1306_WHITE);
}

void display_show(uint16_t gas, gas_level_t lv, const env_data_t *e, bool closed) {
    const char *ls = (lv == GAS_DANGER_LV) ? "DANGER"
                   : (lv == GAS_WARN_LV) ? "WARN" : "OK";
    oled.clearDisplay();
    oled.setCursor(0, 0);
    oled.print("Gas:"); oled.print(gas); oled.println(" ");
    oled.print("St :"); oled.println(ls);
    oled.print("T:");   oled.print(e->temp); oled.print("C ");
    oled.print("H:");   oled.print(e->humi); oled.println("%");
    oled.print("Valve:"); oled.println(closed ? "CLOSED" : "OPEN");
    oled.display();
}

9、main.c ------ 主程序

复制代码
#include "config.h"
#include "gas.h"
#include "env.h"
#include "valve.h"
#include "alarm.h"
#include "cloud.h"
#include "display.h"

static bool dangerLatched = false;   /* 危险锁存,复位才解除 */

void setup() {
    gas_init();
    env_init();
    valve_init();
    alarm_init();
    display_init();
    cloud_init();
}

void loop() {
    /* ① 采集 */
    uint16_t gas = gas_read_adc();
    gas_level_t lv = gas_level(gas);
    env_data_t e = env_read();

    /* ② 分级执行 */
    alarm_apply(lv);
    alarm_tick();

    if (lv == GAS_DANGER_LV && !dangerLatched) {
        dangerLatched = true;
        valve_close();               /* 自动关阀 */
        cloud_push_alert(gas);       /* 微信推送 */
    }

    /* ③ 复位:排除隐患后按键解除锁存、重新开阀 */
    if (digitalRead(PIN_KEY) == LOW) {
        delay(200);
        if (lv == GAS_NORMAL) {      /* 只有浓度正常才允许复位 */
            dangerLatched = false;
            valve_open();
        }
    }

    /* ④ 显示与上传 */
    display_show(gas, lv, &e, valve_is_closed());
    cloud_upload(gas, &e, lv);

    delay(1000);
}

以上为核心模块代码。需要时可继续扩展:新增 record.c(本地存告警历史)、servo.c(联动排风扇)、多传感器(CO/烟雾)融合,主程序只调用接口,逻辑一目了然。

十二、代码要点讲解

  • .h/.c 分离 :.h 只放宏、结构体、函数声明,.c 放实现隐藏细节,模块独立便于扩展,是论文「模块化设计」的要点;

  • config.h 集中配置:引脚、阈值、WiFi、推送 key 都收在一个文件,改参数不用翻代码;

  • gas_read_adc 多次取平均:MQ 传感器输出有波动,采 10 次平均,判断更稳;

  • 分级枚举 :GAS_NORMAL / GAS_WARN_LV / GAS_DANGER_LV 三档清晰,对应不同声光与动作;

  • 常闭阀失效安全 :valve_close 给继电器断电即关阀,断线/停电也能保护;

  • alarm_apply + alarm_tick 非阻塞 :按级别设置灯,用 millis() 控制蜂鸣节奏,主循环不卡死;

  • 危险锁存 dangerLatched:危险只触发一次关阀推送,不在每轮重复动作;

  • 复位带安全条件:只有浓度回到正常才允许按键复位开阀,避免危险时误开。

十三、功能测试与验收

功能 实现方式 测试方法
浓度采集 gas_read_adc OLED 显示 ADC 值,随气体环境变化
预警报警 gas_level == WARN → 黄灯+短鸣 打火机气体微喷,黄灯亮、间歇鸣叫
危险报警 gas_level == DANGER → 红灯+长鸣 继续喷气,红灯亮、长鸣
自动关阀 valve_close 危险时继电器断开,阀门关闭
温湿度 env_read OLED 显示合理温度湿度
微信推送 cloud_push_alert 危险时手机收到厨房燃气告警
复位 按键 + 浓度正常才复位 浓度恢复正常后按键,阀门重新打开
历史记录 cloud_upload 云平台看到浓度曲线与级别

分步验收清单:

  1. 上电预热几分钟,OLED 显示 Gas/温湿度 → 采集显示 OK;

  2. 打火机气体靠近,ADC 上升、黄灯亮短鸣 → 预警 OK;

  3. 继续喷气,红灯长鸣、阀自动关 → 危险与关阀 OK;

  4. 手机收到微信告警 → 推送 OK;

  5. 气体散去后按键复位,阀恢复通气 → 复位 OK;

  6. 云平台查看历史浓度与级别 → 记录 OK。

十四、能给你什么启发?

1. 选题优势:居家安全刚需,场景真实、实用性强;硬件便宜(MQ 传感器几十块、电磁阀便宜)、程序逻辑简单好调试,非常适合基础中等同学稳过;答辩演示直观(喷点气就报警关阀),老师一看就懂。

2. 想冲更高分数,随便往这几个方向扩:

  • 加排风扇联动:危险时自动开排风,先通风再报警,处理更完整;

  • 加多气体检测:CO(一氧化碳)、烟雾一起监测,厨房综合安全;

  • 加手机 APP/小程序:远程查看浓度、远程复位阀门;

  • 加本地历史记录:SD 卡/Flash 存告警日志,不依赖网络;

  • 加自检功能:定期检测传感器与电磁阀是否正常,保证可靠性;

  • 加语音播报:报警时播报「检测到燃气泄漏,已关闭阀门」。

十五、开题报告 & 答辩要点

1、开题报告可直接改用的表述

1.选题依据(背景):厨房是家庭燃气使用最集中的场所,燃气泄漏与高温隐患直接威胁人身财产安全。传统方式依赖人的嗅觉与经验,发现晚、处置慢。利用气体传感器实时检测燃气浓度,并结合自动关阀、声光报警与远程推送,构建智能厨房安全监测系统,对居家安全具有现实意义。

2.研究意义:本课题将气体传感、温湿度采集、嵌入式控制与无线通信技术相结合,一方面实现燃气泄漏的实时检测、自动切断与分级报警,提升厨房安全水平;另一方面完整覆盖模拟量采集与标定、分级控制逻辑、执行机构驱动与数据上报等物联网关键技术,对巩固专业知识、锻炼软硬件综合开发能力有重要意义。

3.系统功能概述:系统以 ESP32 为主控,通过 MQ-2 燃气传感器实时采集可燃气体浓度、DHT11 采集温湿度;按浓度分级实现预警与危险两级声光报警,危险级别自动驱动常闭电磁阀关闭燃气阀门,并经 WiFi 向用户微信推送告警;所有数据上传云平台留存,支持排除隐患后手动复位。

4.创新点(按实际情况选取):

  • 采用分级报警策略,按浓度轻重给出不同响应,更合理;

  • 采用常闭电磁阀实现失效安全,断电自动断气;

  • 集实时监测、自动切断、声光报警、远程推送与数据留痕于一体。

5.技术难点:

  • 气体传感器的预热、漂移与阈值标定;

  • 分级报警逻辑与危险锁存、复位安全条件设计;

  • 自动关阀执行与远程推送的可靠性。

2、答辩常见问题

可能被问 回答要点
燃气怎么检测的? MQ-2 半导体传感器,浓度升高输出电压升高,ADC 采集后分级
为什么要预热和标定? MQ 传感器需加热到工作温度、有漂移,阈值必须实测标定才准
为什么用常闭电磁阀? 断电即关闭,停电断线也自动断气,失效更安全
分级报警怎么设计的? 正常/预警/危险三档,预警黄灯短鸣,危险红灯长鸣并关阀推送
危险解除后怎么恢复? 浓度回正常后按键复位,避免危险时误开阀
数据怎么留存? 上传云平台,记录浓度曲线与告警级别,可事后查询
怎么防止误报? 多次采样取平均、阈值间留缓冲、危险锁存避免反复动作
系统有哪些改进空间? 排风联动、多气体检测、手机 APP、本地日志、自检等
相关推荐
软件技术NINI3 天前
基于SpringBoot和Vue的项目评审系统
javascript·vue.js·spring boot·后端·spring·毕业设计·毕设
计算机毕业编程指导师4 天前
基于深度学习的光伏组件红外图像缺陷识别系统设计与实现
人工智能·python·深度学习·目标检测·毕业设计·课程设计·光伏
无所谓^_^4 天前
个人健康管理系统 | Springboot3 | Vue3
java·vue·毕业设计·springboot·课程设计·毕设·前后端分离
计算机毕业编程指导师5 天前
基于深度学习的花卉图像分类识别系统(PyTorch + ResNet50 + Django)
pytorch·python·深度学习·分类·毕业设计·迁移学习·图像分类
天空'之城5 天前
004基于语音识别的智能家居本地控制系统
毕业设计·esp32·智能家居·语音识别·离线控制
雨晨源码(同名B站)7 天前
深度学习毕业设计选题推荐:基于卷积神经网络的无人机影像建筑裂缝裂纹检测分类与分割系统(LeNet-5 二分类模型、GCN-Res50分割模型)
深度学习·信息可视化·分类·cnn·毕业设计·无人机·课程设计
天空'之城8 天前
002基于 STM32 的智能灯光窗帘控制系统
stm32·单片机·毕业设计·智能家居·pwm
软件技术NINI8 天前
基于SpringBoot和Vue的摇滚乐鉴赏网站
vue.js·spring boot·后端·spring·html·毕业设计·毕设
weixin_4043806310 天前
MQTT 上云验收:ESP32-S3 从局域网控灯到远程网页控制
物联网·mqtt·esp32