十年前抄水表还得挨家挨户敲门,现在我的智能水表项目能让水务公司省下90%人工成本。这个基于STM32F103C8T6的智能水表系统,通过霍尔传感器检测水流,配合NB-IoT模块实现远程抄表,在多个小区实际运行中误差率小于0.5%。最让我自豪的是整套硬件成本控制在35元以内,比市面同类产品便宜60%。
传统机械水表存在三大痛点:人工抄表效率低、数据易出错、漏水难监测。我设计的系统用磁感应原理计量水流,STM32处理脉冲信号并换算为用水量,通过NB-IoT每日定时上报云端。特别优化过的低功耗设计,使8000mAh锂电池可连续工作6年以上,完全覆盖水表检定周期。
经过三轮样机测试,最终硬件配置如下表所示:
| 模块 | 选型型号 | 关键参数 | 替代方案 |
|---|---|---|---|
| 主控 | STM32F103C8T6 | 72MHz Cortex-M3,64KB Flash | GD32F103(便宜10%) |
| 流量检测 | YF-S201霍尔水流传感器 | 1L/450脉冲,±2%精度 | 干簧管方案(成本减半但寿命短) |
| 通信模块 | BC26 NB-IoT模组 | 支持TCP/UDP,PSM模式电流<5μA | SIM7000C(功耗高30%) |
| 电源管理 | TP4056充电IC | 最大1A充电电流 | 分立元件方案(体积大) |
经验之谈:霍尔传感器一定要选食品级塑料外壳的型号,普通型号长期接触自来水容易滋生藻类导致叶轮卡死。
脉冲信号调理电路:在霍尔传感器输出端并联104瓷片电容消除抖动,通过LM393比较器将信号转换为3.3V电平。实测显示,不加硬件消抖时STM32会多计15%的脉冲数。
NB-IoT天线设计:采用PCB蛇形天线而非外接天线,节省$0.3成本。布局时需确保天线周边5mm内无金属元件,实测信号强度比外接天线低8dB但满足城市覆盖需求。
低功耗实现方案:
c复制// 用水量计算核心代码
volatile uint32_t pulseCount = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if(GPIO_Pin == FLOW_SENSOR_PIN) {
pulseCount++;
}
}
float CalculateWaterUsage() {
float liters = (float)pulseCount / PULSES_PER_LITER; // 450脉冲/升
pulseCount = 0;
return liters;
}
流量累计采用32位无符号整型存储脉冲数,可支持最大4294万升(约4万吨)水量记录。为防止意外断电导致数据丢失,每累计10升水量就写入一次FRAM(铁电存储器)。
上报数据采用精简JSON格式,经测试比二进制协议节省30%流量:
json复制{
"devID":"WMB-8621",
"time":"20230815T020000",
"volume":12.65,
"bat":3.82,
"temp":23.5
}
通信流程包含三次握手确认:
踩坑记录:早期版本未做数据确认,约5%的数据包丢失。后来增加重传机制后,数据完整率达到99.97%。
在不同工作模式下的电流消耗:
| 工作模式 | 设计目标电流 | 实测电流 | 持续时间 |
|---|---|---|---|
| 深度睡眠 | <5μA | 3.2μA | 23.9小时/天 |
| 水流检测 | <10mA | 8.1mA | 10分钟/天 |
| 网络通信 | <250mA | 217mA | 90秒/天 |
实测表明,采用动态调整检测频率的策略可进一步省电:当检测到持续用水时,将检测间隔从10秒缩短到1秒;无水流动时逐步延长间隔到60秒。这套算法使整体功耗降低42%。
问题1:冬季低温导致电池续航骤降
问题2:水锤效应引发误计数
为保障批量生产质量,我们开发了自动化测试工装:
每个水表必须通过以下测试项:
这套系统已在三个小区部署超过2000台,最长的已稳定运行28个月。有个意外收获是帮物业发现了7处隐蔽水管泄漏——通过分析夜间最小流量异常,定位到某户每天凌晨固定消耗0.5吨水,最终发现是马桶水箱暗漏。