2017年7月14日 星期五

模組介紹 : faya紅外線發射/接收模組



學習目標 : 認識faya紅外線發射和接收模組的功能及使用方式
學習時間 : 60min
示範模組 : (1) faya brickNano x 2
                 (2) faya 紅外線發射模組
                 (3) faya 紅外線接收模組
                 (4) faya 按鍵模組
工具 : (1) 樂高積木底板 (相容)

====================功能介紹====================
faya紅外線發射/接收模組透過紅外線的介面傳輸資料,本篇教學同時介紹發射和接收模組,透過一發一收的資料傳送,進行硬體的連接與程式的示範。兩個模組的使用方式很容易上手:

  • 當發射模組Din埠收到下源觸發後,資料開始傳送
  • 欲傳送的資料由發射模組Din輸入,接收到的資料由Dout輸出
  • 若超過180ms未有資料從Din輸入,則系統重置,需重新觸發

faya紅外線發射模組利用兩顆紅外線LED當發射器,兩顆LED30度夾角排列可增加發射角度,模組上的可變電阻可用來調整載波頻率。


faya紅外線接收模組透過一鐵殼包覆的紅外線接收器,將接收到的調變訊號解調,並送到輸出埠Dout。模組上的LED用來顯示解調後的HIGH訊號!


====================原理知識===================
以下解釋提供給有需要知道背後原理的人:


紅外線發射器的電路如下所示,左下方的區域,透過2個反向器組合成邏輯閘震盪電路,藉由10K歐姆的可變電阻,改變RC充放電的時間,進而設定輸出震盪頻率,由於我們的接收器可解調38KHz的載波,因此在使用發射模組前,需先調整可變電阻(可變電阻箭頭指向大約9點鐘方向),讓輸出產生38KHz的載波。

接下來討論兩種輸入情況:

(1) 當Din為LOW訊號時,U1D的輸出(pin11)為HIGH,此時U1C的輸出(pin8)會和U1C的輸入(pin10)會反向,pin10連接pin6為38KHz方波,因此pin8也是38KHz的方波,此方波推動Q1,使紅外線LED發射38KHz載波。


(2) 當Din為HIGH訊號時,U1D的輸出(pin11)為LOW,此時U1C的輸出(pin8)必為HIGH,Q1會持續導通,但不會受到pin10的38KHz載波影響。

如果我們把輸入Din設為常HIGH,LED持續發射無載波的HIGH訊號,當等到Din拉到LOW時,pin9為HIGH,輸出pin8由pin10的38KHz載波決定,此輸出推動Q1進而發射載波訊號,讓接收器解調,這個拉LOW後開始傳輸的動作和很多串列通訊協定一樣,UART也是其中之一,我們可以好好利用這個特性傳輸訊號。



用示波器分別記錄發射模組的Din(CH1)和R4(CH2)腳位,所得波形和電路設計結果一致:


紅外線接收模組的電路如下所示 ,透過紅外線接收器(FM6038)將38KHz的載波訊號解調,所得到的解調訊號,經過CD4528推動LED,由於CD4528的A接LOW,由真值表得知,當/B為下源觸發時,Q為HIGH,LED會閃一下,可用來偵測是否有訊號接收並解調成功。

 

接收器具Internal Pull-Up Output特性,平時輸出為HIGH,當發射器送出下源訊號觸發後,接收器拉LOW開始解調,由於接收器會把訊號反向,因此當訊號包含38KHz載波時,會解得LOW,當訊號不含載波時,會解調得HIGH訊號,如下圖所示 (參考來源)


用示波器分別記錄發射模組的R4(CH1)和接收模組的Dout(CH2)腳位,所得波形和電路設計結果一致,詳細的接收器datasheet請參考這邊



綜合以上發射和接收模組的動作,我們得知當傳送模組Din訊號拉LOW後,訊號開始傳輸,傳輸結果於Dout輸出,用示波器分別量測發射器Din和接收器Dout,可得兩個波型一致的結果:


====================範例實作====================

了解模組功能(原理)後,我們用以下範例來展示模組的功能:

目標:
本實作需要兩個Arduino模組,一邊傳送一邊接收,發射端裡用鍵模組的上/下/左/右鍵產生訊號,經過紅外線傳輸後,結果顯示在接收端的串列埠視窗

(1)當按下PB0時,透過紅外線傳輸,串列埠視窗顯示"UP"
(2)當按下PB1時,透過紅外線傳輸,串列埠視窗顯示"LEFT"
(3)當按下PB3時,透過紅外線傳輸,串列埠視窗顯示"RIGHT"
(4)當按下PB4時,透過紅外線傳輸,串列埠視窗顯示"DOWN"

接線:
(1) 電源線連接
      [發射端]如下圖所示,連接的說明請看這篇文章 簡易版


      [接收端]如下圖所示,連接的說明請看這篇文章 簡易版


(2) 訊號線連接
      [發射端]
      Arduino_D2   ===>  按鍵模組_PB0
      Arduino_D3   ===>  按鍵模組_PB1
      Arduino_D4   ===>  按鍵模組_PB3
      Arduino_D5   ===>  按鍵模組_PB4
      Arduino_Tx    ===>  紅外線發射模組_Din
     (註:我們直接利用UART協定傳輸紅外線資料,因此紅外線的發射端接到Arduino Tx)


      [接收端]
      Arduino_Rx    ===>  紅外線發射模組_Dout
     (註:我們直接利用UART協定傳輸紅外線資料,因此紅外線的接收端接到Arduino Rx)


完成接線後的發射接收端如下圖所示,發射和接收端大約距離10公分!


範例程式:

     [發射端]

備註:
- L25 : Serial.begin(2400);  設定串列埠傳輸速度為2400 bps,經測試,4800bps也能順利傳輸,但9600 bps則會有亂碼產生!
- L36/41/46/51 : 此指令會將字串值些送往串列埠Tx,由於我們的接線將Arduino Tx直接連到紅外線發射模組的Din,因此這些經過串列傳輸協定(UART Protocol) 的字串就跟著38KHz的調變,透過紅外線發射至空氣中了!

    [接收端]

備註:
- L14 : Serial.begin(2400);  設定串列埠傳輸速度和發射端一致的2400 bps,記得開串列埠視窗也要選擇2400bps,才不會有亂碼產生。
- L22~L25 :  接收器解調了空中帶有38KHz載波的調變訊號,還原為帶有UART通訊協定的字串,Serial.read() 將字串讀出,並用Serial.print()指令將字串輸出到串列埠視窗。

範例結果:
將以上兩個程式各自上傳成功後,開啟接收端的串列埠視窗(記得選對COM Port),就會得到以下的結果!


討論: 
(1) 在這個範例,我們透過串列埠傳輸(UART)的協定,將訊號由發射端經過紅外線模組成功的送至接收端,Arduino本身也提供紅外線協定的副程式讓大家使用,我們會在未來做示範。
(2) 本範例的傳輸距離大約10公分,大家可試試看最遠的傳輸距離,或者用板子將發射與接收器隔開,觀察會發生什麼情況。
(3) 傳輸的結果如發生亂碼(如下圖),可能的原因有二 (A) 載波偏離38KHz太遠,請調整發射器的可變電阻,沒有示波器可觀察載波頻率的人,可把可變電阻的箭頭指向9點鐘位置。(B) 串列埠視窗右下角的baud rate設定為和程式未一致,我們在程式設定2400 bps,因此視窗中也要設定此數值 (2400 baud)。


歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版 


沒有留言:

張貼留言