雷竞技注册
项目

远程查看:通过红外线与Arduino通信

2015年6月14日通过蒂姆血性小子

红外(IR)光传感器允许Arduino接收和解码来自电视遥控器的信号。

红外(IR)光传感器允许Arduino接收和解码来自电视遥控器的信号。

大多数电视遥控器使用红外光向电视机发送编码信息。这种红外线的波长通常在930到950纳米之间,因此人类是看不见它的。当您按下电视遥控器上的一个按钮时,该控制将使用该按钮特有的脉宽调制(PWM)信号来调制红外信号。这个信号被电视上的红外接收器接收到,然后解调信号并判断出按下了哪个按钮。我们可以用Arduino做类似的事情,如果我们给它配备一个红外接收器。

红外接收机有三个终端;其中两个用于设备供电,其余一个用于传感器输出。接收机对红外信号进行解调,输出解调后的PWM信号。输出端连接到Arduino引脚3。然后Arduino通过分析PWM信号来判断是哪个按钮被按下了。

实验1

在这个实验中,我们将使用电视遥控器来打开和关闭两个led。

硬件要求

  • 1个电视遥控器
  • 1台红外接收机
  • 1 x Arduino Mega2560
  • 2 x领导
  • 2 × 330欧姆电阻
  • 1 x电路试验板
  • 跳线

接线图

按照下图所示连接组件。红外接收器接引脚3。led通过330欧姆限流电阻连接到引脚4和5上。

线路图

实验一代码

在这个实验中,我们将使用IRremote.h Arduino库。在编写这段代码之前,我们确定如果按下遥控1按钮,IR接收器输出将等于2049,如果按下按钮2,则等于2050。按下按钮1打开led灯。按2键可以关闭。

#include "IRremote.h" int rec = 3;//连接TSOP4838输出引脚的引脚int led_1 = 4;Int led_2 = 5;#define code1 2049 //接收到按钮1的代码#define code2 2050 //接收到按钮2的代码decode_results结果;void setup() {Serial.begin(9600);ir_rec.enableIRIn ();pinMode (led_1、输出);pinMode (led_2、输出);} void loop() {if (ir_rect .decode(&result)) {unsigned int val = result.value; switch(val) { case code1: digitalWrite(led_1,HIGH); digitalWrite(led_2,HIGH); break; case code2: digitalWrite(led_2,LOW); digitalWrite(led_1,LOW); break; } Serial.println(val); ir_rec.resume(); // Receive the next value } }

Infred_Light.zip

实验2

在这个实验中,我们将使用电视遥控器来打开和关闭不同的led。

硬件要求

  • 1个电视遥控器
  • 1台红外接收机
  • 1 x Arduino Mega2560
  • 2 x领导
  • 2 × 330欧姆电阻
  • 1 x电路试验板
  • 跳线

接线图

接线图与实验1完全相同

实验2的代码

在这个实验中,我们将使用遥控器的电源按钮,除了按钮1和2。遥控器电源按钮按下时红外传感器输出为2060。按下按钮1打开LED 1,按下按钮2打开LED 2,按下电源按钮两者都关闭。

#include "IRremote.h" int rec = 3;//连接TSOP4838输出引脚的引脚int led_1 = 4;Int led_2 = 5;#define code1 2049 //从按钮1接收代码#define code2 2050 //从按钮2接收代码#define code3 2060 //从电源按钮IRrecv ir_rec(rec)接收代码;decode_results结果;void setup() {Serial.begin(9600);ir_rec.enableIRIn ();pinMode (led_1、输出);pinMode (led_2、输出);} void loop() {if (ir_rect .decode(&result)) {unsigned int val = result.value; switch(val) { case code1: digitalWrite(led_1,HIGH);// TURNS LED_1 ON WHEN BUTTON 1 IS PRESSED digitalWrite(led_2,LOW); break; case code2: digitalWrite(led_2,HIGH);// TURNS LED_2 ON WHEN BUTTON 2 IS PRESSED digitalWrite(led_1,LOW); break; case code3: digitalWrite(led_2,LOW);// TURNS BOTH LEDS OFF WHEN POWER BUTTON IS PRESSED digitalWrite(led_1,LOW); break; } Serial.println(val); ir_rec.resume(); // Receive the next value } }

ir_communication_ .ino.zip (exp2)

视频

你自己试试这个项目吧!BOM。