目录
[1、MQ-2 / MQ-9 燃气传感器](#1、MQ-2 / MQ-9 燃气传感器)
[十一、软件设计(.h / .c 多文件工程)](#十一、软件设计(.h / .c 多文件工程))
[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 —— 主程序)
[十五、开题报告 & 答辩要点](#十五、开题报告 & 答辩要点)
难度定位 :★★★☆☆(中等安全型)|适合:想做一个「居家安全刚需 + 硬件便宜 + 逻辑简单好调试」选题、基础中等的同学|预估周期: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 采样 → 浓度判断 → 分级)
↓
┌───────────┬───────────────┬──────────────┐
│ 正常 │ 预警(低浓度) │ 危险(高浓度) │
│ 显示数据 │ 黄灯+短鸣 │ 红灯+长鸣 │
│ │ │ → 关电磁阀 │
│ │ │ → 微信推送 │
└───────────┴───────────────┴──────────────┘
↓
历史数据 / 告警记录上传云平台
一句话串起来:传感器采集浓度 → 主控分级判断 → 正常显示、预警声光、危险关阀+推送;所有数据留痕上传。
这套「浓度分级 + 自动执行 + 声光报警 + 数据上报」的架构,是所有安全监测类毕设的通用骨架,也可扩展成工业气体泄漏、实验室安全监测。
六、大概怎么做?
买齐硬件(ESP32 + MQ-2/MQ-9 + DHT11 + 常闭燃气电磁阀 + 继电器 + 蜂鸣器 + 双色 LED + OLED);
分别调通:MQ 传感器加热后能随气体浓度变化、DHT11 读数正常、电磁阀能通断;
标定浓度阈值:用打火机气体靠近传感器,记录 ADC 值,定出「预警阈值」和「危险阈值」;
写分级逻辑:正常 / 预警 / 危险三档,对应不同声光与动作;
写关阀与推送:危险时断电关阀 + 微信推送;
加 OLED 显示与历史记录上传;
联调:喷一点气体,先预警、再危险,阀自动关、手机收到推送,链路跑通即完成。
核心难点是「传感器预热与阈值标定 + 分级报警逻辑」,程序本身不复杂。下面逐步展开。
七、硬件清单与接线
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=危险。
十、开发环境搭建
安装 Arduino IDE(2.x);
添加 ESP32 板卡(开发板管理器搜索
esp32安装);安装库:
DHT sensor library、Adafruit SSD1306、Adafruit GFX、PubSubClient(MQTT);选择开发板
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 |
云平台看到浓度曲线与级别 |
分步验收清单:
-
上电预热几分钟,OLED 显示 Gas/温湿度 → 采集显示 OK;
-
打火机气体靠近,ADC 上升、黄灯亮短鸣 → 预警 OK;
-
继续喷气,红灯长鸣、阀自动关 → 危险与关阀 OK;
-
手机收到微信告警 → 推送 OK;
-
气体散去后按键复位,阀恢复通气 → 复位 OK;
-
云平台查看历史浓度与级别 → 记录 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、本地日志、自检等 |