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

材料準備

  • AmebaD [AMB21 / AMB22 / AMB23 / BW16 ] x 2

  • Grove – 紅外線發射器 x1 (Figure 1)

  • Grove – 紅外線接收器 x1 (Figure 2)

範例説明

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

1

圖一: Grove – 紅外線發射器

2

圖二: Grove – 紅外線接收器

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

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

3

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

有關更多詳細信息,請參閱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” 。」

4

圖四: NEC 調節

由於總共將傳輸32位元數據包含標頭和結束位元 (圖五)。如果我們在時間範圍內拆開數據,將有(2 + 32)x 2 +1 = 69個要傳輸的 “ marks ” / “ spaces ”(圖六),形成原始NEC數據在Arduino “ *.ino ” 文件中進行傳輸。關於如何獲得原始數據代碼的細節, 可以參考 Ken Shirriff’s 的 博客

5

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

6

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

圖七和圖八顯示了AMB21 / AMB22板的紅外發射器和接收器的引腳配置。

7

圖七: 紅外發射器和AMB21 / AMB22的引腳配置

8

圖八: 紅外接收器和AMB21 / AMB22的引腳配置

图九和图十显示了BW16板的红外发射器和接收器的引脚配置。

7-2

图十一: 红外发射器和BW16的引脚配置

8-2

图十二: 红外接收器和BW16的引脚配置

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

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

9

图十一: IRSendRaw 与 IRRecvNEC 的范例位置

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

打开IR接收器的serial monitor并按两块开发板上的重置按钮后,将每3秒接收一次数据“ 48”(由于具有delays()函式,因此不必强制等待)。解码来自接收引脚D8的信号并使用逻辑分析仪和脉冲视图发送引脚D9(图十二)后,使用IR NEC协议解码接收数据后,结果也显示为“ 48”。

10

图十二: 发送和接收引脚的脉冲视图结果

程式碼説明

[1] Seeed Official website for Grove – Infrared Receiver
[2] Seed Official website for Grove – Infrared Emitter
[3] Ken SHirriff’s blog on A Multi-Protocol Infrared Remote Library for the Arduino
[4] SB-Projects: IR Remote Control Project