Arduino單片機的智能家居設計_第1頁
Arduino單片機的智能家居設計_第2頁
Arduino單片機的智能家居設計_第3頁
Arduino單片機的智能家居設計_第4頁
Arduino單片機的智能家居設計_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

...wd......wd......wd...山東科技大學第三屆學生電子設計大賽技術報告基于Arduino單片機的智能家居系統學院:電子通信與物理學院班級:碩研2015級參賽者:張榮飛曹其棟侯煥存摘要本文中我們基于Arduino單片機設計了一個模擬智能家居系統。該系統以ArduinoUNOR3單片機為核心,外接光照檢測、溫濕度傳感器、LED、風扇和無線通信等模塊。整個系統分為檢測端和控制端兩大局部,檢測端由光敏電阻、溫濕度傳感器、無線通信模塊和單片機組成。控制端由無線接收、液晶顯示、電燈控制和風扇控制四大模塊組成,包含單片機、無線通信模塊、LCD顯示屏、風扇和LED等。檢測端和控制端之間借助無線通信模塊進展無線通信,控制端內部的無線接收和液晶顯示兩個模塊之間那么采用串口通信。該系統能夠實現對室內溫度、濕度和光照強度等參數的實時檢測,并借助LCD顯示溫濕度值,還可以根據檢測端探測到的光照強度和溫度值以及預先設定的參數對室內的電燈和風扇進展智能控制。關鍵詞:智能家居;Arduino單片機;自動控制;無線通信;液晶顯示目錄§1緒論11.1智能家居簡介11.2智能家居的研究意義2§2系統總體設計方案32.1系統框圖32.2系統工作原理簡介3§3系統硬件設計43.1單片機的選擇43.1.1ArduinoUNO簡介43.1.2Arduino單片機特色53.1.3Arduino單片機引腳簡介53.1.4Arduino單片機編程軟件63.2溫濕度檢測模塊設計63.2.1DHT11概述63.2.2DHT11引腳說明73.2.3電源引腳83.2.4串行接口〔單線雙向〕83.3光照檢測模塊設計83.4無線通信模塊設計93.5液晶顯示模塊設計93.5.1液晶顯示模塊的選擇93.5.2液晶顯示電路設計103.6其他模塊設計113.6.1電燈模塊設計113.6.2風扇模塊設計123.7系統硬件實物圖12§4軟件系統設計134.1檢測端程序設計134.2控制端程序設計13§5總結15參考文獻15附錄:源程序16§1緒論1.1智能家居簡介智能家居很早就出現在人們的定義當中,但很長時間以來都沒有真正意義上的智能家居成型,到了1984年美國聯合科技公司〔UnitedTechnologiesBuildingSystem〕將智能信息融入建筑設備中,在整合的根基上應用到了美國康乃迪克州哈特佛市的城市地標性建筑中時,出現了世界上的首棟智能化建筑,也正是從那時開場,智能化家居正式融入到現代生活中。智能家居控制的開展關鍵在于設計理念以及經營者的心態,市場目標客戶真正需要什么東西,如果只注重簽單,不設身處地的為客戶著想,不兼顧智能解決未來的開展,提供片面的智能家居解決方案,而不考慮客戶的適用性,是不可取的,是急功近利的表現,這不僅降低了智能家居的應用效果,還不利于整個智能家居行業的開展。智能家居控制系統的市場不是一般普通的商品買賣,而是一項系統性工程,它涉及到很多技術,涉及到人們生活的方方面面,智能家居控制系統的終極目標是一種理想,更是一種理念,要想智能家居控制系統有很好的開展,研發機構必須本著長遠開展的心態,本著簡化、實用、性價比高、適合市場的理念,虔誠研究人們的生活、習慣、精神文化等需要,并把它看最高目標,運用各種技術手段實現它。在國內,智能家居不是單純意義上的智能產品,也不能被狹義的理解為小區智能化,而是基于小區的多層次家居智能化解決方案。它綜合利用主控平臺、無線連接及通信、設備管理、整體布局布線等手段,將住戶智能化管理、交互共享及消費服務、小區安防監控等常見家居因素協調配合并最終整合為整體,在原有小區智能化的大面上延伸到小區內部室內家居的具體環節,構建出高效、舒適、安全、便捷的個性化住宅空間。近幾年,很多研發機構和廠商已經意識到家庭安全的重要性,把智能家居作為一個重要的方向和工程來研究,并紛紛投入大量人力財力,使智能家居真正的走向市場和產業化生產。智能家居是一個具有交互能力的平臺,并且通過平臺能夠把各種不同的系統、協議、信息和內容控制在相對獨立的模塊單元中進展傳輸、交換。1.2智能家居的研究意義隨著人們生活水平的不斷提高,生活節奏的加快,人們不斷的對居住環境提出更高的要求,越來越注重家庭生活中每個成員的舒適、安全和便利,因此從市場需求的角度來說,智能家居必然是前景廣闊。因此設計一個符合國家國情和標準的集遠程控制和本地控制為一體的智能家居控制系統是非常具有現實意義的,且勢在必行。作為智能家居的核心系統的智能家居的控制系統,它的設計功能的完善必將推動住宅智能化的開展。而系統功能的集成化、用戶使用的傻瓜化以及市場的平民化將是智能家居控制器的開展趨勢,系統也將逐步邁向綠色化。最終,我想全人類的夢想是智能家居控制系統將囊括所有的家事雜物,讓我們真正的享受舒適溫馨的家庭生活。雖然智能家居經過十幾年的蓬勃開展,很多功能已趨于完善和成熟,智能化家居系統的應用也越來越廣泛,然而生活中的智能家居所展現出的智能化,與業主所理想的智能化還存在較大差距。而這也推動了智能化技術在家居領域的縱深開展,并為各類智能化家居新產品的設計和研發增加了動力,同時新產品的出現,也大大豐富了智能家居系統的厚度。因此,將智能家居作為這次研究的主要內容具有很大的現實指導意義。本文的目的就是設計一個簡捷有效智能家居控制系統,從溫度、濕度、光照強度的采集,到LCD實時顯示,并根據采集的信號不同采取相應的應對機制,智能控制家中的電燈、風扇等電器設備,從而實現基本的智能家居功能。§2系統總體設計方案2.1系統框圖智能家居控制系統對整個家庭內部環境進展監測和及時應對的系統,核心局部是單片機,通過與其他各監測模塊和執行模塊的連接,實現對室內環境的整體改變和各元件的控制。首先,主控元件對接收到的數據〔如光線強暗,溫度上下〕通過LCD顯示模塊進展實時顯示,使室內情況一目了然。然后根據各信號采集模塊傳送給單片機的數據,做出應對執行,實現家居系統的智能控制。系統總體框圖如下:圖2.1系統總體框圖2.2系統工作原理簡介本系統工作可以分為四個局部:第一局部是傳感器數據采集,將溫度傳感器、濕度傳感器以及光敏電阻分別連接到單片機①上,單片機①會將傳感器采集到的實時數據進展處理;第二局部是數據傳輸,有兩個無線模塊,一個連接到單片機①上作為發射端,一個連接到單片機②上作為接收端,單片機①將處理過的數據通過發射端發送出去,單片機②通過接收端將數據接收進來,再次進展處理;第三局部是控制功能,單片機②將接收到的數據與設定的閾值進展對比,當到達閾值條件時,可以啟動風扇或者電燈,另外,溫度和光敏設定了幾個不同的閾值,當到達某一閾值會有相應的風扇轉速或者電燈亮度;第四局部,溫濕度顯示,單片機②將通過無線方式接收到的數據采用串口通信的方式傳給單片機③,單片機③是專門用來控制LCD1602液晶顯示屏的,得到數據后單片機③將數據傳到液晶屏進展顯示。§3系統硬件設計3.1單片機的選擇首先將所需器件羅列,根據與單片機相連的各器件,確定整個系統所需與單片機連接的管腳數,通過查資料,選定Arduino單片機作為該系統的微控制器,因為它帶有模擬I/O口,在外接各類傳感器方面比普通的51系列單片機更為方便。Arduino單片機的模擬I/O口可以很方便地將光敏電阻和溫濕度傳感器等模塊采集到的模擬量經A/D轉換后送給單片機進展處理,而對數字信號的識別和處理正是Arduino的優勢所在。3.1.1ArduinoUNO簡介ArduinoUNO是ArduinoUSB接口系列的最新版本,作為Arduino平臺的參考標準模板。UNO的處理器核心是ATmega328,同時具有14路數字輸入/輸出口〔其中6路可作為PWM輸出〕,6路模擬輸入,一個16MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSPheader和一個復位按鈕。UNO已經發布到第三版,與前兩版相比有以下新的特點:在AREF處增加了兩個管腳SDA和SCL,支持I2C接口;增加IOREF和一個預留管腳,將來擴展板將能兼容5V和3.3V核心板。這樣改進了復位電路設計,USB接口芯片由ATmega16U2替代了ATmega8U2。圖2.2為改進后的ArduinoUNO。圖2.2ArduinoUNOR33.1.2Arduino單片機特色1、開放源代碼的電路圖設計,程序開發接口免費下載,也可依需求自己修改。2、使用低價格的微處理控制器(ATMEGA8或ATmega128)。可以采用USB接口供電,不需外接電源,也可以使用外部9VDC輸入。3、Arduino支持ISP在線燒,可以將新的“bootloader〞固件燒入ATmega8或ATmega128芯片。有了bootloader之后,可以通過串口或者USBtoRs232線更新固件。4、可依據官方提供的Eagle格式PCB和SCH電路圖,簡化Arduino模組,完成獨立運作的微處理控制。可簡單地與傳感器,各式各樣的電子元件連接(如:紅外線、超聲波、熱敏電阻、光敏電阻、伺服馬達等)。5、支持多種互動程序,如:Flash、Max/Msp、VVVV、PD、C、Processing等。6、應用方面,利用Arduino,突破以往只能使用鼠標、鍵盤、CCD等輸入的裝置的互動內容,可以更簡單地達成單人或多人游戲互動。3.1.3Arduino單片機引腳簡介Arduino單片機的數字I/O被分成兩個局部,其中每個局部都包含有6個可用的I/O管腳,即管腳2到管腳7和管腳8到管腳13。在數字電路中開關〔switch〕是一種基本的輸入形式,它的作用是保持電路的連接或者斷開。Arduino從數字I/O管腳上只能讀出高電平〔5V〕或者低電平〔0V〕,因此我們首先面臨到的一個問題就是如何將開關的開/斷狀態轉變成Arduino能夠讀取的高/低電平。解決的方法是通過上/下拉電阻,按照電路的不同通常又可以分為正邏輯〔PositiveLogic〕和負邏輯〔InvertedLogic〕兩種。Arduino的優勢在于對數字信號的識別和處理,但我們所生活的真實世界并不是數字〔digital〕化的,簡單到只要用0和1就能夠表示所有的現象。例如溫度這一我們已經司空見慣的概念,它只能在一個范圍之內連續變化,而不可能發生像從0到1這樣的瞬時跳變,類似這樣的物理量被人們稱為是模擬〔analog〕的。Arduino是無法理解這些模擬量的,它們必須在經過模數轉換后變成數字量后,才能被Arduino進一步處理。3.1.4Arduino單片機編程軟件Arduino語言是建設在C/C++根基上的,其實也就是根基的C語言,Arduino語言只不過把AVR單片機〔微控制器〕相關的一些存放器參數設置等都函數化了,不用我們去了解他的底層,讓不太了解AVR單片機〔微控制器〕的朋友也能輕松上手。圖2.3Arduino編程界面Arduino語言是以setup()開頭,loop()作為主體的一個程序構架。官方網站是這樣描述setup()的:用來初始化變量,管腳模式,調用庫函數等等,此函數只運行一次。loop()函數是一個循環函數,函數內的語句周而復始的循環執行,功能類似c語言中的“main();〞。3.2溫濕度檢測模塊設計智能家居的一個主要控制對象就是住戶室內溫濕度,適宜的溫濕度為主人提供良好的家居環境,這樣一來,溫濕度檢測與控制模塊就變得尤為重要。考慮到硬件電路的復雜性,本設計中選擇DHT11數字溫濕度傳感器來檢測室內的溫度和濕度,這樣可以用一個傳感器檢測兩個指標,使硬件電路得以簡化。3.2.1DHT11概述DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器。它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優點。每個DHT11傳感器都在極為準確的濕度校驗室中進展校準。校準系數以程序的形式儲存在OTP內存中,傳感器內部在檢測信號的處理過程中要調用這些校準系數。單線制串行接口,使系統集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20米以上,使其成為各類應用甚至最為苛刻的應用場合的最正確選那么。產品為4針單排引腳封裝。連接方便,特殊封裝形式可根據用戶需求而提供。圖3.1DHT11實物圖3.2.2DHT11引腳說明引腳號引腳名稱類型引腳說明1VCC電源正電源輸入,3V-5.5VDC2Dout輸出單總線,數據輸入/輸出引腳3NC空空腳,擴展未用4GND地電源地圖3.2DHT11典型應用電路3.2.3電源引腳DHT11的供電電壓為3-5.5V。傳感器上電后,要等待1s以越過不穩定狀態在此期間無需發送任何指令。電源引腳〔VDD,GND〕之間可增加一個100nF的電容,用以去耦濾波。3.2.4串行接口〔單線雙向〕DATA用于微處理器與DHT11之間的通訊和同步,采用單總線數據格式,一次通訊時間4ms左右,用戶MCU發送一次開場信號后,,DHT11從低功耗模式轉換到高速模式,等待主機開場信號完畢后,DHT11發送響應信號,送出40bit的數據,并觸發一次信號采集,用戶可選擇讀取局部數據。從模式下,DHT11接收到開場信號觸發一次溫濕度采集,如果沒有接收到主機發送開場信號,DHT11不會主動進展溫濕度采集,采集數據后轉換到低速模式。3.3光照檢測模塊設計光敏電阻特性是在不同光照強度下,其阻值發生變化〔只要是人眼可感受的光,都會引起它的阻值變化〕。利用這一特性,我們把光敏電阻接入電路實現光照強度檢測。圖3.3光照檢測電路示意圖亮度檢測電路工作原理:我們把光敏電阻接入電路后,光敏電阻置于窗口處,由于光線的變化,其阻值也在一定時間內不斷變化,從而產生連續的電信號,通過模擬I/O口進入單片機。由于單片機內部自帶A/D轉換電路,通過相應程序,能使模擬I/O口傳來的電信號轉換成數字信號,單片機讀取這些數字信號,就能得出相應的光照強度,并決定是否啟動其他應對措施。3.4無線通信模塊設計考慮到系統的普遍適用性和硬件電路實現的難易程度,本次設計中選取NRF24L01無線模塊作為系統的無線通信模塊,該模塊既可以用于發送數據,也可以用于接收數據,且易于編程操作。NRF24L01無線模塊主要特點如下:(1)2.4Ghz全球開放ISM頻段免許可證使用;(2)最高工作速率2Mbps,高效GFSK調制,抗干擾能力強,特別適合工業控制場合;(3)126頻道,滿足多點通信和跳頻通信需要;(4)內置硬件CRC檢錯和點對多點通信地址控制;(5)低功耗1.9-3.6V工作,待機模式下狀態為22uA;掉電模式下為900nA;(6)內置2.4Ghz天線,體積種類多樣;(7)模塊可軟件設地址,只有收到本機地址時才會輸出數據〔提供中斷指示),可直接接各種單片機使用,軟件編程非常方便;(8)內置專門穩壓電路,使用各種電源包括DC/DC開關電源均有很好的通信效果;(9)2.54MM間距接口,DIP封裝;(10)工作于EnhancedShockBurst具有Automaticpackethandling,Autopackettransactionhandling,具有可選的內置包應答機制,極大的降低丟包率。3.5液晶顯示模塊設計3.5.1液晶顯示模塊的選擇LCD1602屏幕為2行,每行顯示16個字符,為字符型顯示器,只能顯示數字和字符,不可以顯示漢字。LCD12864屏幕為64行,每行顯示128個字符,為點陣型顯示器,可根據需求任意顯示字符,數字,漢字和圖形。綜合價格因素和實際應用的需要,選用LCD1602為改家居系統的顯示器。下面詳細介紹一下LCD1602的功能實現和各項參數。LCD1602主要技術參數:顯示容量:16×2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最正確工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mmLCD1602相比傳統顯示器的幾個突出優點:〔1〕顯示質量高由于液晶顯示器收到信號后的每一個點都會一直保持原有亮度和顏色,恒定發光。而不像陰極射線管顯示器〔CRT〕那樣需要不斷刷新新亮點。因此,液晶顯示器既不會閃爍,又保證了畫質高。〔2〕數字式接口液晶顯示器的輸入輸出采用數字量,和主控芯片〔SCM〕的接口連接更加簡單可靠,操作也更為簡便。〔3〕重量輕,體積小液晶顯示器通過顯示屏上的電極控制液晶分子狀態來到達顯示的目的,在重量上比一樣顯示面積的傳統顯示器要輕得多。〔4〕功耗低相對而言,液晶顯示器的功耗主要消耗在其內部的電極和驅動IC上,因而耗電量比其他顯示器要少得多。LCD1602分為帶背光和不帶背光兩種,基控制器大局部為HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差異。3.5.2液晶顯示電路設計圖3.4液晶顯示電路示意圖液晶顯示電路工作原理:液晶顯示器LCD1602通過7~14管腳的數據總線與單片機進展數據傳送,單片機通過輸出高地電平來控制液晶顯示器LCD1602的4~6管腳配合傳送的數據決定讀/寫數據,并通過LCD顯示屏顯示出來。期間單片機是控制元件,而LCD1602為顯示和執行元件。3.6其他模塊設計3.6.1電燈模塊設計本次系統設計中用發光二極管LED來替代實際場景中的電燈。LED發光原理發光二極管是由Ⅲ-Ⅳ族化合物,如GaAs(砷化鎵)、GaP(磷化鎵)、GaAsP(磷砷化鎵)等半導體制成的,其核心是PN結。因此它具有一般P-N結的I-N特性,即正向導通,反向截止、擊穿特性。此外,在一定條件下,它還具有發光特性。在正向電壓下,電子由N區注入P區,空穴由P區注入N區。進入對方區域的少數載流子(少子)一局部與多數載流子(多子)復合而發光。假設發光是在P區中發生的,那么注入的電子與價帶空穴直接復合而發光,或者先被發光中心捕獲后,再與空穴復合發光。除了這種發光復合外,還有些電子被非發光中心(這個中心介于導帶、介帶中間附近)捕獲,而后再與空穴復合,每次釋放的能量不大,不能形成可見光。發光的復合量相對于非發光復合量的比例越大,光量子效率越高。由于復合是在少子擴散區內發光的,所以光僅在靠近PN結面數μm以內產生。理論和實踐證明,光的峰值波長λ與發光區域的半導體材料禁帶寬度Eg有關,即λ≈1240/Eg(mm)式中Eg的單位為電子伏特(eV)。假設能產生可見光(波長在380nm紫光~780nm紅光),半導體材料的Eg應在3.26~1.63eV之間。比紅光波長長的光為紅外光。現在已有紅外、紅、黃、綠及藍光發光二極管,但其中藍光二極管成本、價格很高,使用不普遍。LED的應用由于發光二極管的顏色、尺寸、形狀、發光強度及透明情況等不同,所以使用發光二極管時應根據實際需要進展恰中選擇。由于發光二極管具有最大正向電流IFm、最大反向電壓VRm的限制,使用時,應保證不超過此值。為安全起見,實際電流IF應在0.6IFm以下;應讓可能出現的反向電壓VR0。6VRm。LED被廣泛用于種電子儀器和電子設備中,可作為電源指示燈、電平指示或微光源之用。紅外發光管常被用于電視機、錄像機等的遙控器中。在連接電路時,首先應正確區分LED的正負極,防止正負極戒飯導致無法使用甚至燒壞元件。LED的兩只引腳中,長的一根為正極,短的一根為負極,連接電路時,正極接一個220Ω的電阻,電阻另一端接單片機的數字I/O口,負極接地。3.6.2風扇模塊設計本設計中,采用普通的直流電機帶動扇葉來模擬實際場景中的風扇。直流風扇的兩個接線端不分正負,一端接地,另一端接單片機數字I/O口即可,根據系統設計的要求,通過程序控制輸出到電機的電壓不同來改變電機轉速,從而實現根據溫度變化和預設參數改變風扇轉速的目的。3.7系統硬件實物圖根據上述各模塊的硬件設計,最后做出的實物圖如下:圖3.5模擬智能家居硬件實物圖§4軟件系統設計4.1檢測端程序設計檢測端由單片機、光照檢測模塊、溫濕度檢測模塊和無線通信模塊組成,相應的程序包括光照檢測程序、溫濕度檢測程序和無線通信程序,局部程序如以以下圖所示,完整的程序在附錄中。圖4.1檢測端局部程序4.2控制端程序設計控制端由單片機、液晶顯示模塊、電燈模塊、風扇模塊和無線通信模塊組成,相應的程序包括無線接收程序、串口通信程序、顯示程序、風扇和電燈控制程序,局部程序如以以下圖所示,完整的程序在附錄中。圖4.2無線接收局部程序圖4.3液晶顯示局部程序§5總結本次設計的模擬智能家居系統滿足了所有的系統設計要求,完成了對溫濕度的實時監測和現實,得到的最終結果誤差也在要求的范圍之內,而且完成了根據光照強度變化、溫度變化和預設參數對電燈和風扇進展智能控制的任務,取得了令人滿意的成果。通過本次設計,使我對基于單片機的智能控制有了更多的了解和掌握,在科技飛速開展的今天,科技意味著第一生產力,機器智能正在越來越多的方面取代人工操作,作為智能控制在工業應用的代表性成果,它結合了程序調控,提供了定時控制、計數控制、步進控制以及數據處理等多種功能,具有人工作業無法對比的優越性和準確性。隨著科技的開展,基于單片機的智能控制功能也會不斷擴大,各項性能也將不斷提高。參考文獻[1]張鑫.單片機原理及應用[M].北京:電子工業出版社,2008[2]童詩白,華成英.模擬電子技術根基[M].北京:高等教育出版社,2001[3]王港元.電工電子實踐指導[M].南昌:江西科學技術出版社,2006[4]李朝青.PC機及單片機數據通信技術,北京,北京航空航天大學出版社,2000[5]藍宇電子研發團隊.Arduino設計[M].[6]湯凱,劉洋,續欣.Arduino程序設計指南[M].北京:電子工業出版社,2015[7]趙光宙.信號分析與處理[M].北京:機械工業出版社,2010[8]張國雄.測控電路〔第四版〕[M].北京:機械工業出版社,2011附錄:源程序檢測端發送程序:#include<SPI.h>#include<Mirf.h>#include<nRF24L01.h>#include<MirfHardwareSpiDriver.h>#defineDHT11_PIN0//ADC0接到模擬口0byteread_dht11_dat(){bytei=0;byteresult=0;for(i=0;i<8;i++){while(!(PINC&_BV(DHT11_PIN)));//waitfor50usdelayMicroseconds(30);if(PINC&_BV(DHT11_PIN))result|=(1<<(7-i));while((PINC&_BV(DHT11_PIN)));//wait'1'finish}returnresult;}voidsetup(){DDRC|=_BV(DHT11_PIN);PORTC|=_BV(DHT11_PIN);Serial.begin(9600);Mirf.cePin=9;//設置CE引腳為D9Mirf.csnPin=10;//設置CE引腳為D10Mirf.spi=&MirfHardwareSpi;Mirf.init();//初始化nRF24L01//設置接收標識符"Sen01"Mirf.setRADDR((byte*)"Sen01");//設置一次收發的字節數,這里發一個整數,寫sizeof(unsignedint),實際等于2字節Mirf.payload=sizeof(unsignedint);//發送通道,可以填0~128,收發必須一致。Mirf.channel=5;Mirf.config();Serial.println("I'mSender...");}voidloop(){bytedht11_dat[5];bytedht11_in;bytei;unsignedintGuangmin,WenDu,ShiDu;//startcondition//1.pull-downi/opinfrom18msPORTC&=~_BV(DHT11_PIN);delay(18);PORTC|=_BV(DHT11_PIN);delayMicroseconds(40);DDRC&=~_BV(DHT11_PIN);delayMicroseconds(40);dht11_in=PINC&_BV(DHT11_PIN);if(dht11_in){Serial.println("dht11startcondition1notmet");return;}delayMicroseconds(80);dht11_in=PINC&_BV(DHT11_PIN);if(!dht11_in){Serial.println("dht11startcondition2notmet");return;}delayMicroseconds(80);//nowreadyfordatareceptionfor(i=0;i<5;i++)dht11_dat[i]=read_dht11_dat();DDRC|=_BV(DHT11_PIN);PORTC|=_BV(DHT11_PIN);bytedht11_check_sum=dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];//checkcheck_sumif(dht11_dat[4]!=dht11_check_sum){Serial.println("DHT11checksumerror");}WenDu=(unsignedint)(dht11_dat[2]);ShiDu=(unsignedint)(dht11_dat[0]);Guangmin=analogRead(A2);//Guangmin=(unsignedint)20;Serial.println(WenDu);Serial.println(ShiDu);Serial.println(Guangmin);fasong(WenDu);fasong(ShiDu);fasong(Guangmin);delay(1000);}voidfasong(unsignedintadata){bytedata[Mirf.payload];data[0]=adata&0xFF;//低八位給data[0],data[1]=adata>>8;//高八位給data[1]。//設置向"serv1"發送數據Mirf.setTADDR((byte*)"Rec01");Mirf.send(data);//while死循環等待發送完畢,才能進展下一步操作。while(Mirf.isSending()){}}控制端無線接收程序:#include

