红外遥控完整版.docx
《红外遥控完整版.docx》由会员分享,可在线阅读,更多相关《红外遥控完整版.docx(7页珍藏版)》请在冰豆网上搜索。
![红外遥控完整版.docx](https://file1.bdocx.com/fileroot1/2022-10/25/31a78348-b259-4896-b329-e3556e9ceb25/31a78348-b259-4896-b329-e3556e9ceb251.gif)
红外遥控完整版
红外遥控
1、红外接收头介绍
一、什么是红外接收头?
红外遥控器发出的信号是一连串的二进制脉冲码。
为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发射二极管发射出去,而红外线接收装置则要滤除其他杂波,叧接收该特定频率的信号并将其还原成二进制脉冲码,也就是解调.
二、工作原理
内置接收管将红外发射管发射出来癿光信号转换为微弱的电信号,此信号经由IC内部放大器进行放大,然后通过自动增益控制、带通滤波、解调变、波形整形后还原为遥控器发射出的原始编码,经由接收头的信号输出脚输入到电器上的编码识别电路。
三、红外接收头的引脚与连线
红外接收头有三个引脚如下图:
用的时候将VOUT接到模拟口,GND接到实验板上的GND,VCC接到实验板上的+5v。
红外遥控实验
1、实验器件
⏹红外遥控器:
1个
⏹红外接收头:
1个
⏹LED灯:
6个
⏹220Ω电阻:
6个
⏹多彩面包线:
若干
2、实验连线
首先将板子连接好;接着将红外接收头按照上述方法接好,将VOUT接到数字11口引脚,将LED灯通过电阻接到数字引脚2,3,4,5,6,7。
返样就完成了电路部分的连接。
3、实验原理
要想对某一遥控器进行解码必须要了解该遥控器的编码方式。
本产品使用的控器的码方式为:
NEC协议。
下面就介绍一下NEC协议:
·NEC协议介绍:
特点:
(1)8位地址位,8位命令位
(2)为了可靠性地址位和命令位被传输两次
(3)脉冲位置调制
(4)载波频率38khz
(5)每一位癿时间为1.125ms戒2.25ms
·逻辑0和1的定义如下图
协议如下:
·按键按下立刻松开的发射脉冲:
上面图片显示了NEC的协议典型的脉冲序列。
注意:
这首先发送LSB(最低位)的协议。
在上面癿脉冲传输的地址为0x59命令为0x16。
一个消息是由一个9ms的高电平开始,随后有一个4.5ms的低电平,(返两段电平组成引寻码)然后由地址码和命令码。
地址和命令传输两次。
第二次所有位都取反,可用于对所收到的消息中的确认使用。
总传输时间是恒定的,因为每一点与它取反长度重复。
如果你不感兴趣,你可以忽略这个可靠性取反,也可以扩大地址和命令,以每16位!
按键按下一段时间才松开的发射脉冲:
一个命令发送一次,即使在遥控器上的按键仍然按下。
当按键一直按下时,第一个110ms癿脉冲与上图一样,之后每110ms重复代码传输一次。
返个重复代码是由一个9ms的高电平脉冲和一个2.25ms低电平和560μs癿高电平组成。
·重复脉冲
注意:
脉冲波形进入一体化接收头以后,因为一体化接收头里要迕解码、信号放大和整形,故要注意:
在没有红外信号时,其输出端为高电平,有信号时为低电平,故其输出信号电平正好和发射端相反。
接收端脉冲大家可以通过示波器看到,结合看到的波形理解程序。
遥控器键值:
一排一=0x00FFA25D;一排二=0x00FFE01F;一排三=0x00FF629D;
二排一=0x00FFA857;二排二=0x00FFE21D;二排三=0x00FF906F;
三排一=0x00FF22DD;三排二=0x00FF6897;三排三=0x00FF02FD;
四排一=0x00FF9867;四排二=0x00FFC23D;四排三=0x00FFB047;
程序代码
#include
intRECV_PIN=11;
intLED1=2;
intLED2=3;
intLED3=4;
intLED4=5;
intLED5=6;
intLED6=7;
longon1=0x00FFA25D;
longoff1=0x00FFE01F;
longon2=0x00FF629D;
longoff2=0x00FFA857;
longon3=0x00FFE21D;
longoff3=0x00FF906F;
longon4=0x00FF22DD;
longoff4=0x00FF6897;
longon5=0x00FF02FD;
longoff5=0x00FF9867;
longon6=0x00FFC23D;
longoff6=0x00FFB047;
IRrecvirrecv(RECV_PIN);
decode_resultsresults;
//Dumpsoutthedecode_resultsstructure.
//CallthisafterIRrecv:
:
decode()
//void*toworkaroundcompilerissue
//voiddump(void*v){
//decode_results*results=(decode_results*)v
voiddump(decode_results*results){
intcount=results->rawlen;
if(results->decode_type==UNKNOWN)
{
Serial.println("Couldnotdecodemessage");
}
else
{
if(results->decode_type==NEC)
{
Serial.print("DecodedNEC:
");
}
elseif(results->decode_type==SONY)
{
Serial.print("DecodedSONY:
");
}
elseif(results->decode_type==RC5)
{
Serial.print("DecodedRC5:
");
}
elseif(results->decode_type==RC6)
{
Serial.print("DecodedRC6:
");
}
Serial.print(results->value,HEX);
Serial.print("(");
Serial.print(results->bits,DEC);
Serial.println("bits)");
}
Serial.print("Raw(");
Serial.print(count,DEC);
Serial.print("):
");
for(inti=0;i{
if((i%2)==1){
Serial.print(results->rawbuf[i]*USECPERTICK,DEC);
}
else
{
Serial.print(-(int)results->rawbuf[i]*USECPERTICK,DEC);
}
Serial.print("");
}
Serial.println("");
}
voidsetup()
{
pinMode(RECV_PIN,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
pinMode(LED6,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();//Startthereceiver
}
inton=0;
unsignedlonglast=millis();
voidloop()
{
if(irrecv.decode(&results))
{
//Ifit'sbeenatleast1/4secondsincethelast
//IRreceived,toggletherelay
if(millis()-last>250)
{
on=!
on;
//digitalWrite(8,on?
HIGH:
LOW);
digitalWrite(13,on?
HIGH:
LOW);
dump(&results);
}
if(results.value==on1)
digitalWrite(LED1,HIGH);
if(results.value==off1)
digitalWrite(LED1,LOW);
if(results.value==on2)
digitalWrite(LED2,HIGH);
if(results.value==off2)
digitalWrite(LED2,LOW);
if(results.value==on3)
digitalWrite(LED3,HIGH);
if(results.value==off3)
digitalWrite(LED3,LOW);
if(results.value==on4)
digitalWrite(LED4,HIGH);
if(results.value==off4)
digitalWrite(LED4,LOW);
if(results.value==on5)
digitalWrite(LED5,HIGH);
if(results.value==off5)
digitalWrite(LED5,LOW);
if(results.value==on6)
digitalWrite(LED6,HIGH);
if(results.value==off6)
digitalWrite(LED6,LOW);
last=millis();
irrecv.resume();//Receivethenextvalue
}
}
五、程序功能
对遥控器发射出来的编码脉冲进行解码,根据解码结果执行相应的动作。
返样大家就可以用遥控器遥控你的器件了,让它听你的指挥。