查看: 643|回复: 0

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

[复制链接]

主题

好友

152

积分

童生

  • TA的每日心情
    奋斗
    2018-11-12 11:25
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-7-20 08:42:51 |显示全部楼层

    红外遥控是我们最常用到的近场遥控技术之一。每个家庭里大大小小的遥控器,基本上都是利用红外遥控实现。
    我们这次打算实现用红外遥控乐高。想要乐高听指挥,还得通过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控制红外发射头发射对应的原遥控器指令,这样就将多个遥控器功能集中到一个遥控器上。这便是现在市场上各类结合手机音频插孔或智能红外盒子的原理。如果喜欢动手,不妨自己尝试一下,结合上篇文章的物联概念,就能远程控制家里的电器,那智能家居的实现也有章可循了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /2 下一条

    手机版|电路城

    GMT+8, 2019-8-24 13:41 , Processed in 0.098414 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部