程序設(shè)計(jì)基礎(chǔ)-第十九章無(wú)線通信_(tái)第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)-第十九章無(wú)線通信_(tái)第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)-第十九章無(wú)線通信_(tái)第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)-第十九章無(wú)線通信_(tái)第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)-第十九章無(wú)線通信_(tái)第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余17頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Arduino可使用的無(wú)限通信方式眾多,如zigbee、WIFI、藍(lán)牙等。較為常見(jiàn)的開(kāi)發(fā)方式是使用串口透?jìng)髂K,這類(lèi)模塊設(shè)置好以后,連接到Arduino串口即可用串口通信的方式進(jìn)行通信,這個(gè)過(guò)程相當(dāng)于將串口的有線通信,改為了無(wú)線通信方式,而程序不需要改變。另一種常見(jiàn)方式是使用SPI接口的無(wú)線模塊,這類(lèi)模塊通常都有配套的驅(qū)動(dòng)庫(kù),如ArduinoWifi擴(kuò)展板。這種方式驅(qū)動(dòng)無(wú)線模塊,傳輸速率更快,可以完成高級(jí)操作。Arduino可以使用的無(wú)線模塊太多,驅(qū)動(dòng)方式各有不同,本書(shū)中不做過(guò)多介紹。本章中

要介紹的是一種最常用、成本最低的無(wú)線通信方式——紅外通信。紅外紅外線通信是一種利用紅外光編碼進(jìn)行數(shù)據(jù)傳輸?shù)臒o(wú)線通信方式,是目前使用最廣泛的一種通信和領(lǐng)域。。由于紅外線

裝置具有體積小、功耗低、成本常見(jiàn)的電視機(jī)

、空調(diào)

,均是使用紅外線特點(diǎn),因而被廣泛應(yīng)用于各個(gè)。要使用紅外線

,你需要準(zhǔn)備這些器材:紅外接收頭1:OUT2:GND3:VCCl紅外接收頭紅外接收頭其

集成了紅外接收電路,包括紅外監(jiān)測(cè)二極管,放大器,限副器,帶通濾波器,積分電路,比較器等。它可以接收到紅外信號(hào)并還原成發(fā)射端的波形信號(hào)。通常

使用的紅外接收頭都是接收38kHz左右的紅外信號(hào)。需要注意的是,不同的紅外一體接收頭可能會(huì)有不同的引腳定義。紅外l

紅外紅外上每個(gè)按鍵都有各自的編碼,按下按鍵后,

就會(huì)發(fā)送對(duì)應(yīng)編碼的紅外波。最常見(jiàn)的紅外

大多是使用NEC編碼.生活中,大多數(shù)紅外通信都是用38KHz的頻率進(jìn)行通信,

這里使用的

接收頭和都是使用38Khz收發(fā)信號(hào)的,如果要使用其他頻率通信,需要選用對(duì)應(yīng)頻率的器材。l

紅外發(fā)光二極管其外形與使用方法都和普通發(fā)光二極管相似,但是它可以發(fā)出肉眼不可見(jiàn)的紅外光。搭配紅外一體接受管使用,就可以進(jìn)行紅外通信了。紅外發(fā)光二極管要使用紅外

功能,你還需要用到一個(gè)第的紅外庫(kù)——IRremote庫(kù),你可以在以下

到它:/shirriff/Arduino-IRremoteIRremote庫(kù)成員函數(shù)IRrecv類(lèi)IRercv類(lèi)可以用于接收紅外信號(hào)并對(duì)其

。使用該類(lèi)前,你需要實(shí)例化一個(gè)該類(lèi)型的對(duì)象。其成員函數(shù)如下:IRrecv()

enableIRIn()IRrecv類(lèi)的構(gòu)造函數(shù)??芍付t外

接收頭的連接引腳。l

語(yǔ)法:IRrecvobject(recvpin)l

參數(shù):object:用戶自定義的對(duì)象名recvpin:連接到紅外

接收頭的Arduino引腳初始化紅外

。l

語(yǔ)法:IRrecv.enableIRIn()l

參數(shù):

IRrecv:一個(gè)IRrecv類(lèi)型的對(duì)象l

返回值:無(wú)decode()

resume()IRrecv:一個(gè)IRrecv類(lèi)型的對(duì)象results:一個(gè)decode_results類(lèi)型的對(duì)象l

返回值:Int型0:接收到編碼1:沒(méi)有接收到編碼初始化紅外

。 接收下一個(gè)編碼。l

語(yǔ)法:

l

語(yǔ)法:IRrecv.decode(&results)

IRrecv.resume()l

參數(shù):

l

參數(shù):IRrecv:一個(gè)IRrecv類(lèi)型的對(duì)象l

返回值:無(wú)IRsend類(lèi)IRsend類(lèi)可以將紅外信號(hào)的編碼并發(fā)送。IRsend()

