Arduino基础实验8,红外线通信测试

文档【1】中,我们使用红外线发射和接收二极管来做了一次基于红外线的通信实验,使用红外线来传输近距离控制信号在日常生活中很普遍,比如家里随处可见的电视机或空调遥控器,在本文中,创客行将使用Arduino来解读红外遥控器的信号,看看它究竟传输了什么。

红外遥控元件

红外遥控器和接收管图1 红外遥控器和接收管

不同于 文档【1】中的基础电子元件,在单片机应用中,元件配置要高级一些,图1中展示了常用的红外遥控器和接收管,不同于文档【1】中的普通红外接收二极管,这里的接收管叫作1838红外接收头,它有三个引脚,分别如图1是Vcc(正极),GND(负极)和信号端,正负极引脚间连接2.7-5.5V电源,信号端作为信号输出使用。1838红外接收头仅对38Khz载波的信号进行解调,未经载波编码的信号它是不敏感的。

类似图1中,我们普通家电使用的遥控器都工作在38KHZ的载波频段,可以让该接收管工作起来。连接好1838红外接收头正负极,把它的信号引脚和示波器连接,让我们来观察一下使用图1中的遥控器作用于它是怎样的结果。

1838红外接收头信号接收图图2 1838红外接收头信号接收图

图2展示了接收头的信号接收图,它在常态下是高电平,当受到敏感信号作用时,会解调出一串低电平的开关量,使用单片机读取这些开关量,即可获得传输过来的信号。

红外接收管的Arduino实验

1838红外接收头实验电路图3 1838红外接收头实验电路

图3是1838红外接收头实验电路,它也很简单,把该接收头的正负极引脚分别连接电源正负极,它的信号端连接到Arduino的任一数字信号接口即可,本文中,我们把D8作为信号输入。

为什么是D8呢?实际上看过文档【2】的朋友可能会想,我们何不使用外部中断捕捉电压下降沿的方式来获取红外接收头的开关信号呢?使用外部中断固然可以捕获开关信号的电压变化,然而开关信号还要对相应的时序进行处理,在这个方面外部中断和普通数字处理引脚对比并不占优,都需要进行计时,写代码的时候需要考虑信号的时长。

值得庆幸的是,Arduino是一个成熟的开源硬件平台,早就有人写好了红外接收头的处理代码,我们就不需要再“重复发明轮子”了。下面让我们看如何在Arduino IDE安装一个外部支持库的步骤:

  1. https://github.com/z3t0/Arduino-IRremote处,下载Arduino-IRremote的ZIP包到自己本地的硬盘上。

红外4图4 在Arduino IDE安装外部支持库

2.如图4中,选择Arduino IDE的菜单,“项目”->“Include Library”->“Add .ZIP Library”,选取Arduino-IRremote的ZIP包在本地硬盘的路径,点击确定加入。

3.我们当前安装的是版本2.01,该版本说明里需要删除“ Arduino_Root/libraries/RobotIRremote”,即Arduino安装路径里的RobotIRremote文件包,因为它会与这个外部库产生编译冲突。如果你使用别的版本,请参照它的安装说明。

好了,现在已经安装好外部支持库了,让我们来看看代码怎么写吧。

#include <IRremote.h>
#include <IRremoteInt.h>

/*
 IRcontrol experiment
 source by: www.i-makers.info
*/
int RECV_PIN = 8;//定义红外接收器的引脚为8
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // 初始化红外接收器
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);//以16进制换行输出接收代码
    Serial.println();                  //为了便于观看输出结果增加一个空行
    irrecv.resume();                   // 接收下一个值
  }
}

代码1 红外接收管的Arduino实验代码

代码1即为实验代码,上面的两个.h头文件属于我们刚才安装的外部支持库Arduino-IRremote,在它的帮助下,后面的代码就简单了。代码1中已经加了必要的中文注释,它首先定义红外接收引脚,这里是D8,然后在loop循环函数中,对接收信号进行解码,一旦有成功解码的信号,就通过串口监视器打印出来。

将代码1烧录到Arduino Nano开发板后,使用图3的实验电路,就可以测试红外遥控器每个按键的信号值,在以后的制作中,通过按键信号值匹配,可以用遥控器来控制相关的系统了。

总结

本文讲述了红外遥控在Arduino中的使用方法,还介绍了外部支持库的引入和使用过程,Arduino正是有丰富的外部支持库而成为强大的开源硬件平台,我们在设计工作中可以考虑采用一些现成的代码,如果有新的创作部分,也可以对开源平台做出自己的贡献。更多的精彩内容,请查看全站目录

 

优秀科技原创内容源,欢迎添加微信公众号。

创客行淘宝店提供本网站电子制作的全部套件

创客行淘宝店地址:https://shop125908459.taobao.com/

参考文档

  1. 红外线和可见光应用2,制作光通信电报机和红外对射栅栏
  2. Arduino基础实验4,用外部中断来测速
  3. 全站目录

发表评论