机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。
项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html
红外遥控器是我们常用的一种遥控设备。你可以用它控制电视、空调、音响等家用电器,同时也可以改造家里的电饭煲、咖啡机和微波炉等传统家电。想象一下只用一个遥控器就能搞定所有的家用电器控制,只需要搭配Arduino控制器、继电器和红外遥控器套件,就可以搭建一个智能家用电器平台。
红外遥控器有两部分组成:红外发射装置(红外遥控器)和红外接收装置(红外接收头)。
想对某一遥控器进行解码必须要了解该遥控器的编码方式,我选用的这款遥控器产品使用的编码方式为:NEC协议。
NEC协议特点如下所示:
8位地址位,8位命令位;
为了可靠性地址位和命令位被传输两次;
脉冲位置调制;
载波频率38khz;
每一位的时间为1.125ms或2.25ms。
NEC协议表示逻辑0和1的定义如下图:
具体协议分析如下所示:
按键按下立刻松开的发射脉冲典型序列如下所示:
注意:这是首先发送LSB(最低位)的协议
在上面的脉冲传输的地址为0x59命令为0x16。一个消息是由一个9ms的高电平开始,随后有一个4.5ms的低电平,(这两段电平组成引导码)然后由地址码和命令码。地址和命令传输两次。第二次所有位都取反,可用于对所收到的消息中的确认使用。总传输时间是恒定的,因为每一点与它取反长度重复。如果你不感兴趣, 你可以忽略这个可靠性取反,也可以扩大地址和命令,以每16位。
按键按下一段时间才松开的发射脉冲典型序列如下所示:
一个命令发送一次,即使在遥控器上的按键仍然按下。当按键一直按下时,第一个110ms的脉冲与上图一样,之后每110ms重复代码传输一次。这个重复代码是由一个9ms的高电平脉冲和一个2.25ms低电平和560μs的高电平组成。
重复脉冲典型序列如下所示:
注意:脉冲波形进入一体化接收头以后,因为一体化接收头里要进行解码、信号放大和整形,故要注意在没有红外信号时,其输出端为高电平,有信号时为低电平,故其输出信号电平正好和发射端相反。接收端脉冲大家可以通过示波器看到,结合看到的波形理解程序。
根据NEC编码的特点和接收端的波形,本实验将接收端的波形分成四部分:引导码(9ms和4.5ms的脉冲)、地址码16位(包括8位的地址位和8位的地址的取反)、命令码16位(包括8位命令位和8位命令位的取反)、重复码(9ms、2.25ms、560us脉冲组成)。
利用定时器对接收到的波形的高电平段和低电平段进行测量,根据测量到的时间来区分:逻辑“0”、逻辑“1”、引导脉冲、重复脉冲。引导码和地址码只要判断是正确的脉冲即可,不用存储,但是命令码必须存储,因为每个按键的命令码都不同, 根据命令码来执行相应的动作。
设置遥控器上的几个按键VOL+:控制LED灯亮的;VOL-:作为控制蜂鸣器响。
实现代码如下所示: