实验所需元件
- Arduino UNO
- 红外接收管 1个
- mini遥控器 1个
- LED 1枚
- 220欧电阻 1个
- 接线
- 面包板
元件介绍
红外接收管
使用的红外接收管型号为LF1838B。它有3个引脚,分别为 out(信号输出)、GND(地)、Vcc(电源正极)。
实物图如下:
mini遥控器
又叫mp3遥控器,淘宝上很容易找到,总共3×7个按键。实物图如下:
遥控原理
遥控器按下后会发出对应按键波长下的红外线,红外接收管接收到红外线信号交给Arduino,Arduino调用红外信号库(IRremote)中的对应函数对所获的信号进行解码,解码后再交给程序执行部分进行相应的操作。
Arduino IDE中默认没有这个库,需要自己手动添加到Arduino的Libraries中。
解码准备
该迷你遥控器的对应按键解码后是多少呢?不同遥控器是不一样的,不能一概而论。具体我们可以用下面这个程序逐一试验一下,然后记录下每个按键的对应值,方便我们以后使用。
程序如下:
[cc lang=”c”]
/*
程序说明:解码红外遥控器
*/
#include
int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11
IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号
decode_results results; //解码结果放在decode_results构造的对象results里
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 启动红外解码
}
void loop() {
if (irrecv.decode(&results)) {
// 解码成功,收到一组红外线信号
Serial.print(“irCode: “);
Serial.print(results.value,HEX); // 输出红外线解码结果(十六进制)
//results.value 是unsigned long型,头文件有介绍
delay(100); //按键消抖
Serial.print(“, bits: “);
Serial.println(results.bits); // 红外线码元位数
irrecv.resume();
}
}
[/cc]
我用的遥控器每个键的信号值是:
按排数,从左到右。
一排
irCode: FFA25D, bits: 32 电源
irCode: FF629D, bits: 32 Mode
irCode: FFE21D, bits: 32 静音
二排
irCode: FF22DD, bits: 32 暂停/播放
irCode: FF02FD, bits: 32 上一曲
irCode: FFC23D, bits: 32 下一曲
三排
irCode: FFE01F, bits: 32 EQ音效
irCode: FFA857, bits: 32 音量减小
irCode: FF906F, bits: 32 音量增加
四排
irCode: FF6897, bits: 32 数字0
irCode: FF9867, bits: 32 循环
irCode: FFB04F, bits: 32 u盘SD卡切换 U/SD
五排
irCode: FF30CF, bits: 32 数字1
irCode: FF18E7, bits: 32 数字2
irCode: FF7A85, bits: 32 数字3
六排
irCode: FF10EF, bits: 32 数字4
irCode: FF38C7, bits: 32 数字5
irCode: FF5AA5, bits: 32 数字6
七排
irCode: FF42BD, bits: 32 数字7
irCode: FF4AB5, bits: 32 数字8
irCode: FF52AD, bits: 32 数字9
开始实验
知道了这些,我们就可以开始实验了。
将红外接收管的Vcc 接控制板5V 接口,OUT 接Digital 11 口,GND接负极;
LED 灯正极接Digital 10 口,负极通过220 欧电阻接GND。
实验电路如下(图中红色线表示5V 电源线,黑色线表示GND 线,蓝色是信号控制线):
输入如下代码,下载到Arduino中就可以了。
程序代码:
[cc lang=”c”]
/*
红外遥控实验
*/
#include
int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11
int LED = 10; // 定义LED引脚为11
int bee=3; //定义蜂鸣器的引脚为数字引脚3
IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号
decode_results results; //解码结果放在decode_results构造的对象results里
void irdisplay(unsigned long value) // 按下按键后,显示本遥控对应的按键
{
switch(value){ //判定按下的是哪个按键,串口显示按钮名称
case 0xFFA25D:
digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯
digitalWrite(bee, LOW); //执行关闭蜂鸣器
break;
case 0xFF629D:
digitalWrite(bee, HIGH); //MODE键按下,蜂鸣器响
break;
case 0xFFE21D:
digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯
break;
}
}
void setup()
{
pinMode(LED,OUTPUT); // 定义LED为输出引脚
pinMode(bee,OUTPUT);
Serial.begin(9600); //开启串口通信,并设定波特率为9600
irrecv.enableIRIn(); //启动红外解码
}
void loop() {
if (irrecv.decode(&results))
{//解码成功,收到一组红外线信号
irdisplay(results.value);
irrecv.resume();
}
}
[/cc]
参考文档:http://www.yfrobot.com/forum.php?mod=viewthread&tid=2244&extra=page%3D1
图片来自 www.yfrobot.com 和淘宝网。