风筝
发表于: 2020-8-24 21:19:37 | 显示全部楼层

红外通信是一种简单、低成本且广泛使用的无线通信技术。红外光与可见光有些相似,只是波长稍长。 IR的这一特性使其无法被人眼察觉,非常适合无线通信。


在许多应用中,您需要解码红外信号才能使用红外遥控器操作某些设备。因此,在本篇文章中,我们将使用红外接收器TSOP1838通过Arduino构建一个红外遥控解码器。每个按钮的十六进制代码将记录到Microsoft Excel工作表中。这个简单的红外遥控解码器可用于红外远程控制机器人、家庭自动化和其他红外控制项目等项目。


所需的组件

●    Arduino Uno / Arduino Nano开发板

●    红外接收器(TSOP1838

●    跳线

●    面包板


红外通信如何工作?

像其他通信系统一样,红外通信也具有发送器和接收器。发射器看起来就像一个LED,但它会产生红外光谱而不是可见光谱的光线。红外接收器是嵌入有前置放大器的光电二极管,该放大器将红外光转换为电信号。对于红外通信,发送器和接收器都应彼此对射。


按下遥控器按钮时,红外LED(发射器)会发出红外光。该光被通常为光电二极管或光电晶体管的接收器接收。但是,太阳、灯泡和其他任何会发热的物体也会发出红外光。这可能会干扰发射器信号,因此,发射器信号使用36 kHz至46 kHz之间的载波频率进行调制。接收到信号后,红外接收器会对信号进行解调,然后将其转换为二进制,然后再发送给微控制器。


在这里,我们使用电视遥控器发送红外信号,使用TSOP1838和Arduino接收这些信号。

IR-Remote-and-TSOP1838-IR-Receiver.jpg


电路原理图

下面给出了使用Arduino的红外遥控解码器的电路图:

Arduino-IR-Decoder-Interfaing.png

连接非常简单,因为红外接收器传感器只有三个引脚:Vs、GND和Data。将红外接收器的Vs和GND引脚分别连接到Arduino的3.3V和GND引脚,然后将Data引脚连接到Arduino的数字引脚2。

IR-Remote-Decoder-using-Arduino.jpg


Arduino红外遥控解码器编程

在本文页面末尾提供了Arduino红外解码器的完整代码。


为了解码红外遥控器,首先,我们需要下载一个IR库并将其添加到Arduino IDE。您可以从此处下载IR Remote库。下载文件后,打开Arduino IDE并转至Sketch> Include library> Add.Zip库。选择库文件,然后单击“打开”。


首先我们在代码中包含IR Remote库的头文件。

  1. #include <IRremote.h>
复制代码

之后,定义您连接红外接收器数据引脚的Arduino引脚。本文连接到Arduino的D2引脚。

  1. int IRPIN = 2;
复制代码

接下来,为红外接收器引脚创建一个实例。

  1. IRrecv irrecv(IRPIN);
复制代码

然后,为decode_results类定义一个对象,红外接收器将使用该对象发送已解码的信息。

  1. decode_results result;
复制代码

在setup()函数中,启动串口通信,然后通过调用IRrecv函数enableIRIn()启动红外接收器。

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   Serial.println("Enabling IRin");
  5.   irrecv.enableIRIn();
  6.   Serial.println("Enabled IRin");
  7.   Initialize_streamer();
  8. }
复制代码

在loop()函数中,irrecv.decode会不断检查是否有新信号,如果接收到新信号,则接收到的信号代码将存储在result.value函数中。

  1. void loop()
  2. {
  3.   if (irrecv.decode(&result))
  4.   {
  5.     Serial.print("Value: ");
  6.     Serial.println(result.value, HEX);
  7.     Write_streamer();
  8.     irrecv.resume();
  9.   }
  10.   delay(500);
  11. }
复制代码

为了将数据从Arduino发送到Excel工作表,我们使用PLX-DAQ。使用Write_streamer()函数,我们以特定的模式串行发送数据,就像在串口监视器上显示值一样。关键代码说明如下:

  1. void Write_streamer()
  2.   {
  3.     Serial.print("DATA"); //always write "DATA" to Indicate the following as Data
  4.     Serial.print(","); //Move to next column using a ","
  5.     Serial.print(result.value, HEX); //Store date on Excel
  6.     Serial.print(","); //Move to next column using a ","
  7.     Serial.println(); //End of Row move to next row
  8.   }
复制代码

一旦硬件和程序准备就绪,就可以将程序上传到Arduino Nano开发板上了。上载代码后,将遥控器指向红外接收器,然后按下遥控器按钮。每个按钮的十六进制代码将打印在串口监视器上。


将红外遥控解码器数据保存到Excel工作表中

现在将数据发送到Excel工作表,我们将使用PLX-DAQ。这是一个Excel插件软件,可帮助您将Arduino中的值直接写入笔记本电脑上的Excel表中。使用此链接下载文件。下载后,解压缩该文件,然后单击.exe文件进行安装。它将在您的桌面上创建一个名为PLX-DAQ的文件夹。


现在,从桌面文件夹中打开“ PLX-DAQ spreadsheet”文件。如果在Excel上禁用了宏,那么您将看到一个安全块,如下图所示:

PLX-DAQ-Spreadsheet.png

单击Options->Enable the content -> Finish -> OK以启用宏(Macros)。之后,您将看到以下界面:

PLX-DAQ-Excel-Plug-in-Software.png


现在,将波特率选择为“ 9600”,并将Arduino连接到的端口,然后单击“连接”以开始数据流。您的值应该开始记录下来,如下图所示。

IR-Remote-Decoder-Data-into-Excel-Sheet.png


以上就是轻松构建Arduino红外解码器的方式,将红外遥控信号转换为等效的HEX代码。


代码

下面给出了本文的完整Arduino代码: main.rar (563 Bytes, 下载次数: 75)


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-16 18:53 , Processed in 0.040589 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表