我們平常接觸紅外線的應(yīng)用,像是電視機(jī)、冷氣機(jī)的遙控器就是個紅外線發(fā)射器,而電視機(jī)、冷氣機(jī)上則有紅外線接收器。
紅外線接收器與發(fā)射器
人類可見光約為 390 到 700 nm(奈米),其中可見的紅光波長約為 620 至 750 nm 左右,而波長超過 760 nm 的光,人類無法感知,稱為紅外光,一般我們還會聽到有近紅外光、遠(yuǎn)紅外光等分類,這在不同領(lǐng)域中有不同的分類。
電視機(jī)、冷氣機(jī)等一般常使用 940 nm 波長的紅外光,以避免太陽光、室內(nèi)光源等發(fā)出的紅外光干擾,其他還有 850 nm、860 nm 等其他波長,最好能讓接收器與發(fā)射器規(guī)格一致,以免造成誤判。

上圖左側(cè)是紅外線接收器,我手邊這只三個接腳由左至右分別是訊號、GND 與電源,有的接收器 GND 與電源線會相反,使用時(shí)要確認(rèn)一下。
由于生活周遭物品也會不定時(shí)地散發(fā)紅外光,紅外線接收器設(shè)計(jì)為只對特定頻率有反應(yīng),常見使用的是 38k Hz;紅外線發(fā)射器就是個 LED,可發(fā)出特定波長的紅外線,在 Arduino,可以使用tone函式(是之前談蜂嗚器時(shí)有提過)指定以特定頻率(像是 38k Hz)發(fā)射紅外線。
使用 mBlock 測試紅外線接收器
如果想要簡單地體驗(yàn)、測試一下紅外線接收器,可以如下銜接電路:

如果使用 mBlock 2.1 的話,可以如下撰寫程式:

如上圖撰寫程式的話,在還沒按上遙控器時(shí),從紅外線接收器多半就會收到一堆 1 的訊號,遙控器實(shí)際上是有特定編碼地發(fā)射紅外線訊號,你可以在運(yùn)行程式之后,拿起家里的電視遙控器對著接收器發(fā)射,在接收器收到 0 的訊號時(shí),貓咪會以“收到遙控器訊號”的提示文字表示。
使用 IRremote 測試紅外線接收器
如果想要用紅外線接收器解碼遙控器的紅外線指令,可以使用IRremote程式庫搭配 Arduino IDE 來快速地體驗(yàn)一下,可以到 IRremote 的 Github 按下“Download ZIP”,會下載一個 Arduino-IRremote-master.zip 檔案,解開后將其中目錄更名為 Arduino-IRremote,并將整個目錄置于 Arduino IDE 安裝目錄的 libraries 之中:

接著開啟 Arduino IDE,就可以在“檔案/范例”中,看到 IRremote 相關(guān)范例:

如果想測試一下電視遙控器的指令解碼,可以開啟“IRrecvDemo”范例,電路如先前看到的圖銜接就可以了,這個范例程式會從 D11 接收紅外線訊號并解碼,直接將程式上傳至 Arduino,并執(zhí)行“工具/序列埠監(jiān)控視窗”,然后按下電視遙控器的電源鍵,你應(yīng)該可以看到對應(yīng)的解碼訊息出現(xiàn):

使用 IRremote 測試紅外線發(fā)射器
如果使用 mBlock 2.1,那么“播放腳位…”這方塊,可以直接指定頻率,驅(qū)動紅外線發(fā)射器發(fā)出紅外線:

若要能發(fā)出如遙控器的各種指令紅外光,這在 mBlock 中自行以積木建構(gòu)會是個大工程,在之前的 IRremote 范例中,可以看到“IRsendDemo”范例,可以使用這個范例來測試紅外線發(fā)射:

按照注解來看,這個范例可以發(fā)出 Sony 電視機(jī)的電源紅外線指令,至于那個Serial.read的if判斷,是要看看有無從“序列埠監(jiān)控視窗”收到輸入,也就是你可在先前看到的“序列埠監(jiān)控視窗”中輸入文字然后按下“傳送”,這樣if條件就會成立,然后按照程式流程發(fā)出電源紅外線指令,如果不想這么麻煩,就將if的部份注解掉,這樣就會不斷地發(fā)出電源紅外線指令了。
電路的部份,只需要如下銜接就可以了,要注意的是,由于 IRremote 的限制,你只能用 D3 腳位來送出訊號:

如果需要測試一下是不是正確地發(fā)出紅外線指令,你需要另一塊 Arduino 板子,如先前在測試接收器的電路的方式銜接,然后上傳“IRrecvDemo”范例,那么在“序列埠監(jiān)控視窗”中,你就可以看到以下的解碼訊息:

感謝CodeData用戶:caterpillar的貢獻(xiàn) 著作權(quán)歸作者所有
整理:寧波家電物聯(lián)網(wǎng)云平臺,中科極動云