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

一、引言

(一)研究背景及意义

热水器是现代家庭必不可少的电器,其安全性和便捷性直接关系到用户的生命财产和生活品质。传统热水器功能单一,缺乏精确温控,且无法远程操作,经常出现等待加热、水温忽冷忽烫或忘记关闭导致能源浪费等问题。更严重的是,干烧是热水器最大的安全隐患。本项目旨在开发一款具备精准温度控制、防干烧保护、远程监控等功能的智能热水器系统,对于提升家居智能化水平、保障用户安全、节约能源具有重要的现实意义。

(二)国内外研究现状

目前市场上高端热水器已具备Wi-Fi控制和手机APP管理功能,但价格昂贵。大多数家用热水器仍处于机械式或基础电子控制阶段。本设计基于性价比极高的STM32平台,自主集成传感器和执行器,提供了一个成本低、功能全、安全性高的智能热水器控制解决方案,具有很高的实用和推广价值。

二、系统总体设计

(一)系统架构

本系统采用“感知-决策-执行-交互”的架构。

  1. 感知层:DS18B20(水温)、水位传感器。

  2. 决策层:STM32F103C8T6主控芯片,处理数据、执行PID控制算法和安全逻辑。

  3. 执行层:继电器模块(控制加热片、水泵)、蜂鸣器。

  4. 交互层:OLED显示屏、按键(本地交互);ESP8266 Wi-Fi模块(远程交互)。

(二)功能模块划分

  1. 参数监测模块:DS18B20(水温)、水位传感器。

  2. 控制执行模块:继电器(控制加热片、水泵)。

  3. 报警模块:有源蜂鸣器。

  4. 人机交互模块:OLED显示屏、按键。

  5. 通信模块:ESP8266 Wi-Fi模块。

三、硬件设计与实现

(一)系统硬件框架图

1. 主控单元

器件名称 推荐型号 接口 功能说明
STM32单片机 STM32F103C8T6 - 作为系统核心,负责温度采集、水位检测、逻辑判断、控制执行器、以及与WiFi模块通信。

2. 传感器与输入单元

器件名称 推荐型号/类型 接口 功能说明
水温传感器 DS18B20 单总线 检测热水器内的水温。防水封装,直接浸入水中,精度高,测量范围-55°C至+125°C。
水位传感器 浮球开关/光电液位传感器 GPIO/ADC 检测水箱内的水位。缺水时输出信号变化,防止干烧。
按键模块 轻触开关 × 4 GPIO 功能分配:加热开关、出水控制、温度+、温度-。

3. 执行器与输出单元

器件名称 推荐型号/类型 接口 功能说明
加热继电器 5V 继电器模块 GPIO 控制加热管的电源。STM32根据设定温度和当前温度控制其通断。必须使用安全低压控制!
水泵继电器 5V 继电器模块 GPIO 控制出水水泵的电源。用于抽水或供水。
有源蜂鸣器 5V有源蜂鸣器 GPIO 当水位过低或其他异常情况时,发出报警声提醒用户。
报警指示灯 高亮LED GPIO 提供视觉报警信号,与蜂鸣器同步工作。
OLED显示屏 SSD1306 I²C 实时显示:当前水温、设定温度、加热状态、水泵状态、水位状态和警告信息。

4. 通信单元

器件名称 推荐型号 接口 功能说明
WiFi模块 ESP-01S UART STM32通过串口以AT指令与ESP8266通信,将水温、水位、工作状态等数据上传至云平台,用户可通过手机APP远程监控和控制。

5. 电源单元

器件名称 推荐规格 功能说明
电源适配器 5V/2A + 12V/10A 双输出 5V为控制部分供电;12V为加热管和水泵供电。重要: 大功率设备必须通过继电器控制,与低压部分隔离。

核心控制逻辑说明

1. 温度控制逻辑

  • 加热控制

    • if (当前水温 < 设定温度) && (水位正常) { 启动加热继电器; }

    • if (当前水温 >= 设定温度) { 关闭加热继电器; }

  • 温度调节

    • 通过"温度+"和"温度-"按键设置目标温度(如:40°C-75°C)

    • 温度变化步进:±5°C

2. 水位安全监控

  • 无水保护

    • if (水位传感器 == 无水) { 关闭加热继电器; 关闭水泵继电器; 启动蜂鸣器报警; LED闪烁; OLED显示"请加水"; }

  • 恢复正常

    • if (水位传感器 == 有水) { 停止报警; 恢复系统功能; }

