在办公室里,两只可爱的猫咪给大家带来了不少欢乐,但其中一只总爱趁人不注意溜出房间,有时下班后还会被邻居告知它被锁在了外面。为了解决这个问题,我开发了一个基于 SeeedStudio XIAO ESP32S3 Sense 的猫咪逃脱监测预警系统,当猫咪逃出房间时,能及时向手机发送警告。下面就为大家详细介绍这个项目。
什么是xiao esp32?
Xiao ESP32 是 Seeed Studio 推出的一系列小型开发板,以其小巧的尺寸和强大的功能而备受关注。“Xiao” 一方面体现了其尺寸上的小巧,另一方面也暗示着它 “骁勇” 强大的性能。该系列开发板采用经典的小巧外形,尺寸仅为 21x17.5mm ,特别适用于可穿戴设备、空间有限的物联网项目以及对设备体积有严格要求的应用场景 。
一、项目所需物品
(一)硬件组件
Seeed Studio XIAO ESP32S3 Sense × 1。这款开发板体积小巧,集成了摄像头和多种传感器,非常适合用于此类监测项目,能满足我们对猫咪活动捕捉的需求。
二、项目制作步骤
(一)硬件连接
由于 Seeed Studio XIAO ESP32S3 Sense 集成了摄像头等必要的传感器,在硬件连接方面相对简单。我们只需要将开发板放置在合适的位置,确保其摄像头能够清晰拍摄到房间的门口区域,以便准确捕捉猫咪是否逃脱。可以使用支架或胶带等将开发板固定好,避免因位置移动而影响监测效果。
(二)硬件连接电脑
三、模型的训练
首先,您需要在 Edge Impulse 用您自己的猫训练您的模型。 这是训练的平台:SenseCraft – the AI Hardware Partner, Intelligence Made Simple
为了更清晰地记录猫咪和偶尔闯入监测范围的狗狗的状态,我特意将捕捉到的猫咪相关图片重命名为 “cat”,狗狗相关图片重命名为 “dog”,这样在后续查看和管理素材时,能一目了然地分辨出不同动物的影像。
为了让系统能精准分辨猫咪和偶尔闯入监测范围的狗狗,我特意导入了包含大量猫咪和狗狗影像的数据集对模型进行训练。同时,将捕捉到的猫咪相关图片重命名为 “cat”,狗狗相关图片重命名为 “dog”,这样不仅方便后续将新数据补充到数据集中持续优化模型,在日常查看和管理素材时,也能一目了然地分辨出不同动物的影像。
定 Xiao ESP32S3 Sense 作为核心硬件后,接下来就是模型训练的关键环节。点击开始训练后,这款小巧却性能强劲的开发板便开始高效运转,依托其搭载的 ESP32 - S3R8 处理器,快速处理导入的包含大量猫咪和狗狗影像的数据集。为了配合训练,我特意将捕捉到的猫咪相关图片重命名为 “cat”,狗狗相关图片重命名为 “dog”,这样不仅方便后续将新数据补充到数据集中持续优化模型,在日常查看和管理素材时,也能一目了然地分辨出不同动物的影像。
四、用AI生成测试图片
项目筹备时,为了精准规划监测范围和摄像头角度,我先借助豆包生成了测试图片。当时输入的命令是 “生成一个猫走出门的后视图,一只猫屁股朝着我走出一个宿舍的门”,很快就得到了清晰的效果图。画面里,猫咪翘着毛茸茸的屁股正往宿舍门外钻,这直观的场景帮我快速确定了开发板的最佳安装位置,避免了后续反复调整的麻烦。
五、测试结果
经过多日的实际测试,该猫咪逃脱监测系统的表现十分可靠。在识别准确性方面,系统对猫咪和狗狗的区分度较高,当猫咪靠近门口并试图出逃时,能准确识别并判定为 “逃脱行为”,而对于偶尔经过门口的狗狗,也能正确识别且不会误发警告,在稳定性上,连续测试期间,系统未出现卡顿、崩溃等情况,即使在办公室光线变化较大的情况下,如白天阳光直射门口和夜晚灯光照明时,摄像头依然能清晰捕捉画面,系统也能稳定运行并保持良好的识别和预警效果。
六、连接蜂鸣器
在本项目中,蜂鸣器选择连接到 Xiao ESP32S3 Sense 开发板的引脚 6。连接时,需先确认引脚 6 的位置 —— 通过查看开发板上的丝印标识,能在引脚排附近找到标注有 “6” 的引脚,这就是我们要连接的目标引脚。
具体连接步骤如下:蜂鸣器通常有两个引脚,分别为正极和负极。将蜂鸣器的正极连接到开发板的引脚 6,负极则连接到开发板的 GND(接地)引脚。这里需要注意,若蜂鸣器是有源蜂鸣器(内部自带振荡电路,通电即可发声),按照上述正负极连接即可;若是无源蜂鸣器(需要外部提供振荡信号才能发声),也可采用同样的连接方式,后续通过代码控制引脚 6 输出不同频率的脉冲信号来驱动其发声。
完成硬件连接后,对应的控制代码如下:
// 定义蜂鸣器连接的引脚为6
const int buzzerPin = 6;
// 定义一个变量用于标识是否检测到猫狗越狱,实际使用中由检测模块赋值
bool isEscapeDetected = false;void setup() {// 将蜂鸣器引脚设置为输出模式pinMode(buzzerPin, OUTPUT);}void loop() {isEscapeDetected = checkEscape();if (isEscapeDetected) {// 蜂鸣器响一下(持续500毫秒)digitalWrite(buzzerPin, HIGH);delay(500);digitalWrite(buzzerPin, LOW);// 重置检测状态,避免持续触发isEscapeDetected = false;}// 适当延迟,避免频繁检测占用过多资源delay(100);
}bool checkEscape() {// 若检测到则返回true,否则返回falsereturn false;
}
上述代码中,首先明确了蜂鸣器与引脚 6 的对应关系,在setup函数中把引脚 6 设置为输出模式,为控制蜂鸣器做好准备。在loop函数里,通过checkEscape函数检测是否有猫狗越狱,一旦检测到,就通过引脚 6 输出高电平,让蜂鸣器响 500 毫秒,之后输出低电平停止发声,并重置检测状态,防止蜂鸣器持续鸣叫。你可根据实际使用的蜂鸣器类型和检测逻辑,对代码进行调整。