基於 STM32 的物聯網寵物餵食系統設計
摘要
針對寵物主人因工作繁忙而無法按時餵養寵物的問題,本文設計並實作了一種基於 STM32 單晶片的物聯網寵物餵食系統。系統以 STM32F103C8T6 為主控晶片,結合 ESP01S WiFi 模組建構輕量化 Web 伺服器;整合 DS18B20 數位溫度感測器用於環境溫度監測,HX711 稱重感測器用於食物重量偵測,JQ8900 語音模組用於語音播報提醒,SG90 伺服馬達作為執行機構完成自動餵食。使用者透過網頁即可遠端查看餵養狀態、環境溫度與食物剩餘量,並可設定定時餵食、鬧鐘提醒與溫度門檻值等參數。測試結果顯示,系統各項功能運行穩定,溫度測量誤差在 ±0.5℃ 以內,稱重誤差約 3%,滿足家用場景需求。
關鍵詞:STM32;物聯網;寵物餵食;WiFi 通訊;感測器
1 緒論
1.1 研究背景與意義
隨著社會經濟的發展和生活節奏的加快,寵物已成為許多家庭的重要成員。據統計,我國寵物數量已超過 1 億隻,寵物市場規模持續擴大。然而現代人工作壓力大、外出頻繁,經常無法按時在家照顧寵物,尤其是按時餵養,這不僅影響寵物的健康,也給主人帶來了困擾。
物聯網(Internet of Things,IoT)技術的發展為解決這一問題提供了新思路:將感測器、致動器與網路通訊技術相結合,可以實現對寵物餵養過程的智慧化管理與遠端控制。本課題的研究意義在於:(1)解決餵養的時間限制問題,主人即使外出工作或出差也能按時餵食,保證寵物的飲食規律;(2)透過環境溫度監測,在極端天氣條件下及時採取措施;(3)透過食物重量即時監測,隨時掌握食物剩餘量;(4)透過語音提醒與網頁互動,提升人機互動的友善性。
1.2 國內外研究現況
在國外,智慧寵物餵養設備的研究起步較早,技術相對成熟,PetSafe 等廠商已推出具備定時定量餵食、遠端控制與影像監控功能的商業化產品,但價格與使用門檻相對較高。在國內,隨著物聯網技術的普及與智慧家庭市場的發展,智慧餵食器產品逐漸豐富,但在功能豐富度、穩定性和性價比方面仍有提升空間,特別是結合在地化服務與個人化需求方面還有較大的發展潛力。
1.3 主要研究內容
本文的研究內容主要包括:系統整體方案設計、硬體電路設計與元件選型、STM32 軟體程式開發、基於 ESP01S 的輕量化 Web 伺服器建置,以及系統功能測試與最佳化。
2 系統總體設計
2.1 功能需求分析
結合市場調研與使用者需求分析,系統需實現以下功能:
- 自動餵食:根據預設時間、倒數或遠端指令自動投放食物;
- 溫度監測:即時監測環境溫度,超過門檻值時發出聲音警報;
- 重量偵測:即時偵測食物盤中的食物重量,重量不足時提醒使用者;
- 語音提醒:偵測到食物被取用或重量不足時播放語音提示;
- 遠端控制:透過 Web 網頁查看狀態並控制餵食;
- 本地顯示:透過 OLED 螢幕顯示時間、重量、餵養次數等參數。
2.2 系統總體架構
系統以 STM32F103C8T6 為控制核心,週邊劃分為五個部分:通訊(ESP01S)、感知(DS18B20、HX711)、執行(SG90 伺服馬達)、人機互動(OLED、按鍵、JQ8900 語音)與警報(蜂鳴器)。整體功能結構如圖 2-1 所示。

