Arduino和乐高擦出的火花:利用红外遥控技术控制乐高

作者: anna728
上传时间为: 2017-07-20 08:42 AM
2017-07-20
阅读:

红外遥控是我们最常用到的近场遥控技术之一。每个家庭里大大小小的遥控器,基本上都是利用红外遥控实现。

我们这次打算实现用红外遥控乐高。想要乐高听指挥,还得通过Arduino。首先要让Arduino听懂红外指令。我们选用了市面上最成(pian)熟(yi)的红外套件:

在这之前呢,我们用乐高做过一个乒乓球发球机。发球是能发了,但无法一个人玩,必须是玩的人站好位置,另一个人启动乐高。我们打算给这个装置添加红外遥控启动,个人对练不求人。

红外控制原理即发射端以特定频率发出信号,接收端接收并转码,程序根据不同转码结果触发不同反馈。控制信号以红外二极管特定不同间隔通断时间的方式发出,接收器平时输出高电平,收到指令时输出低电平:

上图的示意信号实际上是一连串特定时长的红外二极管亮灭,这样的红外指令用arduino读出来是这样子的:

这样的指令不仅看起来瞬间脑大,还不方便调试,所以厂家通常会将这样的代码先翻译成1010的二进制,再转换为16进制显示。翻译的标准各家就有区别了,按照最常用的NEC的标准,2.25ms波形代表1,1.12ms波形代表0:

我们看一下前面获取的红外指令:

600+550=1150μs,对应0;550+550+600+550=2250μs,对应1;于是上述代码就翻译成了01110。再来看NEC红外指令编码方式:

“引导码+用户码+数据码+结束码(无信号)”,引导码和数据码默认传输两遍,一次正向,一次反向用于接收器校检(如图10中同一按键对应的3条出现局部50μs差异)。知道了规律,我们就很方便的提取出我们所需的指令了。将二进制指令中控制指令转变为16进制(其中FFFFFFFF为重复码):

是不是瞬间清晰了,于是我们很方便就能得到遥控器上的按键与指令的对应关系:

至此我们完成了遥控器指令的破解,剩下的事情就简单了,我们只需在程序中设定不同指令对应的触发操作即可,以本文案例为例,那就是随机触发还是立即触发。随机触发,程序将生成一个1~5的随机数,延时对应秒数后,触发弹射程序。

拿好拍子,按一下遥控器,程序会随机间隔触发电机,连续将球弹出。

所以流程可以总结为:遥控器发射指令—接收器接收解码—触发对应操作,这就是红外遥控的实现原理。这个流程在身边随处可见,比如电视换台,调音量,我们只是将其用在了乐高上。

除了控制乐高弹球,控制继电器开关电器这样直白的应用,我们还可以结合Arduino的红外二极管制作发射器,控制其他设备。比如将家里电视空调等遥控器最常用的遥控指令都破译出来,与一台遥控器上不常用的按键对应。编一个小程序,若接收器收到这些不常用按键发来的控制信号,则由Arduino控制红外发射头发射对应的原遥控器指令,这样就将多个遥控器功能集中到一个遥控器上。这便是现在市场上各类结合手机音频插孔或智能红外盒子的原理。如果喜欢动手,不妨自己尝试一下,结合上篇文章的物联概念,就能远程控制家里的电器,那智能家居的实现也有章可循了。

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示