1. 項(xiàng)目開發(fā)背景
隨著寵物數(shù)量的增加,尤其是人們對(duì)寵物的養(yǎng)護(hù)需求日益增多,傳統(tǒng)的人工喂養(yǎng)和管理方式難以滿足現(xiàn)代養(yǎng)寵生活的需求。人們?cè)絹碓较Mㄟ^智能化手段提高寵物養(yǎng)護(hù)的質(zhì)量和效率,特別是對(duì)于寵物喂食、飲水、溫濕度控制等方面的智能化管理。
基于這一需求,設(shè)計(jì)并實(shí)現(xiàn)了一種基于STM32單片機(jī)的寵物喂食監(jiān)控系統(tǒng)。該系統(tǒng)通過集成多種傳感器,結(jié)合藍(lán)牙無線通信和云物聯(lián)網(wǎng)技術(shù),實(shí)現(xiàn)了對(duì)寵物環(huán)境、飲水、喂食等多項(xiàng)功能的智能監(jiān)控和管理。這不僅能提高寵物生活質(zhì)量,還能為主人提供更便捷的管理方式。
2. 設(shè)計(jì)實(shí)現(xiàn)的功能
本項(xiàng)目的目標(biāo)是設(shè)計(jì)一款智能寵物喂食監(jiān)控系統(tǒng),具體功能包括:
- 溫濕度環(huán)境監(jiān)控
采用溫濕度傳感器,實(shí)時(shí)采集當(dāng)前環(huán)境的溫濕度數(shù)據(jù)。當(dāng)溫度超過設(shè)定閾值時(shí),自動(dòng)開啟風(fēng)扇進(jìn)行散熱;當(dāng)濕度超過設(shè)定閾值時(shí),自動(dòng)開啟風(fēng)扇進(jìn)行空氣除濕。 - 水位檢測(cè)與自動(dòng)加水
采用水位傳感器,檢測(cè)寵物水盆的水位情況。當(dāng)水位低于設(shè)定閾值時(shí),自動(dòng)開啟水泵進(jìn)行加水,保障寵物水量充足。 - 食物檢測(cè)與自動(dòng)投喂
采用紅外傳感器,實(shí)時(shí)檢測(cè)寵物食物盆中的食物量。當(dāng)食物不足時(shí),自動(dòng)開啟繼電器控制投喂裝置進(jìn)行喂食。 - 手動(dòng)模式與智能模式切換
提供7個(gè)按鍵進(jìn)行手動(dòng)模式與智能模式的切換,允許用戶手動(dòng)控制喂食、喂水、散熱、除濕等功能,同時(shí)可以設(shè)置溫濕度閾值。 - OLED液晶顯示
系統(tǒng)通過OLED顯示屏實(shí)時(shí)顯示采集到的環(huán)境數(shù)據(jù),包括當(dāng)前的溫濕度、設(shè)定的溫濕度閾值、水位、食物量、控制模式等信息。 - 藍(lán)牙無線控制
采用HC-05藍(lán)牙模塊實(shí)現(xiàn)與手機(jī)APP的無線通信,通過手機(jī)APP顯示當(dāng)前環(huán)境狀態(tài)并支持遠(yuǎn)程控制,如模式切換、溫濕度閾值設(shè)置、喂食、喂水、散熱、除濕等操作。 - 數(shù)據(jù)上云與可視化管理
系統(tǒng)支持將數(shù)據(jù)通過WIFI模塊上傳至華為云物聯(lián)網(wǎng)平臺(tái),采用MQTT協(xié)議進(jìn)行數(shù)據(jù)傳輸。用戶可以通過可視化網(wǎng)頁查看歷史數(shù)據(jù)、實(shí)時(shí)監(jiān)控寵物的狀態(tài),并遠(yuǎn)程控制系統(tǒng)。 - 服務(wù)器與前端展示
采用Python作為后端服務(wù)器,接收華為云物聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù),并通過HTML前端頁面展示。支持局域網(wǎng)或公網(wǎng)訪問,用戶可以在任何地方查看寵物狀態(tài)并進(jìn)行操作。
3. 項(xiàng)目硬件模塊組成
本系統(tǒng)的硬件部分基于STM32單片機(jī)進(jìn)行設(shè)計(jì),主要包含以下模塊:
3.1. 核心控制單元:STM32單片機(jī)
- 型號(hào):STM32F103RCT6
- 功能:作為整個(gè)系統(tǒng)的核心控制單元,負(fù)責(zé)接收傳感器數(shù)據(jù)、控制設(shè)備、進(jìn)行數(shù)據(jù)傳輸與無線通信。
3.2. 溫濕度傳感器(SHT30)
- 功能:用于實(shí)時(shí)監(jiān)測(cè)環(huán)境的溫度和濕度,當(dāng)溫濕度超過設(shè)定閾值時(shí),控制風(fēng)扇啟停以調(diào)整環(huán)境。
3.3. 水位傳感器
- 功能:檢測(cè)寵物水盆中的水位情況,當(dāng)水位低于設(shè)定閾值時(shí),自動(dòng)開啟水泵進(jìn)行加水。
3.4. 紅外傳感器
- 功能:用于檢測(cè)寵物食物盆中的食物量,當(dāng)食物不足時(shí),自動(dòng)啟動(dòng)繼電器進(jìn)行食物投喂。
3.5. 風(fēng)扇與水泵控制模塊
- 功能:風(fēng)扇和水泵的控制電路,通過繼電器控制風(fēng)扇、泵和喂食裝置的啟停。
3.6. 藍(lán)牙模塊(HC-05)
- 功能:實(shí)現(xiàn)與手機(jī)APP的無線通信,允許用戶通過藍(lán)牙進(jìn)行遠(yuǎn)程控制和數(shù)據(jù)查看。
3.7. OLED顯示模塊
- 功能:用于實(shí)時(shí)顯示環(huán)境數(shù)據(jù),包括溫濕度、設(shè)定閾值、水位、食物量等信息。
3.8. 繼電器模塊
- 功能:控制喂食裝置、電動(dòng)水泵和風(fēng)扇的啟停。
3.9. 無線網(wǎng)絡(luò)模塊(ESP8266)
- 功能:用于將數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái),實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和歷史數(shù)據(jù)分析。
3.10. 電源模塊
- 功能:為系統(tǒng)提供穩(wěn)定的電源供應(yīng),保證各模塊正常運(yùn)行。
4. 設(shè)計(jì)思路
本項(xiàng)目的設(shè)計(jì)思路可以概括為以下幾個(gè)步驟:
- 傳感器數(shù)據(jù)采集
使用溫濕度傳感器、紅外傳感器和水位傳感器采集環(huán)境數(shù)據(jù)、食物量和水量。 - 數(shù)據(jù)處理與控制決策
STM32單片機(jī)根據(jù)采集到的實(shí)時(shí)數(shù)據(jù),進(jìn)行處理和判斷,是否滿足自動(dòng)控制的條件(如溫濕度過高、水位不足、食物不足等),然后通過繼電器控制設(shè)備的啟停。 - 用戶交互與模式切換
通過按鍵電路提供用戶手動(dòng)模式的操作,允許用戶設(shè)置閾值和直接控制設(shè)備。用戶也可以通過手機(jī)APP與系統(tǒng)進(jìn)行無線通信,控制和查看寵物狀態(tài)。 - 顯示與反饋
使用OLED顯示模塊實(shí)時(shí)反饋當(dāng)前環(huán)境的溫濕度、水位、食物量等信息,讓用戶能夠直觀地了解寵物的狀態(tài)。 - 數(shù)據(jù)上云與遠(yuǎn)程監(jiān)控
系統(tǒng)通過ESP8266模塊連接WIFI,并將數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。用戶可以通過PC端或手機(jī)端的網(wǎng)頁實(shí)時(shí)查看寵物的狀態(tài)、歷史數(shù)據(jù),并進(jìn)行遠(yuǎn)程控制。 - 網(wǎng)頁展示與控制
后端Python服務(wù)器通過API接口拉取華為云物聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù),將其展示在前端網(wǎng)頁上,支持用戶通過網(wǎng)頁進(jìn)行遠(yuǎn)程監(jiān)控與控制。
5. 系統(tǒng)功能總結(jié)
功能模塊 | 功能描述 | 實(shí)現(xiàn)方式 |
---|---|---|
溫濕度環(huán)境監(jiān)控 | 實(shí)時(shí)采集環(huán)境溫濕度,當(dāng)溫濕度超過閾值時(shí)自動(dòng)啟動(dòng)風(fēng)扇和除濕 | SHT30傳感器、繼電器模塊控制風(fēng)扇 |
水位檢測(cè)與自動(dòng)加水 | 檢測(cè)水盆水位,低于設(shè)定值時(shí)自動(dòng)啟動(dòng)水泵加水 | 水位傳感器、繼電器模塊控制水泵 |
食物檢測(cè)與自動(dòng)投喂 | 檢測(cè)食物盆中食物量,低于設(shè)定值時(shí)自動(dòng)投喂食物 | 紅外傳感器、繼電器模塊控制投喂裝置 |
手動(dòng)模式與智能模式切換 | 用戶可手動(dòng)設(shè)置閾值或切換模式,系統(tǒng)根據(jù)數(shù)據(jù)自動(dòng)控制設(shè)備 | 7個(gè)按鍵電路、STM32控制邏輯 |
OLED顯示功能 | 顯示環(huán)境數(shù)據(jù)、設(shè)備狀態(tài)、控制模式等信息 | OLED顯示模塊 |
藍(lán)牙無線控制 | 通過手機(jī)APP無線控制溫濕度閾值、喂食、喂水等操作 | HC-05藍(lán)牙模塊、手機(jī)APP |
數(shù)據(jù)上云與可視化管理 | 將實(shí)時(shí)數(shù)據(jù)上傳至華為云,支持歷史數(shù)據(jù)查看和遠(yuǎn)程控制 | ESP8266、華為云物聯(lián)網(wǎng)平臺(tái)、MQTT協(xié)議 |
前端網(wǎng)頁展示與控制 | 通過網(wǎng)頁展示寵物狀態(tài),并允許用戶遠(yuǎn)程控制 | Python后端、HTML前端、API接口 |
6. 使用的模塊技術(shù)詳情介紹
6.1. STM32F103RCT6
STM32F103RCT6是STM32系列中一款基于ARM Cortex-M3核心的32位單片機(jī),具有較強(qiáng)的處理能力和豐富的外設(shè)接口,適合嵌入式應(yīng)用。該單片機(jī)具有高達(dá)72MHz的主頻,支持多種通信接口(如USART、SPI、I2C等),廣泛應(yīng)用于物聯(lián)網(wǎng)、自動(dòng)化控制等領(lǐng)域。
6.2 SHT30溫濕度傳感器
SHT30是一款高精度的溫濕度傳感器,具有較高的測(cè)量精度和穩(wěn)定性,適用于對(duì)溫濕度要求較高的應(yīng)用場景。通過I2C接口與STM32單片機(jī)進(jìn)行通信,能夠?qū)崟r(shí)獲取環(huán)境溫濕度數(shù)據(jù)。
6.3. HC-05藍(lán)牙模塊
HC-05是一款常用的藍(lán)牙串口模塊,通過串口通信與STM32單片機(jī)連接,提供無線通信能力。用戶通過手機(jī)APP與系統(tǒng)進(jìn)行藍(lán)牙連接,能夠?qū)崿F(xiàn)遠(yuǎn)程控制和數(shù)據(jù)查看。
6.4. ESP8266 WiFi模塊
ESP8266是一款低成本、低功耗的WiFi模塊,支持與STM32單片機(jī)進(jìn)行串口通信,能夠?qū)⒉杉降臄?shù)據(jù)通過WIFI上傳至云端。該模塊支持MQTT協(xié)議,用于物聯(lián)網(wǎng)設(shè)備之間的數(shù)據(jù)傳輸。
6.5. OLED顯示屏
OLED顯示屏是一種廣泛應(yīng)用的顯示模塊,具有高對(duì)比度、廣視角和低功耗的特點(diǎn)。在本系統(tǒng)中,OLED顯示屏用于實(shí)時(shí)顯示溫濕度、水位、食物量等信息。
7. 總結(jié)
基于STM32單片機(jī)設(shè)計(jì)的寵物喂食監(jiān)控系統(tǒng)通過集成多種傳感器、無線通信技術(shù)和云物聯(lián)網(wǎng)平臺(tái),實(shí)現(xiàn)了對(duì)寵物生活環(huán)境的全面監(jiān)控和管理。系統(tǒng)具有智能自動(dòng)模式和手動(dòng)模式兩種操作方式,用戶通過手機(jī)APP可以隨時(shí)遠(yuǎn)程控制系統(tǒng),并且能夠?qū)崟r(shí)查看寵物狀態(tài)。通過將數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái),本系統(tǒng)還支持歷史數(shù)據(jù)的查看和分析,進(jìn)一步提升了寵物管理的智能化程度。
在今后的工作中,系統(tǒng)可以進(jìn)一步優(yōu)化傳感器的精度和控制策略,增加更多的智能功能,如智能預(yù)警、自動(dòng)喂食計(jì)劃等,進(jìn)一步提高系統(tǒng)的智能化水平和實(shí)用性。
8. STM32代碼設(shè)計(jì)
以下是一個(gè)基本的 main.c
文件。此文件包括了系統(tǒng)初始化、各個(gè)模塊的調(diào)用,以及手動(dòng)模式和智能模式的切換。代碼中已經(jīng)使用了 STM32 HAL 庫。
main.c
完整代碼
#include "main.h"
#include "stm32f1xx_hal.h"
#include "sht30.h" // 溫濕度傳感器庫
#include "oled.h" // OLED顯示庫
#include "water_level.h" // 水位傳感器庫
#include "food_level.h" // 食物紅外傳感器庫
#include "relay_control.h"http:// 繼電器控制庫
#include "bluetooth.h" // 藍(lán)牙控制庫
#include "wifi.h" // WiFi上傳庫
// 定義閾值
#define TEMP_THRESHOLD_HIGH 30 // 溫度上限 (30°C)
#define TEMP_THRESHOLD_LOW 20 // 溫度下限 (20°C)
#define HUM_THRESHOLD_HIGH 70 // 濕度上限 (70%)
#define HUM_THRESHOLD_LOW 40 // 濕度下限 (40%)
#define WATER_LEVEL_THRESHOLD 30 // 水位下限(單位:%)
#define FOOD_LEVEL_THRESHOLD 10 // 食物下限(單位:%)
// 定義系統(tǒng)模式
#define MODE_MANUAL 0
#define MODE_AUTO 1
// 全局變量
uint8_t system_mode = MODE_AUTO; // 初始為自動(dòng)模式
float current_temp, current_hum; // 當(dāng)前溫濕度
int water_level, food_level; // 當(dāng)前水位和食物量
uint8_t temp_threshold_high = TEMP_THRESHOLD_HIGH;
uint8_t temp_threshold_low = TEMP_THRESHOLD_LOW;
uint8_t hum_threshold_high = HUM_THRESHOLD_HIGH;
uint8_t hum_threshold_low = HUM_THRESHOLD_LOW;
// 函數(shù)聲明
void System_Init(void);
void Read_Sensors(void);
void Handle_Auto_Mode(void);
void Handle_Manual_Mode(void);
void Update_Display(void);
void Control_Fans(void);
void Control_Water_Pump(void);
void Control_Food_Dispenser(void);
int main(void)
{
// 系統(tǒng)初始化
HAL_Init();
System_Init();
// 主循環(huán)
while (1)
{
// 讀取傳感器數(shù)據(jù)
Read_Sensors();
// 根據(jù)當(dāng)前模式執(zhí)行相應(yīng)的操作
if (system_mode == MODE_AUTO) {
Handle_Auto_Mode();
} else if (system_mode == MODE_MANUAL) {
Handle_Manual_Mode();
}
// 更新OLED顯示
Update_Display();
}
}
void System_Init(void)
{
// 初始化硬件外設(shè)
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 初始化GPIO
OLED_Init(); // 初始化OLED顯示
SHT30_Init(); // 初始化溫濕度傳感器
Water_Level_Init(); // 初始化水位傳感器
Food_Level_Init(); // 初始化食物傳感器
Relay_Init(); // 初始化繼電器控制
Bluetooth_Init(); // 初始化藍(lán)牙模塊
Wifi_Init(); // 初始化WiFi模塊
}
void Read_Sensors(void)
{
// 讀取溫濕度傳感器
SHT30_Read_Temperature_Humidity(¤t_temp, ¤t_hum);
// 讀取水位傳感器
water_level = Water_Level_Read();
// 讀取食物量傳感器
food_level = Food_Level_Read();
}
void Handle_Auto_Mode(void)
{
// 根據(jù)溫濕度自動(dòng)控制風(fēng)扇和除濕
Control_Fans();
// 根據(jù)水位自動(dòng)控制加水
if (water_level < WATER_LEVEL_THRESHOLD) {
Control_Water_Pump();
}
// 根據(jù)食物量自動(dòng)控制投喂
if (food_level < FOOD_LEVEL_THRESHOLD) {
Control_Food_Dispenser();
}
}
void Handle_Manual_Mode(void)
{
// 手動(dòng)控制模式下,藍(lán)牙控制命令判斷
Bluetooth_Control();
// 用戶通過按鍵手動(dòng)調(diào)整溫濕度閾值
if (Button_Pressed(UP_TEMP_BTN)) {
temp_threshold_high += 1; // 增加溫度閾值
}
if (Button_Pressed(DOWN_TEMP_BTN)) {
temp_threshold_high -= 1; // 減少溫度閾值
}
if (Button_Pressed(UP_HUM_BTN)) {
hum_threshold_high += 5; // 增加濕度閾值
}
if (Button_Pressed(DOWN_HUM_BTN)) {
hum_threshold_high -= 5; // 減少濕度閾值
}
// 手動(dòng)控制加水和喂食
if (Button_Pressed(WATER_BTN)) {
Control_Water_Pump();
}
if (Button_Pressed(FEED_BTN)) {
Control_Food_Dispenser();
}
}
void Control_Fans(void)
{
// 控制溫濕度風(fēng)扇
if (current_temp > temp_threshold_high || current_hum > hum_threshold_high) {
Relay_On(FAN_RELAY);
} else if (current_temp < temp_threshold_low && current_hum < hum_threshold_low) {
Relay_Off(FAN_RELAY);
}
}
void Control_Water_Pump(void)
{
// 控制水泵
Relay_On(WATER_PUMP_RELAY);
HAL_Delay(3000); // 延時(shí)3秒鐘加水
Relay_Off(WATER_PUMP_RELAY);
}
void Control_Food_Dispenser(void)
{
// 控制食物投喂
Relay_On(FEED_RELAY);
HAL_Delay(2000); // 延時(shí)2秒鐘投喂
Relay_Off(FEED_RELAY);
}
void Update_Display(void)
{
// 更新OLED顯示屏,顯示傳感器數(shù)據(jù)和系統(tǒng)狀態(tài)
OLED_Clear();
OLED_Display_String(0, 0, "Temp: %.1f C", current_temp);
OLED_Display_String(0, 1, "Humidity: %.1f %%", current_hum);
OLED_Display_String(0, 2, "Water: %d %%", water_level);
OLED_Display_String(0, 3, "Food: %d %%", food_level);
if (system_mode == MODE_AUTO) {
OLED_Display_String(0, 4, "Mode: Auto");
} else {
OLED_Display_String(0, 4, "Mode: Manual");
}
}
void Bluetooth_Control(void)
{
// 讀取藍(lán)牙指令并處理
uint8_t command = Bluetooth_Read_Command();
if (command == 'M') {
system_mode = MODE_MANUAL; // 切換到手動(dòng)模式
} else if (command == 'A') {
system_mode = MODE_AUTO; // 切換到自動(dòng)模式
} else if (command == 'W') {
Control_Water_Pump(); // 手動(dòng)加水
} else if (command == 'F') {
Control_Food_Dispenser(); // 手動(dòng)投喂
}
}
代碼解釋
- 初始化函數(shù)(
System_Init
)
初始化所有硬件模塊,包括OLED顯示、溫濕度傳感器、水位傳感器、食物傳感器、繼電器模塊、藍(lán)牙和WiFi模塊。 - 傳感器數(shù)據(jù)讀?。?code>Read_Sensors)
通過調(diào)用各自的函數(shù)獲取傳感器數(shù)據(jù)。溫濕度數(shù)據(jù)通過SHT30_Read_Temperature_Humidity
獲取,水位和食物數(shù)據(jù)分別通過Water_Level_Read
和Food_Level_Read
獲取。 - 自動(dòng)模式處理(
Handle_Auto_Mode
)
根據(jù)當(dāng)前的傳感器數(shù)據(jù),自動(dòng)判斷是否需要開啟風(fēng)扇(散熱或去濕),是否需要加水和投食。 - 手動(dòng)模式處理(
Handle_Manual_Mode
)
在手動(dòng)模式下,允許用戶通過按鍵設(shè)置溫濕度閾值,并通過藍(lán)牙控制手動(dòng)加水、喂食等操作。 - 風(fēng)扇控制(
Control_Fans
)
如果溫度超過設(shè)定閾值或濕度超過閾值,開啟風(fēng)扇;否則,關(guān)閉風(fēng)扇。 - 水泵控制(
Control_Water_Pump
)
如果水位低于設(shè)定閾值,開啟水泵加水。 - 食物投喂控制(
Control_Food_Dispenser
)
如果食物量不足,啟動(dòng)繼電器進(jìn)行食物投喂。 - OLED顯示更新(
Update_Display
)
將溫濕度、水位、食物量和當(dāng)前模式等信息顯示在OLED屏上。 - 藍(lán)牙控制(
Bluetooth_Control
)
從藍(lán)牙接收控制命令,切換模式或執(zhí)行操作(如加水、投喂)。