sendNEC()IRsend類(lèi)的構(gòu)造函數(shù)。l

語(yǔ)法:IRsendobject()l

參數(shù):object:一個(gè)IRsend類(lèi)型的對(duì)象以NEC編碼格式發(fā)送指定值。l

語(yǔ)法:IRsend.sendNEC(data,

nbits)l

參數(shù):IRsend:一個(gè)IRsend類(lèi)型的對(duì)象data:發(fā)送的編碼值

nbits:編碼位數(shù)l

返回值:無(wú)sendSony()

sendRaw()以Sony編碼格式發(fā)送指定值。l

語(yǔ)法:IRsend.sendSony(data,

nbits)l

參數(shù):IRsend:一個(gè)IRsend類(lèi)型的對(duì)象data:發(fā)送的編碼值nbits:編碼位數(shù)l

返回值:無(wú)發(fā)送原始紅外編碼信號(hào)l

語(yǔ)法:IRsend.sendRaw(buf,

len,

hz)l

參數(shù):IRsend:一個(gè)IRsend類(lèi)型的對(duì)象buf:

原始編碼的數(shù)組len:數(shù)組長(zhǎng)度hz:紅外發(fā)射頻率l

返回值:無(wú)除此之外,還有如下函數(shù),用于其他常見(jiàn)協(xié)議的紅外信號(hào)發(fā)送:sendRC5()sendRC6()sendDISH()sendSharp()sendPanasonic()sendJVC()在紅外通信中的兩端上,一端進(jìn)行紅外信號(hào)的編碼并發(fā)送,另一端接收到紅外信號(hào),并以下示例中, 使用紅外。作為紅外信號(hào)的發(fā)接收頭作為紅外信號(hào)的接送端,使用Arduino和收端。紅外接收各按鍵對(duì)應(yīng)的編碼,不同的可以通過(guò)IRremote的示例程序獲取到,不同的的發(fā)要使用

控制Arduino,首先

得知道按鍵,不同的協(xié)議,都對(duì)應(yīng)著不同的編碼。送的信號(hào)的編碼。紅外信號(hào)的接收端的制作只需將紅外

接收頭按圖7-4連入Arduino即可,示例中收頭的輸出腳連接到Arduino的11號(hào)引腳。紅外連線示意圖這里

使用以下程序?qū)t外信號(hào)進(jìn)行

:你可以在文件菜單>示例>IRremote>IRrecvDemo找到該程序:

該示例程序后,會(huì)看到如圖的信息:使用向紅外接收頭發(fā)送信號(hào),并在串口監(jiān)視器中查看,你不同的的每個(gè)按鍵都對(duì)應(yīng)了不同的編碼,使用的編碼方式也不相同。出現(xiàn)“FFFFFFFF”編碼,是因?yàn)槲沂褂玫氖荖EC協(xié)議的

,當(dāng)按住某按鍵不放時(shí),其會(huì)發(fā)送一個(gè)重復(fù)編碼“FFFFFFFF”。而其他一些協(xié)議的

,則會(huì)重復(fù)發(fā)送對(duì)應(yīng)的編碼。你還可以在以下碼:找到常見(jiàn)品牌的編在以上示例中, 通過(guò)int

RECV_PIN

=

11;IRrecvirrecv(RECV_PIN);實(shí)例化了一個(gè)IRrecv類(lèi)型的紅外接收對(duì)象irrecv并將紅外接收頭引腳連接到了Arduino

11號(hào)引腳;接著在setup()

中使用enableIRIn()函數(shù)初始化紅外 功能。在loop()

中使用decode()函數(shù)檢查是否收到編碼,并將結(jié)果 到decode_results類(lèi)型的results對(duì)象中。 后的結(jié)果會(huì)保存在results.value中;最后通過(guò)resume()

函數(shù), 開(kāi)始接受下一個(gè)編碼。如果要使用紅外

控制Arduino上連接的設(shè)備,

只需要將

后的結(jié)果results.value與設(shè)定功能的編碼進(jìn)行比對(duì),如果一致,便執(zhí)行相應(yīng)的功能,如在以上程序中添加如下語(yǔ)句:紅外發(fā)射除了使用紅外

發(fā)射紅外信號(hào)外,

也可以使用Arduino來(lái)發(fā)送經(jīng)過(guò)編碼的紅外信號(hào)。如圖7-6所示,你只需要將紅外發(fā)射管與Arduino連接即可,連接方式和普通LED類(lèi)似,串聯(lián)一個(gè)限流電阻即可。另外IRremote庫(kù)只能使用3號(hào)引腳作為紅外信號(hào)輸出腳。l

連接示意圖你可以在文件菜單>示例>IRremote>IRrecvDemo找到該程序:這樣便可以模擬紅外 發(fā)射經(jīng)過(guò)編碼的紅外信號(hào)了。雖然紅外光不可見(jiàn),但你可以通過(guò)

