mBlock & Arduino(11)認識紅外線接收與發射
我們平常接觸紅外線的應用,像是電視機、冷氣機的遙控器就是個紅外線發射器,而電視機、冷氣機上則有紅外線接收器。
紅外線接收器與發射器
人類可見光約為 390 到 700 nm(奈米),其中可見的紅光波長約為 620 至 750 nm 左右,而波長超過 760 nm 的光,人類無法感知,稱為紅外光,一般我們還會聽到有近紅外光、遠紅外光等分類,這在不同領域中有不同的分類。
電視機、冷氣機等一般常使用 940 nm 波長的紅外光,以避免太陽光、室內光源等發出的紅外光干擾,其他還有 850 nm、860 nm 等其他波長,最好能讓接收器與發射器規格一致,以免造成誤判。
上圖左側是紅外線接收器,我手邊這隻三個接腳由左至右分別是訊號、GND 與電源,有的接收器 GND 與電源線會相反,使用時要確認一下。
由於生活周遭物品也會不定時地散發紅外光,紅外線接收器設計為只對特定頻率有反應,常見使用的是 38k Hz;紅外線發射器就是個 LED,可發出特定波長的紅外線,在 Arduino,可以使用tone函式(是之前談蜂嗚器時有提過)指定以特定頻率(像是 38k Hz)發射紅外線。
使用 mBlock 測試紅外線接收器
如果想要簡單地體驗、測試一下紅外線接收器,可以如下銜接電路:
如果使用 mBlock 2.1 的話,可以如下撰寫程式:如上圖撰寫程式的話,在還沒按上遙控器時,從紅外線接收器多半就會收到一堆 1 的訊號,遙控器實際上是有特定編碼地發射紅外線訊號,你可以在運行程式之後,拿起家裡的電視遙控器對著接收器發射,在接收器收到 0 的訊號時,貓咪會以「收到遙控器訊號」的提示文字表示。
使用 IRremote 測試紅外線接收器
如果想要用紅外線接收器解碼遙控器的紅外線指令,可以使用IRremote程式庫搭配 Arduino IDE 來快速地體驗一下,可以到 IRremote 的 Github 按下「Download ZIP」,會下載一個 Arduino-IRremote-master.zip 檔案,解開後將其中目錄更名為 Arduino-IRremote,並將整個目錄置於 Arduino IDE 安裝目錄的 libraries 之中:
接著開啟 Arduino IDE,就可以在「檔案/範例」中,看到 IRremote 相關範例:
如果想測試一下電視遙控器的指令解碼,可以開啟「IRrecvDemo」範例,電路如先前看到的圖銜接就可以了,這個范常式式會從 D11 接收紅外線訊號並解碼,直接將程式上傳至 Arduino,並執行「工具/序列埠監控視窗」,然後按下電視遙控器的電源鍵,你應該可以看到對應的解碼訊息出現:
使用 IRremote 測試紅外線發射器
如果使用 mBlock 2.1,那麼「播放腳位…」這方塊,可以直接指定頻率,驅動紅外線發射器發出紅外線:
若要能發出如遙控器的各種指令紅外光,這在 mBlock 中自行以積木建構會是個大工程,在之前的 IRremote 範例中,可以看到「IRsendDemo」範例,可以使用這個範例來測試紅外線發射:
按照註解來看,這個範例可以發出 Sony 電視機的電源紅外線指令,至於那個Serial.read的if判斷,是要看看有無從「序列埠監控視窗」收到輸入,也就是你可在先前看到的「序列埠監控視窗」中輸入文字然後按下「傳送」,這樣if條件就會成立,然後按照程式流程發出電源紅外線指令,如果不想這麼麻煩,就將if的部份註解掉,這樣就會不斷地發出電源紅外線指令了。
電路的部份,只需要如下銜接就可以了,要注意的是,由於 IRremote 的限制,你只能用 D3 腳位來送出訊號:
如果需要測試一下是不是正確地發出紅外線指令,你需要另一塊 Arduino 板子,如先前在測試接收器的電路的方式銜接,然後上傳「IRrecvDemo」範例,那麼在「序列埠監控視窗」中,你就可以看到以下的解碼訊息:
感謝CodeData用戶:caterpillar的貢獻 著作權歸作者所有
aterpillar:目前為自由工作者,喜好研究程式語言、框架、社群,從中學習設計、典範及文化。閑暇之餘 記錄所學,技術文件涵蓋 C/C++, Java, Ruby/Rails, Python, JavaScript, Haskell 等多個領域,出版電子書 Java SE 6 技術手冊、Java Lambda Tutorial、Java Tutorial、Python Tutorial、Essential JavaScript、Haskell Tutorial。
Contact Us:極動雲-寧波物聯網家電雲平台
整理:寧波家電物聯網雲平台,中科極動雲
推薦閱讀:
※智能積木施魔法,建座小城市不是問題!
※如何使用 Arduino 製作一個繪圖儀
※Arduino 是什麼?
※Openlab Taipei的TaiwanDuino
※arduino與電腦利用wifi數據互通,是怎麼實現的?