在辦公室里,兩只可愛的貓咪給大家帶來了不少歡樂,但其中一只總愛趁人不注意溜出房間,有時下班后還會被鄰居告知它被鎖在了外面。為了解決這個問題,我開發了一個基于 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 毫秒,之后輸出低電平停止發聲,并重置檢測狀態,防止蜂鳴器持續鳴叫。你可根據實際使用的蜂鳴器類型和檢測邏輯,對代碼進行調整。