STM32宠物寄养屋控制系统设计与实现

张开发
2026/4/9 4:43:39 15 分钟阅读

分享文章

STM32宠物寄养屋控制系统设计与实现
1. 项目概述这个基于STM32的宠物寄养屋控制系统是我最近完成的一个物联网项目它完美解决了现代宠物主人最头疼的几个问题出差时宠物没人照顾、无法实时了解宠物状态、传统寄养方式成本高等痛点。整套系统从硬件选型到软件开发都是经过反复测试验证的现在把完整的设计方案分享给大家。系统核心采用STM32F103RCT6作为主控搭配ESP8266实现物联网连接通过阿里云IoT平台进行数据交互。我在项目中集成了温湿度监控、自动散热、烟雾报警、余粮监测、宠物身份识别等实用功能实测运行稳定可靠。下面我会详细拆解每个模块的设计思路和实现方法。提示这个项目涉及硬件接线和嵌入式开发建议有一定STM32基础的朋友尝试。不过即使你是新手按照本文的步骤操作也能顺利完成。2. 硬件设计与选型2.1 主控模块选择我选择STM32F103RCT6作为主控芯片主要基于以下几点考虑72MHz主频足够处理多传感器数据256KB Flash和48KB SRAM满足程序存储需求丰富的GPIO和外设接口5个USART、2个SPI、2个I2C成本控制在合理范围约15-20元实际开发中使用的是最小系统板包含了必要的复位电路、晶振和稳压电路。建议购买时选择带SWD调试接口的版本方便后续程序下载和调试。2.2 传感器模块详解2.2.1 环境监测模块DHT11温湿度传感器数字信号输出精度±2℃温度和±5%湿度MQ-2烟雾传感器需要预热约20秒检测范围300-10000ppm这两个传感器都采用5V供电但注意DHT11的数据线需要接10kΩ上拉电阻。我在PCB设计时特意将传感器接口集中布局方便后期维护。2.2.2 重量检测模块HX711称重模块的选型要点24位高精度ADC支持5V和3.3V电平最大称重5kg满足宠物食盆需求实际使用中发现称重传感器的安装位置对精度影响很大。我的解决方案是设计了一个专用的食盆支架确保受力均匀。2.3 执行机构设计2.3.1 散热系统采用5V直流风扇配合继电器控制关键参数风扇风量0.8CFM继电器型号SRD-05VDC-SL-C温度阈值设定28℃可通过上位机调整2.3.2 食盘控制使用28BYJ-48步进电机驱动食盘盖需要注意需要ULN2003驱动板步进角度5.625°/步减速比1/64工作电压5V在实际装配时我给食盘盖加了硅胶密封条既保证密封性又不会夹伤宠物。3. 软件架构设计3.1 主程序流程图整个系统采用前后台架构上电初始化硬件、外设、网络进入主循环传感器数据采集本地显示刷新云端数据同步执行机构控制异常状态检测3.2 关键驱动程序实现3.2.1 DHT11驱动#define DHT11_GPIO_PORT GPIOA #define DHT11_GPIO_PIN GPIO_PIN_1 void DHT11_Start(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; // 配置为推挽输出 GPIO_InitStruct.Pin DHT11_GPIO_PIN; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DHT11_GPIO_PORT, GPIO_InitStruct); // 主机拉低18ms HAL_GPIO_WritePin(DHT11_GPIO_PORT, DHT11_GPIO_PIN, GPIO_PIN_RESET); delay_ms(18); // 拉高20-40us HAL_GPIO_WritePin(DHT11_GPIO_PORT, DHT11_GPIO_PIN, GPIO_PIN_SET); delay_us(30); // 切换为输入模式 GPIO_InitStruct.Mode GPIO_MODE_INPUT; HAL_GPIO_Init(DHT11_GPIO_PORT, GPIO_InitStruct); }3.2.2 ESP8266通信模块AT指令配置流程测试通信AT设置WIFI模式ATCWMODE1连接路由器ATCWJAPSSID,password连接MQTTATMQTTUSERCFG0,1,clientID,username,password,0,0,设置MQTT连接ATMQTTCONN0,iot.aliyun.com,1883,1注意阿里云IoT需要特殊的三元组认证具体配置方法见项目文档。3.3 阿里云IoT平台对接创建产品时需要配置产品功能定义温湿度、烟雾、余粮等物模型设备证书ProductKey、DeviceName、DeviceSecretTopic列表/sys/${productKey}/${deviceName}/thing/event/property/post数据上报采用JSON格式{ id: 123, version: 1.0, params: { Temperature: {value: 25.3}, Humidity: {value: 60}, Smoke: {value: 12}, FoodWeight: {value: 320} } }4. 系统集成与调试4.1 硬件组装要点传感器布局温湿度传感器应远离发热源如电机走线规划信号线与电源线分开走避免干扰接地处理所有传感器共地减少噪声电源分配电机类负载单独供电4.2 常见问题排查4.2.1 ESP8266连接不稳定可能原因天线位置不当应远离金属物体电源噪声建议增加100μF电容AT指令超时适当调整等待时间解决方案// 增加重试机制 uint8_t ESP8266_SendCmd(char* cmd, char* ack, uint16_t timeout) { uint8_t retry 3; while(retry--){ HAL_UART_Transmit(huart1, (uint8_t*)cmd, strlen(cmd), 1000); if(ESP8266_WaitAck(ack, timeout)){ return 1; } } return 0; }4.2.2 称重数据跳动处理方法软件滤波移动平均法#define FILTER_LEN 10 uint32_t weight_filter(uint32_t new_val) { static uint32_t buf[FILTER_LEN] {0}; static uint8_t index 0; uint32_t sum 0; buf[index] new_val; if(index FILTER_LEN) index 0; for(uint8_t i0; iFILTER_LEN; i){ sum buf[i]; } return sum/FILTER_LEN; }硬件加固增加防震垫定期校准零点校准和满量程校准5. 上位机开发使用Qt5开发的上位机主要功能实时数据显示曲线历史数据查询报警信息推送远程控制接口关键代码片段MQTT订阅void MainWindow::connectMQTT() { QMqttClient *client new QMqttClient(this); client-setHostname(iot.aliyun.com); client-setPort(1883); client-setUsername(YourUsername); client-setPassword(YourPassword); connect(client, QMqttClient::messageReceived, this, [](const QByteArray message){ QJsonDocument doc QJsonDocument::fromJson(message); QJsonObject obj doc.object(); double temp obj[params][Temperature][value].toDouble(); // 更新UI... }); client-connectToHost(); }界面设计建议采用深色主题降低功耗重要参数用大字体显示报警信息弹出提醒添加截图保存功能6. 项目优化方向在实际使用中我发现还可以做以下改进增加电池供电模块解决停电问题加入摄像头监控功能开发手机APP替代上位机实现多设备组网管理添加语音交互功能电源管理是个值得深入优化的点。我测试过用18650电池配合TP4056充电模块在关闭风扇的情况下可以持续工作约8小时。如果需要更长续航可以考虑低功耗模式设计比如传感器定时唤醒采集关闭不必要的LED指示降低MCU主频这个项目最让我满意的是它的扩展性。基于STM32的硬件平台和阿里云IoT的软件架构可以很方便地添加新功能。比如最近我就在尝试接入天猫精灵语音控制让系统更加智能化。

更多文章