Arduino教程(提高篇)——红外遥控(接收篇)-Arduino爱好者 - Powered by Discuz!

Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 264936|回复: 87

Arduino教程(提高篇)——红外遥控(接收篇)

  [复制链接]
发表于 2012-7-5 12:17 | 显示全部楼层 |阅读模式
本帖最后由 奈何col 于 2012-8-6 20:55 编辑

此篇我们一起学习玩红外遥,作者将对红外遥控原理和例程进行简单的说明,若有不足或遗漏希望大家指出和修正。
一:红外遥控原理:
      红外遥控是由红外发射和红外接收系统组成
未命名.jpg

1、红外接收:接收电路是一种集成红外线接收和放大一体的一体化红外接收器模块,能够完成从红外线接收到输出与TTL电平信号兼容的所有工作,他适用于红外线遥控和红外线数据传输。接收器做成的红外接收模块只有三个引脚,信号线,VCC,GND。与arduino和其他单片机连接通信非常方便。
原件连接示意图如下:
vs1838.jpg
这里我们使用的了OPEN JUMPER的红外接收套件,直接连接到传感器扩展板即可使用

2、红外发射:红外发射的遥控器发射的38K红外载波信号是由遥控器里的编码芯片对其进行编码。下面用TC9012芯片了解下编码方式。它是以一段引导码,用户码,数据码,数据反码组成,利用脉冲的时间间隔来区别是0还是1信号(高电平低电平之比约为1:1时被认为是信号0,),而编码就是由这些0 、1信号组成。同一个遥控器的用户码是不变的,用数据吗不同来分辨遥控器按的键不同。当按下遥控器按键时,遥控器发送出红外载波信号,红外接收器接收到信号时程序对载波信号进行解码,通过数据码的不同来判断按下的是哪个键。单片机由接收到的01信号进行解码,由此判断遥控器按下的是什么键。
(编码方式详细参考附件) TC9012红外遥控集成芯片.pdf (282.5 KB, 下载次数: 4367)
芯片编码.png
二、例程:用遥控器控制食人鱼LED灯的亮灭,并用串口输出LED当前状态。
     第一步:下载arduino红外遥控库安装在Libraries目录下。(提供的红外遥控库包含了各种遥控器的发射接收函数,只需调用其内部函数即可轻松使用遥控器进行各种制作) IRremote.zip (23.84 KB, 下载次数: 8406)
     第二步:下载例程(作者使用arduino1.0.1版本)
[mw_shl_code=c,true]
#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); //初始化红外遥控
  pinMode(12,1);
}

void loop() {
  if (irrecv.decode(&results)) {
if(results.value==16753245)      //确认接收到的第一排按键1的编码,此码是预先读出来的按键编码。
  {
  digitalWrite(12,1);                //点亮LED
   Serial.println("turn on LED"); //串口显示开灯
  }
  else if(results.value==16736925)   //确认接收到的第一排按键2的编码
  {
   digitalWrite(12,0);            //熄灭LED
    Serial.println("turn off LED");    //串口显示关灯
  }
    irrecv.resume(); // 接收下一个值
  }
}[/mw_shl_code]
   
第三步:按键操作,观察LED亮灭情况及串口显示器。
DSCF1227_111.jpg


红外控制库发布地址:https://github.com/shirriff/Arduino-IRremote
 楼主| 发表于 2012-8-22 01:21 | 显示全部楼层
lmaq 发表于 2012-8-21 22:19
总是收到 4294967295 或 0   很难收到 正常的键值是什么问题啊

接收到4294967295(十六进制是FFFFFFFF)说明按键一直按着没松开,接收到0,说明在接收过程中什么原因导致数据没有正常接收完。
发表于 2013-3-18 19:27 | 显示全部楼层
海神 发表于 2013-3-18 14:00
你的程序库没有安装对~

谢谢,就是这个问题,解决了
发表于 2012-7-14 11:17 | 显示全部楼层
先学习了~
发表于 2012-8-6 11:37 | 显示全部楼层
如何对万能遥控器进行解码呢
发表于 2012-8-21 22:19 | 显示全部楼层
总是收到 4294967295 或 0   很难收到 正常的键值是什么问题啊
 楼主| 发表于 2012-8-22 01:21 | 显示全部楼层
tywood 发表于 2012-8-6 11:37
如何对万能遥控器进行解码呢

下载库文件,开例程就可以啊~~~
发表于 2012-8-27 13:19 | 显示全部楼层
楼主,弱弱的问下,如果接受到的红外信号,解码不出来怎么办?(用家里空调的遥控器,同一按钮每次解码出来的值不一样,而且不能识别类型(不是平常的NEC,SONY,RC5,RC6等等))....这样的话应该怎么办呢?想遥控空调
 楼主| 发表于 2012-9-13 11:12 | 显示全部楼层
爱上Arduino 发表于 2012-8-27 13:19
楼主,弱弱的问下,如果接受到的红外信号,解码不出来怎么办?(用家里空调的遥控器,同一按钮每次解码出来 ...

库里面解码程序都是按 一般的解码方式解码出来,一般的遥控器编码都一样,但现在很多遥控器编码的波形不同,这个你可以用逻辑分析仪示波器之类的分析下遥控器按键编码,然后再改改相应库额~
发表于 2012-9-14 09:41 | 显示全部楼层
为什么IR_Send38KHZ(280,1); 是9ms? 我看程序里面不是1-9us,0-9us,这样280个周期是280*18us=5ms?
发表于 2012-9-27 09:19 | 显示全部楼层
IRremote.h: No such file or directory。。。
囧,识别不出头文件啊,真心求教肿么回事。。谢谢大大了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|好玩手机游戏盒子|196体育|Arduino爱好者

GMT+8, 2023-10-4 01:09 , Processed in 0.084440 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表