查看: 29114|回复: 25

[基础教程] DFR0100 Arduino教程 15--红外接收

[复制链接]
该教程实验平台:Arduino入门套件
上一篇教程:
Arduino教程 Lesson 14--自制风扇
这节我们会接触一个新的元件——红外接收管。所谓红外接收管,也就是接收红外光的电子器件。红外接收管,看着离我们很遥远的感觉!其实不然,它就在我们身边。比如我们电视机,空调这些家电,其实它们都需要用到红外接收管。我们都知道遥控器发射出来的都是红外光,电视机上势必要有红外接收管,才能接收到遥控器发过来的红外信号。

我们这次就用红外接收管做个遥控灯,通过遥控器的红色电源键来控制LED的开关。

所需材料
  • 1×   红外接收管
  • 1×  Mini遥控器

STEP 1: 硬件连接
看着是不是很高兴,这应该是我们看到最容易的连线了,只需要连接三根线就可以了,注意一下正负就可以了(图中表明部分)。红外接收管Vout输出接到数字引脚11。
11.jpg

STEP 2: 输入代码
这段代码,你可以不用自己手动输入,我们提供现成的IRremote库,把整个库的压缩包解压到Arduino IDE安装位置Arduino 1.0.5/ libraries文件夹中,直接运行Example中的IRrecvDemo代码即可。如果还是不是很明白如何加载库,可看一下如何加载库的帖子,对如何加库做了详细说明。
  1. //这段代码来自IRremote库中examples中的 IRrecvDemo
  2. #include <IRremote.h>          //调用IRremote.h库
  3. int RECV_PIN = 11;             //定义RECV_PIN变量为11
  4. IRrecv irrecv(RECV_PIN);       //设置RECV_PIN(也就是11引脚)为红外接收端
  5. decode_results results;        //定义results变量为红外结果存放位置

  6. void setup(){
  7.      Serial.begin(9600);          //串口波特率设为9600
  8.      irrecv.enableIRIn();         //启动红外解码
  9. }

  10. void loop() {
  11.      //是否接收到解码数据,把接收到的数据存储在变量results中
  12.      if (irrecv.decode(&results)) {  
  13.             //接收到的数据以16进制的方式在串口输出
  14.             Serial.println(results.value, HEX);
  15.             irrecv.resume();  // 继续等待接收下一组信号
  16.       }
  17. }
复制代码
下载完成后,打开Arduino IDE的串口监视器(Serial Monitor),设置波特率baud为9600,与代码中Serial.begin(9600)相匹配。

3.png

设置完后,用Mini遥控器的按钮对着红外接收管的方向,任意按个按钮,我们都能在串口监视器上看到相对应的代码。如下图所示,按数字“0”,接收到对应16进制的代码是FD30CF。每个按钮都有一个特定的16进制的代码。
4.png

如果按住常按一个键不放就是出现“FFFFFFFF”。

5.png

在串口中,正确接收的话,应该收到以FD-开头的六位数。如果遥控器没有对准红外接收管的话,可能会接收到错误的代码。如我们下图所示:
6.png

上面这段代码我们没有像以前一样一步一步做详细说明,原因就是由于红外解码较为复杂,所幸的是,高手把这些难的工作已经做好了,提供给我们这个IRremote库,我们只需要会用就可以了,先不需要弄明白函数内部如何工作的。要用的时候,把代码原样搬过来就好了。照猫画虎,先用起来再说~

预热完之后,我们下一节开始制作遥控灯。^_^


下一篇教程:Arduino教程 Lesson 16--遥控灯


IRremote.rar (30.66 KB, 下载次数: 1613)

yoyojacky  初级技匠

发表于 2014-11-6 00:58:25

学习了。
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2014-11-7 09:47:52

回复

使用道具 举报

a82107335  学徒

发表于 2015-2-9 13:52:42

回复

使用道具 举报

iatgm  见习技师

发表于 2015-5-28 22:54:06

本帖最后由 iatgm 于 2015-5-28 23:15 编辑

我遥控器对准红外接收管,也接收到错误的代码,请问一下,是怎么回事。
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2015-6-1 18:03:46

