基于STM32的智能饮水机控制系统设计
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
饮水机是现代家庭和办公场所的必备设备,其安全性、便捷性和节能性直接影响用户体验。传统饮水机功能单一,缺乏精确温控和缺水保护,存在干烧风险,且无法远程操作。本项目旨在开发一款具备精准温度控制、防干烧保护、多模式选择和远程监控功能的智能饮水机系统,对于提升生活智能化水平、保障用水安全、节约能源具有重要的现实意义。
(二)国内外研究现状
目前市场上高端饮水机已具备智能控制功能,但价格昂贵。大多数家用饮水机仍处于机械式或基础电子控制阶段。本设计基于性价比极高的STM32平台,集成传感器和执行器,提供了一个成本低、功能全、安全性高的智能饮水机控制解决方案,具有很高的实用和推广价值。
二、系统总体设计
(一)系统架构
本系统采用"感知-决策-执行-交互"的架构:
-
感知层:DS18B20(水温)、水位传感器
-
决策层:STM32F103C8T6主控芯片,处理数据并执行控制逻辑
-
执行层:继电器模块(控制加热片、水泵)、蜂鸣器
-
交互层:OLED显示屏、按键(本地交互);ESP8266 WiFi模块(远程交互)
(二)功能模块划分
-
参数监测模块:DS18B20(水温)、水位传感器
-
控制执行模块:继电器(控制加热片、水泵)
-
报警模块:有源蜂鸣器
-
人机交互模块:OLED显示屏、按键
-
通信模块:ESP8266 WiFi模块
三、硬件设计与实现
(一)系统硬件框架图

(二)主控模块选型及介绍
| 模块名称 | 型号 | 核心参数 | 选型理由 |
|---|---|---|---|
| 主控MCU | STM32F103C8T6 | Cortex-M3, 72MHz, 64KB Flash, 20KB RAM, 多个GPIO | 资源丰富,性能强大,完全满足本项目所有外设需求,性价比极高。 |
(三)传感器与执行器选型
| 模块类型 | 型号/种类 | 接口 | 功能说明 |
|---|---|---|---|
| 水温传感器 | DS18B20 | 1-Wire | 防水型,精度高,可直接浸入水中测量。 |
| 水位传感器 | 光电式水位传感器 | GPIO | 数字输出,缺水时输出低电平。无机械部件,寿命长,耐腐蚀。 |
| 加热控制 | 5V继电器模块 | GPIO | 控制加热片的通断。 |
| 水泵控制 | 5V继电器模块 | GPIO | 控制水泵的开关。 |
| 显示模块 | 0.96寸OLED | I2C | 显示水温、设定温度、加热状态、水位状态等。 |
| 通信模块 | ESP-01S | UART | 通过AT指令连接Wi-Fi,与手机APP进行数据交换。 |
1. 工作模式管理
-
Normal模式(常温):
-
不加热,直接出常温水
-
显示当前水温
-
-
Hot模式(加热):
-
加热至设定温度并保温
-
温度可调范围:40°C-95°C
-
-
Water模式(缺水):
-
检测到水位过低时自动进入
-
停止所有功能,报警提示
-
-
Open模式(出水):
-
手动控制出水
-
可设定出水时间
-
2. 温度控制逻辑
-
加热控制:
-
if (当前水温 < 设定温度) && (水位正常) { 启动加热继电器; OLED显示"Heating"; } -
if (当前水温 >= 设定温度) { 关闭加热继电器; OLED显示"Keep Warm"; }
-
-
温度调节:
-
"温度+"按键:设定温度+5°C(最高95°C)
-
"温度-"按键:设定温度-5°C(最低40°C)
-
3. 水位安全监控
-
无水保护:
-
if (水位传感器 == 无水) { 关闭加热继电器; 关闭水泵继电器; 启动蜂鸣器报警; LED显示黄色; OLED显示"Water:缺水警告"; }
-
-
恢复正常:
-
if (水位传感器 == 有水) { 停止报警; 恢复系统功能; }
-
4. 按键控制功能
-
加热按键: 切换加热模式开关
-
出水按键: 手动控制出水(按下出水,松开停止)
-
温度+: 提高设定温度
-
温度-: 降低设定温度
5. OLED显示界面
主界面显示: ---------------- 当前水温: 25.5°C 设定温度: 80.0°C 模式: Hot加热中 状态: 正常 ---------------- 缺水报警显示: ---------------- Water:缺水警告! 请及时加水 功能已暂停 ----------------
6. 远程监控功能
-
APP可实时查看:
-
当前水温和设定温度
-
工作模式状态
-
水位状态
-
-
APP远程控制:
-
远程开关加热功能
-
远程控制出水
-
远程设置温度
-
接收缺水报警通知
-
四、软件设计与实现
(一)开发环境搭建
-
IDE:STM32CubeIDE
-
库:使用STM32CubeMX配置HAL库,初始化GPIO、I2C、UART、定时器等外设
-
驱动:需编写DS18B20、OLED、ESP8266等驱动程序
(二)系统软件流程图

