只需一步,快速开始
签到天数: 867 天
[LV.10]以坛为家III
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。这次实验我们就做一个遥控LED 灯实验。 实验元件:
UNO 实验套装(UNO兼容板一块、USB数据线一根、优质面包板一块、彩色面包板线若干 )
红外接收管 一个
mini遥控器 一个
LED 一枚
电阻220欧 一个
我们使用的红外接收管型号为HS0038,它有3个引脚分别为 out(信号输出)、GND(地)、Vcc(电源正极);实物图如下: 登录/注册后可看大图 红外接收管.jpg (148.8 KB, 下载次数: 157) 下载附件 2013-6-8 09:37 上传 下图为mini遥控器(使用是将薄膜抽掉,它的作用是绝缘,防止电池工作): 登录/注册后可看大图 遥控器.jpg (149.23 KB, 下载次数: 142) 下载附件 2013-6-8 09:38 上传 红外遥控原理框图: 登录/注册后可看大图 红外遥控系统框图.jpg (31.67 KB, 下载次数: 134) 下载附件 2013-6-8 09:51 上传 将HS0038 的Vcc 接控制板5V 接口,OUT 接Digital 11 口,GND接负极;LED 灯正极接Digital 10 口,负极通过220 欧电阻接GND;实验电路如下: 登录/注册后可看大图 红外遥控电路图.jpg (180 KB, 下载次数: 133) 下载附件 2013-6-8 11:00 上传 实验例程:/* 红外遥控实验 */ #include <IRremote.h> int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11 int LED = 10; // 定义LED引脚为11 IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号 decode_results results; //解码结果放在decode_results构造的对象results里 void irdisplay(unsigned long value) // 按下按键后,显示本遥控对应的按键 { switch(value){ //判定按下的是哪个按键,串口显示按钮名称 case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break; case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; } } void setup() { pinMode(LED,OUTPUT); // 定义LED为输出引脚 Serial.begin(9600); //开启串口通信,并设定波特率为9600 irrecv.enableIRIn(); //启动红外解码 } void loop() { if (irrecv.decode(&results)) {//解码成功,收到一组红外线信号 irdisplay(results.value); irrecv.resume(); } }复制代码我们先用函数irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象会在后台接收红外线信号,接着就可以利用decode()函数持续检查,看看有没有解码成功。irrecv.decode(&results) 解码成功,这个函数会返回true,并把结果放在results 里面,在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号。将程序上传控制板后,我们用遥控器指向红外接收头,按下绿色静音按钮,LED 灯被点亮,按下红色电源按钮,LED 熄灭。程序中所调用的库文件: IRremote.rar (21.95 KB, 下载次数: 796) 2013-6-8 11:14 上传 点击文件名下载附件 红外遥控库文件 (库文件使用方法:1.解压压缩红外遥控器解码库文件夹中文件:IRremote.rar 2.把解压出来的文件复制到 arduino/libraries 中 3.重新启动arduino IDE就可以编辑了) 程序中:case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break;case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; 红色字为按钮的值,蓝色字为点亮与熄灭LED;LED的点亮与熄灭语句相信大家再熟悉不过了,但是按钮值是怎么得到的呢?电路图如下(电路基本没变,只是去掉了LED): 登录/注册后可看大图 红外接收实验.jpg (80.86 KB, 下载次数: 135) 下载附件 2013-8-15 20:21 上传 下面我们通过一个程序来读出所有按钮的值:/* 程序说明:解码红外遥控器 */ #include <IRremote.h> 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(); } }复制代码上传程序后,打开串口监视器,按下MINI遥控器上的各按钮,可以看到: 登录/注册后可看大图 红外解码.jpg (45.9 KB, 下载次数: 125) 下载附件 2013-6-8 13:21 上传 串口监视中看到的值,就是按钮的值!
红外接收管.jpg (148.8 KB, 下载次数: 157)
下载附件
2013-6-8 09:37 上传
下图为mini遥控器(使用是将薄膜抽掉,它的作用是绝缘,防止电池工作): 登录/注册后可看大图 遥控器.jpg (149.23 KB, 下载次数: 142) 下载附件 2013-6-8 09:38 上传 红外遥控原理框图: 登录/注册后可看大图 红外遥控系统框图.jpg (31.67 KB, 下载次数: 134) 下载附件 2013-6-8 09:51 上传 将HS0038 的Vcc 接控制板5V 接口,OUT 接Digital 11 口,GND接负极;LED 灯正极接Digital 10 口,负极通过220 欧电阻接GND;实验电路如下: 登录/注册后可看大图 红外遥控电路图.jpg (180 KB, 下载次数: 133) 下载附件 2013-6-8 11:00 上传 实验例程:/* 红外遥控实验 */ #include <IRremote.h> int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11 int LED = 10; // 定义LED引脚为11 IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号 decode_results results; //解码结果放在decode_results构造的对象results里 void irdisplay(unsigned long value) // 按下按键后,显示本遥控对应的按键 { switch(value){ //判定按下的是哪个按键,串口显示按钮名称 case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break; case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; } } void setup() { pinMode(LED,OUTPUT); // 定义LED为输出引脚 Serial.begin(9600); //开启串口通信,并设定波特率为9600 irrecv.enableIRIn(); //启动红外解码 } void loop() { if (irrecv.decode(&results)) {//解码成功,收到一组红外线信号 irdisplay(results.value); irrecv.resume(); } }复制代码我们先用函数irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象会在后台接收红外线信号,接着就可以利用decode()函数持续检查,看看有没有解码成功。irrecv.decode(&results) 解码成功,这个函数会返回true,并把结果放在results 里面,在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号。将程序上传控制板后,我们用遥控器指向红外接收头,按下绿色静音按钮,LED 灯被点亮,按下红色电源按钮,LED 熄灭。程序中所调用的库文件: IRremote.rar (21.95 KB, 下载次数: 796) 2013-6-8 11:14 上传 点击文件名下载附件 红外遥控库文件 (库文件使用方法:1.解压压缩红外遥控器解码库文件夹中文件:IRremote.rar 2.把解压出来的文件复制到 arduino/libraries 中 3.重新启动arduino IDE就可以编辑了) 程序中:case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break;case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; 红色字为按钮的值,蓝色字为点亮与熄灭LED;LED的点亮与熄灭语句相信大家再熟悉不过了,但是按钮值是怎么得到的呢?电路图如下(电路基本没变,只是去掉了LED): 登录/注册后可看大图 红外接收实验.jpg (80.86 KB, 下载次数: 135) 下载附件 2013-8-15 20:21 上传 下面我们通过一个程序来读出所有按钮的值:/* 程序说明:解码红外遥控器 */ #include <IRremote.h> 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(); } }复制代码上传程序后,打开串口监视器,按下MINI遥控器上的各按钮,可以看到: 登录/注册后可看大图 红外解码.jpg (45.9 KB, 下载次数: 125) 下载附件 2013-6-8 13:21 上传 串口监视中看到的值,就是按钮的值!
遥控器.jpg (149.23 KB, 下载次数: 142)
2013-6-8 09:38 上传
红外遥控原理框图: 登录/注册后可看大图 红外遥控系统框图.jpg (31.67 KB, 下载次数: 134) 下载附件 2013-6-8 09:51 上传 将HS0038 的Vcc 接控制板5V 接口,OUT 接Digital 11 口,GND接负极;LED 灯正极接Digital 10 口,负极通过220 欧电阻接GND;实验电路如下: 登录/注册后可看大图 红外遥控电路图.jpg (180 KB, 下载次数: 133) 下载附件 2013-6-8 11:00 上传 实验例程:/* 红外遥控实验 */ #include <IRremote.h> int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11 int LED = 10; // 定义LED引脚为11 IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号 decode_results results; //解码结果放在decode_results构造的对象results里 void irdisplay(unsigned long value) // 按下按键后,显示本遥控对应的按键 { switch(value){ //判定按下的是哪个按键,串口显示按钮名称 case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break; case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; } } void setup() { pinMode(LED,OUTPUT); // 定义LED为输出引脚 Serial.begin(9600); //开启串口通信,并设定波特率为9600 irrecv.enableIRIn(); //启动红外解码 } void loop() { if (irrecv.decode(&results)) {//解码成功,收到一组红外线信号 irdisplay(results.value); irrecv.resume(); } }复制代码我们先用函数irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象会在后台接收红外线信号,接着就可以利用decode()函数持续检查,看看有没有解码成功。irrecv.decode(&results) 解码成功,这个函数会返回true,并把结果放在results 里面,在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号。将程序上传控制板后,我们用遥控器指向红外接收头,按下绿色静音按钮,LED 灯被点亮,按下红色电源按钮,LED 熄灭。程序中所调用的库文件: IRremote.rar (21.95 KB, 下载次数: 796) 2013-6-8 11:14 上传 点击文件名下载附件 红外遥控库文件 (库文件使用方法:1.解压压缩红外遥控器解码库文件夹中文件:IRremote.rar 2.把解压出来的文件复制到 arduino/libraries 中 3.重新启动arduino IDE就可以编辑了) 程序中:case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break;case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; 红色字为按钮的值,蓝色字为点亮与熄灭LED;LED的点亮与熄灭语句相信大家再熟悉不过了,但是按钮值是怎么得到的呢?电路图如下(电路基本没变,只是去掉了LED): 登录/注册后可看大图 红外接收实验.jpg (80.86 KB, 下载次数: 135) 下载附件 2013-8-15 20:21 上传 下面我们通过一个程序来读出所有按钮的值:/* 程序说明:解码红外遥控器 */ #include <IRremote.h> 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(); } }复制代码上传程序后,打开串口监视器,按下MINI遥控器上的各按钮,可以看到: 登录/注册后可看大图 红外解码.jpg (45.9 KB, 下载次数: 125) 下载附件 2013-6-8 13:21 上传 串口监视中看到的值,就是按钮的值!
红外遥控系统框图.jpg (31.67 KB, 下载次数: 134)
2013-6-8 09:51 上传
将HS0038 的Vcc 接控制板5V 接口,OUT 接Digital 11 口,GND接负极;LED 灯正极接Digital 10 口,负极通过220 欧电阻接GND;
实验电路如下: 登录/注册后可看大图 红外遥控电路图.jpg (180 KB, 下载次数: 133) 下载附件 2013-6-8 11:00 上传 实验例程:/* 红外遥控实验 */ #include <IRremote.h> int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11 int LED = 10; // 定义LED引脚为11 IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号 decode_results results; //解码结果放在decode_results构造的对象results里 void irdisplay(unsigned long value) // 按下按键后,显示本遥控对应的按键 { switch(value){ //判定按下的是哪个按键,串口显示按钮名称 case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break; case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; } } void setup() { pinMode(LED,OUTPUT); // 定义LED为输出引脚 Serial.begin(9600); //开启串口通信,并设定波特率为9600 irrecv.enableIRIn(); //启动红外解码 } void loop() { if (irrecv.decode(&results)) {//解码成功,收到一组红外线信号 irdisplay(results.value); irrecv.resume(); } }复制代码我们先用函数irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象会在后台接收红外线信号,接着就可以利用decode()函数持续检查,看看有没有解码成功。irrecv.decode(&results) 解码成功,这个函数会返回true,并把结果放在results 里面,在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号。将程序上传控制板后,我们用遥控器指向红外接收头,按下绿色静音按钮,LED 灯被点亮,按下红色电源按钮,LED 熄灭。程序中所调用的库文件: IRremote.rar (21.95 KB, 下载次数: 796) 2013-6-8 11:14 上传 点击文件名下载附件 红外遥控库文件 (库文件使用方法:1.解压压缩红外遥控器解码库文件夹中文件:IRremote.rar 2.把解压出来的文件复制到 arduino/libraries 中 3.重新启动arduino IDE就可以编辑了) 程序中:case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break;case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; 红色字为按钮的值,蓝色字为点亮与熄灭LED;LED的点亮与熄灭语句相信大家再熟悉不过了,但是按钮值是怎么得到的呢?电路图如下(电路基本没变,只是去掉了LED): 登录/注册后可看大图 红外接收实验.jpg (80.86 KB, 下载次数: 135) 下载附件 2013-8-15 20:21 上传 下面我们通过一个程序来读出所有按钮的值:/* 程序说明:解码红外遥控器 */ #include <IRremote.h> 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(); } }复制代码上传程序后,打开串口监视器,按下MINI遥控器上的各按钮,可以看到: 登录/注册后可看大图 红外解码.jpg (45.9 KB, 下载次数: 125) 下载附件 2013-6-8 13:21 上传 串口监视中看到的值,就是按钮的值!
红外遥控电路图.jpg (180 KB, 下载次数: 133)
2013-6-8 11:00 上传
实验例程:
我们先用函数irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象会在后台接收红外线信号,接着就可以利用decode()函数持续检查,看看有没有解码成功。irrecv.decode(&results) 解码成功,这个函数会返回true,并把结果放在results 里面,在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号。
将程序上传控制板后,我们用遥控器指向红外接收头,按下绿色静音按钮,LED 灯被点亮,按下红色电源按钮,LED 熄灭。
程序中所调用的库文件: IRremote.rar (21.95 KB, 下载次数: 796) 2013-6-8 11:14 上传 点击文件名下载附件 红外遥控库文件 (库文件使用方法:1.解压压缩红外遥控器解码库文件夹中文件:IRremote.rar 2.把解压出来的文件复制到 arduino/libraries 中 3.重新启动arduino IDE就可以编辑了) 程序中:case 0xFFA25D: digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break;case 0xFFE21D: digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; 红色字为按钮的值,蓝色字为点亮与熄灭LED;LED的点亮与熄灭语句相信大家再熟悉不过了,但是按钮值是怎么得到的呢?电路图如下(电路基本没变,只是去掉了LED): 登录/注册后可看大图 红外接收实验.jpg (80.86 KB, 下载次数: 135) 下载附件 2013-8-15 20:21 上传 下面我们通过一个程序来读出所有按钮的值:/* 程序说明:解码红外遥控器 */ #include <IRremote.h> 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(); } }复制代码上传程序后,打开串口监视器,按下MINI遥控器上的各按钮,可以看到: 登录/注册后可看大图 红外解码.jpg (45.9 KB, 下载次数: 125) 下载附件 2013-6-8 13:21 上传 串口监视中看到的值,就是按钮的值!
程序中:
case 0xFFA25D:
digitalWrite(LED, LOW); //电源键按下,执行关闭LED灯 break;
case 0xFFE21D:
digitalWrite(LED, HIGH); //静音键按下,执行点亮LED灯 break; 红色字为按钮的值,蓝色字为点亮与熄灭LED;LED的点亮与熄灭语句相信大家再熟悉不过了,但是按钮值是怎么得到的呢?
电路图如下(电路基本没变,只是去掉了LED):
红外接收实验.jpg (80.86 KB, 下载次数: 135)
2013-8-15 20:21 上传
下面我们通过一个程序来读出所有按钮的值:
上传程序后,打开串口监视器,按下MINI遥控器上的各按钮,可以看到: 登录/注册后可看大图 红外解码.jpg (45.9 KB, 下载次数: 125) 下载附件 2013-6-8 13:21 上传 串口监视中看到的值,就是按钮的值!
红外解码.jpg (45.9 KB, 下载次数: 125)
2013-6-8 13:21 上传
使用道具 举报
签到天数: 3 天
[LV.2]偶尔看看I
签到天数: 22 天
[LV.4]偶尔看看III
该用户从未签到
AllBlue 发表于 2016-10-24 08:28 你这是什么程序,找不到IRremote.h文件?
1095630341 发表于 2016-10-23 00:09 本来也是库文件冲突,按照你的方法修改后成了这样: IRrecvDemo.ino:3:22: fatal error: IRremote.h: No s ...
签到天数: 27 天
AllBlue 发表于 2015-11-27 17:39 Serial.print(); Serial.println();打印换行
johnny228 发表于 2015-11-25 09:24 mac系统里面的Arduino好像就是windows里面游戏的硬盘版一样 就一个audrino的app标志 连安装都没有 唉 ...
AllBlue 发表于 2015-11-23 08:51 没用过MAC系统,不太清楚,你可以找到arduino 库文件的路径吗?找到的话这个文件应该就在那里吧~
johnny228 发表于 2015-11-21 21:52 因为在编译的时候也出现'TKD2' was not declared 这个问题了。。。。。然后看到你们的修改库文件的解决办 ...
本版积分规则 发表回复
|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2 )
GMT+8, 2024-11-22 02:13 , Processed in 0.058480 second(s), 31 queries .
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.