巴甫洛夫的猫:IoT 定时喂食训练装置
组件与物料
- Arduino MKR IoT Bundle (含 MKR1000、舵机、光敏三极管、220Ω 电阻、蜂鸣器等)
应用与在线服务
- Telegram (用于 Bot 交互)
项目介绍
利用经典条件反射原理训练猫咪:特定旋律响起 → 猫咪靠近 → 光敏传感器检测到猫咪 → 舵机转动发放食物。另一旋律不发食物作为对照。通过 Telegram Bot 远程设置投食量、触发旋律、查看训练统计。进阶版还在 MKR1000 上跑 Web Server 显示数据表格。
核心硬件连接
- 舵机接 D7,控制食物盒开合
- 光敏三极管接 A6 (串联 220Ω),检测猫咪到达
- 蜂鸣器播放旋律



Telegram Bot 自定义键盘
使用 TelegramKeyboard 创建两行按钮:
- 第一行:🎵+🍪 (播放旋律+给食)、🎵 NO 🍪 (仅播放旋律)
- 第二行:🐱 (1 份)、🐱🐱 (2 份)、🐱🐱🐱 (3 份) — 对应舵机开启时长
Emoji 需用 Unicode 编码 (如 \U0001F3B6 为音符)。Bot 接收到的 emoji 编码与发送不同,可用 EchoBot 示例调试。
猫咪检测逻辑
unsigned long timer;
bool startDetecting = true;
int threshold = 200; // 根据环境光调整
void loop() {
if (startDetecting) {
int value = analogRead(A6);
if (value < threshold) {
Serial.println("cat detected!");
startDetecting = false;
} else if (millis() - timer > 120000) {
Serial.println("no cat detected in 2 minutes");
startDetecting = false;
}
}
}
旋律播放
基于 Arduino 自带 toneMelody 示例修改,用 tone() 驱动蜂鸣器。
舵机控制
int PortionAmount = 1; // 默认 1 份,可通过 Telegram 修改
void moveServo() {
for (pos = 0; pos <= 90; pos++) { myservo.write(pos); delay(15); }
delay(PortionAmount * 300); // 保持开启时间
for (pos = 90; pos >= 0; pos--) { myservo.write(pos); delay(15); }
}
进阶:Web Server (ProTip)
MKR1000 开启 AP 模式托管网页,Telegram 发送 "Server" 触发并返回 IP 链接。网页实时展示训练记录表格 (是否给食、猫咪是否到达、到达耗时)。网页按钮可退回 Telegram 模式。数据存储于字符串拼接的 HTML 表格中,重启丢失可配合 FlashStorage 库持久化。

代码
完整草图 (含 ProTip 版) 可在项目页面下载。
外壳设计
2mm 纸板激光切割文件:pavlovcase_ShVm1OJRIF.dxf
原理图

制造工艺