若该文为原创文章,转载请注明原文出处。
一、引言
现代生活中,宠物已成为许多家庭的重要成员。然而,主人外出时,宠物的饮食、饮水和生活环境成为担忧的问题。传统宠物喂养方式无法实现精准管理和远程照看。本项目设计一款以STM32为核心的智能宠物小屋系统。该系统能够自动监测并调节小屋内环境温湿度,智能管理宠物粮食和饮水的补给,并通过远程监控功能让主人随时了解爱宠状态并进行干预,极大提升了宠物饲养的便捷性、科学性和趣味性。
二、系统总体设计
(一)系统架构
本系统以STM32为控制核心,集成了环境感知、粮水管理、人机交互和远程通信功能。
-
感知层:负责采集小屋内温湿度、粮仓重量、水盆水位等数据。
-
控制层:STM32核心,处理所有数据,执行判断逻辑,发出控制指令。
-
执行层:包括风扇、舵机(投食)、水泵(加水),负责具体动作的执行。
-
交互层:OLED显示屏和按键,提供本地状态显示和设置功能。
-
通信层:Wi-Fi模块,连接互联网,实现手机APP的远程数据监控和设备控制。
(二)功能模块划分
-
环境调控模块:温湿度监测与自动降温。
-
智能投喂模块:余粮检测与自动补粮。
-
自动供水模块:水位检测与自动补水。
-
状态显示模块:所有参数与状态的本地可视化。
-
远程监控模块:与手机APP的数据交互。
三、硬件设计与实现
(一)系统硬件框架图

(二)主控模块选型及介绍
核心控制器采用STM32F103C8T6。该芯片资源丰富,提供PWM输出驱动舵机,ADC接口读取水位传感器,I2C驱动OLED,UART连接Wi-Fi模块,GPIO控制继电器和读取数字信号,完美契合本项目所有外设需求,是性价比极高的选择。
(三)传感器模块选型及电路设计
-
DHT11:数字温湿度传感器,单总线协议,连接普通GPIO,用于监测小屋环境。
-
HX711 + 称重传感器:用于粮仓重量检测。
-
称重传感器:通常为电阻应变式,组成惠斯通电桥。其输出微弱信号需专用芯片处理。
-
HX711模块:24位高精度A/D转换芯片,专为称重设计。其DT和SCK引脚分别连接STM32的两个GPIO。STM32通过特定的时序读取HX711转换后的重量数据,精度远高于普通ADC。
-
-
水位传感器 :采用模拟输出 型传感器,输出模拟电压信号,连接STM32的ADC引脚 (如PA0)。水位越高,输出电压越高。(也可使用数字开关型,但模拟型能提供更精确的水量信息)。
(四)执行模块选型及驱动电路
-
舵机(投食) :采用SG90 等常见小型舵机。控制信号为PWM波,连接STM32的定时器PWM输出通道(如TIM3_CH1)。通过调节PWM的占空比来控制舵机的旋转角度,从而控制出粮口的开闭和开合大小。
-
直流风扇 :可采用5V直流风扇 ,通过一个MOS管 (如IRF520模块)或继电器模块由STM32的GPIO控制通断。MOS管方案更安静,适合低速持续通风。
-
小型水泵 :通常为5V或12V直流电机驱动。必须使用继电器模块或MOS管驱动,绝不能直接连接STM32的GPIO。控制方式与风扇类似。
(五)通信模块选型
采用ESP-01S ESP8266模块。通过UART(如USART2)与STM32连接。STM32通过AT指令控制其连接家庭Wi-Fi并接入云平台(如MQTT服务器),实现与手机APP的数据双向传输。
四、软件设计与实现
(一)开发环境搭建
-
IDE:Keil uVision 5。
-
配置工具:使用STM32CubeMX进行硬件初始化配置(启用I2C、UART、ADC、定时器PWM等),生成HAL库代码工程。
-
库移植:移植OLED、DHT11、HX711、ESP8266的驱动程序库。
(二)系统软件流程图

(三)核心代码逻辑
// 定义全局变量与阈值
float temp_threshold_high = 30.0;
int food_weight_threshold = 100; // 单位: 克
int water_level_threshold = 200; // ADC值, 需实验测定
void main() {
// 初始化HX711, 并去皮(清零)
HX711_Tare();
// 初始化...
while(1) {
// 1. 读取传感器
temperature = DHT11_GetTemperature();
current_food_weight = HX711_GetWeight(); // 获取当前重量
water_level = ADC_Read(WATER_SENSOR_CH);
// 2. OLED显示
OLED_ShowString(0, 0, "Temp:");
OLED_ShowNumber(60, 0, temperature);
OLED_ShowString(0, 2, "Food:");
OLED_ShowNumber(60, 2, current_food_weight);
OLED_ShowString(0, 4, "Water:");
OLED_ShowNumber(60, 4, water_level);
// ... 显示状态信息
// 3. 自动控制逻辑
// 3.1 温度控制
if (temperature > temp_threshold_high) {
FAN_ON();
} else {
FAN_OFF();
}
// 3.2 投食控制
if (current_food_weight < food_weight_threshold) {
Servo_Feed(180); // 舵机旋转180度, 投食一次
HAL_Delay(1000);
Servo_Feed(0); // 舵机归位, 关闭食口
current_food_weight += 10; // 模拟投食后重量增加(实际应由HX711重新读取)
}
// 3.3 补水控制
if (water_level < water_level_threshold) {
PUMP_ON();
} else {
PUMP_OFF();
}
// 4. 处理通信
if (time_to_send_data()) {
sprintf(json_data, "{\"temp\":%.1f,\"food\":%d,\"water\":%d}",
temperature, current_food_weight, water_level);
ESP8266_SendToCloud(json_data);
}
// (在中断中) 如果收到APP指令如 "feed", 则执行一次 Servo_Feed动作
HAL_Delay(5000); // 每5秒检测一次, 无需过于频繁
}
}
五、系统测试与优化
(一)测试方案
-
功能测试:
-
温控测试:用手握住DHT11或用电吹风轻微加热,观察温度超过阈值后风扇是否启动。
-
投食测试:从粮仓中取走部分粮食,使重量低于阈值,观察舵机是否动作模拟投食。
-
补水测试:将水位传感器从水中取出擦干,模拟缺水,观察水泵是否启动;放入水中后是否停止。
-
远程测试:通过APP查看数据,并点击"手动喂食"按钮,观察舵机是否响应。
-
-
可靠性测试:
-
防误触发测试:模拟宠物触碰小屋导致的震动,检查重量读数是否稳定,是否会误触发投食。
-
长时间运行测试:让系统连续运行24小时,检查是否有内存泄漏、死机或网络断开重连问题。
-
六、结论与展望
(一)未来展望
本系统是智能宠物小屋的基础模型,未来可扩展性极强:
-
视频监控集成 :集成ESP32-CAM模块,在APP中不仅能看到数据,更能看到宠物的实时画面,互动性更强。
-
AI智能识别 :通过摄像头和边缘计算,实现宠物身份识别 、自动份量控制 (根据宠物体型)甚至行为分析(如判断宠物是否焦虑)。
-
语音与交互 :增加语音模块,主人可以通过APP发送语音到小屋播放,安抚宠物;或录制声音呼唤宠物进食。
-
太阳能供电 :加入太阳能电池板和管理电路,实现户外小屋的绿色能源自给自足,摆放更灵活。
如有侵权,或需要完整代码,请及时联系博主。