聚豐項目 > 基于FreeRTOS嵌入式系統的智能盆栽系統設計
本設計以基于FreeRTOS嵌入式操作系統的智能盆栽系統為對象,擬設計以stm32單片機為控制核心,采用IDT FS2012流量傳感器,通過使用FreeRTOS系統的創建任務、消息隊列、二值信號量、軟件定時器、低功耗模式等API函數實現智能盆栽系統的功能設定。主要實現的功能有:定時檢測土壤濕度值和供電電池電量值,并具有低壓報警功能,智能進入低功耗模式,可實現較為精確的定時或定量澆灌,并在OLED 屏幕上顯示系統的各狀態信息。
墨麟x
分享墨麟x
團隊成員
王曉 學生
本設計共分為五個模塊,分別為電源供電模塊,土壤濕度和電池電量采集模塊,澆灌模塊,數據處理與顯示模塊,低壓報警模塊。
1、電源供電模塊:將3.7v鋰電池的供電電壓采用先升壓后降壓的策略為整個系統供電,因為鋰電池的輸出電壓電流總是不穩定的,所以使用DM13升壓模塊將電壓升到5v,然后使用DM07降壓模塊將5v降壓到3.3v。其中5v是給FS2012流量傳感器供電,3.3v給其余的模塊供電。
2、土壤濕度和電池電量采集模塊:使用電容式或電阻式的土壤濕度傳感器,輸出電壓模擬信號供單片機獲得土壤濕度信息,使用兩個100k的電阻串聯將鋰電池電壓分壓到stm32單片機ADC能采集的范圍內,然后使用算法計算鋰電池的電量值。給系統提供智能澆灌和低壓報警的前提條件。
3、智能澆灌模塊:此部分分別由電機驅動、供水水泵、FS2012流量傳感器組成,單片機通過輸出PWM使電機驅動模塊控制水泵的轉速進而控制水流速度,使用FS2012獲得水流的流速信息,處理傳感器的流速信息即可實現定量澆灌的作用,也就解決了市面上常見自動澆花器澆灌不可定量的問題。在低功耗模式時,使用stm32單片機控制MOS管斷開電機驅動和FS2012傳感器的供電,進而達到節能的目的。
4、數據處理與顯示模塊由stm32單片機最小系統和OLED屏幕組成,使用stm32單片機處理數據控制整個系統的運行并在OLED 屏幕上顯示系統狀態信息。
5、低壓報警模塊是采用有源蜂鳴器和發光led組成,當電池電壓過低時,系統發出聲光警報。
本設計使用keil5軟件為整個系統編寫程序代碼,共分為四個部分。分別是裸機底層驅動部分,中斷處理函數部分及FreeRTOS任務部分和邏輯處理部分。
1、首先編寫各底層驅動代碼,如采集土壤濕度和電池電量原始值的ADC底層驅動代碼,存儲用戶首次使用設定數據時的flash驅動代碼,記錄用戶選擇定時模式時記錄時間的定時器時基代碼,和定時喚醒系統進行監測使用的RTC鬧鐘事件驅動代碼,控制OLED 屏幕顯示的SPI驅動代碼和采集FS2012流量傳感器數據的軟件I2C通信代碼,控制電機驅動的PWM底層驅動代碼等。
2、將FreeRTOS嵌入式操作系統移植到本設計中,創建四個任務,分別為土壤濕度和電池電量檢測任務、系統信息顯示任務、智能澆灌任務、報警任務。 ①土壤濕度檢測任務在獲取由WK_UP按鍵中斷、RTC定時器鬧鐘事件發送的二值信號量后,由阻塞態變成運行態(因為檢測任務的優先級最高,所以在獲得信號量之后直接進入運行態)獲取土壤濕度值和電池電量值,然后進行解析通過消息隊列的方式發送給顯示任務。②系統信息顯示任務在獲取由檢測任務發送的消息隊列后,將發送來的信息進行判斷和解析,若濕度值達到設定的閾值,則釋放智能澆灌任務的二值信號量,若電池電壓值低于閾值,則發送報警任務的二值信號量。若兩者都處于較安全的狀態,則OLED 屏幕顯示3秒后關閉,并進入睡眠模式。③智能澆灌任務在接收到澆灌任務的二值信號量若發生了任務切換,則從阻塞態變為運行態,根據用戶設定的數據,進行定時或定量的澆灌,并于OLED 屏幕上顯示水流流速,澆灌完畢30秒后再釋放一次檢測任務的信號量查看土壤濕度是否處于合適的范圍。④報警任務在獲取到系統信息顯示任務釋放的警報二值信號量之后,通過蜂鳴器和發光LED實現聲光報警,提示用戶更換電池或進行充電。
3、編寫WK_UP按鍵和用戶按鍵對應的外部中斷處理函數的代碼。在中斷處理函數中分別設置喚醒系統、發送檢測任務的二值信號量、設置智能盆栽系統的澆灌模式(定時、定量)及確定每次定量澆灌的流量值。設置RTC定時器的鬧鐘事件,RTC鬧鐘處理函數中每5小時發送一次檢測任務的二值信號量。
4、邏輯處理部分配合上文編寫的各功能代碼,實現智能盆栽系統的功能設定,完成此系統的設計。
啟動后,首先會出現歡迎語,待系統初始化之后默認進入檢測模式,如圖:
首次啟動,需要進行模式設置。
1、長按 WK_UP 按鍵設置為定量澆灌模式,K1 按鍵增加設定量,K2 按鍵減少設定量,精度為 10ml,設定完畢之后,再單擊 WK_UP 按鍵保存數據到 flash 中。即設置固定的水量使用水泵和 FS2012 流量傳感器計算澆灌的時間,然后使用 FreeRTOS 的軟件定時器進行監控澆灌,如圖:
2、雙擊 WK_UP 按鍵設置為定時澆灌模式,K1 按鍵開始計時,K2 按鍵停止計時,精度為 500ms,注意此模式會自動打開水泵進行澆水,即首次使用會進行記錄澆灌的時間,以適應對容量并不熟悉的用戶,澆灌完畢之后即可按 K2 停止計時和澆灌。記錄完畢之后,再單擊 WK_UP 按鍵會將計時時間保存到flash 中,再次充上電時不需要再次計時。如圖:
非首次啟動時,不需要重復設置模式,因為會自動的進入日常使用模式,自動檢測并顯示土壤濕度值和電池電量值,若不需要澆灌,屏幕顯示三秒之后會自動進入 FreeRTOS 的低功耗模式,OLED 顯示屏會進入熄滅狀態,流量傳感器 FS2012會關閉,水泵與電機驅動也將關閉,整個系統進入低功耗模式,等待定時時間到或等待 WK_UP 按鍵被按下喚醒系統進行檢測。
當系統被喚醒之后,會自動檢測土壤濕度值和電池電量值,然后判斷是否需要進行澆灌和電池低壓報警,若需要進行澆灌則讀取 flash 中的數據。打開水泵和流量傳感器按照用戶的設定值進行澆灌,并在顯示屏上顯示流速。若電池電量較低,則開啟電池低壓的聲光報警,提示用戶進行充電或更換電池。進入低功耗模式之后,只有用戶按下 WK_UP 按鍵或 RTC 定時器鬧鐘事件響應時,才會再次檢測土壤濕度及電池電量值,并在 oled 屏幕上顯示系統狀態。
因視頻文件過大,所以上傳到其他網站,并將鏈接放置于此:https://www.bilibili.com/video/av39282581
請配合“智能盆栽澆灌系統說明書”文檔一起觀看,效果會更好。
(1.33 MB)下載