




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章緒論1.1課題研究背景及意義隨著社會的不斷發展,生活質量的提高,人們對于自己所居住的室內環境有了不斷的追求,現代所采用的裝修材料中有很多含有有害物質,這些有害物質揮發為氣體導致室內環境質量下降,直接危害到人體的身體健康。但是各類室內裝飾及裝修材料中往往含有大量的甲醛等有害物質,這些有害物質在室內久久不能散去,直接對人們的身體健康造成了影響。如果人們生活在PM2.5或者甲醛超高的地方,可能就會造成不同程度的頭暈、惡心、失眠等癥狀,這是因為甲醛對于人們的神經系統有一系列的干擾。目前市場上的室內環境監測儀種類繁多,相對功能比較單一化,同時價格也較貴,所以對功能多元化的多參數綜合環境監測系統的設計有所需要[1]。現代生活中,人們對于身體健康更為注重,盡管對家具、建材等各類裝修所需材料的環保性要求更高,但是仍然避免不了受到甲醛等有害氣體的影響。由于甲醛無色無味,但是對身體健康影響較大,所以在室內安全甲醛測量儀和通風設備,可有效增加人們的健康指數。在我國,對于環境監測系統的研究開始較晚,大約始于20世紀的80年代,當時的生產力水平較低,科技并不發達,技術設備也比較落后,因此對環境系統的研究能力及水平也有限,大部分相關的設備都需要從國外引進,而且研究的經費較高,對于研究者的素質要求也高,環境監測系統很難大規模的推廣和使用,近年來,我國吸收借鑒了國外的先進技術,在此基礎上加以改進,已經取得了較大的成效,研究環境監測的工作人員目前已經熟練掌握了環境技術,取得了突飛猛進的發展。隨著科技及傳感器技術的不斷發展,將單片機技術應用到環境的檢測中的設計也在不斷的研究和發展中[2]。由此可見,對于室內控制質量的檢測是非常有必要的。因此本設計針對室內環境的技術指標需求,使用pm2.5傳感器和VOC傳感器對室內pm2.5和甲醛體監測為主要手段,對有害氣體進行數據采樣后根據預設值可在手機上進行數據顯示,同時將數據通過藍牙模塊反饋至手機中。1.2課題研究現狀隨著科技及傳感器技術的不斷發展,將單片機技術與無線技術相結合的環境監測系統也在不斷的研究和發展中。廣西民族大學的邢凱在基于單片機的室內無線環境監測系統設計與應用一文中,針對人們長期居住的室內及工作場所設計了一款以STC89C52單片機作為核心的無線環境監測系統,該系統利用DHT21溫濕度傳感器實時采集室內的溫濕度,MS1100傳感器實時檢測甲醛濃度,將檢測到的數據通過NRF905無線收發模塊以無線的方式發送到PC端來處理,并可將數據處理顯示,如果檢測到溫濕度值或者甲醛濃度已經高于設定的標準值時,蜂鳴器發出報警,避免空氣污染對人體出現的危害。該系統可進行無線傳輸,可靠性高,適用于室內環境的測量與監控[3]。2017年王永順,閆等人在基于nRF905的無線環境監測系統設計與實現的文章中,介紹了一款采用NRF905無線收發模塊作為無線傳輸模塊的溫度、濕度檢測與傳輸系統,該系統所采用的單片機型號為STC89C52單片機,利用精度較高的DS18B20傳感器和DHT11傳感器分別檢測溫度和濕度,再將采集到的溫度及濕度數據通過NRF905傳輸給接收部分,通過OLED屏實時顯示數據。該系統具有傳輸速率高、軟硬件設計簡單,通信穩定等特定[4]。國外目前已經開始發展研究長光程吸收光譜儀,這種設備以激光光源為基礎進行檢測,靈敏度更高,但是目前處于測試的階段。同時,激光雷達等可以在距離較遠的范圍內進行實時測量的技術,已經應用到環境檢測中,可以實時測量范圍較廣的區域,得到了國際范圍內的重視,已經成為空氣環境監測方面的系統發展的目標,給環境監測的創新提供了新方向[5]。另外將衛星測試、地面觀測相結合,向軌跡模型、空氣質量預報模型構建天地空一體化的大氣環境監測和預報系統,可對大氣環境形成一個立體的、全方位的認識,這也是目前環境空氣質量自動監測系統的發展趨勢之一。綜上所述,將單片機技術與無線技術相結合的環境系統會不斷的向微型化、高穩定性、抗干擾性、易開發的方向迅速發展。1.3本文研究內容及章節安排本文主要研究的是一種可以準確檢測室內空氣質量,對室內的PM2.5濃度及甲醛濃度進行檢測,并將檢測到的數據通過藍牙模塊發送給手機APP端實時監控,主要對系統的功能、軟件部分、硬件設計都做了詳細的介紹,論文的具體章節安排如下所示:第一章是緒論,主要對空氣質量監測系統的研究背景、研究意義、論文的研究內容和章節如何安排做闡述,為其余章節做鋪墊。第二章是系統的方案設計,主要對空氣質量監測系統的硬件結構組成做了詳細的說明,并繪制系統結構圖,通過對元器件特性、性價比、功能等各方面條件的可對比,選擇出最佳元器件方案。第三章為系統的電路設計,主要對空氣質量監測系統的各電路做詳細的介紹,每個電路如何連接做了詳細的說明。第四章為系統的軟件設計,主要對系統的主程序如何設計、各模塊子程序如何設計做了簡要介紹,并根據主程序的流程繪制出主程序流程圖,各模塊的工作流程繪制出子程序流程圖。第五章為系統的測試,在完成系統的硬件設計及軟件設計后,可對實物的功能進行測試并將實物的演示步驟拍照記錄,系統調試成功。第六章為總結,主要對系統完成了哪些功能進行總結并對存在的問題、不足及可擴展的功能進行展望。
第二章系統方案設計在本章中將對系統功能進行分析,并根據系統功能對系統的總體框圖進行設計,再對完成系統功能所需的元器件型號進行選擇。2.1系統功能需求室內環境的質量對于人體的身心健康有著直接的影響,在不外出的情況下,室內的光照、溫度都對舒適性有著較大的影響,因此,對于室內環境的實時檢測可以給人們提供很大的參考。根據目前人們對于室內環境監測系統的需求,本設計預計實現以下功能:室內環境質量監測儀采用單片機和Java開發的APP作為的核心控制部,其主要實現功能如下:1、PM2.5檢測功能:采用pm2.5檢測模塊實時采集室內的pm2.5濃度;2、甲醛檢測功能:采用甲醛傳感器實時檢測室內的甲醛濃度;3、與手機APP連接功能:通過無線傳輸模塊將系統與手機APP相連接,檢測到的PM2.5濃度與甲醛濃度可通過手機APP顯示出來;4、報警功能:通過按鍵可設置甲醛濃度及PM2.5濃度的上限,在任一項數據過高時,蜂鳴器會發出聲光報警,手機APP也會提示濃度過高;5、電子鐘功能:通過DS1302時鐘芯片對時間進行存儲,顯示屏會顯示當前的時間,時間可以通過按鍵校正。2.2系統總體框圖設計根據以上功能需求分析,系統需要實現PM2.5檢測功能、甲醛檢測功能、與手機APP的連接功能、報警功能及電子鐘功能。本系統為室內環境質量監測儀,系統由電源模塊、主控制器模塊、PM2.5檢測模塊、甲醛檢測模塊、按鍵模塊、AD檢測模塊、DS1302時鐘模塊組成。系統總體框圖設計如圖2-1所示。
電源模塊電源模塊PM2.5傳感器主控制器PM2.5傳感器主控制器顯示模塊顯示模塊甲醛傳感器AD轉換模塊甲醛傳感器AD轉換模塊通信模塊手機APP通信模塊手機APPDS1302DS1302報警模塊報警模塊圖2-1系統整體框圖設計2.3主要器件選擇與論證根據以上對室內環境質量監測儀的功能要求概述及系統總體框圖的設計,需要對系統所需核心器件進行選擇,下面將對主控器、PM2.5檢測模塊、AD轉換模塊、甲醛檢測模塊、顯示模塊及通信模塊選擇出兩種方案進行對比,從傳感器模塊的參數、性能、價格等各方面實行方案對比,選擇出最佳型號器件。2.3.1主控芯片的選擇與論證方案一:FPGA的開發與傳統的單片機、PC機相比較有著很多的不同。對于FPGA的開發,主要以運算的方式為主,采用硬件來實現對語言的描述。相對于個各結構的單片機、PC機,在開發必須從頂層設計、軟硬件的調試、邏輯實現等多方面著手,開發入門非常困難[6]。方案二:單片機是一種常見的主控制芯片,與其它芯片相比,單片機的體積小、功耗低、使用更為方便、控制力強,這些優點促使單片機成為儀器、儀表、現代通信設備等多方面的主控芯片,運用非常廣泛。單片機可以方便的與計算機實現數據的互相通信,且單片機編程較為簡單,支持C語言、匯編等多種語言,入門簡單,且具有超高性價比[7]。通過對比,單片機入門容易,編程簡單,FPGA開發極為復雜,不容易開發,因此通過對比選擇單片機作為系統的主控芯片。2.3.2主控制器的選擇與論證方案一:STM32F103C8T6單片機屬于ARM內核版本的單片機,有32位的閃存,運行及工作的速度都很快,接口較為簡單,具有實時性、高性能、功耗低、所需電壓低的優點,單片機具有很強的集成性,開發更為簡單,STM32F103C8T6單片機采用是內核為ARMCORTEX-M,外設也屬于一流水平,功耗和集成度方面也有著不俗的一面,但是開發難度較大,不適用于單片機初學者使用[8]。方案二:STC89C52RC單片機是STC公司在近些年來退出的一款CMOS8的單片機,具有低功耗、高性能的熱點。雖然單片機內部所使用的內核依然是51系列單片機經典的內核MCS-51,但是在傳統的51單片機上有所改善,CPU有為8位,開發容易,可以為嵌入式應用系統提供有效靈活的開發方案。結論:通過以上的對比,雖然STM32F103C8T6單片機的性能更為強大,外設一流,但單片機的開發難度較大,而STC89C52單片機不但在性價比上高于STM32單片機,且編程簡單,容易開發,因此選擇STC89C52單片機。2.3.3PM2.5檢測模塊的選擇與論證方案一:MQ2煙霧傳感器可以靈敏的檢測到可燃氣體,且反應較快,在使用中的穩定性極強,且連線簡單,無論是軟件控制還是硬件控制都很方便。另外,MQ2傳感器也可以檢測液化氣體、天然氣等,即使是多種氣體混合在一起,MQ2也可以輕而易舉的排除掉其它氣體,檢測出混合氣體中的可燃氣體。方案二:夏普GP2Y1010AU0F傳感器采用光學檢測的方式可以靈敏的檢測出空氣內的粉塵、PM2.5等有害氣體,空氣中的粉塵類的有害顆粒會反射出光,傳感器恰好利用了這一反射原理,準確的檢測出空氣中的粉塵,即使是非常微小的煙草、煙霧的顆粒也能被檢測到,非常適用于空氣凈化[9]。結論:MQ2傳感器在檢測煙霧及可燃氣體方面更為靈敏,但是無法檢測出PM2.5濃度,夏普GP2Y1010AU0F傳感器可準確的檢測出空氣中的PM2.5濃度,因此選擇方案二中的GP2Y1010AU0F傳感器。2.3.4通信模塊的選擇與論證方案一:ESP8266WIFI模塊,是常見的一種無線模塊之一,具有體積小、價格低廉、檢測距離遠等優點,僅僅指甲蓋大小的傳感器可鑲嵌于各種產品中,內部含有LWIP協議實現WIFI搜索連接,兼容P模式、STA模式與AP+STQ這3種無線模式,AT指令方便實時發送與接收,方便用戶使用開發,但是只有在有網絡熱點的情況下才能使用,如果沒有網絡則不能啟動模塊與系統之間的無線連接。方案二:藍牙模塊HC-05的協議為標準的V2.0協議,不同的波特率可以匹配不同的設備,用戶可根據相對應的波特率進行選擇,藍牙的連接狀態通過觀察即可得出,未連接狀態下模塊的指示燈是快閃的狀態,在連接設備的狀態下指示燈會有節奏的慢閃,藍牙連接后可進入AT指令。藍牙技術目前使用已經非常廣泛,大部分手機、電腦等設備均可與藍牙相連接[10]。結論:通過綜合的比較,ESP8266WIFI模塊與藍牙模塊HC-05均可實現無線傳輸,WIFI模塊在有網絡熱點的情況下才可以使用,HC-05僅可用于具有藍牙裝置的設備,可實現點對點通信,適用于與手機APP通信,因此選用方案二中的藍牙模塊。2.3.5顯示模塊的選擇與論證方案一:ZLG7290數碼管內部含有顯示RAM,可以自動實現動態顯示,將所需要顯示的內容在數碼管上實時顯示。ZLG7290數碼管與單片機通過內部的I2C串行接口相連接,無論是8位數碼管還是64位獨立的LED燈均可驅動。采用數碼管作為顯示器件的設備在數字上更為直觀,如果需要顯示數字,可選擇該顯示模塊[11]。方案二:LCD1602液晶顯示模塊與單片機相連接所采用的是標準的16引腳接口,在硬件電路的設計與焊接中較為方便。可用于顯示字符、字母及數字等多種顯示模式。內部顯示是由幾個5*7或5*11的點陣字符構成的,無論是每位字符還是每行之間都有字符間隔與行間隔。體積小、超薄輕巧,且可以顯示豐富的內容。結論:ZLG7290數碼管更適用于顯示數字,如果在本設計的現實中只顯示數字,用戶無法判斷是哪種氣體濃度。而LCD1602可顯示字符、數字,顯示內容更為豐富,在使用過程中更為方便,因此選擇方案二中的LCD1602液晶顯示屏。2.3.6甲醛檢測模塊的選擇與論證方案一:CJMCU-100甲醛傳感器主要用于對甲苯、苯、甲醛等揮發性有機化合物,傳感器屬于半導體類型,靈敏度極高穩定性好,精度在0.1ppm,可以輕松偵測0.1ppm以上的氣體,如果在空氣檢測中需要檢測甲醛等有機揮發氣體,小巧的體積可廣泛用于各設備上容易鑲嵌,價格便宜,是一款高靈敏、高性價比的甲醛檢測模塊[12]。方案二:KB03型空氣質量檢測模塊是一種半導體氣敏元件,可用于檢測一氧化碳、酒精、氨氣、煙霧等揮發氣體,在檢測的過程中具有很高的靈敏度,長期穩定性優異,在出場時就已經標定校準,使用中無需再校準。傳感器壽命長、使用功耗較低。但是在甲醛檢測方面較弱,靈敏度不高。結論:通過兩種傳感器的對比,CJMCU-100甲醛傳感器可專門用于檢測空氣中的甲醛濃度,KB03型空氣質量檢測模塊檢測甲醛方面較弱,本系統中需要檢測甲醛,因此通過對比選擇CJMCU-100甲醛傳感器。2.3.7AD轉換模塊的選型方案一:ADC0832轉換芯片是一款具有8位分辨率的A/D轉換芯片,256級的最高分辨率可以滿足大部分的模擬換轉換需求。模塊的模擬輸出電壓在0-5V之間,通過僅32μS就可以實現轉換,內部的雙數據輸出可減少模擬轉換的誤差,轉換速度快并具有很強的穩定性[13]。方案二:PCF8591是一款單獨供電的低功耗A/D轉換芯片,模塊具有4個模擬輸入接口、1個模擬輸出接口和1個I2C總線的接口。PCF8591內部引腳可用于實現硬件地址的編程,并可以在無需額外硬件的情況下允許同一個I2C總線接入器件,但是電路較為復雜,穩定性不強。結論:通過對兩款模塊的比較,ADC0832轉換模塊具有很強的穩定性,并能滿足本系統中對于模擬轉換的要求,PCF8591需要單獨供電且電路復雜,因此選擇方案一中的ADC0832轉換模塊。
第三章系統硬件電路的設計通過元器件的選型,根據各型號器件的引腳功能對系統的硬件電路進行設計,系統硬件電路主要包括STC89C52單片機的最小系統電路設計、LCD1602液晶顯示屏顯示電路設計、藍牙模塊的電路設計、PM2.5傳感器的電路設計、甲醛傳感器的電路設計及步進電機的電路設計。下面將對各器件及傳感器電路如何連接做詳細的介紹。3.1單片機最小系統電路設計系統所采用的核心控制單片機型號為STC89C52,STC89C52單片機的特點如下,FLASH有8K,內部RAM為512字節,I/O口線為32位,單片機的外部中斷有4個,內部存儲有4KB,可進行全雙工工作。另外單片機也具有掉電保存、節點等功能。CPU在空閑的模式下停止工作,但CPU內部的定時器、中斷、串口等可繼續保持工作狀態,而在掉電保護的模式下,單片機停止工作,振蕩器將不再發生作用,直到單片機接收到下一個中斷指令或者硬件被復位。單片機的最高運作頻率可達到35MHZ,另外單片機程序可直接使用串口下載。3.1.1晶振電路設計在本系統中,STC89C52單片機所連接的晶振電路的作用的非常大的,主要作用為連接單片機內部的電路產生時鐘的頻率,從而提高單片機的運行速度,晶振為單片機提供的時鐘的頻率直接影響到單片機的處理和運行速度,因此,晶振電路所提供的時鐘頻率也是單片機執行指令的基礎[14]。在晶振電路的設計中,單片機的XTAL2引腳與XTAL1引腳分別連接11.0592晶振引腳的兩端,連接30PF的電容濾波,再連接系統電路的GND端,共同組成晶振電路。晶振電路設計如圖3.1所示。圖3-1晶振電路設計3.1.2復位電路設計在本系統中添加了一個復位電路,單片機的復位電路簡而言之就是將單片機的電路進行初始化,在單片機的內部對單片機復位后就會把一些寄存器和存儲設備恢復到廠商的預設值。如果單片機的程序有120行,在程序運行到60行時程序突然卡死或者系統出現停電問題,這時候單片機內部的數據就有丟失的可能,有些數據可以不回丟失,如果想要下次再上電時系統正常運行,因此在上電后單片機內部就會重新初始化,這個過程就可以理解成為復位的過程,上電復位可以保證單片機每次開始后可以從固定的相同狀態開始工作,與電腦、手機重啟的過程是一樣的。在程序運行時,如果遇到意外的干擾出現死機的現象,或者程序啟動后出現亂碼的現象,那么就可以通過按鍵進行復位,按下復位按鍵后事程序重新啟動,這種就是手動復位。STC89C52單片機復位電路的原理為在單片機的復位引腳RST外部連接電阻和電容及按鍵,實現上電后通過按鍵復位。在本系統中,采用了按鍵復位的方式對系統程序進行復位,在單片機的RST引腳連接了10UF的電容與10K的電阻,按下按鍵后系統程序就會實現重啟。圖3-2為系統復位電路設計。圖3-2系統復位電路設計3.1.3電源電路設計電源電路在單片機的系統中的作用是至關重要的,為保證電子設計的完整性,需要以安全、可靠、穩定的電源為基礎。為克服單片機在運行過程中系統受到干擾后的出現亂碼或死機現象,配置一個可靠穩定的電源模塊是重要的手段之一。電源電路是電子設備中不可缺少的供電電路,本系統中所采用的ST89C52單片機采用5V電源為系統供電[15]。圖3-3為系統電源電路設計。圖3-3電源電路設計3.2顯示電路設計空氣質量檢測器采用LCD1602液晶顯示屏作為顯示器件,用于顯示PM2.5傳感器所檢測到的PM2.5濃度及甲醛傳感器檢測到的甲醛濃度及系統的工作狀態等信息內容。用戶通過該器件可了解到室內空氣質量中PM2.5及甲醛的數值,如果濃度過高及時作出相應應對措施,保障身體健康。LCD1602液晶顯示屏所連接的I/O口為單片機的P0口,由于P0口的驅動能力較弱,因此連接了1K的排阻,也就是上拉電阻。字符的顯示,采用LCD1602液晶顯示字符的過程較為復雜,每個字符都是有6*8或者8*8的點陣組成,因此既要找到顯示位置所對應的顯示RAM,又要使每個字節的不同位為“1”,對應的RAM區為8字節,當判斷到這8個字節的不同位為“1”,其它的字節不同位為“0”,不同位為“1”的字節點亮,為“0”的不亮,這樣就是可以組成需要顯示的某個字符。LCD1602液晶顯示IP內帶字符發生器控制,顯示字符就比較簡單,直接在LCD上找到需要顯示的行列的對應地址,將字符對應的代碼送到設立的光標即可實現顯示[16]。圖3-4LCD1602顯示電路設計LCD1602顯示電路設計如圖3.4所示。LCD1602液晶顯示屏與STC89C52單片機的電路中采用16個引腳分別與單片機相連接,每個引腳對應的功能不一致,與單片機的引腳電路連接設計也不同。STC89C52單片機的P0口驅動能力不強,在運行中的電流較弱會影響到模塊顯示的清晰度,因此連接了1K的排阻,增強了I/O口的驅動能力。LCD1602的D0引腳-D7引腳屬于控制引腳,分別連接單片機的P0.0口-P0.7口,實現單片機對LCD1602的控制。RS、RW與E這3個引腳分別為讀、寫和使能端,分別連接單片機的P2.5口-P2.7口。VL連接滑動變阻器用于調節LCD1602液晶顯示屏的亮度,VSS與VDD分別連接系統電路的電端與地端。3.3按鍵電路設計室內環境質量監測儀采用獨立按鍵來設置系統的時間,及甲醛濃度、PM2.5濃度的上限,在單片機系統的制作及智能設備的設計中,獨立式鍵盤的應用是非常多的。這種獨立式的鍵盤所采用的軟件驅動非常簡單,具有硬件焊接與軟件編程簡單的特點,但是在所采用的按鍵較多時,連線就會變得復雜,且需要占用大量的單片機I/O口。當按鍵按下后,會拉低對應I/O的電壓與GND導通,單片機通過按鍵掃描程序就會讀到對應的I/O為低電平,反之為高。所以,通過判斷單片機I/O口的高低電平就可以很直觀的知道按鍵的打開和關閉。系統共有4個按鍵,分別連接單片機的P1.0口、P1.1口、P1.2口和P1.3口。通過按鍵可設置溫度的最高值,當超過所設定的最高溫度時,蜂鳴器開始報警。按下K1可進入時間設置,按下K2可設置定時間,按下K3可設置溫度的上限,通過按鍵4可選擇系統模式。圖3-5為按鍵電路設計。圖3-5按鍵電路圖3.4PM2.5傳感器電路設計夏普GP2Y1010AU0F傳感器的檢測原理為傳感器的中心有一個小洞,在空氣自由流過時會定向的發射LED光,如果經過小洞的空氣中含有PM2.5,就會折射過來的光線,通過空氣中的粉塵類的有害顆粒會反射出光,傳感器恰好里用了這一反射原理。夏普GP2Y1010AU0F傳感器實物圖如圖3.6所示。圖3.6夏普GP2Y1010AU0F傳感器實物圖如圖3.6所示,1藍色線為LED燈的正極,2綠色線為LED燈的GND,3白色線為LED燈,4黃色線S-GND,5黑色線VO,6紅色線為VCC。在與單片機相連接的電路中,V-LED、LED-GND與S-GND引腳連接220UF的電容及150歐姆的電阻再連接系統的VCC電源端,LED引腳連接單片機的P1.6口,VCC連接整個電路的正極,VO引腳連接單片機的P1.7引腳。在LED燈點亮的瞬間,檢測到空氣中的PM2.5濃度。圖3-7為夏普GP2Y1010AU0F傳感器電路設計。圖3-7夏普GP2Y1010AU0F傳感器電路設計3.5甲醛檢測電路設計系統中所采用的CJMCU-100甲醛傳感器是一種半導體傳感器,所采用的材料屬于表面離子式的氣敏材料。當與空氣中的甲醛等有害氣體相接觸時,半導體中的電阻受到甲醛的影響而發生變化,從而引起傳感器表面導電率的變化,利用這一點變化就可以獲得甲醛存在的信息。檢測到的甲醛濃度越高,傳感器的導電率就會隨之變得更大,而輸出的電阻就越低,此時輸出的模擬信號(甲醛濃度)就越大[17]。CJMCU-100甲醛傳感器的GND引腳連接系統電路的地端,VCC引腳連接系統電路的電端,AOUT引腳連接ADC0832的IN1引腳,實現ADC0832對甲醛濃度的采集與數字轉換。甲醛檢測電路設計如圖3-8所示。圖3-8甲醛檢測電路設計3.6藍牙通信模塊電路設計藍牙通信模塊可以很方便的與單片機相連接,實際接線只用到4根線即可實現連接。通電后,在尚未實現藍牙連接之前,模塊上的LED燈會不停閃爍,一旦成功的與手機或者計算機等藍牙裝置,LED燈將會進入長亮的狀態。藍牙無線通信模塊有兩種工作方式,一個是命令響應工作模式,另一個是自動連接工作模式。在命令響應工作模式下,使用者通過向模塊發送AT工作指令來對模塊的控制參數進行設定和下達控制指令。藍牙模塊的4個引腳分別為電源、地、傳送和接收,在與藍牙裝置的通訊中接收(RXD)所傳入的數據轉化成無線信號實現信號的發送,或者是將傳送(TXD)所接收到的無線數據傳送給單片機,而藍牙模塊本身是不解讀數據的。控制藍牙模塊的指令為AT指令,AT指令不是通過藍牙實現實現無線傳輸,而是通過模塊的接收引腳和發送引腳實現數據的傳輸。藍牙模塊只有在AT的模式下,才能實現AT指令的接收。HC-05模塊在與手機APP相連接之前,處于AT模式狀態,上電后即可進入AT模式。藍牙模塊采用9600bps的波特率對數據進行傳輸[12]。在本系統電路的設計中,藍牙模塊的VCC連接整個電路的VCC端(電端),GND(地端)連接整個電路的地端,接收(RXD)連接單片機的P3.0口,傳送(TXD)連接單片機的P3.1口,實現與單片機之間數據的相互通信。HC-05藍牙模塊電路設計如圖3-9所示。圖3-9HC-05藍牙模塊電路設計?3.7ADC0832電路設計ADC0832與單片機的連接下,需要4個引腳,分別是CS引腳(使能端)、SCLK引腳(時鐘引腳)、DI引腳(信號輸入)與DO(信號輸出)引腳,由于DO引腳與DI引腳與單片機通信是雙向的,但是通信時不能同時有效,因此在電路的設計中將D0引腳與DI引腳相連接同時連接單片機的引腳。ADC0832芯片在未工作的情況下,CS輸入引腳的電平為高電平,芯片處于禁用的狀態,其它三個引腳的電平無限制[14]。在進行AD轉換時,CLK會提供給芯片時序,芯片開始工作,DI與DO引腳會通過DI引腳對數據信號選擇。在本電路中,ADC0832用于采集夏普GP2Y1010AU0F傳感器和甲醛傳感器所采集到的PM2.5濃度和甲醛濃度,然后將數據通過藍牙HC-05傳送到手機APP。其中模塊的CS使能端連接單片機的P3.6口,SCLK時鐘引腳連接單片機的P3.4口,DI引腳與DO引腳并聯到P3.5口,GND連接整個電路的地端,VCC引腳連接整個電路的電端。圖3-10為ADC0832采集芯片電路設計。圖3-10ADC0832芯片電路設計3.8蜂鳴器報警電路設計在檢測到當前的PM2.5濃度或者甲醛濃度過高時,系統會驅動蜂鳴器發出聲光報警。蜂鳴器報警電路的原理為電路是由NPN三極管、蜂鳴器及LED燈構成的,其中三級管的基極(中間引腳)是由單片機的I/O進行控制的,在單片機I/O口出現高電平是三極管被導通,從而使整個電路接通,蜂鳴器實現發聲,當單片機的I/O口處于低電平的狀態下,蜂鳴器電路斷開,報警結束[15]。在本設計中的蜂鳴器報警電路,三極管的基級與單片機的P2.0口相連接,由單片機控制,正極連接蜂鳴器的負極再連接整個電路的VCC(電端),負極連接LED燈的正極再連接整個電路的GND端,在P2.0口處于高電平時,控制三極管打開,蜂鳴器報警電路實現報警。蜂鳴器報警電路如圖3-11所示。圖3-11蜂鳴器報警電路設計3.9DS1302時鐘芯片電路設計系統采用DS1302時鐘芯片來實現時間存儲,即使在系統電源關閉又重啟的情況下,也可以保證時間的準確性。DS1302時鐘芯片有兩個電源引腳,分別為VCC1和VCC2,一個是主電源,一個是后備電源,也就是在主電源關閉的情況下,后備電源供電,保證時鐘的持續運行。而X1和X2引腳是晶振的引腳,與單片機晶振電路一樣,可以連接外部晶振,為模塊提供時序,DS1302時鐘芯片所連接的是32.768MHZ的晶振。模塊的RST為片選引腳,通過該引腳可實現數據的傳送,CE、I/O及SCLK分別為數據的輸出、與單片機通信及輸入端,3個引腳分別需要連接單片機的I/O口,實現與單片機的通信,在本電路中CE、I/O與SLK引腳分別連接的是單片機的P2.3口、P2.2口和P2.1口。DS1302時鐘芯片電路設計如圖3-12所示。圖3-12DS1302時鐘芯片電路設計
第四章軟件設計4.1開發環境及工具介紹在室內環境質量監測儀的軟件代碼的編程與設計中,包括單片機程序設計和手機APP的程序設計,其中單片機程序是由KEIL軟件來編程,C語言編寫代碼,手機APP程序是由MyEclipse軟件編程,JAVA語言編寫。Java開發語言:java編程語言是SUN公司上世紀九十年代的產物,到現在依然在廣泛使用,它吸取了C++強大功能的同時去掉了一些它們的復雜特性,不如指針之類的,并增加了強大的web編程支持,才使得我們今天可以用java開發本系統。MyEclipse:MyEclipse是基于eclipse而來,是應用廣泛的企業級開發環境,可應用于javaEE、javaweb等開發。是目前很流行的跨平臺的集成開發環境,同時可編寫、編譯、運行、調試代碼一站式全部完成。KEIL軟件:KEIL軟件是一種可以兼容單片機C語言開發的程序開發的軟件系統。KEIL可以為各類語言、鏈接器和庫管理提供完整的開發方案,在集成的開發環境中將這些部分組成在一起,實現軟件編程。C語言:本系統中所采用的編程語言為C語言,結構上、功能上與可讀性等方面都有較強的優勢,更容易使用。代碼質量與匯編語言相比生成效率更高,代碼編寫更簡潔,描述迅速,可讀性好,因此使用較廣。4.2單片機部分主程序設計單片機部分的主程序也稱為main函數,是程序編寫時的框架。單片機軟件部分主要實現傳感器對霧霾及甲醛的檢測以及對手機app數據的接收,判斷接收到數據是否在手機APP所設置閾值內,若接收數據異常驅動蜂鳴器報警。主程序首先經過初始化串口及定時器,讀取PM2.5濃度、甲醛后連接WIFI成功后,發送數據后接收數據,判斷檢測到的PM2.5濃度是否超過手機APP所設置的上限,超過上限蜂鳴器報警。系統主程序設計如圖4-1所示。
開始開始初始化顯示屏初始化顯示屏初始化串口初始化串口讀取PM2.5讀取PM2.5讀取甲醛讀取甲醛接收數據接收數據顯示顯示YY設置閾值讀取按鍵設置閾值讀取按鍵NNY溫度過高Y溫度過高蜂鳴器報警蜂鳴器報警NNY甲醛過高Y甲醛過高蜂鳴器報警蜂鳴器報警NN發送數據發送數據圖4-1系統主程序設計
4.3手機APP端程序設計及APP開發4.3.1手機端程序設計手機APP界面通過JAVA語言開發的,通過藍牙模塊接收單片機系統的PM2.5傳感器所測得的PM2.5濃度及甲醛濃度實時顯示,并在PM2.5與甲醛濃度過高時出現文字提醒。程序在開始后首先需要初始化串口,連接藍牙連接成功后實現手機界面的顯示,接收下位機發送的數據并顯示,PM2.5與甲醛濃度過高時出現提示。手機APP端程序設計如圖4-2所示。開始開始初始化串口初始化串口連接藍牙連接藍牙N接收數據N接收數據YY手機界面顯示手機界面顯示N接收數據N接收數據濃度過高YY顯示提示顯示提示結束結束圖4-2手機APP端流程設計4.3.2手機APP的開發室內環境質量監測儀手機APP端主要起到控制及顯示的作用,開發環境為Eclipse,編寫語言為JAVA語音。與單片機系統中開發的KEIL軟件環境編程,C語言來編寫程序是一樣的。編譯手機APP軟件的過程如下:(1)首先創建工程文件,需要雙擊打開eclipse.exe的工程文件,這時會出現eclipse的界面,直接創建一個工程文件即可。如圖4-3所示。圖4-3創建工程文件(2)可在軟件中查找工程目錄,在工程目錄下的菜單找到Res目錄,在Res目錄的菜單下對Layout文件進行查找,找到Layout文件后打開main.xml文件。在main.xml文件的目錄下就可以對手機APP軟件進行程序的編寫了。編譯界面如圖4-4所示。圖4-4手機編譯界面手機APP的編程語言為JAVA,因此需要在“BTClient.java”這個目錄下對源代碼進行編寫,完成手機APP代碼的編寫。如圖4-5所示。圖4-5源代碼編程在完成手機APP源代碼的編寫以及APP界面的繪制后,就可以對編寫好的源代碼進行編譯了,編譯通過后會直接生成一個APK文件,在bin的目錄下可找到生成好的APK文件。APK文件生成如圖4-6所示。圖4-6生成APK文件將生成好的APK文件下載到安卓系統的手機,在手機上安裝,然后打開APK軟件即可實現運行,即可對手機APP的功能進行測試。
第五章系統調試通過硬件電路設計及程序的編寫與設計后,就可以對硬件電路的連接和程序編寫進行調試。軟件與硬件的調試及軟硬件的綜合調試都是實物制作過程中非常重要的環境。任何實物的硬件在焊接好之后都需要對各模塊及各電路進行測試,確保沒有問題后再進行軟件編寫,因此硬件環境的測試也可以說是軟件編寫的良好基礎。以正確的方式對軟件及硬件進行調試,可避免很多不必要的錯誤,提高實物運行的成功率,確保完成所有功能。在完成系統的電路設計和程序設計后,即可對電路及程序進行調試,這是實物制作中非常重要的一個環節。5.1單片機軟件調試系統程序開發環境為KEIL4軟件,程序編寫完成后可進入軟件自帶的編譯器中查找代碼編寫是否有錯誤,如果檢查出錯誤可進行更改然后編譯程序。如果程序編譯失敗,可進入斷點調試,在斷點調試的工具欄中逐句對程序進行調試。在斷點調試完成后,點擊編譯按鈕對程序進行編譯。程序編譯如圖5-1所示。圖5-1程序編譯在編程中錯誤檢查是必不可少的一項,有事因為疏忽就會出現語法錯誤,在變異后編譯器就會提示相關的錯誤信息。例如,即使少寫一個‘:’,都會導致程序編譯失敗。由于第一次編寫程序,出現的錯誤較多。程序編譯錯誤如圖5-2所示。圖5-2錯誤檢查經過反復查找錯誤與修改,終于完成了程序的編寫,就可以對程序進行編譯了,編譯成功后會提示“0error”(即無錯誤),那么就可以生成后綴為.hex鏡像文件。如圖5-3所示。圖5-3程序編譯通過然后通過燒寫軟件將編譯好的鏡像文件下載到單片機中運行即可,由此程序的軟件部分調試完成。在軟件調試戲中遇到了一下問題:1、編譯不通過問題:在編寫好代碼后,屢次出現編譯不通過的現象,經過仔細的檢查,發現是在編譯過程中未選擇createhexfile,因此就未鏡像文件就不能生成,所以編譯程序的過程中,這些都是要重點留意的。2、變量未定義產生的錯誤:在對程序進行編寫的過程中,我們要自主對一些變量進行定義,假如沒有對其進行設置,后續將產生錯誤的情況。3、最后的檢查:燒錄完成,再次核對實物的功能是否滿足要求,在對設計的程序進行給電,觀察是否達到預期功能,如果未達標準,在分程序檢測,發現問題并予以修正,直到保障程序完全無誤。
5.2JAVA開發手機APP調試在使用eclipse.exe開發手機APP時,可能會遇到一些開發方面的問題,同時采用JAVA語言開發時也會出現一些編程或者編譯方面的錯誤。首先需要雙擊eclipse.exe打開軟件,進行編程。軟件運行如圖5-4所示。圖5-4軟件運行圖標在使用JAVA的編程中,需要定義privateTextViewdis_6,在定義時即使少寫一個‘;’,軟件也會將錯誤的位置進行自動提示。如圖5-5所示。圖5-5錯誤示意圖手機APP與單片機系統通信時,可以按照需要在APP程序中定義通信數據的指令,對于每條發送的指令進行監聽,當v.getId()監聽到觸發信號的指令時,會將對應的信號指令傳送給單片機。發送指令示意圖,如圖5-6所示。圖5-6數據發送手機APP通過編寫好的按鍵指令發送指令信息到單片機系統,單片機系統接收到指令信息后解析數據,發送到手機APP進行代碼解析,顯示相應的內容,在每次接收到數據指令時,手機APP都需要對數據進行解析。接收數據處理函數,如圖5-7所示。圖5-7接收數據執行函數在完成手機APP代碼編寫后,即可在工具欄點擊運行來運行手機APP,點擊編譯后運行,實現代碼的編譯。如圖5-8所示。圖5-8編譯示意圖在代碼編譯成功后,即可彈出模擬器的界面,點擊bin目錄,在目錄下即可生成手機APK的文件,再倒入安卓手機中安裝。手機APP代碼軟件部分調試完畢。如圖5-9所示。圖5-9編譯調試完成5.3硬件調試硬件調試主要是指對系統硬件電路的焊接與調試,根據單片機引腳、元器件個引腳性能等方面進行研究后,采用Altiumdesigner繪制完成電路圖,再根據電路圖焊接實物的電路。在焊接過程中也需要注意元器件的正負極及電路的導通情況,萬用表是必不可少的電路檢查工具。通過萬用表可檢查電路是否確實導通,如果電路未導通就需要對電路再逐一檢查,如果有虛焊現象就需要再確認是哪個電路或者元器件的引腳出現了虛焊現象,對虛焊部分進行補錫操作。然后再檢查元器件的正負極是否有接反的現象,如果有接反現象所導致的結果是較為嚴重的,可能會導致傳感器無法正常工作,嚴重時會直接燒毀元器件。在確認電路無任何問題后,才能將軟件代碼燒寫進單片機,接通電源,查看實物功能。
5.4實物功能展示5.4.1實物成品展示室內環境質量監測儀系統采用洞洞板制作,以LCD1602液晶顯示屏作為顯示模塊,STC89C52單片機作為主控器,PM2.5傳感器實時檢測PM2.5濃度,甲醛傳感器檢測甲醛濃度,通過藍牙模塊將檢測到的數據發送到手機APP,并實現手機APP對PM2.5濃度及甲醛濃度的顯示。系統實物成品展示如圖5-10所示。圖5-10實物成品展示5.4.2顯示功能展示系統所采用的供電電源為5V,系統上電后,藍牙模塊顯示屏會亮起,LCD1602液晶顯示屏會顯示當前檢測到的PM2.5濃度及甲醛濃度,當前的時間等信息。系統顯示功能展示如圖5-11所示。圖5-11顯示功能展示5.4.3按鍵設置上限通過按鍵可以設置PM2.5濃度及甲醛濃度的上限,如果檢測到的PM2.5的濃度或者甲醛濃度超過了用戶所設置的上限值時,會自動報警。按鍵設置上限功能展示如圖5-12所示。圖5-12按鍵設置上限5.4.4手機APP功能展示手機APP端與單片機部分采用藍牙模塊進行連接,實現手機端與系統的通信。連接成功后,APP界面會顯示當前的PM2.5濃度、甲醛濃度的開關等信息。圖5-12手機界面顯示5.4.5報警功能展示在設置完畢PM2.5濃度及甲醛濃度上限后,如果檢測到的PM2.5濃度或者甲醛超過設置的上限時,蜂鳴器會發出聲光報警,同時手機APP端所顯示的也會出現濃度過高的提示,提醒用戶注意防范。有害氣體濃度過高報警如圖5-13所示。圖5-13報警功能展示
結論通過對系統軟件的調試、手機APP調試及實物功能的測試,實現了基于Java的室內空氣質量檢測器的所有功能。具體總結如下:(1)系統實現了對霧霾中PM2.5濃度、甲醛濃度的實時檢測,完成了手機APP的開發并可以通過藍牙與系統相連接實現與手機之間數據的傳輸,電路簡單,實用性強,更為智能化。(2)系統硬件組成有藍牙模塊、STC89C52單片機、夏普GP2Y1010AUOFPM2.5傳感器、甲醛傳感器、DS1302時鐘芯片電路、蜂鳴器、LED燈等元器件,采用AD軟件對系統的電路進行繪制。(3)系統軟件部分包括主程序設計、手機APP端的程序設計及手機APP的開發部分,單片機程序部分采用KEIL軟件,C語言編程,手機APP部分采用JAVA語言編寫。另外系統功能還有一些可以改善的地方,例如可在單片機部分增加空氣凈化器,如果PM2.5濃度或者甲醛濃度過高,自動啟動空氣凈化器對空氣進行凈化。通過這次的畢業設計,也發現了自身的不足,應提高自己的實踐能力,不能紙上談兵。
參考文獻[1]王明霞,楊秀菊,羅劉敏.基于單片機的無線室內環境檢測儀設計[J].電腦知識與技術,2018,14(11):269-270.[2]陳達.基于單片機的室內環境監測設計[J].電子測試,2018(Z1):25-26.[3]邢凱.基于單片機的室內無線環境監測系統設計與應用[D].廣西民族大學,2014.[4]劉繽璐,王永順,閆麗紅.基于nRF905的無線環境監測系統設計與實現[J].工業和信息化教育,2017(08):89-94.[5]甄智,陸中宏.基于STC89C52單片機的室內環境監測預警系統設計[J].工業技術與職業教育,2017,15(03):16-18.[6]陳東杰,許中石.單片機的室內環境監測系統設計探討[J].信息技術與信息化,2017(05):131-133.[7]晁松杰.基于STC89C52單片機室內監控系統設計[J].信息記錄材料,2017,18(03):5-6.[8]李智巖,劉玥,柳娟,唐瑩瑋,呂佳蓉,吳寶春.基于單片機的室內環境監測系統設計[J].信息技術與信息化,2016(12):60-62.[9]黃磊.基于單片機的室內環境監測系統的研究與應用[J].電子世界,2016(08):74.[10]劉璋.STM32單片機在室內環境監測系統中的運用研究[J].數字技術與應用,2016(02):20.[11]胡曉芳.基于AVR單片機的室內環境檢測系統[J].自動化技術與應用,2014,33(07):117-119+123.[12]黎冠,馬婕,卜祥麗.STM32單片機在室內環境監測系統中的應用[J].自動化儀表,2014,35(07):29-31.[13]許海峰,王馳駿,王德育,丁輝,張明玉.基于AVR單片機的室內環境監測系統的設計與測試[J].赤峰學院學報(自然科學版),2011,27(12):48-50.[14]于波.基于單片機的室內環境監測系統設計[D].中國海洋大學,2011.[15]KyleA.O'Connell,UtpalSmart,IrvanSidik,AwalRiyanto,NiaKurniawan,EricN.Smith.Diversificationofbent-toedgeckos(Cyrtodactylus)onSumatraandwestJava[J].MolecularPhylogeneticsandEvolution,2019,134.[16]KonstantinsGusarovs.AnAnalysisonJavaProgrammingLanguageDecompilerCapabilities[J].AppliedComputerSystems,2018,23(2).[17]GirishMaskeriRama,RaghavanKomondoor,HimanshuSharma.Refinementinobject-sensitivitypoints-toanalysisviaslicing[J].ProceedingsoftheACMonProgrammingLanguages,2018,2(OOPSLA).
附錄一實物圖附錄二電路圖
附錄三程序#include<reg51.h>#include"beep.h"#include"delay.h"#include"lcd1602.h"#include"adc0832.h"#include"key.h"#include"ds1302.h"#defineucharunsignedchar#defineuintunsignedintsbitLED=P1^7;//led指示燈intPM25_up=80;//煙霧濃度上線unsignedcharPM25=0;//煙霧濃度intVOC_up=40;//VOC濃度上線unsignedcharVOC=0;//VOC濃度unsignedchardht11t_up=30;//dht11溫度上限unsignedchardht11h_up=60;//dht11濕度上限voidset_PM25(){Lcd1602_Com(0x80);Lcd1602_Data('P');Lcd1602_Data('M');Lcd1602_Data('2');Lcd1602_Data('5');Lcd1602_Data('u');Lcd1602_Data('p');Lcd1602_Data('>');Lcd1602_Data('0'+PM25_up/100);Lcd1602_Data('0'+(PM25_up%100)/10);Lcd1602_Data('0'+PM25_up%10);for(;;){//按鍵按下變量加if(key_2==0){while(key_2==0){PM25_up++;if(PM25_up>=255)PM25_up=255;Lcd1602_Com(0x87);Lcd1602_Data('0'+PM25_up/100);Lcd1602_Data('0'+(PM25_up%100)/10);Lcd1602_Data('0'+PM25_up%10);delay_10ms(10);//延時0.2s}}//按鍵按下變量減if(key_3==0){while(key_3==0){PM25_up--;if(PM25_up<=0)PM25_up=0;Lcd1602_Com(0x87);Lcd1602_Data('0'+PM25_up/100);Lcd1602_Data('0'+(PM25_up%100)/10);Lcd1602_Data('0'+PM25_up%10);delay_10ms(10);//延時0.2s}}//跳出循環if(key_4==0){while(key_4==0);Lcd1602_Com(0x86);//地址Lcd1602_Data('');break;}}}voidset_VOC(){Lcd1602_Com(0x80);Lcd1602_Data('V');Lcd1602_Data('O');Lcd1602_Data('C');Lcd1602_Data('');Lcd1602_Data('u');Lcd1602_Data('p');Lcd1602_Data('>');Lcd1602_Data('0'+VOC_up/100);Lcd1602_Data('0'+(VOC_up%100)/10);Lcd1602_Data('0'+VOC_up%10);for(;;){//按鍵按下變量加if(key_2==0){while(key_2==0){VOC_up++;if(VOC_up>=255)VOC_up=255;Lcd1602_Com(0x87);Lcd1602_Data('0'+VOC_up/100);Lcd1602_Data('0'+(VOC_up%100)/10);Lcd1602_Data('0'+VOC_up%10);delay_10ms(10);//延時0.2s}}//按鍵按下變量減if(key_3==0){while(key_3==0){VOC_up--;if(VOC_up<=0)VOC_up=0;Lcd1602_Com(0x87);Lcd1602_Data('0'+VOC_up/100);Lcd1602_Data('0'+(VOC_up%100)/10);Lcd1602_Data('0'+VOC_up%10);delay_10ms(10);//延時0.2s}}//跳出循環if(key_4==0){while(key_4==0);Lcd1602_Com(0x86);//地址Lcd1602_Data('');break;}}}voidset_value(){set_ds1302();//設置系統時間if(key_2==0){while(key_2==0);Lcd1602_Com(0x01);set_PM25();Lcd1602_Com(0x01);set_VOC();Lcd1602_Com(0x01);}}voiddisplay(){Lcd1602_Com(0x80);Lcd1602_Data('2');Lcd1602_Data('0');Lcd1602_Data('0'+DS1302_Time[6]/16);Lcd1602_Data('0'+(DS1302_Time[6]&0x0f));Lcd1602_Data('-');Lcd1602_Data('0'+DS1302_Time[4]/16);Lcd1602_Data('0'+(DS1302_Time[4]&0x0f));Lcd1602_Data('-');Lcd1602_Data('0'+DS1302_Time[3]/16);Lcd1602_Data('0'+(DS1302_Time[3]&0x0f));Lcd1602_Data('');Lcd1602_Data('M');Lcd1602_Data('0'+PM25/100);Lcd1602_Data('0'+PM25%100/10);Lcd1602_Data('0'+PM25%10);Lcd1602_Data('');Lcd1602_Com(0xc0);if(DS1302_Time[5]==0) //星期7在DS1302存儲是0需要轉換一下Lcd1602_Data('7');elseLcd1602_Data('0'+(DS1302_Time[5]&0x07));Lcd1602_Data('');Lcd1602_Data('0'+DS1302_Time[2]/16);Lcd1602_Data('0'+(DS1302_Time[2]&0x0f));Lcd1602_Data(':');Lcd1602_Data('0'+DS1302_Time[1]/16);Lcd1602_Data('0'+(DS1302_Time[1]&0x0f));Lcd1602_Data(':');Lcd1602_Data('0'+DS1302_Time[0]/16);Lcd1602_Data('0'+(DS1302_Time[0]&0x0f));Lcd1602_Data('');Lcd1602_Data('V');Lcd1602_Data('0'+VOC/100);Lcd1602_Data('0'+VOC%100/10);Lcd1602_Data('0'+VOC%10);Lcd1602_Data('');}voidsend_data(){// SBUF=0xf1;// while(!TI);//等待發送完成信號(TI=1)出現// TI=0;//SBUF=0xf0;while(!TI);//等待發送完成信號(TI=1)出現TI=0;SBUF=PM25;while(!TI);//等待發送完成信號(TI=1)出現TI=0;SBUF=VOC;while(!TI);//等待發送完成信號(TI=1)出現TI=0;if(PM25>PM25_up){SBUF=0x01;while(!TI);//等待發送完成信號(TI=1)出現TI=0;}else{SBUF=0x00;while(!TI);//等待發送完成信號(TI=1)出現TI=0;}if(VOC>VOC_up){SBUF=0x01;while(!TI);//等待發送完成信號(TI=1)出現TI=0;}else{SBUF=0x00;while(!TI);//等待發送完成信號(TI=1)出現TI=0;}}//報警判斷voidwarn(){//濃度超限if((PM25>PM25_up)||(VOC>VOC_up)){beep(20);}send_data();//發送數據}#definebaudrate9600UL#definefosc11059200UL//其中,UL是不能省略的,代表長整型。voidUsartConfiguration(){// SCON=0X50; //設置為工作方式1SCON=0x50;TMOD=0X21; //設置計數器工作方式2PCON=0X80; //波特率加倍TH1=256-(fosc*2)/(baudrate*12*32); //9600TL1=256-(fosc*2)/(baudrate*12*32)-1;ET0=1; //打開TO定時器TR0=1; //開啟中斷TH0=(65536-5000)/256;TL0=(65536-5000)%256;ES=1; //打開接收中斷EA=1; //打開總中斷TR1=1; //打開計數器}voidmain(){UsartConfiguration();//初始化串口和定時器Lcd1602_Init();//初始化LCD1602液晶顯示屏Buzzer=0;//蜂鳴器不響while(1){set_value();//讀取按鍵get_ds1302();//獲取DS1302獲取時間VOC=get_adc0832(0);//獲取VOC濃度if(VOC>40)VOC-=40;elseVOC=0;display();//顯示warn();//煙霧判斷delay_10ms(10); //延時200ms}}/**********定時器0中斷服務程序***************/voidtimer0(void)interrupt1{intj;// x++;TH0=(65536-8881)/256;//定時10usTL0=(65536-8881)%256;LED=0;for(j=0;j<30;j++);//延時0.28msPM25=get_adc0832(1);//開啟ADC采集// FlagStar=1;for(j=0;j<5;j++);// TR0=0;// EA=0;LED=1;//關閉傳感器LED}voidUsart()interrupt4{RI=0;//清除接收中斷標志位}APP程序代碼:packagecom.test.BTClient;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.UUID;importcom.test.BTClient.DeviceListActivity;//importandroid.R;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.bluetooth.BluetoothAdapter;importandroid.bluetooth.BluetoothDevice;importandroid.bluetooth.BluetoothSocket;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.content.pm.ActivityInfo;importandroid.graphics.Color;importandroid.os.Bundle;importandroid.os.Environment;importandroid.os.Handler;importandroid.os.Message;importandroid.view.LayoutInflater;importandroid.view.View.OnClickListener;//importandroid.view.Menu;//如使用菜單加入此三包//importandroid.view.MenuInflater;//importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ScrollView;importandroid.widget.SeekBar;importandroid.widget.TextView;importandroid.widget.Toast;publicclassBTClientextendsActivityimplementsOnClickListener{ privatefinalstaticintREQUEST_CONNECT_DEVICE=1;//宏定義查詢設備句柄 privatefinalstaticStringMY_UUID="00001101-0000-1000-8000-00805F9B34FB";//SPP服務UUID號 privateInputStreamis;//輸入流,用來接收藍牙數據 //privateTextViewtext0;//提示欄解句柄privateEditTextedit0;//發送數據輸入句柄privateTextViewdis_1;//接收數據顯示句柄privateTextViewdis_2;//接收數據顯示句柄privateTextViewdis_3;//接收數據顯示句柄//privateScrollViewsv;//翻頁句柄privateStringsmsg="";//顯示用數據緩存privateStringfmsg="";//保存用數據緩存publicStringfilename="";//用來保存存儲的文件名BluetoothDevice_device=null;//藍牙設備BluetoothSocket_socket=null;//藍牙通信socketboolean_discoveryFinished=false;booleanbRun=true;booleanbThread=false;privateBluetoothAdapter_bluetooth=BluetoothAdapter.getDefaultAdapter();//獲取本地藍牙適配器,即藍牙設備 privateButtonbut_1; privatebyte[]tempData=newbyte[1024];//串口臨時數據 charstart=0;//開始停止 intpm25_up=100;//上線 String[]values_1=newString[32];///**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);dis_2=(TextView)findViewById(R.id.textView2);//得到數據顯示句柄dis_3=(TextView)findViewById(R.id.textView3);//得到數據顯示句柄 //如果打開本地藍牙設備不成功,提示信息,結束程序if(_bluetooth==null){ Toast.makeText(this,"無法打開手機藍牙,請確認手機是否有藍牙功能!",Toast.LENGTH_LONG).show();finish();return;}//設置設備可以被搜索newThread(){ publicvoidrun(){ if(_bluetooth.isEnabled()==false){ _bluetooth.enable(); } } }.start();}//發送按鍵響應publicvoidonSendButtonClicked(Viewv){ inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍牙連接輸出流 //byte[]bos=edit0.getText().toString().getBytes(); byte[]bos="asdfsdfsd".getBytes();//.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機中換行為0a,將其改為0d0a后再發送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//接收活動結果,響應startActivityForResult()publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ switch(requestCode){ caseREQUEST_CONNECT_DEVICE://連接結果,由DeviceListActivity設置返回 //響應返回結果if(resultCode==Activity.RESULT_OK){//連接成功,由DeviceListActivity設置返回//MAC地址,由DeviceListActivity設置返回Stringaddress=data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);//得到藍牙設備句柄_device=_bluetooth.getRemoteDevice(address);//用服務號得到sockettry{ _socket=_device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));}catch(IOExceptione){ Toast.makeText(this,"連接失敗!",Toast.LENGTH_SHORT).show();}//連接socket Buttonbtn=(Button)findViewById(R.id.Button03);try{ _socket.connect(); Toast.makeText(this,"連接"+_device.getName()+"成功!",Toast.LENGTH_SHORT).show(); btn.setText("斷開");}catch(IOExceptione){ try{ Toast.makeText(this,"連接失敗!",Toast.LENGTH_SHORT).show(); _socket.close(); _socket=null; }catch(IOExceptionee){ Toast.makeText(this,"連接失敗!",Toast.LENGTH_SHORT).show(); } return;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論