或者電腦的頭觀察紅外LED是否發(fā)光,以便排除硬件問(wèn)題。你還可以使用兩塊Arduino,進(jìn)行紅外無(wú)線通信。在一定環(huán)境下,即使接收模塊和發(fā)送模塊沒(méi)有相對(duì),紅外信號(hào)也可以靠物體反射進(jìn)行

。在以上程序中, 使用了for循環(huán),發(fā)送了3次Sony紅外編碼,這是因?yàn)樵赟ony、RC5、RC6協(xié)議中都規(guī)定,編碼要發(fā)送3次。IRremote庫(kù)還可以使用其他函數(shù),發(fā)送不同編碼的

紅外信號(hào),如使用sendNEC()發(fā)送NEC編碼的紅外信號(hào),使用sendPanasonic()發(fā)送松下編碼的紅外信號(hào)等。除了這些常見(jiàn)標(biāo)準(zhǔn)協(xié)議外,IRremote庫(kù)還支持發(fā)送自定義的原始編碼,在下面的項(xiàng)目中,

講給大家詳細(xì)講解。實(shí)驗(yàn):

家電設(shè)備除了用

控制Arduino外,

還可以使用Arduino發(fā)送紅外信號(hào)控制其他紅外

設(shè)備。l

實(shí)驗(yàn)所需器材Arduino

UNO、紅外一體接收模塊、紅外發(fā)送模塊、可紅外的家電及實(shí)現(xiàn)原理和設(shè)備中均 了各種功能的編碼。按下 上的不發(fā)送的信號(hào)后,設(shè)備中的程序即會(huì)運(yùn)行該信號(hào)編碼對(duì)應(yīng)的一個(gè) 之所以能 相應(yīng)的設(shè)備,是因?yàn)橥存I會(huì)發(fā)送不同編碼的紅外信號(hào),設(shè)備接收到程序。因此要控制一個(gè)電器,需要先知道這個(gè)電器各功能的對(duì)應(yīng)的紅外信號(hào)編碼。再使用Arduino與紅外發(fā)射模塊將需要的編碼信號(hào)發(fā)送給這個(gè)電器,便可以達(dá)到Arduino控制電器設(shè)備的目的。7.1.3所示的發(fā)送sony、NEC等協(xié)議但是很多家電廠商都有自己的編碼協(xié)議,且IRremote庫(kù)并不支持,對(duì)于這種情況IRremote庫(kù)還提供了一種以高低電平時(shí)間記錄原始編碼數(shù)據(jù)的方法。使用這個(gè)方法,即使不清楚信號(hào)的編碼協(xié)議,只要將這些數(shù)據(jù)記錄下來(lái),再通過(guò)紅外發(fā)射模塊發(fā)送出一模一樣的信號(hào),便可以達(dá)到控制家電設(shè)備的目的。為了讓IRremote庫(kù)可以應(yīng)對(duì) 的品牌、不同編碼的家電協(xié)議,

需要先對(duì)庫(kù)文件做如下修改:打開(kāi)Arduino

IDE安裝文件夾

>

libraries

>

IRremote下的IRremote.h文件,找到如下語(yǔ)句#define

RAWBUF

100

//

Length

of

raw

duration

buffer將其修改為#define

RAWBUF

255

//

Length

of

raw

duration

buffer并保存。接著使用以下程序獲取你家電的原始編碼數(shù)據(jù):程序后,打開(kāi)串口監(jiān)視器,并使用你的家電

向一體化紅外接收頭發(fā)送紅外信號(hào),隨意按下

上的按鍵,你會(huì)看到類(lèi)似圖7-8所示的輸出信息。這里我使用的空調(diào)

,要控制你的家電設(shè)備,你需要使用對(duì)應(yīng)的

,獲取其編碼。每次按下按鍵,Arduino都會(huì)輸出一長(zhǎng)串的數(shù)列,這些輸出數(shù)列便是以高低電平持續(xù)時(shí)間表示的紅外信號(hào)原始編碼數(shù)據(jù)。而括號(hào)中的244表示這個(gè)數(shù)列有244個(gè)項(xiàng)。每個(gè)數(shù)列的第一項(xiàng)都是不定值,可以直接刪去,刪去后,

余下的數(shù)據(jù)做成一個(gè)數(shù)組。例如,這里我將打開(kāi)空調(diào)的原始編碼做成了一個(gè)數(shù)組:接著

只要使用sendRaw()

函數(shù)將這個(gè)紅外信號(hào)數(shù)據(jù)發(fā)送出去即可。發(fā)送原始紅外編碼信號(hào)程序后,將紅外發(fā)射模塊對(duì)著

空調(diào),便可以打開(kāi)空調(diào)了。以上程序中irsend.sendRaw(open_button,243,38);的三

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論