若该文为原创文章,转载请注明原文出处。

一、引言

厨房是家庭安全事故的高发区域,燃气泄漏、火灾和油烟污染是主要隐患。传统厨房设备缺乏智能监测和联动控制能力。本项目设计一款以STM32为核心的厨房环境检测控制系统。该系统能够实时监测厨房内的温湿度、烟雾、燃气浓度和明火状态,并根据预设逻辑自动控制排烟扇和报警器,同时支持本地按键和手机APP远程控制燃气灶(模拟)开关,有效提升了厨房的安全性和智能化水平,预防事故发生。

二、系统总体设计

(一)系统架构

本系统采用分层模块化设计,STM32作为核心控制器。

  1. 感知层:负责采集厨房环境数据,包括温湿度、烟雾、燃气浓度和火焰信号。

  2. 控制层:STM32,负责数据处理、阈值判断、执行自动控制逻辑。

  3. 执行层:包括排烟扇、报警蜂鸣器、LED灯(模拟燃气灶),根据控制指令行动。

  4. 交互层:OLED显示屏用于状态显示,按键用于本地设置和控制。

  5. 通信层:Wi-Fi模块,连接云平台,实现手机APP的远程监控与控制。

(二)功能模块划分
  1. 环境监测模块:多传感器数据采集与预处理。

  2. 显示模块:实时刷新显示所有环境参数和系统状态。

  3. 自动控制模块:核心安全逻辑,根据环境数据自动控制排烟扇和报警。

  4. 设备控制模块:管理燃气灶(LED)的开关状态,响应本地和远程指令。

  5. 通信模块:负责与手机APP进行数据交换和指令传输。

三、硬件设计与实现

(一)系统硬件框架图

(二)主控模块选型及介绍

核心控制器采用STM32F103C8T6。该芯片资源丰富,提供多路ADC用于读取模拟传感器(MQ-2, MQ-5),多个UART用于连接Wi-Fi模块,I2C用于驱动OLED,以及充足的GPIO控制执行器和读取数字传感器,性价比极高,完全满足本系统需求。

(三)传感器模块选型及电路设计
  • DHT11:数字温湿度传感器,单总线协议,连接普通GPIO,需上拉电阻。

  • MQ-2(烟雾):模拟输出,连接STM32的ADC引脚(如PA0),对烟雾、油烟敏感。

  • MQ-5(燃气):模拟输出,连接另一路ADC引脚(如PA1),对天然气、液化气敏感。

    • *注意:MQ-2和MQ-5工作时需加热,建议采用5V供电,其模拟输出口与3.3V ADC兼容。*

  • 火焰传感器:使用其数字输出(DO)引脚,直接连接STM32的GPIO。检测到火焰时输出低电平。调节板上电位器可改变灵敏度。

(四)执行模块选型及驱动电路
  • 排烟扇/LED灯:采用5V继电器模块进行控制。继电器模块输入侧为低电平有效,直接连接STM32 GPIO即可。输出侧接220V排烟扇或LED灯。

    • 重要: 控制220V强电部分必须严格规范,防止触电危险!建议使用现成的、带有塑料外壳的继电器模块。

  • 蜂鸣器:采用有源蜂鸣器,只要通电就会响。连接STM32 GPIO,通过三极管(如S8050)驱动,因为STM32的GPIO驱动电流可能不足。

(五)通信模块选型

采用ESP-01S ESP8266模块。通过UART(如USART2)与STM32连接。STM32通过AT指令控制其连接家庭Wi-Fi并接入云平台(如阿里云、OneNET),实现与手机APP的数据透传。

四、软件设计与实现

(一)开发环境搭建
  1. IDE:Keil uVision 5。

  2. 配置工具:使用STM32CubeMX进行硬件初始化配置,生成HAL库代码工程。

  3. 库移植:移植OLED、DHT11、ESP8266的驱动程序库。

(二)系统软件流程图

(三)核心代码逻辑

// 定义全局变量
int smoke_threshold = 300;
int gas_threshold = 300;
uint8_t stove_state = 0; // 0: OFF, 1: ON

