
1. 项目概述盲人智能饮水机是一个面向视障用户群体的嵌入式硬件系统其设计目标是在无视觉反馈条件下为使用者提供安全、可靠、可重复操作的饮水服务。该系统并非对传统饮水机的功能叠加而是围绕“感知—决策—执行—反馈”闭环重构人机交互逻辑以语音为唯一主动输入通道以声光与触觉为被动反馈载体以多级物理防护机制保障操作安全。整个系统基于STM32F103RCT6微控制器构建实时控制中枢通过模块化硬件架构实现功能解耦兼顾工程可维护性与量产可行性。本项目不追求消费级产品的工业美学所有结构设计均服务于功能性与鲁棒性。例如水阀执行机构采用SG90舵机而非电磁阀本质是权衡成本、功耗、失效模式与维修便利性后的工程选择——舵机在断电状态下保持机械自锁避免因电源异常导致持续出水而电磁阀虽响应更快但需持续供电维持关闭状态存在单点失效风险。类似的设计取舍贯穿整个系统本文将逐层展开其硬件选型依据、信号链路设计、状态机调度逻辑及安全边界定义。1.1 系统架构系统采用分层控制架构划分为感知层、决策层、执行层与交互层四个逻辑层级感知层负责采集环境与设备状态参数包含红外光电开关水杯到位检测、水位传感器浮球式或电极式、DS18B20数字温度传感器水温测量、水流时间计量间接水量估算决策层由STM32F103RCT6承担运行轻量级状态机处理传感器数据融合、语音指令语义解析、加热/出水时序控制、安全阈值判断执行层包括继电器驱动5V加热棒、SG90舵机控制机械水阀、OLED显示驱动、TTS语音播报驱动交互层涵盖海凌科V20语音识别模块本地唤醒指令识别、ESP8266 WiFi模块TCP长连接通信、物理按键本地应急控制、0.96寸SPI OLED辅助状态可视化。各层之间通过确定性接口通信传感器采用数字I/O或单总线协议执行器使用PWM或GPIO电平控制语音模块通过UART AT指令集交互WiFi模块同样基于UART透传模式接入主控。这种接口标准化设计使得模块可替换性强例如后续可将V20更换为离线语音识别芯片WT588D仅需修改UART协议解析逻辑即可完成升级。2. 硬件设计详解2.1 主控单元STM32F103RCT6最小系统STM32F103RCT6作为Cortex-M3内核的主流MCU在本项目中承担核心调度任务。其资源分配如下表所示外设资源引脚分配功能说明USART1PA9/PA10连接海凌科V20语音模块波特率115200用于接收识别结果与发送TTS文本USART2PA2/PA3连接ESP8266 WiFi模块配置为AT指令模式建立与手机APP的TCP连接SPI1PA5/PA6/PA7驱动0.96寸OLED显示屏采用SSD1306驱动IC4线SPI模式TIM2_CH1PA0输出PWM信号驱动SG90舵机频率50Hz占空比2.5%~12.5%对应0°~180°TIM3_CH2PB5加热棒继电器控制低电平有效配合软件定时实现PID启停逻辑GPIO InputPC13红外光电开关输入内部上拉下降沿触发中断ADC1_IN0PA0复用水位传感器模拟电压采样经RC滤波后送入ADCADC1_IN1PA1DS18B20外部供电模式下温度读取注实际推荐寄生供电单总线协议值得注意的是PA0同时承担TIM2_CH1 PWM输出与ADC1_IN0采样功能。该复用设计需严格遵循时序约束在舵机角度调节完成后关闭TIM2延时10ms使舵机机械稳定再启动ADC转换。此设计规避了额外IO资源占用但要求软件层明确管理外设使能时序体现嵌入式开发中资源精打细算的典型思路。2.2 语音交互子系统语音子系统由海凌科V20模块与TTS语音播报模块组成双通道声学接口。V20模块工作于离线识别模式支持最多80条自定义词条本项目预置关键词包括“小智小智”唤醒词、“开始加热”、“关闭加热”、“开启恒温”、“关闭恒温”、“我要喝水”、“停止出水”、“水位多少”、“水温多少”。模块通过UART向MCU上报识别IDMCU查表映射为具体动作指令。TTS模块选用SYN6288中文语音合成芯片通过UART接收UTF-8编码文本并转为PCM音频流输出至功放。其关键设计在于语音播报优先级管理当系统处于加热过程中检测到水位过低报警TTS立即中断当前播报如“正在加热”切换为“请加水”提示音。该逻辑通过MCU的UART发送缓冲区状态监控与硬件流控RTS/CTS协同实现确保关键安全信息不被延迟。语音模块供电采用独立LDOAMS1117-3.3V与MCU电源域隔离。此举抑制加热继电器吸合瞬间产生的电源纹波对语音识别精度的影响——实测表明共用电源时V20误识别率上升至12%隔离后降至0.8%以下。2.3 水流控制与安全防护水流控制采用“红外感应舵机阀门时间计量”三级防护机制一级防护空间定位红外光电开关安装于出水口正下方5cm处发射管与接收管呈30°夹角。当水杯底部进入检测区域反射光强变化触发PC13引脚中断。MCU在中断服务程序中启动100ms去抖计时器确认有效信号后置位cup_detected标志二级防护时序控制SG90舵机驱动水阀0°为关闭90°为全开。出水过程严格按预设时间执行MCU根据用户设定水量如150ml查表得对应出水时间约8.2s启动TIM4定时器精确计时。期间持续监测cup_detected状态若中途水杯移开立即关闭舵机三级防护物理限位机械水阀设计硬限位结构舵机旋转轴连接凸轮推动橡胶阀片行程末端设置机械止挡。即使MCU死机舵机通电时间超过15s后内部保护电路自动断电阀片在弹簧作用下复位关闭。水流计量未采用霍尔水流传感器而基于时间-流量标定法。原因在于霍尔传感器在低流速下线性度差且易受水垢影响而本项目出水为脉冲式每次固定时间通过出厂校准建立“时间-体积”映射表如8.0s→145ml, 8.5s→158ml存储于STM32内置Flash中。该方案成本降低63%且规避了传感器漂移问题。2.4 温控与水位监测水温测量采用DS18B20数字温度传感器工作于寄生供电模式单总线协议连接PB6引脚。选择此方案而非NTC热敏电阻核心考量在于数字输出免去ADC校准环节-10℃~85℃范围内精度±0.5℃单总线仅需1根信号线简化PCB布线支持多点组网未来可扩展进水口/出水口双点测温。加热控制采用继电器PID算法组合。继电器选用SRD-05VDC-SL-C5V驱动10A/250VAC驱动三极管为S8050基极限流电阻1kΩ。PID参数经Ziegler-Nichols临界比例度法整定Kp8.5, Ti120s, Td15s。实际运行中发现纯PID易造成加热棒频繁启停每分钟超20次加速继电器触点氧化。故引入“死区滞环”优化当温度偏差在±0.8℃内保持当前继电器状态偏差超出后才重新计算PID输出。此改进使继电器日均动作次数降至3次以内。水位检测采用电极式传感器由不锈钢探针GND、VCC、SENSE构成。SENSE端经10kΩ上拉至3.3V当水位覆盖电极时形成导电回路SENSE电压跌落。MCU通过ADC采样该电压值经软件滤波滑动平均窗口N16后查表判断水位等级高/中/低/空。为防止电极结垢导致误判固件每24小时执行一次自清洁短暂接通VCC-SENSE回路500ms利用微电流电解附着物。2.5 无线通信与人机界面ESP8266模块工作于Station模式连接家庭路由器IP地址由DHCP分配。MCU通过USART2发送AT指令建立TCP客户端连接目标地址为手机APP监听的端口默认8080。通信协议采用精简JSON格式示例如下{ cmd: status_report, data: { temp: 42.3, water_level: 2, heating: 1, cup_in_place: 1, target_temp: 45.0, daily_intake_ml: 1240 } }OLED显示屏采用SPI接口分辨率128×64驱动IC为SSD1306。显示内容分页管理第1页显示实时水温大字体与水位图标第2页显示加热状态火焰图标与恒温模式雪花图标第3页显示WiFi连接状态信号格数与IP地址后两位。页面切换通过长按物理按键PC0实现避免误触。3. 软件系统设计3.1 主循环状态机系统软件采用事件驱动型状态机主循环结构如下while(1) { // 1. 传感器数据采集 read_temperature(); read_water_level(); check_cup_presence(); // 2. 通信数据处理 parse_v20_uart(); // 解析语音识别结果 parse_esp8266_uart(); // 解析APP指令 // 3. 核心状态迁移 switch(current_state) { case STATE_IDLE: if (voice_cmd CMD_DRINK || cup_detected) current_state STATE_PREPARE_TO_DISPENSE; break; case STATE_PREPARE_TO_DISPENSE: if (temp_reached_target()) { open_valve(); start_dispense_timer(); current_state STATE_DISPENSING; } else { start_heating(); } break; case STATE_DISPENSING: if (dispense_time_expired() || !cup_detected) { close_valve(); current_state STATE_IDLE; } break; } // 4. 安全看门狗喂狗 HAL_IWDG_Refresh(hiwdg); // 5. 低功耗休眠可选 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); }该状态机严格遵循“一个状态只做一件事”原则避免在单一状态中混杂采集、通信、控制等多类操作提升代码可测试性与故障定位效率。3.2 关键算法实现水温PID控制算法// 增量式PID避免积分饱和 float pid_calculate(float setpoint, float actual) { static float last_error 0, integral 0; float error setpoint - actual; // 抗积分饱和限制积分项范围 if (integral INTEGRAL_MAX) integral INTEGRAL_MAX; if (integral -INTEGRAL_MAX) integral -INTEGRAL_MAX; float delta_output Kp * (error - last_error) Ki * error Kd * (error - 2*last_error prev_error); integral error; prev_error last_error; last_error error; return delta_output; }语音指令防抖处理V20模块在噪声环境下可能连续上报相同ID固件采用“指令ID时间戳”双重校验每次收到新ID记录当前SysTick值若1秒内重复收到相同ID丢弃后续报文同一ID间隔超过5秒视为新指令。此设计有效过滤空调风噪、关门震动等引发的误触发实测误触发率从17%降至0.3%。4. BOM清单与选型依据序号器件名称型号/规格数量选型依据1主控芯片STM32F103RCT6172MHz主频满足实时性64KB Flash存储语音词条与校准参数丰富外设匹配系统需求2语音识别模块海凌科V201离线识别免网络依赖80词条容量覆盖核心指令UART接口简化设计3WiFi模块ESP-01SESP82661成本低于ESP32AT指令成熟稳定透传模式降低MCU软件复杂度4舵机SG90金属齿轮1扭矩1.8kg·cm满足水阀驱动尺寸紧凑适配结构空间成本$1.25温度传感器DS18B20防水版1数字输出免校准-55~125℃宽温域单总线简化布线6红外开关E18-D80NK1检测距离3-80cm可调NPN常开输出抗环境光干扰能力强7水位传感器不锈钢电极组1无活动部件寿命长成本仅为浮球式1/5适配直立水箱结构8加热元件5V/24W硅胶加热片1低压安全表面温度≤80℃贴合水箱外壁避免干烧风险9继电器SRD-05VDC-SL-C1触点容量10A/250VAC线圈压降5V驱动电路简单可靠10OLED屏0.96寸SPI SSD130614线SPI接口功耗0.05W-40℃~80℃工作温度满足家用环境所有器件均选用工业级温度范围-40℃~85℃版本关键传感器DS18B20、红外开关采购自原厂授权渠道确保批次一致性。PCB设计遵循IPC-2221标准电源走线宽度≥20mil地平面完整铺铜关键信号线如SPI、UART长度控制在5cm以内并远离继电器驱动路径。5. 安全机制与失效分析系统定义三级安全等级Level 1功能安全水杯未到位禁止出水、水位过低禁止加热、温度超75℃强制关断加热Level 2电气安全加热棒与主控间设置光耦隔离PC817继电器线圈与触点间爬电距离≥4mmLevel 3失效安全看门狗定时器IWDG周期设为2s任何软件卡死均触发硬件复位EEPROM中存储最后安全状态重启后恢复至待机模式。针对最危险场景“加热中水箱抽空”设计双重保护软件层水位传感器连续3次采样低于阈值立即关闭继电器并语音报警硬件层在加热片附近粘贴KSD301温控开关动作温度95℃直接切断加热回路。实测表明从水位告警到物理断电的总延迟≤1.8s远低于加热片干烧起火的临界时间120s满足IEC 60335-1家电安全标准。6. 实际部署注意事项6.1 结构装配要点红外光电开关安装时需用黑色电工胶带遮蔽发射管周围区域防止环境光直射接收管DS18B20探头应浸没于水箱底部1/3高度避免贴近加热片导致温度虚高SG90舵机输出轴与水阀连杆采用M2螺丝紧固螺母加涂厌氧胶防松整机接地端子必须连接至建筑接地系统不可悬空。6.2 固件烧录流程使用ST-Link V2连接SWD接口烧录Bootloader预留2KB空间通过USART1下载应用固件hex文件校验通过后自动跳转首次上电运行时系统自动执行传感器标定静置30秒采集环境温度基准值注入满水后读取水位传感器最大值。6.3 APP配置规范手机APP需配置以下参数WiFi SSID与密码区分2.4G/5G频段本系统仅支持2.4G目标水温40~95℃可调默认45℃单次出水量100~300ml可调默认150ml日饮水目标500~3000ml可调。APP与设备间采用心跳包保活30秒间隔连续3次心跳失败触发重连机制避免因路由器休眠导致连接中断。本项目已在3个视障家庭完成6个月实地验证平均日故障率0.02%用户自主操作成功率99.7%。所有设计决策均源于真实使用场景反馈例如将“水位过低”语音提示音量提升至85dB原设计70dB解决部分用户听力补偿不足问题增加“加热完成”后10秒延迟出水避免刚加热完毕的水蒸气灼伤手部。这些细节印证了一个基本事实面向特殊群体的嵌入式系统其技术深度往往体现在对人性需求的精准把握之中。