花半天给猫做了个自动喂食器,我家猫终于不用饿肚子加班了
💡 阅读提示:本文记录我用ESP8266和一个小舵机,给猫主子DIY自动喂食器的全过程。成本极低、零基础友好,更关键的是——猫很满意。
🚨 开篇:我加班,猫也跟我一起“加班”
去年下半年,项目赶进度,我几乎天天加班到十点。
某天深夜回家,打开门,年糕(我的猫)蹲在空碗旁边,用一种“你知道我等了多久吗”的眼神看着我。然后它走到水碗边喝了一口水,又回头看看空碗,再看看我。
那一刻我挺难受的。
我也试过出门前多放点猫粮,但年糕的问题是——它会一口气吃完,然后吐。医生说“少食多餐”,但我的工作时间没法满足这个要求。
也考虑过买自动喂食器。去电商平台一看:带摄像头和Wi-Fi的,三百多块起步;不带Wi-Fi的定时款,也得一百多。而且用户评价里有人说卡粮,有人说被猫拆了,有人说断电后时间重置……
我看着手上那块吃灰的ESP8266开发板,冒出一个念头:要不,我自己做一个?
于是有了下面这个故事。
一、我要做什么样的喂食器?
先说清楚我的目标,不是什么高大上的产品,就解决三个问题:
定时出粮:每天早晚各一次,每次出一份(约15g),这样年糕就不会一次性吃撑。
手动补粮:我下班回家如果觉得它今天表现好,可以按一下按钮或者手机点一下,额外奖励一顿。
别卡粮:这个最关键,做不好的话猫会饿肚子。
至于远程视频、语音逗猫、App数据分析……这些功能固然酷,但对我来说不是必需品。先把基础功能做稳,比什么都重要。
一句话总结:一个能定时出粮、不卡粮、猫喜欢的喂食器。
二、硬件准备
我尽量用家里现成的东西,不够的再买。
| 组件 | 来源 | 价格 |
|---|---|---|
| ESP8266 NodeMCU | 吃灰库存 | 0元 |
| SG90舵机 | 之前做别的东西剩下的 | 0元 |
| 5V 2A充电头+USB线 | 旧手机充电器 | 0元 |
| 塑料瓶(1.5L) | 喝完的矿泉水瓶 | 0元 |
| 纸盒 | 快递纸箱 | 0元 |
| 杜邦线若干 | 库存 | 0元 |
| 热熔胶枪 | 之前买的 | 0元 |
是的,全部成本为0元。即使你什么都没有,买齐这些材料也花不了多少钱——ESP8266约15元,SG90舵机约5元,其他东西都能找到替代品。
我没有用3D打印机,因为不是每个人都有。我用的是纸盒+热熔胶,丑是丑了点,但管用。
三、工作原理(一句话版)
舵机上面装一个“十字形”的拨片,放在瓶口下方。
舵机转一下 → 拨片跟着转 → 猫粮从瓶口掉下来一份 → 舵机复位 → 停止出粮。
就这么简单。
四、制作过程(全记录)
4.1 粮仓:一个矿泉水瓶
把一个1.5L矿泉水瓶底部切掉,倒扣过来。瓶口朝下,作为出粮口。
为什么要用透明瓶子?因为能一眼看到还剩多少猫粮,不用每次都打开看。
4.2 出粮机构:纸板+舵机
这是最核心的部分。我做了一个简易滚筒:
用硬纸板剪一个圆片,直径略大于瓶口
在圆片上开一个“槽”(大概占圆片的1/4)
把舵机的摇臂固定在圆片中心
舵机不转的时候,圆片的实心部分堵住瓶口,猫粮掉不下来
舵机转90°,槽口对准瓶口,猫粮掉下来一份
舵机再转回来,又堵住了
第一次测试:失败。
纸板太软,猫粮的重量把纸板压弯了,舵机转不动。而且纸板边缘不光滑,猫粮卡在缝隙里。
第二次改进:换成塑料瓶盖+硬质塑料片。
我把一个矿泉水瓶盖切掉一半,粘在舵机摇臂上,然后在瓶盖上开槽。塑料材质更硬,猫粮不会卡。
第三次测试:成功了。
4.3 电路连接(超简单)
ESP8266引脚:
舵机信号线 → D4(GPIO2)
舵机VCC → 5V(Vin)
舵机GND → GND
就三根线,不需要其他外设。
4.4 供电
直接插USB充电头,5V供电。舵机和ESP8266共用USB电源。
实测:SG90舵机工作在5V时,待机电流约5mA,动作时约200mA。一个普通USB充电头完全够用。
五、代码(复制即可用)
以下是Arduino代码,功能包括:
定时出粮:每天7:00、12:00、19:00各出一次
手动出粮:按一下ESP8266上的Flash按键(GPIO0),立刻出一份
防卡粮保护:舵机每次动作后记录时间,连续动作超过5次会暂停10分钟
#include <ESP8266WiFi.h> #include <Servo.h> #include <TimeLib.h> #include <NtpClientLib.h> Servo feederServo; // WiFi配置 const char* ssid = "你的WiFi"; const char* password = "你的密码"; // 时间配置 int8_t timeZone = 8; // 北京时间 // 舵机引脚 #define SERVO_PIN 2 // D4 // 手动出粮按键(ESP8266的Flash按键) #define MANUAL_BTN 0 // D3 // 参数 int feedAngle = 90; // 每次旋转角度 int feedCount = 0; // 已出粮次数 unsigned long lastFeedTime = 0; // NTP时间同步 NTPClient ntpClient(ntpUDP, "pool.ntp.org", 60 * 60 * 8, 60000); void setup() { Serial.begin(115200); // 连接WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi Connected"); // 初始化NTP ntpClient.begin(); ntpClient.update(); // 舵机初始化 feederServo.attach(SERVO_PIN); feederServo.write(0); // 初始位置(关闭) // 按键 pinMode(MANUAL_BTN, INPUT_PULLUP); // 启动提示 Serial.println("Cat Feeder Started"); } void loop() { ntpClient.update(); time_t now = ntpClient.getEpochTime(); struct tm *tm_info = localtime(&now); int hour = tm_info->tm_hour; int minute = tm_info->tm_min; // 1. 定时出粮(7:00、12:00、19:00) if (minute == 0) { if (hour == 7 || hour == 12 || hour == 19) { if ((now - lastFeedTime) > 60) { // 防止重复触发 feed(); lastFeedTime = now; } } } // 2. 手动出粮(按Flash按键) if (digitalRead(MANUAL_BTN) == LOW) { delay(50); if (digitalRead(MANUAL_BTN) == LOW) { feed(); while (digitalRead(MANUAL_BTN) == LOW) delay(10); } } delay(1000); } void feed() { // 防卡粮保护:如果最近10分钟内出粮超过5次,暂停 if (feedCount > 5) { Serial.println("Too many feeds, wait 10 minutes"); delay(600000); // 暂停10分钟 feedCount = 0; return; } Serial.println("Feeding..."); // 舵机转90°(出粮) feederServo.write(feedAngle); delay(300); // 等待猫粮落下 // 舵机复位 feederServo.write(0); delay(300); feedCount++; Serial.print("Feed count: "); Serial.println(feedCount); }第一次测试出粮:看到猫粮“哗啦”掉下来的时候,年糕吓了一跳,但很快跑过来吃光了。
六、调试中的问题
问题1:出粮量不稳定
第一次测试,有时出5g,有时出20g,完全看猫粮颗粒的形状和运气。
解决:在瓶口加了一个“限流片”——一块硬纸片,中间剪一个洞,洞的大小刚好让一粒猫粮通过。这样每次只有落在洞口附近的几粒会被拨出来,出粮量稳定在12-18g之间。
问题2:纸盒被猫拆了
年糕对“会出粮的盒子”产生了极大兴趣。第三天回家,发现纸盒已经被抓烂了,露出里面的舵机。
解决:换了一个塑料收纳盒(超市10块钱买的),盖子钻孔穿电源线,底部固定舵机。猫再也抓不坏了,而且防水防潮。
问题3:断电后时间重置
有一次家里跳闸,喂食器断电了。重新通电后NTP会自动同步时间,所以不需要加电池维持时钟。
七、实际使用效果
用了一个月,大致情况:
定时出粮:每天3次,年糕的体重稳定在4.2kg,没有继续胖,也没有吐过。
手动出粮:按键在盒子上,我回家随手按一下,就当跟它互动。
卡粮次数:总共出现过2次卡粮,一次是猫粮颗粒太大(换了一款小颗粒猫粮后解决),一次是限流片移位了(用热熔胶固定后解决)。
年糕的适应过程很有意思:
第1-2天:听到舵机声音就跑过来,吃得很开心
第3-5天:开始守株待兔,提前坐在喂食器前面等
第2周:学会了用爪子拍盒子,试图人工触发(当然没用,因为按键在内侧)
现在每天早上7点,年糕会准时蹲在喂食器前面等,比闹钟还准。
八、可以怎么升级
如果你也想做,还可以加上这些功能:
余量监测:在粮仓内壁贴一个红外对射传感器,猫粮低于某个位置时微信提醒“该加粮了”
远程手动出粮:接入Blynk或巴法云,手机上一键出粮,加班时也能远程投喂
监控摄像头:旧手机装一个IP摄像头App,看看猫有没有好好吃饭
饮食记录:每次出粮时在云端记录时间戳,形成饮食日志
九、成本与时间
| 项目 | 花费 |
|---|---|
| 时间 | 一个周末下午(约4小时) |
| 金钱 | 0元(全部用库存) |
| 如果重新买 | ESP8266(15)+舵机(5)+塑料盒(10)=30元 |
对比成品喂食器:100-300元不等,功能更多的甚至更贵。DIY版本的满足核心需求(定时+手动出粮),而且坏了可以自己修。
十、一个观察
年糕不会说话,但它的行为告诉我它喜欢这个喂食器。
每次听到舵机转动的声音,它会竖起耳朵,小跑到喂食器前面。吃完之后会舔舔嘴,然后去窗台上晒太阳。
对我来说,每天给猫定时定量喂食,看着它健康地长肉、不吐不拉,比省下两百块钱更有意义。