(三)关键软件模块实现
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("WATER: Lack of Water!");
MQTT_Publish("water_dispenser/status", "water_low");
} else {
Buzzer_Off();
// 水位正常,恢复正常功能
}
}
2. 温度控制逻辑
float targetTemperature = 25.0; // 默认目标温度
float currentTemperature = 0.0;
bool heatingEnabled = false;
void Temperature_Control(void) {
if (!heatingEnabled || !isWaterLevelOK) {
Heater_Off();
return;
}
// ON-OFF控制
if (currentTemperature < targetTemperature - 1.0) { // 设置回差防止频繁开关
Heater_On();
OLED_ShowStatus("HOT: Heating");
} else if (currentTemperature >= targetTemperature) {
Heater_Off();
OLED_ShowStatus("NORMAL: Ready");
}
}
// 执行器控制函数
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); // 等待释放
}
}
// 出水按键
if (HAL_GPIO_ReadPin(KEY_PUMP_GPIO_Port, KEY_PUMP_Pin) == GPIO_PIN_RESET) {
HAL_Delay(50);
if (HAL_GPIO_ReadPin(KEY_PUMP_GPIO_Port, KEY_PUMP_Pin) == GPIO_PIN_RESET) {
if(isWaterLevelOK) Water_Pump_On();
while(HAL_GPIO_ReadPin(KEY_PUMP_GPIO_Port, KEY_PUMP_Pin) == GPIO_PIN_RESET);
Water_Pump_Off();
}
}
// 温度加按键
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 += 5.0;
if (targetTemperature > 95.0) targetTemperature = 95.0; // 上限95°C
Save_Setting();
}
}
// 温度减按键
if (HAL_GPIO_ReadPin(KEY_SUB_GPIO_Port, KEY_SUB_Pin) == GPIO_PIN_RESET) {
HAL_Delay(50);
if (HAL_GPIO_ReadPin(KEY_SUB_GPIO_Port, KEY_SUB_Pin) == GPIO_PIN_RESET) {
targetTemperature -= 5.0;
if (targetTemperature < 25.0) targetTemperature = 25.0; // 下限25°C
Save_Setting();
}
}
}
4. 云平台数据上报与指令处理
void Publish_Data(void) {
char json_data[128];
sprintf(json_data,
"{\"temp\":%.1f, \"target_temp\":%.1f, \"heating\":%s, \"water_ok\":%s, \"mode\":\"%s\"}",
currentTemperature, targetTemperature,
heatingEnabled ? "true" : "false",
isWaterLevelOK ? "true" : "false",
heatingEnabled ? "hot" : "normal");
ESP8266_MQTT_Publish("water_dispenser/status", json_data);
}
void Process_App_Command(char* cmd) {
if (strstr(cmd, "heat=on")) {
if(isWaterLevelOK) 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 >= 25.0 && new_temp <= 95.0) {
targetTemperature = new_temp;
Save_Setting();
}
}
}
五、系统测试与优化
(一)测试方案
-
安全性测试:
-
干烧保护:将水位传感器置于空气中,模拟缺水,测试系统是否立即停止加热并声光报警
-
超温保护:设置较低目标温度,用外部热源加热DS18B20,测试超温后加热是否停止
-
-
功能测试:
-
温度控制:设置不同目标温度,测试系统能否准确加热并稳定在目标温度附近
-
按键控制:测试四个按键是否能正常控制加热、出水、调节温度
-
远程控制:测试APP远程设定温度、启停加热、启停水泵功能
-
-
可靠性测试:系统连续运行24小时,观察温度控制是否稳定,网络连接是否可靠
(二)优化方向
-
软件优化:
-
PID控制算法:将简单的ON-OFF控制升级为PID控制,使水温控制更加精确和平稳
-
定时功能:增加APP定时加热功能,方便用户使用
-
能耗统计:根据加热器功率和工作时间,计算并显示耗电量
-
-
硬件优化:
-
电源隔离:加热器功率较大,其控制继电器应与MCU采用光耦隔离,并单独供电
-
多档位加热:增加多个加热功率档位,提高能效
-
六、结论与关键设计
(一)结论
本项目成功设计并实现了一个安全可靠、功能完善的智能饮水机控制系统。系统实现了精准的温度控制、完备的防干烧保护、便捷的本地与远程操作,达到了设计的预期目标。经过测试,系统运行稳定,控制准确,安全性高,为用户提供了舒适、安全、节能的饮水体验。
(二)关键设计
-
最高优先级的干烧保护机制:系统将水位检测置于所有控制逻辑之前,一旦缺水立即停止加热并报警,这是保障安全的核心设计
-
本地与远程无缝融合的双模控制:物理按键提供本地快速操作,手机APP提供远程监控与控制,覆盖所有使用场景
-
清晰的多状态人机交互:OLED屏幕实时显示水温、设定温度、加热状态、水位状态等信息,提升用户体验和安全感
如有侵权,或需要完整代码,请及时联系博主。
更多推荐



所有评论(0)