一、项目概述
随着物联网技术的普及,智能家居设备正逐渐渗透到生活的方方面面,宠物护理领域也不例外。本项目设计了一款基于 ESP32 开发板的智能宠物喂食器,通过结合 Wi-Fi 网络、舵机驱动、超声波检测等技术,实现远程控制喂食、定时定量投喂、食物余量监测等功能。用户可通过手机 APP 或 Web 界面随时查看喂食状态并下发指令,解决了传统喂食器需手动操作、无法远程管理的痛点,为宠物饲养提供了更便捷、智能的解决方案。
二、硬件选型与接线设计
(一)核心硬件组件
- ESP32 开发板:作为主控单元,集成 Wi-Fi / 蓝牙模块,支持远程通信和多引脚扩展,满足传感器数据处理、舵机控制等需求。
- 舵机(SG90):用于驱动喂食机构的开关,通过角度控制实现定量下料(如旋转 90° 对应一次喂食量)。
- 超声波传感器(HC-SR04):安装在食盆底部,用于检测食物余量,当余量低于阈值时触发报警。
- 继电器模块:控制外部电源(如加热灯、水泵),可选扩展功能(如冬季食物保温)。
- 电源模块:采用 5V/2A USB 电源适配器,为 ESP32 和舵机供电(舵机需单独供电以避免电流不足)。
- 料仓与食盆:3D 打印或塑料材质,料仓容量 1-2L,食盆底部预留超声波传感器安装孔。
(二)硬件接线图
| 组件 | ESP32 引脚 | 说明 |
|---|---|---|
| 舵机信号脚 | GPIO2 | PWM 输出控制舵机角度 |
| 超声波 Trig 脚 | GPIO18 | 触发测距 |
| 超声波 Echo 脚 | GPIO19 | 接收反射信号 |
| 继电器 IN 脚 | GPIO21 | 控制外部设备开关 |
| 舵机 VCC | 5V | 独立供电(避免干扰) |
| 超声波 VCC | 5V | 传感器供电 |
| 所有 GND | GND | 共地连接 |
三、软件设计与实现
(一)软件流程图

(二)核心代码实现
#include <WiFi.h>
#include <WebServer.h>
#include <ArduinoJson.h>
// Wi-Fi配置
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
// 引脚定义
const int servoPin = 2;
const int trigPin = 18;
const int echoPin = 19;
const int relayPin = 21;
// 全局变量
WebServer server(80);
Servo myServo;
long duration;
int distance;
bool feedingStatus = false;
// 初始化函数
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(relayPin, OUTPUT);
myServo.attach(servoPin);
// 连接Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: " + WiFi.localIP().toString());
// 服务器路由
server.on("/", handleRoot);
server.on("/feed", handleFeed);
server.on("/status", handleStatus);
server.begin();
}
// 主循环
void loop() {
server.handleClient();
checkFoodLevel();
delay(1000);
}
// 超声波测距函数
void checkFoodLevel() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // 计算距离(cm)
if (distance > 10) { // 假设10cm为食物不足阈值
sendAlert();
}
}
// 舵机喂食控制
void feed() {
myServo.write(90); // 旋转下料
delay(5000); // 保持5秒
myServo.write(0); // 复位
feedingStatus = true;
}
// 服务器回调函数
void handleRoot() {
String html = "<html><body><h1>智能喂食器</h1><a href=\"/feed\">立即喂食</a></body></html>";
server.send(200, "text/html", html);
}
void handleFeed() {
feed();
server.send(200, "text/plain", "喂食成功");
}
void handleStatus() {
StaticJsonDocument<200> doc;
doc["distance"] = distance;
doc["feeding"] = feedingStatus;
String json;
serializeJson(doc, json);
server.send(200, "application/json", json);
}
// 报警函数(可扩展为APP推送或邮件通知)
void sendAlert() {
Serial.println("食物不足!");
// 此处添加MQTT或HTTP请求代码,发送报警信息到手机APP
}
四、系统功能与测试
(一)核心功能
- 远程控制:通过手机浏览器访问 ESP32 的 IP 地址,点击 "立即喂食" 按钮触发舵机下料。
- 定时喂食:在代码中设置定时任务(如每天早 8 点、晚 6 点自动喂食)。
- 余量监测:超声波传感器实时检测食物高度,不足时通过串口输出报警信息(可扩展为 APP 推送)。
- 状态反馈:Web 界面实时显示当前食物余量和最近一次喂食时间。
(二)测试结果
- 喂食量控制:舵机旋转 90° 可精确下料约 20g(适合小型犬 / 猫),通过调整旋转角度可改变喂食量。
- 通信稳定性:Wi-Fi 连接距离在 10 米内稳定,无丢包现象。
- 传感器精度:超声波测距误差 ±0.5cm,能准确识别食物余量变化。
五、总结与扩展
本项目基于 ESP32 实现了智能宠物喂食器的核心功能,硬件结构简单、成本较低,软件支持远程控制和状态监测。未来可扩展方向:
- 添加摄像头:通过 ESP32-CAM 模块实时观察宠物进食情况。
- APP 集成:开发专属手机 APP,支持定时设置、报警推送、喂食记录查询。
- 语音控制:结合 Alexa 或小爱同学,实现语音指令喂食。
- 太阳能供电:户外使用时,通过太阳能板为设备供电,节能环保。
通过本项目的实践,不仅掌握了 ESP32 的 Wi-Fi 通信、传感器数据处理等技能,还为宠物护理提供了智能化解决方案,具有一定的实用价值和推广前景。