<SPI.h>

#include

<Mirf.h>

#include

<nRF24L01.h>

#include

<MirfHardwareSpiDriver.h>

int

fengshan

=

6;

int

led

=

5;

//定義一個變量adata存儲最終結果,oldadata存儲舊結果,防止一樣結果刷屏。

unsigned

int

WenDu

=

0,

ShiDu

=

0,

Guangmin

=

0;

void

setup()

{

pinMode(fengshan,

OUTPUT);

pinMode(led,

OUTPUT);

Serial.begin(9600);

Mirf.cePin

=

9;

//設置CE引腳為D9

Mirf.csnPin

=

10;

//設置CE引腳為D10

//初始化局部,不可隨時修改

Mirf.spi

=

&MirfHardwareSpi;

Mirf.init();

//初始化nRF24L01

//配置局部,可以隨時修改

//設置接收標識符"Rev01"

Mirf.setRADDR((byte

*)"Rec01");

//設置一次收發的字節數,這里發一個整數,

//寫sizeof(unsigned

int),實際等于2字節

Mirf.payload

=

sizeof(unsigned

int);

//發送通道,可以填0~128,收發必須一致。

Mirf.channel

=

5;

Mirf.config();

}

void

loop()

{

//定義一個暫存數組,大小為Mirf.payload。

byte

data[Mirf.payload];

if

(Mirf.dataReady())

//等待接收數據準備好

{

Mirf.getData(data);

//接收數據到data數組

WenDu

=

(unsigned

int)((data[1]

<<

8)

|

data[0]);

Mirf.getData(data);

//接收數據到data數組

ShiDu

=

(unsigned

int)((data[1]

<<

8)

|

data[0]);

Mirf.getData(data);

//接收數據到data數組

Guangmin

=

(unsigned

int)((data[1]

<<

8)

|

data[0]);

sender(WenDu);

sender(ShiDu);

delay(1050);

}

if

(25

<=

WenDu

<=

28)

analogWrite(fengshan,

51);

else

if

(29

<=

WenDu

<=

32)

analogWrite(fengshan,

153);

else

if

(WenDu

>=

33)

analogWrite(fengshan,

255);

else

analogWrite(fengshan,

0);

if

(0

<=

Guangmin

<=

60)

analogWrite(led,

255);

else

if

(61<=

Guangmin

<=

120)

analogWrite(led,

153);

else

if

(121

<=

Guangmin

<=

180)

analogWrite(led,

51);

else

digitalWrite(led,

LOW);

}

