IR - 傳輸IR NEC原始數據並解碼

材料準備

範例說明

在此範例中,我們使用兩個Ameba RTL8722模塊,它們分別與紅外線(IR)發射器和IR接收器連接,以發送和接收IR NEC 原始數據。

1

圖一: Grove – 紅外線發射器

1

圖二: Grove – 紅外線接收器

在發送端,發送器將發送IR NEC原始數據。原始數據可以看作是“marks”和“spaces”(圖三)的連續持續時間(以微秒(us)為單位)。

• Mark: 特定時間發送脈衝
• Space: 特定時間不發送脈衝

1

圖三: 典型的紅外線發射和接收設置實作

有關更多詳細信息,請參閱SB-Projects的主題IR Remote Control Theory 學習IR遙控器操作的理論以及IR協議說明。在此範例中,我們將使用NEC(Now Renesas,也稱為日語格式)作為傳輸協議。

NEC 特色
• 8位元地址和8位元命令長度。
• 具擴展模式,地址長度加倍。
• 為了確保可靠性,發送兩次地址和命令。
• 調節脈衝距離。
• 載波頻率為38kHz。
• Bit Time為1.125ms或2.25ms。

調節
NEC協議使用Pulse Distance Encoding進行數據通信(圖四)。 “1”由2250us的總持續時間表示,其中560us的“marks”和(2250-560)us的“spaces”表示。 “0”由總持續時間1120us表示,其中560us是“marks”,而(1120-560)us是“spaces”。

1

圖四: NEC 調節

由於總共將傳輸32位元數據包含標頭和結束位元 (圖五)。如果我們在時間範圍內拆開數據,將有(2 + 32)x 2 +1 = 69個要傳輸的“marks”/“spaces”(圖六),形成原始NEC數據在Arduino“ *.ino”文件中進行傳輸。

1

圖五: 完整NEC數據的樣本(1或0)

1

圖六: NEC 原始完整數據的樣本(us)

正確設置連接後,我們將介紹此範例的編碼部分。首先,確保在Arduino IDE中選擇了正確的Ameba開發板:“Tools”->“Board”。

在“File”->“Examples”->“ AmebaIRDevice”->“ IRSendRAW”中打開“ IRSendRAW”範例(圖十五),並將其上傳到與IR Emitter連接的第一塊板上:

1

圖十五: IRSendRaw 與 IRRecvNEC 的範例位置

成功上傳IRSendRaw的範例代碼後,您可能需要從“File”->“Examples”->“ AmebaIRDevice”->“ IRRecvNEC”上傳與IR接收器連接的第二塊板的IRRecvNEC範例。

打開IR接收器的serial monitor並按兩塊開發板上的重置按鈕後,將每3秒接收一次數據“ 48”(由於具有delays()函式,因此不必強制等待)。
解碼來自接收引腳D8的信號並使用邏輯分析儀和脈衝視圖發送引腳D9(圖十六)後,使用IR NEC協議解碼接收數據後,結果也顯示為“ 48”。

1

圖十六: 發送和接收引腳的脈衝視圖結果

程式碼說明

[1] Seeed Official website for Grove – Infrared Receiver
https://wiki.seeedstudio.com/Grove-Infrared_Receiver/

[2] Seed Official website for Grove – Infrared Emitter
https://wiki.seeedstudio.com/Grove-Infrared_Emitter/

[3] Ken SHirriff’s blog on A Multi-Protocol Infrared Remote Library for the Arduino
http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

[4] SB-Projects: IR Remote Control Project
https://www.sbprojects.net/knowledge/ir/index.php

請先確認已安裝QQ通訊軟體