基于STM32智能热水器控制系统
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
热水器是现代家庭必不可少的电器,其安全性和便捷性直接关系到用户的生命财产和生活品质。传统热水器功能单一,缺乏精确温控,且无法远程操作,经常出现等待加热、水温忽冷忽烫或忘记关闭导致能源浪费等问题。更严重的是,干烧是热水器最大的安全隐患。本项目旨在开发一款具备精准温度控制、防干烧保护、远程监控等功能的智能热水器系统,对于提升家居智能化水平、保障用户安全、节约能源具有重要的现实意义。
(二)国内外研究现状
目前市场上高端热水器已具备Wi-Fi控制和手机APP管理功能,但价格昂贵。大多数家用热水器仍处于机械式或基础电子控制阶段。本设计基于性价比极高的STM32平台,自主集成传感器和执行器,提供了一个成本低、功能全、安全性高的智能热水器控制解决方案,具有很高的实用和推广价值。
二、系统总体设计
(一)系统架构
本系统采用“感知-决策-执行-交互”的架构。
-
感知层:DS18B20(水温)、水位传感器。
-
决策层:STM32F103C8T6主控芯片,处理数据、执行PID控制算法和安全逻辑。
-
执行层:继电器模块(控制加热片、水泵)、蜂鸣器。
-
交互层:OLED显示屏、按键(本地交互);ESP8266 Wi-Fi模块(远程交互)。
(二)功能模块划分
-
参数监测模块:DS18B20(水温)、水位传感器。
-
控制执行模块:继电器(控制加热片、水泵)。
-
报警模块:有源蜂鸣器。
-
人机交互模块:OLED显示屏、按键。
-
通信模块: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远程控制:
-
远程开启/关闭加热
-
远程控制出水
-
远程设置温度
-
接收低水位报警通知
-
四、软件设计与实现
(一)开发环境搭建
-
IDE:STM32CubeIDE。
-
库:使用STM32CubeMX配置HAL库,初始化GPIO、I2C、UART、定时器等外设。
-
驱动与算法:需编写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();
}
}
}
五、系统测试与优化
(一)测试方案
-
安全性测试:
-
干烧保护:将水位传感器置于空气中,模拟缺水,测试系统是否立即停止加热并声光报警。
-
超温保护:设置一个较低的目标温度,然后用外部热源加热DS18B20,测试温度超过设定值后加热是否停止。
-
-
功能测试:
-
温度控制:设置不同目标温度(如40°C, 50°C, 60°C),测试系统能否准确加热并稳定在目标温度附近。
-
按键控制:测试四个按键是否能正常控制加热、出水、调节温度。
-
远程控制:测试APP远程设定温度、启停加热、启停水泵功能是否及时响应。
-
-
可靠性测试:系统连续运行24小时,观察温度控制是否稳定,网络连接是否可靠。
(二)优化方向
-
软件优化:
-
PID控制算法:将简单的ON-OFF控制升级为PID控制,使水温控制更加精确和平稳,避免温度波动。
-
定时功能:增加APP定时加热功能,例如设定每天晚上8点将水加热到50°C,方便用户使用。
-
能耗统计:根据加热器功率和工作时间,粗略计算并显示本次加热的耗电量。
-
-
硬件优化:
-
电源隔离:加热器功率较大,其控制继电器应与MCU采用光耦隔离,并单独供电,防止干扰MCU。
-
防漏电设计:增加漏电保护器(硬件),作为软件保护之外的又一重安全屏障。
-
六、结论与关键设计
(一)结论
本项目成功设计并实现了一个安全可靠、功能完善的智能热水器控制系统。系统实现了精准的温度控制、完备的防干烧保护、便捷的本地与远程操作,达到了设计的预期目标。经过测试,系统运行稳定,控制准确,安全性高,为用户提供了舒适、安全、节能的热水使用体验。
(二)关键设计
-
安全第一设计:
-
防干烧保护: 水位检测必须绝对可靠,无水时立即切断加热电源
-
过热保护: 设置温度上限(如75°C),防止过热危险
-
电气隔离: 强电部分(加热管)与弱电控制部分完全隔离
-
-
加热控制优化:
-
采用PWM控制或PID算法,实现精确温度控制
-
加入温度回差控制,防止频繁启停加热器
-
加热过程中实时监测水位变化
-
-
用户体验设计:
-
温度设置范围合理(40°C-75°C),满足不同用途
-
操作简单直观,一键式控制
-
状态显示清晰,报警信息明确
-
-
节能设计:
-
支持定时加热功能,在用电低谷时段加热
-
自动保温功能,温度低于设定值一定范围后自动加热
-
待机模式降低功耗
-
-
可靠性设计:
-
传感器故障检测,异常时自动进入安全模式
-
看门狗定时器,防止程序跑飞
-
参数断电保存,恢复供电后保持原有设置
-
-
安装与维护:
-
水位传感器安装位置合理,准确反映真实水位
-
温度传感器安装在水流充分位置,避免测量偏差
-
便于清洁和维护的结构设计
-
如有侵权,或需要完整代码,请及时联系博主。
更多推荐

所有评论(0)