void

sender(unsigned

int

x)

{

unsigned

int

c,

d,

j

;

unsigned

int

SHU[2];

c

=

x/10;

d

=

x-c

*

10;

SHU[0]

=

c;

SHU[1]

=

d;

for

(j

=

0;

j

<

2;

j++)

{

switch

(SHU[j])

{

case

0:

Serial.print('0');

break;

case

1:

Serial.print('1');

break;

case

2:

Serial.print('2');

break;

case

3:

Serial.print('3');

break;

case

4:

Serial.print('4');

break;

case

5:

Serial.print('5');

break;

case

6:

Serial.print('6');

break;

case

7:

Serial.print('7');

break;

case

8:

Serial.print('8');

break;

default:

Serial.print('9');

break;

}

}

}控制端串口通信及液晶顯示程序:int

DI

=

12;

int

RW

=

11;

int

DB[]

=

{3,

4,

5,

6,

7,

8,

9,

10};

int

Enable

=

2;

int

Echo

=

13;

int

Trig

=

A0;

void

LcdCommandWrite(int

value)

{

int

i

=

0;

for

(i

=

DB[0];

i

<=

DI;

i++)

{

digitalWrite(i,

value

&

01);

value

>>=

1;

}

digitalWrite(Enable,

LOW);

delayMicroseconds(1);

digitalWrite(Enable,

HIGH);

delayMicroseconds(1);

digitalWrite(Enable,

LOW);

delayMicrosecon

溫馨提示

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

評論

0/150

提交評論