学习Arduino:红外遥控器实验

实验所需元件

  • 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 和淘宝网。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注