智能霧霾窗的設計_第1頁
智能霧霾窗的設計_第2頁
智能霧霾窗的設計_第3頁
智能霧霾窗的設計_第4頁
智能霧霾窗的設計_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

-2-第4章軟件設計在整個系統(tǒng)的軟件設計中,必須站在同一水平上去考慮到單片機系統(tǒng)上的軟件、硬件資源的分配,因此需要將軟件設計進行條理化、簡單化。以下三點:(1)需要對問題進行具體的分析分析,首先,我們必須決定對整體的系統(tǒng)設計,以及與之有關的需要,其次,我們必須決定哪些運算法則能夠完成這些工作。(2)然后相關流程圖根據(jù)設計好的算法進行繪制;(3)編制系統(tǒng)相關程序,因為系統(tǒng)結構化程序的設計方法之一是程序選擇數(shù)據(jù)算法。在根據(jù)最初設計程序框圖決定了相關算法及相關步驟之后通過一些指令進行一系列布置,然后形成完整的整體接合結構。(1)對整體的控制要求和有關的需求進行了分析,并選擇了一種較好的算法來仿真完成其對應的作用;對每一個問題都作了詳細的分析;(2)按照它所提出的方法,畫出了相應的流程;(3)編制相應的計算軟件。以最初進行設計的程序框圖為依據(jù),來確定有關的算法和有關的步驟,最后用一些指令來進行一系列的安排,最后最終構成一個完整的整體結結構。選用程序數(shù)據(jù)算法是系統(tǒng)結構化程序當中的一種設計方法,通過會去使用部分限制旋轉方向的指令或者是命令語句,可以顯著降低程序的復雜度,簡化程序和邏輯??梢詼p少整個設計中的錯誤,方便用戶對程序進行編輯和修復。4.1主程序結構首先對該軟件進行了初始化,使該軟件的運行達到了最優(yōu)。在PM2.5的檢測模塊中,對PM2.5的數(shù)值進行檢測,之后將其傳送到單片機中,對其進行分析、處理和判斷,則蜂鳴器報警,同時窗戶會進行關閉,否則開啟;另外也可以通過連接藍牙完成數(shù)據(jù)的遠程監(jiān)控以及手動輸入指令對窗戶進行啟閉操作,其中數(shù)據(jù)遠程傳輸需要掃描本地按鍵是否開啟。主程序圖如圖4.1所示。圖4.1PM2.5程序流程圖4.2按鍵子程序結構本設計根據(jù)要求設置了一個控制數(shù)據(jù)是否遠程上傳的按鍵。按鍵處理子程序流程圖如圖4.2所示。按鍵掃描的程序一般大致為首先進行判斷其裝置有沒有鍵被按下,然后通過其編寫的延遲程序進行相應的去抖動,接著去求被按下鍵的信號,等待按鍵進行釋放后會轉入相應的鍵處理子程序當中。圖4.2鍵盤掃描程序流程圖

4.3顯示子程序結構本設計是以OLED顯示屏顯示其采集到的PM2.5值以及窗是否啟閉狀態(tài)等數(shù)據(jù)信息。在系統(tǒng)進行使用智能藥箱系統(tǒng)前都要進行初始化一下,也就是做一下清屏的操作,然后再去調用其系統(tǒng)的讀寫命令,進行讀寫相關數(shù)據(jù),最后顯示相關數(shù)據(jù)信息。顯示子程序流程圖如圖4.3所示。圖4.3顯示子程序流程圖4.4防火子程序結構該設計是用火焰?zhèn)鞲衅鞑杉降幕鹧鏈囟群凸庾V,對數(shù)據(jù)進行分析判斷,檢測到火焰后蜂鳴器報警同時水泵工作開始滅火。圖4.4防火流程圖

4.5調光子程序結構本設計是以由光敏傳感器收集外界光線強弱變化的數(shù)據(jù),在使用系統(tǒng)前需要初始一下。將接受的光強數(shù)據(jù)分成5個等級,最亮、較亮、次亮、最暗、燈滅根據(jù)周圍光暗程度和進行動作,調節(jié)燈光的亮度。圖4.6光線調節(jié)流程圖

