红外(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 } }
实验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。