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

一、引言

(一)研究背景及意义

饮水机是现代家庭和办公场所的必备设备,其安全性、便捷性和节能性直接影响用户体验。传统饮水机功能单一,缺乏精确温控和缺水保护,存在干烧风险,且无法远程操作。本项目旨在开发一款具备精准温度控制、防干烧保护、多模式选择和远程监控功能的智能饮水机系统,对于提升生活智能化水平、保障用水安全、节约能源具有重要的现实意义。

(二)国内外研究现状

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

二、系统总体设计

(一)系统架构

本系统采用"感知-决策-执行-交互"的架构:

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

  2. 决策层:STM32F103C8T6主控芯片,处理数据并执行控制逻辑

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

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

(二)功能模块划分

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

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

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

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

  5. 通信模块: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远程控制:

    • 远程开关加热功能

    • 远程控制出水

    • 远程设置温度

    • 接收缺水报警通知

四、软件设计与实现

(一)开发环境搭建

  1. IDE:STM32CubeIDE

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

  3. 驱动:需编写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();
    }
  }
}

五、系统测试与优化

(一)测试方案

  1. 安全性测试

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

    • 超温保护:设置较低目标温度,用外部热源加热DS18B20,测试超温后加热是否停止

  2. 功能测试

    • 温度控制:设置不同目标温度,测试系统能否准确加热并稳定在目标温度附近

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

    • 远程控制:测试APP远程设定温度、启停加热、启停水泵功能

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

(二)优化方向

  1. 软件优化

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

    • 定时功能:增加APP定时加热功能,方便用户使用

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

  2. 硬件优化

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

    • 多档位加热:增加多个加热功率档位,提高能效

六、结论与关键设计

(一)结论

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

(二)关键设计

  1. 最高优先级的干烧保护机制:系统将水位检测置于所有控制逻辑之前,一旦缺水立即停止加热并报警,这是保障安全的核心设计

  2. 本地与远程无缝融合的双模控制:物理按键提供本地快速操作,手机APP提供远程监控与控制,覆盖所有使用场景

  3. 清晰的多状态人机交互:OLED屏幕实时显示水温、设定温度、加热状态、水位状态等信息,提升用户体验和安全感

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

Logo

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

更多推荐