系統(tǒng)調試5.1調試部分根據(jù)畢業(yè)要求,將本系統(tǒng)調試部分分為硬件調試和軟件調試。(1)硬件調試而在軟件開發(fā)過程中,硬件模塊又是軟件開發(fā)過程中最易出現(xiàn)錯誤的環(huán)節(jié)。元件的損傷將會對整個系統(tǒng)的性能產生很大的影響。對于硬件的調試,首先要做的就是檢查每一個周期的模型,確定它們的性能是否達到了設計要求。在調試的時候要特別關注一下電路中元件的耐壓,以免造成電容的破壞。第二,對設備和設備的管腳進行檢測,如果有松動或者虛焊,則要加強。保證管腳的指向正確,防止由于管腳插入錯誤而導致線路短路,從而導致元件的損傷。另外,在進行系統(tǒng)化焊接的時候,因為對焊槍的運用不夠嫻熟,造成了焊接時出現(xiàn)了重復焊接和焊盤脫落等情況。這時候就必須要用萬用表來檢測系統(tǒng)中的每個模塊的電源和地線,避免發(fā)生短路。第三,能夠按照系統(tǒng)模擬圖表中的設計需求,將各個系統(tǒng)中的組件一一拼裝并調試,例如顯示模塊的亮度是否適宜,按鍵電路能否正常響應。需要配合萬用表對模塊的工作電壓進行逐一確認,確保其正常運行。第四,在完成對單獨模塊的檢測之后,需要對系統(tǒng)進行整體的組裝工作,檢驗模塊運行的穩(wěn)定性。實物圖如圖附錄二所示。(2)軟件調試在軟件程序的設計中,要學會使用開發(fā)工具,可以極大地提升設計人員的工作效率,避免很多不確定的問題和錯誤,例如,程序的語法錯誤,標點符號寫法錯誤等等。在此,我們可以通過編譯程序來檢查,以便能夠適時地做出修改。在此,我們選取了Keil平臺來進行代碼程序,其一般流程如下:首先,我們使用Keil軟件,在其工具欄中找到了新建工程,建立了新的工程,按照所選擇的單片機型號,去選擇一種合適的編寫程序的語言,在此,我們選擇了C語言,然后進行C程序代碼的編寫。一般來講,由于整個系統(tǒng)保護包括多個功能,所以會按照順序對每個功能模塊進行單獨的編程,力求實現(xiàn)一個函數(shù)調用一個功能,便于設計人員進行維護,進而來編程。為了找出程序中的錯誤語法,在編程完畢后,需要對程序進行編輯和修改,直到不再報錯為止,然后通過JTAG或串口等方式將程序下載到單片機,并結合硬件進行調試,看程序是否能夠實現(xiàn)預期的目標。通常來說,第一次在硬件上運行的程序,不會一蹴而就,總是會有問題,這是很普遍的,所以要針對這些問題,進行深入的調試,才能徹底的解決。通常,在Keil的環(huán)境中,你可以通過Debug工具來獲取在線調試功能,如圖5.1所示。通過Debug功能,可以開始對程序的執(zhí)行節(jié)點進行操縱,實現(xiàn)單步,循環(huán)等多種操縱,也可以檢測MCU中的寄存器數(shù)據(jù),工具條上的單步等操縱按鍵,在左邊的Regisier窗口中,可以查看相關的寄存器參數(shù)。接著就將程序下載入單片機,然后進行實物調試。圖5.1DEBUG選項界面圖5.2結果分析在此次系統(tǒng)設計中,智能霧霾窗的設計主要直接觀測PM2.5值和窗戶的開關狀態(tài)以及遠程用手機實時觀察霧霾濃度和窗戶狀態(tài)以及顯示周圍環(huán)境亮度,遠程控制窗戶開關,霧霾濃度超標后關閉并且發(fā)出警報,濃度降低后窗自行打開戶打開等操作,首先接通電源,通過按鍵進行啟動系統(tǒng),如圖5.2所示,第一行顯示PM2.5值,此時為0,第二行顯示窗戶的啟閉狀態(tài),此時為OPEN(因為模擬采集的霧霾為0)。圖5.2系統(tǒng)開啟圖圖5.3系統(tǒng)關閉圖系統(tǒng)關閉時第二行顯示窗戶關閉,如圖5.3所示。緊接著用一支筆插入PM2.5模塊模擬有顆粒進入如圖5.4所示,此時超過設定閾值,蜂鳴器會發(fā)出聲音進行報警持續(xù)時間6s,同時舵機模擬窗戶進行關閉,如圖5.5所示,把筆拿開窗戶重新打開。圖5.4模擬霧霾檢測圖圖5.5舵機(窗戶)關閉圖連接藍牙,打開藍牙助手APP,啟動上傳數(shù)據(jù)按鍵,手機APP會顯示采集到的霧霾濃度和窗戶開關數(shù)據(jù),如圖5.6所示;也可通過在數(shù)據(jù)發(fā)送區(qū)域輸入K(開窗)、G(關窗),如圖5.5所示,輸入G,窗戶關閉。其它情況類似,通過實物調試,可以發(fā)現(xiàn)此次試驗實現(xiàn)了本設計最初的功能要求。圖5.6數(shù)據(jù)傳輸圖圖5.7遠程藍牙關窗圖圖5.8遠程藍牙開窗圖App控制窗戶關閉,連接藍牙后輸入大寫字母G,然后點擊換行,可以看到液晶顯示屏顯示窗戶狀態(tài)為close,模擬窗戶的舵機靠左(窗戶關閉狀態(tài))圖5.7所示。輸入大寫字母控制窗戶K然后點擊換行,按下發(fā)送,可以看到顯示屏上的窗戶狀態(tài)為open,用來模擬窗戶開關的舵機靠右(窗戶開啟狀態(tài))圖5.8所示。打火機充當火源,火焰?zhèn)鞲衅鳈z測到火焰后,會發(fā)出警報,同時水泵開始工作用于滅火,如圖5.9所示。調光模塊用物體遮擋光敏傳感器,顯示屏上的light數(shù)顯示也會發(fā)生變化,周圍光線環(huán)境越低燈光越亮。燈有5個狀態(tài)light0到25最亮,25到50較量50到75較暗,75到100最暗,超過閾值后熄滅。測試如圖5.10和5.11所示。圖5.9防火模塊測試水泵動作圖5.10測試時調光燈亮度圖5.11周圍環(huán)境變暗調光燈變亮

