基于 STM32 的物联网宠物投喂系统设计

#智能硬件#STM32#物联网

摘要

针对宠物主人因工作繁忙而无法按时喂养宠物的问题,本文设计并实现了一种基于 STM32 单片机的物联网宠物投喂系统。系统以 STM32F103C8T6 为主控芯片,结合 ESP01S WiFi 模块构建轻量级 Web 服务器;集成 DS18B20 数字温度传感器用于环境温度监测,HX711 称重传感器用于食物重量检测,JQ8900 语音模块用于语音播报提醒,SG90 舵机作为执行机构完成自动投喂。用户通过网页即可远程查看喂养状态、环境温度与食物剩余量,并可设置定时喂食、闹钟提醒与温度阈值等参数。测试结果表明,系统各项功能运行稳定,温度测量误差在 ±0.5℃ 以内,称重误差约 3%,满足家用场景需求。

关键词:STM32;物联网;宠物投喂;WiFi 通信;传感器

1 引言

1.1 研究背景与意义

随着社会经济的发展和生活节奏的加快,宠物已成为许多家庭的重要成员。据统计,我国宠物数量已超过 1 亿只,宠物市场规模持续扩大。然而现代人工作压力大、外出频繁,经常无法按时在家照顾宠物,尤其是按时喂养,这不仅影响宠物的健康,也给主人带来了困扰。

物联网(Internet of Things,IoT)技术的发展为解决这一问题提供了新思路:将传感器、执行器与网络通信技术相结合,可以实现对宠物喂养过程的智能化管理与远程控制。本课题的研究意义在于:(1)解决喂养的时间限制问题,主人即使外出工作或出差也能按时投喂,保证宠物的饮食规律;(2)通过环境温度监测,在极端天气条件下及时采取措施;(3)通过食物重量实时监测,随时掌握食物剩余量;(4)通过语音提醒与网页交互,提升人机交互的友好性。

1.2 国内外研究现状

在国外,智能宠物喂养设备的研究起步较早,技术相对成熟,PetSafe 等厂商已推出具备定时定量投喂、远程控制与视频监控功能的商业化产品,但价格与使用门槛相对较高。在国内,随着物联网技术的普及与智能家居市场的发展,智能喂食器产品逐渐丰富,但在功能丰富度、稳定性和性价比方面仍有提升空间,特别是结合本地化服务与个性化需求方面还有较大的发展潜力。

1.3 主要研究内容

本文的研究内容主要包括:系统总体方案设计、硬件电路设计与器件选型、STM32 软件程序开发、基于 ESP01S 的轻量级 Web 服务器搭建,以及系统功能测试与优化。

2 系统总体设计

2.1 功能需求分析

结合市场调研与用户需求分析,系统需实现以下功能:

  1. 自动投喂:根据预设时间、倒计时或远程指令自动投放食物;
  2. 温度监测:实时监测环境温度,超过阈值时发出声音报警;
  3. 重量检测:实时检测食物盘中的食物重量,重量不足时提醒用户;
  4. 语音提醒:检测到食物被取用或重量不足时播放语音提示;
  5. 远程控制:通过 Web 网页查看状态并控制投喂;
  6. 本地显示:通过 OLED 显示屏显示时间、重量、喂养次数等参数。

2.2 系统总体架构

系统以 STM32F103C8T6 为控制核心,外围划分为五个部分:通信(ESP01S)、感知(DS18B20、HX711)、执行(SG90 舵机)、人机交互(OLED、按键、JQ8900 语音)与报警(蜂鸣器)。整体功能结构如图 2-1 所示。

系统功能结构图
图 2-1 系统功能结构图

系统支持两种喂养模式:自动模式下,到达预设闹钟时间或倒计时结束时自动触发投喂;手动模式下,用户可通过本地按键或网页远程触发。无论哪种触发源,最终都统一汇入同一个投喂控制逻辑并累计喂养次数,避免了多个触发源各自独立判断导致的状态不一致问题。

2.3 硬件选型

在满足功能需求并控制成本的前提下,系统选用如下器件方案:

模块型号关键参数作用
主控STM32F103C8T6Cortex-M3 / 72 MHz / 64 KB Flash / 20 KB RAM控制核心
WiFiESP01SESP8266,802.11 b/g/n,内置 TCP/IP 栈AP 热点 + Web 服务器
温度DS18B20±0.5℃,−55~+125℃,单总线环境温度监测
称重HX711 + 应变片24 位 A/D,增益 128/64/32 可选食物重量检测
舵机SG909 g,0°~180°,PWM 控制投喂执行机构
显示OLED 0.96 寸128×64,SSD1306,I2C本地显示
语音JQ8900MP3 解码,内置 8Ω/3W 功放语音播报
时钟DS3231I2C,带电池备份掉电走时

