1. 项目概述
作为一名嵌入式开发工程师,我最近完成了一个基于STM32的水位检测自动控制系统项目。这个系统专为解决鱼缸、水族箱等场景的自动化管理需求而设计,集成了水位检测、水温监测、水泵控制、云端数据同步和手机端远程管理等功能。相比传统机械浮球方案,这套系统实现了厘米级水位精度和0.1℃水温测量,还能通过手机APP随时查看状态和手动控制。
系统硬件核心采用STM32F103C8T6作为主控,搭配HC-SR04超声波模块进行非接触式水位检测,DS18B20数字温度传感器负责水温采集。通过继电器模块控制水泵启停,ESP8266 WiFi模块实现与阿里云IoT平台的连接。软件层面使用FreeRTOS实时操作系统进行任务调度,确保传感器数据采集、设备控制和网络通信的实时性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与选型
2.1 主控芯片选择
STM32F103C8T6(俗称"蓝莓派")是这个项目的主控选择,主要基于以下几点考虑:
- 72MHz主频的Cortex-M3内核,性能足够处理传感器数据和多任务调度
- 64KB Flash和20KB SRAM,满足FreeRTOS和业务逻辑的内存需求
- 丰富的外设接口:3个USART、2个SPI、2个I2C,方便扩展各种模块
- 价格亲民(约10元/片),开发资源丰富,适合个人项目
注意:采购时务必选择正版ST芯片,市场上流通的某些兼容型号(如GD32)在FreeRTOS兼容性上可能存在问题
2.2 水位检测方案
HC-SR04超声波模块是水位检测的核心部件,其工作原理是:
- 控制器发送至少10μs的TTL脉冲触发信号
- 模块自动发射8个40kHz超声波脉冲
- 接收到回波后,ECHO引脚输出高电平,持续时间与距离成正比
计算水位的公式为:
code复制距离(cm) = 高电平时间(μs) × 声速(m/s) / 2 × 10000
其中声速需要考虑水温补偿:
code复制声速 = 331.4 + 0.6 × 当前水温(℃)
硬件连接注意事项:
- 触发(TRIG)和回波(ECHO)信号线建议使用屏蔽线
- 模块应垂直水面安装,避免倾斜导致测量误差
- 测量面与水面的距离建议保持在10-80cm范围内
2.3 水温检测实现
DS18B20数字温度传感器采用单总线协议,具有以下特点:
- 测量范围:-55℃~+125℃,精度±0.5℃
- 9~12位可编程分辨率(本项目使用12位,转换时间750ms)
- 每个器件有唯一64位序列号,支持多设备并联
单总线协议的关键时序:
- 复位脉冲:主机拉低总线480-960μs后释放,等待60-240μs从机响应
- 写时隙:写"1"时主机拉低1-15μs后释放,写"0"时持续拉低60-120μs
- 读时隙:主机拉低1μs后释放,在时隙开始后15μs采样总线状态
调试技巧:使用逻辑分析仪抓取单总线时序是排查通信问题的有效手段,建议设置采样率至少4MHz
2.4 电源与PCB设计
系统电源方案:
- 主电源:12V/2A直流适配器
- 一级转换:LM2596降压至5V(供ESP8266、继电器等)
- 二级转换:AMS1117-3.3V(供STM32及传感器)
PCB布局要点:
- 超声波模块远离高频数字线路和电源走线
- DS18B20信号线增加1KΩ上拉电阻,走线长度不超过30cm
- 继电器线圈两端并联续流二极管(1N4007)
- STM32的VDDA和VSSA引脚就近放置0.1μF+1μF去耦电容
3. 软件架构与实现
3.1 FreeRTOS任务划分
系统采用FreeRTOS进行多任务管理,主要任务及优先级设置如下:
| 任务名称 | 优先级 | 功能描述 | 执行周期 |
|-------
