伍东亮
【摘要】目前,创客教育开始风靡全国高校,创客教育是以学生兴趣为依托、以创新创意为目标、以多信息传感融合为技术背景的新型教育模式。如何将传感器原理通俗易懂的讲解给学生并引导学生进行传感器应用是创客基础教育需要解决的关键问题。
【关键词】创客教育 红外发射 传感器
【中图分类号】G71 【文献标识码】A 【文章编号】2095-3089(2017)17-0254-01
目前创客教育产品设计中有的会采用红外遥控功能,但是诸多老师觉得红外遥控知识抽象、控制复杂而不能很好的进行知识讲解,在此我就红外接收原理及解码方法进行研究,并思考整理出一套由易到难、循序渐进、通俗易懂的红外遥控教学和学习方法。
1.红外遥控创客基础教学之八问八答
1.1什么是红外光波信号?
遥控器发射的红外光波其实就是一串亮灭不断变化的光。那么怎么样从这些不断变化的光信号中读取出它的秘密呢?我们首先要理解红外编码规则,看下图1:
从上图中可以看出,红外遥控是通过控制红外发送二极管的亮灭持续时间来表示数字0和1,数字1比数字0耗时时间要长,这种传输方式类似于抗战片中的手电筒传播信号。
1.2红外遥控器发射光波里包含了什么内容?
一帧完整的红外遥控信号,它由引导码(最前面的两个4.5ms的高低电平构成)、客户代码(代表公司,比如0x01格力,0x02长虹)、数据码(按键键值,我们编程最关心的)、数据码反码(用来验证接收数据是否正确)及SY(同步信号)共五部分组成(见图2)。只要明白一帧数据的构成,才能进行数据分析,解析红外信息。
1.3如何接收红外信号?
以51单片机为例来举例说明如何接收红外信号。红外信号是通过一组持续时间不同的高低电平来表示数字0和1,那么要怎样才能精确计算出一组高低电平持续时间呢?这个计量时间是比较苛刻的,为了减少误差选用单片机定时器选用方式2(自动重装)来减少计时误差。方式2下一次定时中断耗时根据晶振频率而定。11.0592M时, T = 256*(12/11.0592)= 277US。
接收红外信号其实就是接收每一组高低电平持续时间,这个时间通过外部中断刷新定时器中断计数来获得,所以接收到的原始信号数据是一组定时器溢出次数的数据。以51单片机为例,将红外接收信号引脚与单片机外部中断引脚相连,采用外部中断来接收红外数据,当中断引脚接收到一个红外下降沿信号时,首先将定时器溢出次数清零,定时器每溢出中断一次计数加一,当外部中断接收到下一个下降沿信号,将当前溢出次数存储作为第一个时间数据。
当单片机接收到第一個时间数据后,要立即分析是否为红外遥控的起始信号。一般的引导码大约为9000us,在8.8ms与13.8ms之间认为是引导码,以11.0592M晶振为例,中断溢出一次耗时277us,8.8ms约中断32次,13.8ms约中断50次,如果溢出次数符合32-50次范围,可以认为是红外信号的引导码,我们将定时器中断次数存入数组Time[ 0 ]中。
引导码之后是客户码和数据码。后续数据是由多个持续时间不同的高低电平组成,每一个高低电平会触发单片机产生一次中断。只需在前一次中断中将定时器溢出中断计数变量清零,在下一次中断发生后读取定时器溢出中断计数变量值,并将值按顺序存入数组Time[ ] 即可。一帧完整信号总共有34组高低电平信号(引导码1组 + 用户码8组 + 用户码8组 + 数据码8组 + 数据反码8组 + 同步码1组)。一帧数据会触发单片机外部中断次数为34次。所以当中断计数为34时,表示数据接收完毕。
1.4 如何解码红外信号?
红外信号接收到全部数据后,开始解析红外信号。数据0和1高低电平时间长度不一样,只需要设定一个参考时间值,这个参考时间值如何设定才合理?可以将一个0和一个1总时间相加除以2得到。(例如:0耗时1.125毫秒,1耗时2.25毫秒,参考时间为:(1.125+2.25)/2=1.687ms=1687US,转化为定时器溢出次数为1687/277=6次,判断溢出次数如果大于6则为数据1,小于6则为数据0。将全部溢出次数数据按此规则进行转换,得到一组二进制数值。
红外数据中的用户码和数据码都是一个8bit的数据构成,低字节在前,高字节在后。将解析出来的二进制数据通过右移位来实现8位的字节数据。红外遥控一帧数据包括4个字节的数据,要依次解析出这四个数据,并将数据存入数组中。
1.5 如何验证接收数据正确性?
一帧红外数据包含有一个数据码和一个数据反码,只需将解码后的数据码和数据反码进行取反比较即可验证接收数据是否正确。
1.6如何读取红外遥控按键键值?
红外遥控器每个按键对应一个按键键值,如何才能得到每个按键对应的键值呢?问题四解码过程中解析出来的数据码即为按键键值,可以通过串口打印或者液晶显示即可将按键键值显示出来。
1.7 如何利用遥控器进行遥控编程控制?
通过上述方法得到控制按键的键值后,解析每次接收到的红外遥控数据码码值,通过条件分支语句switch比较码值并进行软件编程控制即可。
1.8 不同的遥控器解码方式有差异吗?
据我了解不同的遥控器红外编码方式大体一样,差别主要在于以下三个方面:
(1)数字0、1高低点持续时间不一样。
(2)引导码高低电平持续时间不一样
(3)一帧数据构成不一样(很少)
不同的遥控器要找遥控器对应的控制芯片,查看它的说明书,查找以上数据,结合数据对程序做适当修改即可。
2.结语
通过多次的红外遥控教学尝试发现,学生只要有一定的单片机C语言编程基础和良好的外部中断和定时器编程使用能力,通过以上思路可以很好的掌握和理解红外遥控接收编程。
参考文献:
[1]智能遥控技术的研究与实现探微[J].许永乐.厦门科技.2013(04)