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通讯软体