iatgm 发表于 2015-5-28 22:54
我遥控器对准红外接收管,也接收到错误的代码,请问一下,是怎么回事。
...

接收到错误信号的概率大吗?
回复

使用道具 举报

siska  初级技师

发表于 2015-7-17 16:11:25

构建选项已变更,全部重新构建

D:\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope
int RECV_PIN = TKD2; // the pin the IR receiver is connected to
                ^
编译有误。

  报告将会包含更多的信息
  "在编译时,输出详细信息"
  在 文件>首选项 中启用

这是怎么回事,代码跟LZ你的一模一样
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2015-7-17 18:19:57

siska 发表于 2015-7-17 16:11
构建选项已变更,全部重新构建

D:\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error:  ...

你是不是没有加载库呀?
回复

使用道具 举报

siska  初级技师

发表于 2015-7-17 23:01:14

Jane 发表于 2015-7-17 18:19
你是不是没有加载库呀?

是啊是啊,我太马虎了
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2015-7-30 11:14:44

siska 发表于 2015-7-17 23:01
是啊是啊,我太马虎了

下回就攒经验了~
回复

使用道具 举报

EricKong  学徒

发表于 2015-7-30 19:02:11

210的入门set里的IR错误率实在太高了。。。。简直不忍直视啊!!!!!!
回复

使用道具 举报

EricKong  学徒

发表于 2015-7-30 19:02:30

210的入门set里的IR错误率实在太高了。。。。简直不忍直视啊!!!!!!
回复

使用道具 举报

EricKong  学徒

发表于 2015-7-31 10:46:24

我是来认错的,是我代码的问题,与delay有关,改成如下就没问题。
   
//是否接收到解码数据,把接收到的数据存储在变量results_cur中
    if (irrecv.decode(&results_cur))
    {
        //接收到的数据以16进制的方式在串口输出
        Serial.println(results_cur.value, HEX);

        //用IR控制伺服电机
        if(results_cur.value != results_pre.value)
        {
          process_servo(results_cur.value); // 根据IR输入控制伺服电机旋转角度
          delay(10);                        // 等待伺服电机旋转角度
          results_pre = results_cur;      
        }
        
        irrecv.resume();                    // 继续等待接收下一组信号
    }
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2015-7-31 15:03:15

EricKong 发表于 2015-7-31 10:46
我是来认错的,是我代码的问题,与delay有关,改成如下就没问题。

哈哈哈~没事儿
回复

使用道具 举报

diaosiki  见习技师

发表于 2016-1-5 17:03:19

成功接收到红外信号如下图:
屏幕快照 2016-01-05 下午4.59.36.png
然而过程中仍存在疑问:在将IRremote库加载后,编译虽然成功,但是出现了这样的告警字样:

IRremote.h" 对应多个库
已使用: /Users/diaosiji/Documents/Arduino.app/Contents/Java/libraries/IRremote
未使用:/Users/diaosiji/Documents/Arduino.app/Contents/Java/libraries/RobotIRremote

请问这个问题是为什么,如何消除?
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2016-1-13 18:39:46

diaosiki 发表于 2016-1-5 17:03
成功接收到红外信号如下图:

然而过程中仍存在疑问:在将IRremote库加载后,编译虽然成功,但是出现了这样 ...

那是不是库没有加载对?
回复

使用道具 举报

diaosiki  见习技师

发表于 2016-1-14 16:14:47

Jane 发表于 2016-1-13 18:39
那是不是库没有加载对?

已经解决。
回复

使用道具 举报

木龙小驴  见习技师

发表于 2016-3-22 09:21:22

求大神帮助啊
我已经删掉库里带的robotremot还有irremotetool的相关文件,也能编译通过,但是遥控器什么的木有反应,用手碰一碰会打印一些数字,遥控器不好使。
是不是传感器的问题?还是需要换遥控器?
回复

使用道具 举报

ljs2016cn  学徒

发表于 2016-10-24 10:34:14

怎样加载库
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2016-11-1 10:32:46

回复

使用道具 举报

david.ding  见习技师

发表于 2017-2-3 13:27:35

新手学习

赞一下
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail