Arduino之红外遥控的制作——基础一、红外遥控制作——基础
1、作品应用目的:制作红外遥控器,可代替电视机顶盒的遥控对其进行控制。
2、所需设备材料:
1)、arduino uno板子 x12)、arduino 扩展板 x13)、红外接收模块 x14)、红外发射模块 x15)、电视机顶盒遥控器 x16)、跳线 x2
3、制作的原理:电视机顶盒遥控利用红外发射编码对机顶盒进行控制;获取机顶盒遥控的红外发射码,同时利用红外发射模块发射相同的红外码就可对机顶盒进行控制。
4、获取电视机顶盒遥控红外编码:
——————————获取遥控红外发射编码—————————————————
#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(); // 继续收下一组红外线讯号 } }
———————————————————————————
机顶盒遥控上数字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的红外编码—————
#includeIRsend 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(); }
——————————————————————————
下载完程序后,就可接上外接电源,在机顶盒前进行测试,控制电视频道啦!
5、思考:目前的红外遥控控制机顶盒只限于固定的0至9红外码的顺序发送,可否进一步升级,与arduino其他模块结合对电视机顶盒进行多样化的控制呢?此问题,将在下一博文中进行研究;也欢迎大家提供更好的控制形式或方法,若本文有错误之处也请批评指正!谢谢!