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