結論通過不斷的校核和修正,最終使該方案最終得以實現(xiàn)。在這一次的設計中,與單片機相結合,進行了一款智能霧霾窗的設計,它的主要構成部分包括了一下幾個方面:STM32F103C8T6單片機模塊、PM2.5模塊、顯示模塊、報警模塊以及繼電器、液晶顯示模塊、PM2.5檢測模塊、按鍵模塊、防火模塊、調光模塊。利用PM2.5模塊來探測霧霾,當探測到的數(shù)值超出門限,就會發(fā)出警報,并開啟繼電器來關閉霧霾窗,此外,還配備了藍牙模塊來實現(xiàn)對車窗的遠程監(jiān)測和對霧霾窗的開啟和關閉的輸入指令,檢測到火焰后水泵啟動,語音識別開窗關窗,光敏模塊根據(jù)周圍環(huán)境變化通過燈光實時調節(jié)光線。除此之外,因為研究條件和時間的限制,還有很多有待提高的地方,還有很多缺陷有待研究,以下列出了所存在的問題和有待提高的地方,這將會在今后的研究工作中得到不斷的提高,使本文的研究結果能夠更快地應用到實踐當中。1、本文僅對PM2.5數(shù)值的展示進行了實體試驗,設定了沒有在真實監(jiān)測平臺上實施試驗并給出了相應的數(shù)值下一步,我們期望可以對整體的數(shù)字傳送終端的設計進行了實體試驗。2、所做的PM2.5含量探測器的設計,可以進行多個探測模塊的探測,可以將資料上載,也可以將其進行實時的警報監(jiān)視,現(xiàn)在只是將其展示出來,下一步將會向著智慧家庭的方向發(fā)展。3、我所試驗的PM2.5的工作狀態(tài),由于沒有真實的煙霧,所以都是人工仿真的。4、為了使霧霾窗的實用性提高,我又加入了防火、調光的功能,遺憾的是最初設想的換氣功能因研究水平的限制無法實現(xiàn)。參考文獻[1]朱旭光,劉建輝.農業(yè)大棚的溫濕度控制系統(tǒng)[J]。自動化技術與應用,2005,24(2):45-47[2]馬海琴,葉俊明.基于WiFi的PM2.5測試儀設計[J].無線互聯(lián)科技,2016(18):17-18.[3]薛榮坤.基于單片機的PM2.5濃度檢測儀的設計[J].電腦知識與技術,2020,v.16(14):262-263.[4]王珅.基于GP2Y1010AU0F傳感器的PM2.5檢測儀設計[J].工業(yè)加熱,2020,v.49;No.274(02):67-69+74.[5]張艷麗,張勇.基于SHT11的溫濕度控制器[J].自動測量與控制.2007,26(5):83-84[6]江思敏,姚鵬翼,胡燁.Protel2004電路原理及PCB設計[M].北京機械工業(yè)出版社.2006[7]鄭陽,陳美玲,李欣鵬,等.基于WiFi遠程檢測與傳輸PM2.5數(shù)值檢測儀設計[J].物聯(lián)網(wǎng)技術,2019(8).[8]王武禮,楊華.基于SHT11的倉糧溫濕度測控系統(tǒng)的設計[J]儀表技術與傳感器.2010,9:50-51.[9]姚展.基于單片機的PM2.5檢測儀設計[J].價值工程,2019,038(007):154-156.[10]馮顯英,葛榮雨.基于數(shù)字溫濕度傳感器SHT11的溫濕度測控系統(tǒng)[J][11]謝楷,趙建.MSO430系列單片機系統(tǒng)工程設計與實踐[M].北京:機械工業(yè)出版社,2009[12]裴素萍,吳必瑞,劉禹.基于MSP430的水泥養(yǎng)護箱溫濕度控制系統(tǒng)[J].中原工學院學報.2008,19(5):45-48[13]齊秋紅,馬斌,韓中華,趙鍵.基于SHT1101的智能建筑室內溫度檢測[J].樓宇自動化.2008,18:1-3[14]張瑋,楊景發(fā),閆其庚,硅光電池特性的實驗研究[J].實驗技術與管理,2009(9):42-46[15]張萍.基于數(shù)字溫度計DS18B20的溫度測量儀的開發(fā)[J].自動化儀表,2007(6):64-66[16]LiuJ,CaoR.DesignofenvironmentalmonitoringsystembasedonInternetofThings.WirelessInternetTechnology,2019.[17]WangH,KongL.DesignofaWirelessPM2.5ConcentrationDetectionSystem.ElectronicenceandTechnology,2015.[18]LiuS,LuC,ShengL.TheDesignofAtmosphericEnvironmentMonitoringSystemBasedonARM9PlatformandGPRSTechnology[C]//FourthInternationalConferenceonComputationalIntelligence&CommunicationNetworks.IEEE,2012.[19]GuK,QiaoJ,LiX.HighlyEfficientPicture-BasedPredictionofPM2.5Concentration[J].IEEETransactionsonIndustrialElectronics,2018.

