????大家好,這里是5132單片機畢設設計項目分享,今天給大家分享的是基于《基于STM32的智能抽水灌溉系統設計》。
目錄
1、系統功能
2.1、硬件清單
2.2、功能介紹
2.3、控制模式
2、演示視頻和實物
3、系統設計框圖
4、軟件設計流程圖
5、原理圖
6、主程序
7、總結
1、系統功能
2.1、硬件清單
STM32F103C8T6 最小核心控制板 + 繼電器 + 風扇模塊 + 0.96 寸 OLED 顯示屏 + 蜂鳴器 + 土壤濕度傳感器 + DHT11 溫濕度傳感器 + 藍牙模塊 + 4 個按鍵
2.2、功能介紹
(1)STM32F103C8T6 最小核心控制板:作為系統核心,負責協調和控制各硬件模塊運行,處理傳感器數據并執行相應控制邏輯。
(2)繼電器:控制水泵的啟停,當系統觸發水泵開啟條件時,通過繼電器接通水泵電路。
(3)風扇模塊:在自動模式下,當環境溫度大于設定閾值時自動啟動,用于散熱或調節環境溫度;手動模式下可通過按鍵直接控制。
(4)0.96 寸 OLED 顯示屏:實時顯示土壤濕度、環境溫度濕度等傳感器數據,以及系統當前工作模式(手動 / 自動)和各閾值設置信息。
(5)蜂鳴器:當土壤濕度大于設定閾值時觸發報警,提醒用戶土壤濕度過高;支持通過蜂鳴器報警開關取消報警。
(6)土壤濕度傳感器:檢測土壤的濕度值,為系統判斷是否需要開啟水泵灌溉提供數據依據。
(7)DHT11 溫濕度傳感器:檢測環境的溫度和濕度,用于觸發風扇啟停等相應控制動作。
(8)HC-05藍牙模塊:連接手機,實現手機與系統的數據交互,用戶可通過手機查看傳感器數據或遠程控制。
(9)4 個按鍵:第 1 個按鍵:模式切換按鍵,用于在手動模式和自動模式之間切換。第 2-4 個按鍵:在自動模式下,用于設置土壤濕度、溫度、濕度的閾值;在手動模式下,用于直接控制外設(如水泵、風扇等)。
2.3、控制模式
(1)自動模式:
? ?上電默認模式,系統根據傳感器檢測值與設定閾值的對比自動執行動作:
? ? ?當土壤濕度<設定閾值時,打開水泵進行灌溉;
? ? ?當環境溫度>設定閾值時,打開風扇;
? ? ?當土壤濕度>設定閾值時,觸發蜂鳴器報警(可通過報警開關取消)。
? ? ?支持通過第 2-4 個按鍵進入閾值設置界面,調整土壤濕度、溫度等參數的觸發閾值。
(2)手動模式:
? ? ?通過第 1 個按鍵切換至手動模式,此時可通過按鍵直接控制外設啟停。
2、演示視頻和實物
基于STM32的智能抽水灌溉系統設計
?
3、系統設計框圖
4、軟件設計流程圖
5、原理圖
?
6、主程序
#include "sys.h" //頭文件
/***********************************************************************************************
同學好!我們是5132單片機設計,定制單片機設計,實物和說明書均可定制,歡迎大家咨詢。VX:lwfw123456789
其他項目演示視頻和說明請大家移步嗶哩嗶哩、CSDN和公眾號等。
淘寶:5132單片機設計
嗶哩嗶哩:5132單片機設計
CSDN: 5132單片機設計
公眾號: 5132單片機設計
抖音 : 5132單片機設計
小紅書: 5132單片機設計
咸魚: 5132單片機設計
************************************************************************************************/
#include "delay.h"
#include "led.h"
#include "Key.h"
#include "Buzzer.h"
#include "OLED.h"
#include "AD.h"
#include "MyRTC.h"
#include "dht11.h"
#include "Serial.h"char result[100];
uint32_t bufe[5]; //存儲傳感器采集的數據
uint16_t AD4; //存儲4路ADC值
uint8_t RxData; //藍牙接收到的數據
uint32_t WenYu = 40; //光照強度閾值上限
uint32_t ShiYu = 40; //光照強度閾值下限
uint32_t TuShiYu = 40; //光照強度閾值下限u8 temp, humi; //存放溫濕度
u8 state, state2, state2_1,state2_2,state3; //按鍵狀態標志
u8 t = 0; //傳感器讀取時間間隔
uint8_t KeyNum; //存儲按鍵值void shoudong()
{if (KeyNum == 2) //按鍵{delay_ms(20);if (KeyNum == 2){state2++;if (state2 > 1){state2 = 0;}}}if (state2 == 0){FengShan_ON();}if (state2 == 1){FengShan_OFF();}if (KeyNum == 3) //按鍵{delay_ms(20);if (KeyNum == 3){state2_1++;if (state2_1 > 1){state2_1 = 0;}}}if (state2_1 == 0){ShuiBen_ON();}if (state2_1 == 1){ShuiBen_OFF();}if (KeyNum == 4) //按鍵{delay_ms(20);if (KeyNum == 4){state2_2++;if (state2_2 > 1){state2_2 = 0;}}}if (state2_2 == 0){Buzzer_Turn();}if (state2_2 == 1){Buzzer_OFF();}if (Serial_GetRxFlag() == 1){RxData = Serial_GetRxData(); //藍牙接收switch (RxData){case 1:state2++;if (state2 > 1){state2 = 0;}break;case 2:state2_1++;if (state2_1 > 1){state2_1 = 0;}break;case 3:state2_2++;if (state2_2 > 1){state2_2 = 0;}break;default:break;}}
}
void zhidong()
{ if(bufe[2]<TuShiYu){ShuiBen_ON(); }else{ShuiBen_OFF(); }if(bufe[0]>WenYu){FengShan_ON(); }else{FengShan_OFF(); } if(bufe[1]>ShiYu){Buzzer_Turn(); }else{Buzzer_OFF(); } if (KeyNum == 2) //自動模式下PB0按鍵控制閾值切換{delay_ms(20);if (KeyNum == 2){state3++;if (state3 > 2){state3 = 0;}}}if (state3==1){if (KeyNum == 3)WenYu++; //光照強度上限加if (KeyNum == 4)WenYu--; //光照強度上限減}if (state3==2){if (KeyNum == 3)ShiYu++;if (KeyNum == 4)ShiYu--;}if (state3==0){if (KeyNum == 3)TuShiYu++;if (KeyNum == 4)TuShiYu--;}
}
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級delay_init(); //延時函數初始化LED_Init(); //初始化與LED連接的硬件接口DHT11_Init();Buzzer_Init(); //下面為外設初始化OLED_Init();Key_Init();AD_Init();Serial_Init(); //串口1初始化MyRTC_Init();OLED_ShowChinese(2, 1, 63);OLED_ShowChinese(2, 2, 64);OLED_ShowChinese(2, 3, 65);OLED_ShowChinese(2, 4, 66);OLED_ShowString(2, 9, ":"); OLED_ShowChinese(3, 1, 26);OLED_ShowChinese(3, 2, 28);OLED_ShowString(3, 5, ":"); OLED_ShowChinese(3, 5, 27);OLED_ShowChinese(3, 6, 28);OLED_ShowString(3, 13, ":");OLED_ShowChinese(4, 1, 67);OLED_ShowChinese(4, 2, 68);OLED_ShowString(4, 5, ":"); OLED_ShowString(1, 5, "XX:XX:XX"); while (1){MyRTC_ReadTime(); //讀取時間(每一個頁面都有時間顯示)OLED_ShowNum(1, 5, MyRTC_Time[3], 2); //時OLED_ShowNum(1, 8, MyRTC_Time[4], 2); //分OLED_ShowNum(1, 11, MyRTC_Time[5], 2); //秒DHT11_Read_Data(&temp,&humi); //讀取溫濕度并顯示在OLED上bufe[0]=temp; bufe[1]=humi;OLED_ShowNum(3, 6, bufe[0], 2);OLED_ShowNum(3, 14, bufe[1], 2);OLED_ShowNum(4, 6, TuShiYu, 2);OLED_ShowNum(4, 10, WenYu, 2);OLED_ShowNum(4, 14, ShiYu, 2);if (t % 10 == 0){ bufe[2] = TS_GetData(ADC_Channel_4); //土壤傳感器 PA4
// if (AD4 > 4000)AD4 = 4000;
// bufe[2] = (u8)(100 - (AD4 / 40));OLED_ShowNum(2, 10, bufe[2], 3);OLED_ShowString(2, 13, "%"); }t++;Serial_SendString(result); sprintf(result, " Wen=%d, Shi=%d,\n TuRangShiDu=%d", bufe[0], bufe[1], bufe[2]);KeyNum = Key_GetNum();if (KeyNum == 1){delay_ms(20);if (KeyNum == 1){state++;if (state > 1){state = 0;}}}if (state == 0) //自動模式{OLED_ShowChinese(1, 7, 51);OLED_ShowChinese(1, 8, 52);zhidong();}if (state == 1) //手動模式{OLED_ShowChinese(1, 7, 18);OLED_ShowChinese(1, 8, 52);shoudong();} }
}
7、總結
本文介紹了一個基于STM32F103C8T6的智能抽水灌溉系統設計。系統硬件包括核心控制板、繼電器、傳感器(土壤濕度、DHT11溫濕度)、OLED顯示屏、蜂鳴器和藍牙模塊等。系統支持兩種工作模式:自動模式下根據傳感器數據自動控制水泵和風扇;手動模式下可通過按鍵或藍牙遠程控制外設。軟件設計采用模塊化編程,實現數據采集、閾值設置、設備控制等功能。該項目實現了智能化農業灌溉,具有實時監測、自動控制和遠程管理等特點,為現代農業灌溉提供了實用解決方案。