1. 项目背景与核心需求
养宠人群近年来呈现爆发式增长,但随之而来的"宠物假期看护难"问题日益突出。根据我过去三年为宠物店开发智能设备的经验,每逢节假日至少有60%的客户会面临短期寄养需求。传统解决方案存在三个痛点:笼位信息不透明导致空置浪费、健康监测依赖人工、环境参数不可控。
这个基于STM32的寄养平台要解决的核心问题是:通过物联网技术实现笼位智能管理+健康监测自动化+环境闭环控制。具体来说需要实现:
- 实时监测笼位占用状态(压力传感器+RFID识别)
- 自动记录宠物活动量(三轴加速度计)
- 动态调节温湿度(DHT11+继电器控制)
- 远程查看监控画面(OV2640摄像头)
- 异常情况报警(蜂鸣器+LED指示灯)
2. 硬件系统架构设计
2.1 主控选型对比
在STM32F103C8T6和STM32F407VET6之间做过详细对比测试:
- F103的优势在于成本(仅15元)和基础外设够用
- F407的优势是带硬件浮点运算和更大内存(192KB)
最终选择F103的原因:
- 温湿度计算等任务不需要浮点单元
- 摄像头使用JPEG模式直接输出,不占用MCU资源
- 实际测试F103驱动OV2640在320x240分辨率下帧率可达8fps
2.2 传感器组网方案
采用模块化设计思路,每个笼位包含:
- 压力传感器(HX711模块)
- RFID读卡器(RC522)
- 加速度计(MPU6050)
- 温湿度传感器(DHT11)
所有传感器通过定制支架集成在笼体顶部,通过1米长的FPC排线连接到主控板。实测发现:
- RC522天线需要距离宠物芯片3cm以内才能稳定读取
- MPU6050需设置100Hz采样率才能捕捉犬类活动特征
- DHT11必须避开笼内热源(如加热垫)安装
3. 关键功能实现细节
3.1 笼位状态检测算法
传统方案仅用压力传感器会导致误判(如宠物趴在边缘)。我们开发了多传感器融合算法:
c复制#define WEIGHT_THRESHOLD 200 // 克
#define MOTION_THRESHOLD 0.5 // g加速度
uint8_t check_cage_status() {
float accel = get_motion_value();
uint16_t weight = get_weight_value();
if(weight > WEIGHT_THRESHOLD || accel > MOTION_THRESHOLD) {
return OCCUPIED;
} else if(read_rfid() != 0) {
return RESERVED;
} else {
return AVAILABLE;
}
}
实测表明该算法可使误判率从32%降至5%以下。
3.2 环境控制系统
温湿度控制采用增量式PID算法:
c复制void pid_control(float current_temp) {
static float last_error = 0;
float error = target_temp - current_temp;
float delta = kp*(error - last_error) + ki*error;
if(delta > 0) {
heater_on();
fan_off();
} else {
heater_off();
fan_on();
}
last_error = error;
}
关键参数经验值:
- 加热功率:小型笼20W/m³
- 通风量:至少0.5m³/min
- 温度滞后带:±1℃避免频繁启停
4. 通信协议设计
4.1 无线传输方案对比
测试了三种常见方案:
- ESP8266 WiFi:吞吐量高但功耗大(待机80mA)
- HC-12 433MHz:距离远但速率仅5kbps
- NRF24L01 2.4GHz:平衡功耗(待机22μA)与速率(2Mbps)
最终选择NRF24L01的原因:
- 单个接收端可管理32个笼位
- 支持自动重传和ACK确认
- 实测穿墙性能满足10米范围需求
4.2 数据包结构设计
采用定长报文格式(16字节):
code复制0 1 2 3 4 5 6 7
|HEAD|ID |STAT|TEMP |HUMI|MOTION|RFID |CRC|
字段说明:
- HEAD:固定0xAA
- ID:笼位编号(1-32)
- STAT:状态字(bit0:占用 bit1:喂食 bit2:清洁)
- TEMP/HUMI:各1字节,实际值=原始值/2
- MOTION:活动量累计值(0-255)
- RFID:宠物ID末字节
- CRC:校验和
5. 实际部署经验
5.1 抗干扰设计
在宠物店实际部署时遇到的主要问题:
- 金属笼体对RFID信号的屏蔽 → 解决方案:将天线引出到塑料食盆底部
- 多设备无线信道冲突 → 解决方案:采用TDMA时分复用,每个笼位分配固定时隙
- 犬吠引起的振动误触发 → 解决方案:在加速度计算法中加入50Hz陷波滤波
5.2 电源管理技巧
为应对可能停电的情况:
- 主控板增加超级电容(5.5V 1F)可维持RTC运行72小时
- 每个传感器模块独立添加0.1uF去耦电容
- 采用汽车级接线端子防止接触不良
6. 软件系统优化
6.1 低功耗策略
通过以下措施使整机待机电流降至15mA:
- 摄像头仅在移动侦测触发时启动
- 传感器采用轮询机制(温湿度每10秒采样一次)
- 无线模块进入ShockBurst模式
6.2 上位机通信协议
开发了基于Modbus RTU的扩展协议:
- 功能码0x45:读取笼位状态
- 功能码0x46:设置目标温度
- 功能码0x47:触发喂食机
示例请求帧:
code复制[地址][0x45][起始ID][数量][CRC]
响应帧包含连续的状态数据,每个笼位占2字节。
7. 实测效果与改进方向
经过三个月实际运行数据统计:
- 笼位利用率提升40%
- 宠物中暑/感冒投诉下降85%
- 平均每日节省人工巡检时间3小时
下一步改进计划:
- 增加AI行为分析(通过摄像头识别抓挠等应激行为)
- 试用LoRa替代2.4GHz无线方案
- 开发微信小程序直接控制功能
这个项目给我的深刻体会是:硬件可靠性比功能丰富更重要。曾经因为一个劣质继电器导致温控失效,差点造成宠物健康事故。现在所有关键部件都坚持用工业级器件,宁可成本高些也要确保万无一失。