3. 手动控制功能

  • 加热按键: 手动开启/关闭加热功能

  • 出水按键: 手动控制水泵出水

  • 温度+/-: 调节设定温度

4. 显示界面

OLED显示内容:

text

第1行:水温:45°C/60°C
第2行:加热:ON 水泵:OFF
第3行:水位:正常
第4行:状态:工作中

5. 远程监控功能

  • APP可实时查看:

    • 当前水温和设定温度

    • 加热状态和水泵状态

    • 水位状态

  • APP远程控制:

    • 远程开启/关闭加热

    • 远程控制出水

    • 远程设置温度

    • 接收低水位报警通知

四、软件设计与实现

(一)开发环境搭建

  1. IDE:STM32CubeIDE。

  2. :使用STM32CubeMX配置HAL库,初始化GPIO、I2C、UART、定时器等外设。

  3. 驱动与算法:需编写DS18B20、OLED、ESP8266等驱动程序,并实现PID控制算法。

(二)系统软件流程图

(三)关键软件模块实现

1. 安全检测与保护逻辑(最高优先级)

bool isWaterLevelOK = false;

void Safety_Check(void) {
  // 读取水位传感器状态
  isWaterLevelOK = (HAL_GPIO_ReadPin(WATER_LEVEL_GPIO_Port, WATER_LEVEL_Pin) == GPIO_PIN_SET); // 假设高电平表示有水

  if (!isWaterLevelOK) {
    // 缺水状态:强制停止所有功能并报警
    Heater_Off();
    Water_Pump_Off();
    Buzzer_On();
    OLED_ShowWarning("WARNING: NO WATER!");
    // 上报缺水状态到APP
    MQTT_Publish("water_heater/alert", "water_low");
  } else {
    Buzzer_Off();
    // 水位正常,恢复正常功能
  }
}

2. 温度控制逻辑(PID算法)

float targetTemperature = 50.0; // 默认目标温度
float currentTemperature = 0.0;
bool heatingEnabled = false;   // 总加热使能,由按键或APP控制

void Temperature_Control(void) {
  if (!heatingEnabled || !isWaterLevelOK) {
    Heater_Off();
    return;
  }

  // 简单的ON-OFF控制(也可升级为PID)
  if (currentTemperature < targetTemperature - 1.0) { // 设置回差防止频繁开关
    Heater_On();
  } else if (currentTemperature >= targetTemperature) {
    Heater_Off();
  }

  // 若使用PID(更精准,水温更稳定)
  // float output = PID_Calculate(targetTemperature, currentTemperature);
  // __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, output); // 使用PWM控制加热功率
}

// 加热器控制函数
void Heater_On(void)  { HAL_GPIO_WritePin(HEATER_GPIO_Port, HEATER_Pin, GPIO_PIN_RESET); } // 低电平触发继电器
void Heater_Off(void) { HAL_GPIO_WritePin(HEATER_GPIO_Port, HEATER_Pin, GPIO_PIN_SET); }
void Water_Pump_On(void)  { HAL_GPIO_WritePin(PUMP_GPIO_Port, PUMP_Pin, GPIO_PIN_RESET); }
void Water_Pump_Off(void) { HAL_GPIO_WritePin(PUMP_GPIO_Port, PUMP_Pin, GPIO_PIN_SET); }

3. 按键扫描与处理

void Key_Scan(void) {
  if (HAL_GPIO_ReadPin(KEY_HEAT_GPIO_Port, KEY_HEAT_Pin) == GPIO_PIN_RESET) {
    HAL_Delay(50); // 简单消抖
    if (HAL_GPIO_ReadPin(KEY_HEAT_GPIO_Port, KEY_HEAT_Pin) == GPIO_PIN_RESET) {
      heatingEnabled = !heatingEnabled; // 加热启停切换
      while(HAL_GPIO_ReadPin(KEY_HEAT_GPIO_Port, KEY_HEAT_Pin) == GPIO_PIN_RESET); // 等待按键释放
    }
  }
  // 同理处理 KEY_PUMP(出水), KEY_ADD(温度+), KEY_SUB(温度-)
  if (HAL_GPIO_ReadPin(KEY_ADD_GPIO_Port, KEY_ADD_Pin) == GPIO_PIN_RESET) {
    HAL_Delay(50);
    if (HAL_GPIO_ReadPin(KEY_ADD_GPIO_Port, KEY_ADD_Pin) == GPIO_PIN_RESET) {
      targetTemperature += 0.5;
      if (targetTemperature > 75.0) targetTemperature = 75.0; // 设置上限
      Save_Setting();
    }
  }
  // ... KEY_SUB 同理
}