附錄(部分)#include"app_conf.h"#ifdefAPP_MY_APP_ENABLED#defineMODULE_NAME"myapp"#ifdefMODE_LOG_TAG#undefMODE_LOG_TAG#endif#defineMODE_LOG_TAGMODULE_NAMEstaticTaskHandle_tg_app1_handle; /*任務句柄*/staticTaskHandle_tg_app2_handle; /*任務句柄*/staticTaskHandle_tg_app3_handle; /*任務句柄*/staticTaskHandle_tg_moudle_test_handle;/*任務句柄*/intret=0;staticuint8_tsend_flag;/*鍵盤創(chuàng)建*/intkey_board_call(constchar*key_name,u8state)intuart1_callback(void*param,constu8*data,u16data{ if(state==0){ send_flag=!send_flag; } log_inform("KEY:%s,state:%d",key_name,state); returnE_OK;}staticuint8_topen_flag;/*串口初始化*/_len){ staticcharrec_buf[64]; if(data_len<64){ memset(rec_buf,0,sizeof(rec_buf)); memcpy(rec_buf,data,data_len); }else{ log_inform("Len:%d,Error",data_len); } char*pxIndex; if(strstr(rec_buf,"K\r\n")!=NULL){ open_flag=1; }elseif(strstr(rec_buf,"G\r\n")!=NULL){ open_flag=0; }returnE_OK;}#defineAPP_1_UPDATE_TIME_MS1000staticvoidmy_app_task_1(void*param){ /*OLED初始化*/ OLED_Init(); //初始化OLED OLED_Clear();// /*OLED顯示*/ /*鍵盤初始化*/ c_key_boardboard={0}; key_listboard_list[]={ {"L1",GPIOC,GPIO_PIN_14,KEY_PRESS_IS_ZERO}, }; board=key_board_create(board_list,sizeof(board_list)/sizeof(key_list)); if(NULL==board.this) log_error("Boardcreatefailed."); ret=board.set_callback(&board,key_board_call); if(E_OK!=ret) log_error("Callbacksetfailed."); /*蜂鳴器初始化*/ c_switchbeep={0}; beep=switch_c c_servoservo={0};servo=servo_create(SYS_TIME_2,SYS_TIME_CH3); ret=servo.set(&servo,0.0f); /*PM2.5初始化*/reate(GPIOC,GPIO_PIN_15); if(NULL==beep.this) log_error("Swtichcreatfailed."); ret=beep.set(&beep,SWITCH_LOW); /*舵機初始化*/ c_gp2ygp2y={0}; gp2y=gp2y_create(MY_ADC_9,GPIOB,GPIO_PIN_5); if(NULL==gp2y.this) log_error("gp2ycreatfailed."); /*藍牙串口初始化*/ intret=my_uart.init(MY_UART_3,115200,128,UART_MODE_DMA); if(ret!=E_OK) log_error("my_uartinitfailed."); my_uart.set_callback(MY_UART_3,NULL,uart1_callback); if(E_OK!=ret) log_error("Callbacksetfailed."); staticuint8_toled_show[32]; staticuint8_ttx_buf[32]; staticuint8_tbeep_cnt; floatpm2_5=0.0f; staticuint32_tsys_cnt; while(1) { //獲取PM2.5濃度ret=gp2y.get(&gp2y,&pm2_5); if(E_OK!=ret) log_error("gp2ygetfailed."); //PM2.5濃度大于閾值蜂鳴器報警 if(pm2_5>=50&&beep_cnt==0){ open_flag=1; beep_cnt=10; ret=beep.set(&beep,SWITCH_HIGHT); } if(beep_cnt>0){ beep_cnt--; if(beep_cnt==1)open_flag=0; }else{ ret=beep.set(&beep,SWITCH_LOW); } //液晶顯示濃度信息 memset(oled_show,0,sizeof(oled_show)); sprintf(oled_show,"PM2.5:%.1f",pm2_5);OLED_ShowString(0,0,oled_show,16); if(open_flag!=0){ ret=servo.set(&servo,180.0f); //舵機控制打開窗戶 memset(oled_show,0,sizeof(oled_show)); sprintf(oled_show,"WINDOW:CLOSE"); OLED_ShowString(0,2,oled_show,16); memset(tx_buf,0,sizeof(tx_buf)); sprintf(tx_buf,"PM2.5:%.1f\r\nWINDOW:OPEN\r\n",pm2_5); }else{ ret=servo.set(&servo,0.0f); //舵機控制關閉窗戶 memset(oled_show,0,sizeof(oled_show)); sprintf(oled_show,"WINDOW:OPEN"); OLED_ShowString(0,2,oled_show,16); memset(tx_buf,0,sizeof(tx_buf)); sprintf(tx_buf,"PM2.5:%.1f\r\nWINDOW:CLOSE\r\n",pm2_5); } //藍牙發(fā)送數(shù)據(jù) if(send_flag!=0&&(sys_cnt%2)==0){ ret=my_uart.send(MY_UART_3,tx_buf,strlen(tx_buf)); if(E_OK!=ret) log_error("Uartsendfailed."); }/*重復執(zhí)行邏輯從此處開始*/ sys_cnt++; vTaskDelay(APP_1_UPDATE_TIME_MS); }}#defineAPP_2_UPDATE_TIME_MS100staticvoidmy_app_task_2(void*param){ while(1) { /*重復執(zhí)行邏輯從此處開始*/ vTaskDelay(APP_2_UPDATE_TIME_MS); }}#defineAPP_3_UPDATE_TIME_MS1000staticvoidmy_app_task_3(void*param){ while(1) { /*重復執(zhí)行邏輯從此處開始*/ vTaskDelay(APP_3_UPDATE_TIME_MS); }}voidmy_app_init(void){ taskENTER_CRITICAL(); BaseType_tos_ret;#if1 /*創(chuàng)建app任務*/ if(NULL==g_app1_handle) { os_ret=xTaskCreate((TaskFunction_t)my_app_task_1, (constchar*)MOD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論