Arduino之红外遥控的制作——基础



Arduino之红外遥控的制作——基础一、红外遥控制作——基础

1、作品应用目的:制作红外遥控器,可代替电视机顶盒的遥控对其进行控制。
2、所需设备材料:
1)、arduino uno板子 x1
2)、arduino 扩展板 x1
3)、红外接收模块 x1
4)、红外发射模块 x1
5)、电视机顶盒遥控器 x1
6)、跳线 x2
3、制作的原理:电视机顶盒遥控利用红外发射编码对机顶盒进行控制;获取机顶盒遥控的红外发射码,同时利用红外发射模块发射相同的红外码就可对机顶盒进行控制。
4、获取电视机顶盒遥控红外编码:
Arduino之红外遥控的制作——基础
Arduino之红外遥控的制作——基础
——————————获取遥控红外发射编码—————————————————
#include                    // 引用 IRRemote 函式库
const int irReceiverPin = 12;             // 红外线接收器 OUTPUT 讯号接在 pin 2
IRrecv irrecv(irReceiverPin);            // 定义 IRrecv 物件来接收红外线讯号
decode_results results;                  // 解码结果将放在 decode_results 结构的 result 变数里
void setup()
{
  Serial.begin(9600);                     // 开启 Serial port, 通讯速率为 9600 bps
  irrecv.enableIRIn();                   // 启动红外线解码
  Serial.print(“begin:\n”);
}
// 显示红外线协定种类
void showIRProtocol(decode_results *results) 
{
  Serial.print(“Protocol: “);
  
  // 判断红外线协定种类
  switch(results->decode_type) {
   case NEC:
     Serial.print(“NEC”);
     break;
   case SONY:
     Serial.print(“SONY”);
     break;
   case RC5:
     Serial.print(“RC5″);
     break;
   case RC6:
     Serial.print(“RC6″);
     break;
   default:
     Serial.print(“Unknown encoding”);  
  }  
  // 把红外线编码印到 Serial port
  Serial.print(“, irCode: “);            
  Serial.print(results->value, HEX);    // 红外线编码
  Serial.print(“,  bits: “);           
  Serial.println(results->bits);        // 红外线编码位元数    
}
void loop() 
{
  if (irrecv.decode(&results)) {         // 解码成功,收到一组红外线讯号
    showIRProtocol(&results);            // 显示红外线协定种类
    irrecv.resume();                     // 继续收下一组红外线讯号        
  }  
}
———————————————————————————

Arduino之红外遥控的制作——基础

机顶盒遥控上数字1至9及0的红外编码如下:
Protocol: NEC, irCode: 806F807F,  bits: 32  //数字1
Protocol: NEC, irCode: 806F40BF,  bits: 32  //数字2
Protocol: NEC, irCode: 806FC03F,  bits: 32  //数字3
Protocol: NEC, irCode: 806F20DF,  bits: 32  //数字4
Protocol: NEC, irCode: 806FA05F,  bits: 32  //数字5
Protocol: NEC, irCode: 806F609F,  bits: 32  //数字6
Protocol: NEC, irCode: 806FE01F,  bits: 32  //数字7
Protocol: NEC, irCode: 806F10EF,  bits: 32  //数字8
Protocol: NEC, irCode: 806F906F,  bits: 32  //数字9
Protocol: NEC, irCode: FFFFFFFF,  bits: 0   //重复码
Protocol: NEC, irCode: 806F00FF,  bits: 32  //数字0
—————————————————————————————————
————利用红外发射模块,每五秒钟依次发送数字键0至9的红外编码—————
#include  
IRsend irsend; 
void ircodeSEND()
{
  irsend.sendNEC(0x806F00FF, 32); // channel 0  红外发射码前需要加上“0x”
  delay(5000);
  irsend.sendNEC(0x806F807F, 32); //channel 1 
  delay(5000);
  irsend.sendNEC(0x806F40BF, 32); //channel 2
  delay(5000);
  irsend.sendNEC(0x806FC03F, 32); //channel 3
  delay(5000);
  irsend.sendNEC(0x806F20DF, 32); //channel 4
  delay(5000);
  irsend.sendNEC(0x806FA05F, 32); //channel 5
  delay(5000);
  irsend.sendNEC(0x806F609F, 32); //channel 6
  delay(5000);
  irsend.sendNEC(0x806FE01F, 32); //channel 7
  delay(5000);
  irsend.sendNEC(0x806F10EF, 32); //channel 8
  delay(5000);
  irsend.sendNEC(0x806F906F, 32); //channel 9
  delay(5000);
void setup()
{
  pinMode(3,OUTPUT);
  Serial.begin(9600);
void loop() 
{
 ircodeSEND(); 
}
——————————————————————————
下载完程序后,就可接上外接电源,在机顶盒前进行测试,控制电视频道啦!

Arduino之红外遥控的制作——基础

5、思考:目前的红外遥控控制机顶盒只限于固定的0至9红外码的顺序发送,可否进一步升级,与arduino其他模块结合对电视机顶盒进行多样化的控制呢?此问题,将在下一博文中进行研究;也欢迎大家提供更好的控制形式或方法,若本文有错误之处也请批评指正!谢谢!