系統支援兩種餵養模式:自動模式下,到達預設鬧鐘時間或倒數結束時自動觸發餵食;手動模式下,使用者可透過本地按鍵或網頁遠端觸發。無論哪種觸發來源,最終都統一匯入同一個餵食控制邏輯並累計餵養次數,避免了多個觸發來源各自獨立判斷導致的狀態不一致問題。
2.3 硬體選型
在滿足功能需求並控制成本的前提下,系統選用如下元件方案:
| 模組 | 型號 | 關鍵參數 | 作用 |
|---|---|---|---|
| 主控 | STM32F103C8T6 | Cortex-M3 / 72 MHz / 64 KB Flash / 20 KB RAM | 控制核心 |
| WiFi | ESP01S | ESP8266,802.11 b/g/n,內建 TCP/IP 堆疊 | AP 熱點 + Web 伺服器 |
| 溫度 | DS18B20 | ±0.5℃,−55~+125℃,1-Wire | 環境溫度監測 |
| 稱重 | HX711 + 應變片 | 24 位元 A/D,增益 128/64/32 可選 | 食物重量偵測 |
| 伺服馬達 | SG90 | 9 g,0°~180°,PWM 控制 | 餵食執行機構 |
| 顯示 | OLED 0.96 吋 | 128×64,SSD1306,I2C | 本地顯示 |
| 語音 | JQ8900 | MP3 解碼,內建 8Ω/3W 擴音 | 語音播報 |
| 時鐘 | DS3231 | I2C,含電池備援 | 斷電走時 |
3 硬體系統設計
3.1 主控電路與資源分配
STM32F103C8T6 是 ST 公司基於 ARM Cortex-M3 核心(內核)的 32 位元單晶片,效能強、功耗低,晶片上整合 GPIO、USART、SPI、I2C、ADC 與定時器等豐富周邊。本系統的主要接腳資源分配如下:
- USART1(PA9/PA10):連接 ESP01S WiFi 模組,收發控制指令與狀態資料;
- USART2(PA2/PA3):連接 JQ8900 語音模組,下發播放指令;
- TIM3(PA0):產生伺服馬達 PWM 控制訊號;
- TIM2:用於按鍵去彈跳定時;
- PB1/PB10:HX711 的時脈(SCK)與資料(DOUT)接腳;
- PB5:DS18B20 1-Wire 資料線(需 4.7 kΩ 電阻上拉至 VCC);
- PB8/PB9:OLED 螢幕 I2C 介面(SCL/SDA);
- PB12:蜂鳴器控制。
佈線中有一個容易被忽視的要點:HX711 必須使用獨立 5 V 電源供電,並與單晶片共地,否則稱重讀數會受到明顯的電源干擾而抖動。
3.2 感測器模組
(1)DS18B20 溫度感測器。 DS18B20 是 Dallas 公司的 1-Wire 數位溫度感測器,測量範圍 −55~+125℃,在 −10~+85℃ 區間精度為 ±0.5℃,僅需一根資料線即可完成雙向通訊,大幅簡化了電路設計。本系統用它監測餵養環境溫度,當溫度超過設定門檻值時觸發蜂鳴器警報,提醒主人注意寵物的生存環境。
(2)HX711 稱重模組。 HX711 是專為電子稱重系統設計的 24 位元 A/D 轉換器,內部整合可程式放大器(增益 128/64/32 可選),與應變片式壓力感測器配合,把微弱的毫伏級差分訊號轉換為數位量。本系統選用 128 倍增益偵測食物盤重量;為保證精度,上電預熱後先執行一次空載校準,記錄稱重通道的零點 RAW 值,作為後續重量計算的基準。
3.3 通訊模組
ESP01S 基於 ESP8266EX 晶片,內建 TCP/IP 通訊協定堆疊,支援 Station、SoftAP 及混合模式,體積小、功耗低。本系統將其設定為 AP 模式:手機或電腦連線裝置發出的熱點後,瀏覽器存取 192.168.4.1 即可開啟控制頁面——不依賴外部路由器,在任何家庭環境都能直接使用。
即時時鐘採用 DS3231 高精度 RTC 模組,掛在 ESP01S 的 GPIO 模擬 I2C 匯流排上。DS3231 由鈕扣電池維持走時,裝置斷電重新上電後時間依然準確,避免了每次上電都需要重新校時的麻煩。
3.4 執行機構與人機互動
SG90 伺服馬達重量僅 9 g,角度範圍 0°~180°,安裝在食物容器的出料口處,旋轉時帶動出料口開合完成餵食。OLED 螢幕(0.96 吋、128×64、SSD1306 驅動)用於本地顯示目前日期時間、工作模式、食物重量與餵養次數。JQ8900 語音模組支援 MP3 解碼與串列埠指令控制,內建 8Ω/3W 擴音直接驅動揚聲器,在偵測到食物被取用或重量不足時播放語音提示。系統還配備 4 個按鍵用於本地設定時間、鬧鐘、倒數與溫度門檻值,以及 1 個有源蜂鳴器用於溫度超限警報。
4 軟體系統設計
4.1 程式整體流程
系統軟體採用模組化設計,各功能模組封裝為獨立的驅動與服務,主程式流程如圖 4-1 所示:上電後依序完成 OLED、蜂鳴器、HX711、語音模組、伺服馬達、DS18B20 與 ESP01S 的初始化;隨後進入預熱階段等待感測器穩定;再執行空載校準取得稱重零點;最後進入主迴圈,持續輪詢溫度、重量、按鍵與通訊狀態,並調度餵食、警報、顯示與語音等動作。