4. 云平台数据上报与指令处理

void Publish_Data(void) {
  char json_data[128];
  sprintf(json_data,
          "{\"temp\":%.1f, \"target_temp\":%.1f, \"heating\":%s, \"pump\":%s, \"water_ok\":%s}",
          currentTemperature, targetTemperature,
          heatingEnabled ? "true" : "false",
          pumpState ? "true" : "false",
          isWaterLevelOK ? "true" : "false");
  ESP8266_MQTT_Publish("water_heater/status", json_data);
}

void Process_App_Command(char* cmd) {
  if (strstr(cmd, "heat=on")) {
    heatingEnabled = true;
  } else if (strstr(cmd, "heat=off")) {
    heatingEnabled = false;
  } else if (strstr(cmd, "pump=on")) {
    if(isWaterLevelOK) Water_Pump_On(); // 安全判断:有水才能开水泵
  } else if (strstr(cmd, "pump=off")) {
    Water_Pump_Off();
  } else if (strstr(cmd, "set_temp=")) {
    float new_temp;
    sscanf(cmd, "set_temp=%f", &new_temp);
    if (new_temp >= 35.0 && new_temp <= 75.0) { // 设置安全范围
      targetTemperature = new_temp;
      Save_Setting();
    }
  }
}

五、系统测试与优化

(一)测试方案

  1. 安全性测试

    • 干烧保护:将水位传感器置于空气中,模拟缺水,测试系统是否立即停止加热并声光报警。

    • 超温保护:设置一个较低的目标温度,然后用外部热源加热DS18B20,测试温度超过设定值后加热是否停止。

  2. 功能测试

    • 温度控制:设置不同目标温度(如40°C, 50°C, 60°C),测试系统能否准确加热并稳定在目标温度附近。

    • 按键控制:测试四个按键是否能正常控制加热、出水、调节温度。

    • 远程控制:测试APP远程设定温度、启停加热、启停水泵功能是否及时响应。

  3. 可靠性测试:系统连续运行24小时,观察温度控制是否稳定,网络连接是否可靠。

(二)优化方向

  1. 软件优化

    • PID控制算法:将简单的ON-OFF控制升级为PID控制,使水温控制更加精确和平稳,避免温度波动。

    • 定时功能:增加APP定时加热功能,例如设定每天晚上8点将水加热到50°C,方便用户使用。

    • 能耗统计:根据加热器功率和工作时间,粗略计算并显示本次加热的耗电量。

  2. 硬件优化

    • 电源隔离:加热器功率较大,其控制继电器应与MCU采用光耦隔离,并单独供电,防止干扰MCU。

    • 防漏电设计:增加漏电保护器(硬件),作为软件保护之外的又一重安全屏障。

六、结论与关键设计

(一)结论

本项目成功设计并实现了一个安全可靠、功能完善的智能热水器控制系统。系统实现了精准的温度控制、完备的防干烧保护、便捷的本地与远程操作,达到了设计的预期目标。经过测试,系统运行稳定,控制准确,安全性高,为用户提供了舒适、安全、节能的热水使用体验。

(二)关键设计

  1. 安全第一设计

    • 防干烧保护: 水位检测必须绝对可靠,无水时立即切断加热电源

    • 过热保护: 设置温度上限(如75°C),防止过热危险

    • 电气隔离: 强电部分(加热管)与弱电控制部分完全隔离

  2. 加热控制优化

    • 采用PWM控制或PID算法,实现精确温度控制

    • 加入温度回差控制,防止频繁启停加热器

    • 加热过程中实时监测水位变化

  3. 用户体验设计

    • 温度设置范围合理(40°C-75°C),满足不同用途

    • 操作简单直观,一键式控制

    • 状态显示清晰,报警信息明确

  4. 节能设计

    • 支持定时加热功能,在用电低谷时段加热

    • 自动保温功能,温度低于设定值一定范围后自动加热

    • 待机模式降低功耗

  5. 可靠性设计

    • 传感器故障检测,异常时自动进入安全模式

    • 看门狗定时器,防止程序跑飞

    • 参数断电保存,恢复供电后保持原有设置

  6. 安装与维护

    • 水位传感器安装位置合理,准确反映真实水位

    • 温度传感器安装在水流充分位置,避免测量偏差

    • 便于清洁和维护的结构设计

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

Logo

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

更多推荐