查看: 220130|回复: 86

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, 下载次数: 4348)
芯片编码.png
二、例程:用遥控器控制食人鱼LED灯的亮灭,并用串口输出LED当前状态。
     第一步:下载arduino红外遥控库安装在Libraries目录下。(提供的红外遥控库包含了各种遥控器的发射接收函数,只需调用其内部函数即可轻松使用遥控器进行各种制作) IRremote.zip (23.84 KB, 下载次数: 8371)
     第二步:下载例程(作者使用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。。。
囧,识别不出头文件啊,真心求教肿么回事。。谢谢大大了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

原价299元【语音开发板套件】限时免费领!
原价299元【语音开发板套
教你让OLED动起来!多重字符串版!
教你让OLED动起来!多重字
大家都知道:arduino单片机是单线程的 而上次教程中的多段字符串的运行速度必须一致
TTGO T8 1.7.1使用TFT_eSPI库驱动2.4寸ILI9341屏幕显示板载SD内图片
TTGO T8 1.7.1使用TFT_eSP
TTGO T8 1.7.1采用Espressif官方ESP32-WROVER模块制作,4MB闪存和8MB PSRAM,支持TF
TTGO TFT屏幕Arduino使用的小结
TTGO TFT屏幕Arduino使用
TTGO TFT屏幕是一款ESP32和1.44寸LCD屏幕组合的产品,屏幕由ST7789驱动。ESP32自带520
分享我的第一个点灯程序——家庭控制中心
分享我的第一个点灯程序—
2020年,在B站上初识ESP8266,被ESP8266的低门槛、高性价比深深吸引,2020年6月20日,
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表