3 硬件系统设计

3.1 主控电路与资源分配

STM32F103C8T6 是 ST 公司基于 ARM Cortex-M3 内核的 32 位单片机,性能强、功耗低,片上集成 GPIO、USART、SPI、I2C、ADC 与定时器等丰富外设。本系统的主要引脚资源分配如下:

  • USART1(PA9/PA10):连接 ESP01S WiFi 模块,收发控制指令与状态数据;
  • USART2(PA2/PA3):连接 JQ8900 语音模块,下发播放指令;
  • TIM3(PA0):产生舵机 PWM 控制信号;
  • TIM2:用于按键消抖定时;
  • PB1/PB10:HX711 的时钟(SCK)与数据(DOUT)引脚;
  • PB5:DS18B20 单总线数据线(需 4.7 kΩ 电阻上拉至 VCC);
  • PB8/PB9:OLED 显示屏 I2C 接口(SCL/SDA);
  • PB12:蜂鸣器控制。

布线中有一个容易被忽视的要点:HX711 必须使用独立 5 V 电源供电,并与单片机共地,否则称重读数会受到明显的电源干扰而抖动。

3.2 传感器模块

(1)DS18B20 温度传感器。 DS18B20 是 Dallas 公司的单总线数字温度传感器,测量范围 −55~+125℃,在 −10~+85℃ 区间精度为 ±0.5℃,仅需一根数据线即可完成双向通信,大幅简化了电路设计。本系统用它监测喂养环境温度,当温度超过设定阈值时触发蜂鸣器报警,提醒主人注意宠物的生存环境。

(2)HX711 称重模块。 HX711 是专为电子称重系统设计的 24 位 A/D 转换器,内部集成可编程放大器(增益 128/64/32 可选),与应变片式压力传感器配合,把微弱的毫伏级差分信号转换为数字量。本系统选用 128 倍增益检测食物盘重量;为保证精度,上电预热后先执行一次空载校准,记录称重通道的零点 RAW 值,作为后续重量计算的基准。

3.3 通信模块

ESP01S 基于 ESP8266EX 芯片,内置 TCP/IP 协议栈,支持 Station、SoftAP 及混合模式,体积小、功耗低。本系统将其配置为 AP 模式:手机或电脑连接设备发出的热点后,浏览器访问 192.168.4.1 即可打开控制页面——不依赖外部路由器,在任何家庭环境都能直接使用。

实时时钟采用 DS3231 高精度 RTC 模块,挂在 ESP01S 的 GPIO 模拟 I2C 总线上。DS3231 由纽扣电池维持走时,设备断电重新上电后时间依然准确,避免了每次上电都需要重新校时的麻烦。

3.4 执行机构与人机交互

SG90 舵机重量仅 9 g,角度范围 0°~180°,安装在食物容器的出料口处,旋转时带动出料口开合完成投喂。OLED 显示屏(0.96 寸、128×64、SSD1306 驱动)用于本地显示当前日期时间、工作模式、食物重量与喂养次数。JQ8900 语音模块支持 MP3 解码与串口指令控制,内置 8Ω/3W 功放直接驱动扬声器,在检测到食物被取用或重量不足时播放语音提示。系统还配备 4 个按键用于本地设置时间、闹钟、倒计时与温度阈值,以及 1 个有源蜂鸣器用于温度超限报警。

4 软件系统设计

4.1 程序总体流程

系统软件采用模块化设计,各功能模块封装为独立的驱动与服务,主程序流程如图 4-1 所示:上电后依次完成 OLED、蜂鸣器、HX711、语音模块、舵机、DS18B20 与 ESP01S 的初始化;随后进入预热阶段等待传感器稳定;再执行空载校准获取称重零点;最后进入主循环,持续轮询温度、重量、按键与通信状态,并调度投喂、报警、显示与语音等动作。

主程序流程图
图 4-1 主程序流程图

4.2 HX711 称重与数字滤波

HX711 的数据读取时序要求严格:先将 SCK 置低,等待 DOUT 拉低表示数据就绪,随后连续发送 24 个时钟脉冲读出 24 位原始数据,最后再补发一个脉冲设定下次转换的增益(128 倍)。