void main() {
  // 初始化...
  while(1) {
    // 1. 读取传感器
    temp = DHT11_GetTemperature();
    humi = DHT11_GetHumidity();
    smoke_val = ADC_Read(MQ2_CHANNEL);
    gas_val = ADC_Read(MQ5_CHANNEL);
    fire_detected = (HAL_GPIO_ReadPin(FLAME_GPIO_Port, FLAME_Pin) == GPIO_PIN_RESET);

    // 2. OLED显示
    OLED_ShowString(0, 0, "T:");
    OLED_ShowNumber(20, 0, temp);
    OLED_ShowString(0, 2, "Smoke:");
    OLED_ShowNumber(60, 2, smoke_val);
    // ... 显示其他数据和控制状态

    // 3. 自动安全逻辑
    // 3.1 排烟扇控制 (烟雾或火焰)
    if (smoke_val > smoke_threshold || fire_detected) {
      FAN_RELAY_ON();
    } else {
      FAN_RELAY_OFF();
    }

    // 3.2 燃气报警控制
    if (gas_val > gas_threshold) {
      BUZZER_ON();
      FAN_RELAY_ON(); // 燃气泄漏也强制开扇通风
    } else {
      BUZZER_OFF();
      // 注意: 排烟扇不会因为燃气恢复正常而关闭, 因为它可能因烟雾而开启
    }

    // 4. 处理通信 (上传数据和执行远程指令)
    if (time_to_send_data()) {
      sprintf(json_buffer, "{\"temp\":%d,\"humi\":%d,\"smoke\":%d,\"gas\":%d,\"stove\":%d}",
              temp, humi, smoke_val, gas_val, stove_state);
      ESP8266_SendToCloud(json_buffer);
    }
    // 串口中断中解析的APP指令会设置变量如 `stove_state`
    // 主循环中根据最终状态控制LED
    HAL_GPIO_WritePin(STOVE_LED_GPIO_Port, STOVE_LED_Pin, stove_state ? GPIO_PIN_SET : GPIO_PIN_RESET);

    HAL_Delay(1000); // 每秒检测一次
  }
}

// 在串口中断回调函数中解析APP指令
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
  if (huart == &huart2) { // 假设ESP8266连接在USART2
    if (strstr((char*)rx_buffer, "stove=on")) {
      stove_state = 1;
    } else if (strstr((char*)rx_buffer, "stove=off")) {
      stove_state = 0;
    }
    // ... 解析其他控制指令,如直接控制风扇
  }
}

五、系统测试与优化

(一)测试方案
  1. 功能测试

    • 烟雾测试:点燃一支吹灭的香烟产生烟雾,靠近MQ-2,观察排烟扇是否自动启动。

    • 燃气测试:向MQ-5喷射少量打火机气体,观察是否触发蜂鸣器报警并启动排烟扇。

    • 火焰测试:用打火机在火焰传感器前方点燃,观察排烟扇是否启动。

    • 远程控制测试:通过APP点击开关按钮,观察LED灯(模拟燃气灶)是否相应地点亮或熄灭。

  2. 可靠性测试

    • 防误报测试:在正常烹饪(产生油烟、水蒸气)时运行系统,观察是否有误报警。

    • 网络稳定性测试:测试Wi-Fi断开重连后,系统是否能自动重新连接云平台。

六、结论与展望

(一)未来展望

本系统是厨房智能化的基础平台,未来可进行多项升级:

  1. 机械手自动关阀:在发生燃气泄漏时,可联动一个舵机模拟关闭燃气管道阀门,从根源上切断气源,安全性更高。

  2. 多设备联动:与家庭其他智能设备联动,如发生火灾时,可通过智能插座自动切断厨房电器的电源。

  3. 云平台与大数据:将数据上传至更强大的云平台,实现历史数据查询、趋势分析多用户共享(让家人共同监控)。

  4. 语音提示与报警:集成语音合成模块(如SYN6288),在报警时不仅蜂鸣,更用语音说明报警类型,如“警告!燃气泄漏!”。

  5. 电池备用电源:加入18650锂电池和充放电管理电路,在市电断电时维持系统运行一段时间,提升安全性。

如有侵权,或需要完整代码,请及时联系博主。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