4.2 HX711 稱重與數位濾波
HX711 的資料讀取時序要求嚴格:先將 SCK 拉低,等待 DOUT 拉低表示資料就緒,隨後連續發送 24 個時脈脈衝讀出 24 位元原始資料,最後再補發一個脈衝設定下次轉換的增益(128 倍)。
稱重訊號中疊加了電源漣波與機械振動雜訊,直接顯示數值會明顯跳動。系統採用一階低通濾波對取樣值進行平滑:
Y(n) = α · X(n) + (1 − α) · Y(n−1)
其中 X(n) 為本次取樣值,Y(n−1) 為上次濾波輸出。濾波係數 α 需要兼顧反應速度與平滑程度:α 越大反應越快但殘留雜訊越多。本系統取 α = 0.8,核心實作如下:
/* 一階低通濾波:weight_raw 為本次取樣,weight_filtered 為濾波輸出 */
#define FILTER_ALPHA 0.8f
weight_filtered = FILTER_ALPHA * weight_raw
+ (1.0f - FILTER_ALPHA) * weight_filtered;
/* 零位容差:±2 g 以內視為 0,避免空載時顯示負數或微小抖動 */
if (weight_filtered > -2.0f && weight_filtered < 2.0f) {
weight_filtered = 0;
}
此外還設置了零位容差機制:稱重值在 ±2 g 範圍內時視為零,防止空載時顯示負數。
4.3 溫度監測與超限警報
DS18B20 採用 1-Wire 協定通訊:主機首先發送重置脈衝,等待元件回傳 Presence 脈衝;隨後發送跳過 ROM 命令與溫度轉換命令;轉換完成後再次重置、跳過 ROM 並發出讀暫存器命令,讀回 9 位元組資料並解析出溫度值。系統預設溫度門檻值為 31℃,偵測到環境溫度超過門檻值時,蜂鳴器發出警報,同時透過網頁同步提醒使用者。
4.4 伺服馬達餵食控制
SG90 伺服馬達由 TIM3 輸出的 PWM 訊號控制,週期 20 ms,脈寬 0.5~2.5 ms 線性對應 0°~180°。餵食時伺服馬達從 0° 旋轉到 180°,再回轉至 0°,出料口隨之開合一次,完成一次完整餵食動作並累加餵養次數。旋轉過程採用步進式遞增/遞減而非角度直接跳變:一方面使出料時間與機械動作更平穩,另一方面便於在任意時刻回應網頁下發的「停止手動餵食」指令。
4.5 ESP01S Web 伺服器
STM32 透過 AT 指令完成 ESP01S 的初始化設定:測試通訊、設定 WiFi 模式為 SoftAP、設定熱點名稱與密碼、多連線方式並啟動 TCP 伺服器監聽 80 埠。使用者瀏覽器發起 HTTP 請求後,ESP01S 回傳內嵌的控制頁面,頁面透過表單提交把參數下發到 STM32 執行。
網頁功能涵蓋:設定系統時間(寫入 DS3231)、最多 3 組鬧鐘(自動模式下定時餵食)、倒數、溫度門檻值,以及手動餵食的開始/停止與餵養次數查看;此外還提供一個除錯頁面,顯示開發過程中的關鍵執行參數,便於遠端定位問題。
5 系統測試與結果分析
5.1 功能測試
在實驗室環境下對各功能模組進行測試,結果如下表所示:
| 測試項目 | 測試方法 | 測試結果 |
|---|---|---|
| 溫度監測 | 感測器置於 15~35℃ 環境,與標準溫度計對比 | 誤差 ≤ ±0.5℃,超門檻值警報正常 |
| 稱重功能 | 空載校準後放置 100 g 標準砝碼 | 顯示約 97 g,誤差約 3% |
| 伺服馬達餵食 | 程式控制 0°→180°→0° 往復運動 | 動作準確到位,無卡頓 |
| 遠端控制 | 手機連線裝置熱點,瀏覽器存取控制頁 | 資料即時顯示,指令均正確執行 |
5.2 結果分析
稱重環節約 3% 的誤差主要來自應變片感測器的非線性與校正基準的偏差,屬於家用場景可接受的範圍;空載時 0~2 g 的顯示波動源於感測器雜訊,經低通濾波與零位容差處理後顯示基本穩定。測試中還發現稱重讀數存在輕微漂移現象,透過延長上電預熱時間並微調濾波係數後明顯改善。
6 結論與展望
本文設計並實作了一種基於 STM32 的物聯網寵物餵食系統,完成了自動餵食、環境溫度監測與超限警報、食物重量偵測、語音提醒與 Web 遠端控制等功能。硬體採用模組化設計,各模組透過標準介面連接,便於除錯與維護;軟體遵循模組化程式設計思想,結構清晰、易於擴充。測試結果顯示,系統各項功能運行穩定,達到了預期設計目標。
後續可從以下方向繼續完善:(1)增加攝影機模組,實現寵物進食畫面的即時監控;(2)接入雲端平台,實現資料的長期儲存與分析;(3)開發手機 App,提供更友善的使用者介面;(4)增加食物庫存預警功能,食物不足時自動提醒使用者購買;(5)最佳化稱重演算法,進一步提高測量精度與穩定性。