称重信号中叠加了电源纹波与机械振动噪声,直接显示数值会明显跳动。系统采用一阶低通滤波对采样值进行平滑:

Y(n) = α · X(n) + (1 − α) · Y(n−1)

其中 X(n) 为本次采样值,Y(n−1) 为上次滤波输出。滤波系数 α 需要兼顾响应速度与平滑程度:α 越大响应越快但残留噪声越多。本系统取 α = 0.8,核心实现如下:

/* 一阶低通滤波:weight_raw 为本次采样,weight_filtered 为滤波输出 */
#define FILTER_ALPHA 0.8f

weight_filtered = FILTER_ALPHA * weight_raw
                + (1.0f - FILTER_ALPHA) * weight_filtered;

/* 零位容差:±2 g 以内视为 0,避免空载时显示负数或微小抖动 */
if (weight_filtered > -2.0f && weight_filtered < 2.0f) {
    weight_filtered = 0;
}

此外还设置了零位容差机制:称重值在 ±2 g 范围内时视为零,防止空载时显示负数。

4.3 温度监测与超限报警

DS18B20 采用单总线协议通信:主机首先发送复位脉冲,等待器件返回 Presence 脉冲;随后发送跳过 ROM 命令与温度转换命令;转换完成后再次复位、跳过 ROM 并发出读暂存器命令,读回 9 字节数据并解析出温度值。系统默认温度阈值为 31℃,检测到环境温度超过阈值时,蜂鸣器发出报警,同时通过网页同步提醒用户。

4.4 舵机投喂控制

SG90 舵机由 TIM3 输出的 PWM 信号控制,周期 20 ms,脉宽 0.5~2.5 ms 线性对应 0°~180°。投喂时舵机从 0° 旋转到 180°,再回转至 0°,出料口随之开合一次,完成一次完整投喂动作并累加喂养次数。旋转过程采用步进式递增/递减而非角度直接跳变:一方面使出料时间与机械动作更平稳,另一方面便于在任意时刻响应网页下发的"停止手工喂养"指令。

4.5 ESP01S Web 服务器

STM32 通过 AT 指令完成 ESP01S 的初始化配置:测试通信、设置 WiFi 模式为 SoftAP、配置热点名称与密码、多连接方式并启动 TCP 服务器监听 80 端口。用户浏览器发起 HTTP 请求后,ESP01S 返回内嵌的控制页面,页面通过表单提交把参数下发到 STM32 执行。

网页功能覆盖:设定系统时间(写入 DS3231)、最多 3 组闹钟(自动模式下定时喂食)、倒计时、温度阈值,以及手工喂养的开始/停止与喂养次数查看;此外还提供一个调试页面,显示开发过程中的关键运行参数,便于远程定位问题。

5 系统测试与结果分析

5.1 功能测试

在实验室环境下对各功能模块进行测试,结果如下表所示:

测试项目测试方法测试结果
温度监测传感器置于 15~35℃ 环境,与标准温度计对比误差 ≤ ±0.5℃,超阈值报警正常
称重功能空载校准后放置 100 g 标准砝码显示约 97 g,误差约 3%
舵机投喂程序控制 0°→180°→0° 往复运动动作准确到位,无卡顿
远程控制手机连接设备热点,浏览器访问控制页数据实时显示,指令均正确执行

5.2 结果分析

称重环节约 3% 的误差主要来自应变片传感器的非线性与标定基准的偏差,属于家用场景可接受的范围;空载时 0~2 g 的显示波动源于传感器噪声,经低通滤波与零位容差处理后显示基本稳定。测试中还发现称重读数存在轻微漂移现象,通过延长上电预热时间并微调滤波系数后明显改善。

6 结论与展望

本文设计并实现了一种基于 STM32 的物联网宠物投喂系统,完成了自动投喂、环境温度监测与超限报警、食物重量检测、语音提醒与 Web 远程控制等功能。硬件采用模块化设计,各模块通过标准接口连接,便于调试与维护;软件遵循模块化编程思想,结构清晰、易于扩展。测试结果表明,系统各项功能运行稳定,达到了预期设计目标。

后续可从以下方向继续完善:(1)增加摄像头模块,实现宠物进食画面的实时监控;(2)接入云平台,实现数据的长期存储与分析;(3)开发手机 App,提供更友好的用户界面;(4)增加食物库存预警功能,食物不足时自动提醒用户购买;(5)优化称重算法,进一步提高测量精度与稳定性。