关于电路
项目

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

2015年6月14日经过蒂姆·杨布洛德

红外(IR)灯传感器允许使用Arduino从电视遥控器接收和解码信号。

红外(IR)灯传感器允许使用Arduino从电视遥控器接收和解码信号。

大多数电视遥控器使用红外线将编码的消息发送到电视机。该红外光的波长通常在930和950 nm之间,使其对人类看不见。当您按下电视遥控器上的一个按钮时,该控件将使用该按钮独特的脉冲宽度调制(PWM)信号调制IR信号。该信号由电视中的红外接收器接收,该电视是解调信号并弄清楚按下了哪个按钮的。如果我们为Arduino配备了IR接收器,我们可以使用Arduino进行类似的操作。

IR接收器有三个终端;两个用于为设备供电,而其余的则用于传感器输出。接收器解调IR信号并输出​​解调的PWM信号。输出端子连接到Arduino引脚3. Arduino然后通过分析PWM信号来计算哪个按钮。


实验1

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

需要硬件

  • 1X电视遥控器
  • 1 x ir接收器
  • 1 x arduino mega2560
  • 2 X LED
  • 2 x 330欧姆电阻
  • 1 X面包板
  • 跳线


接线图

如下图所示,连接组件。红外接收器连接到引脚3。LED连接到第4和5至330欧姆电流电阻器。

电路原理图


实验代码1

对于此实验,我们将使用Inremote.h arduino库。在编写此代码之前,我们确定如果按下遥控器1按钮,如果按下按钮2,则IR接收器输出将等于2049。按下按钮1旋转LED。按下按钮2关闭它们。

#include“ iremote.h” int rec = 3;//连接TSOP4838 int LED_1 = 4的输出引脚的引脚;int led_2 = 5;#Define Code1 2049 //从按钮1收到的代码#Define Code2 2050 //从按钮2接收到的代码IRECV IRECV IR_REC(REC);DECODE_RESULTS结果;void setup(){serial.begin(9600);ir_rec.enableIrin();pinmode(LED_1,输出);pinmode(LED_2,输出);} void loop(){if(ir_rec.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 x电视遥控器
  • 1 x ir接收器
  • 1 x arduino mega2560
  • 2 X LED
  • 2 x 330欧姆电阻
  • 1 X面包板
  • 跳线


接线图

接线图与实验#1完全相同


实验代码2

在此实验中,除了按钮1和2外,我们还将使用遥控器的电源按钮。当按下遥控电源按钮时,IR传感器的输出为2060。按下LED 1转1转1,按下按钮2 onLED 2,按下电源按钮将它们都关闭。

#include“ iremote.h” int rec = 3;//连接TSOP4838 int LED_1 = 4的输出引脚的引脚;int led_2 = 5;#Define Code1 2049 //从按钮1接收到的代码#define Code2 2050 //从按钮2接收到的代码#Define Code3 2060 //从电源按钮IRECV IRECV IRECV IRECV IRECV IRECV IRECV(REC)收到的代码;DECODE_RESULTS结果;void setup(){serial.begin(9600);ir_rec.enableIrin();pinmode(LED_1,输出);pinmode(LED_2,输出);} void loop(){if(ir_rec.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_(exp2).ino.zip

视频

为自己自己尝试一下!得到bom。