|
通过红外(IR)传感器,Arduino开发板可以接收和解码电视遥控器的信号。
大多数的电视遥控器使用红外光将编码信息发送到电视机。红外光的波长通常在930和950nm之间,属于不可见光。当您按下电视遥控器上的其中一个键时,控制器将使用该键特定的脉冲宽度调制(PWM)信号调制IR信号。该信号被电视中的IR接收器拾取,接收器解调信号并确定按下哪个键。如果我们有一个红外接收器,我们可以用Arduino开发板完成类似的工作。
IR接收器有三个端子:其中两个端子用于供电,而剩余的一个用作传感器输出。接收器解调IR信号并输出解调的PWM信号。输出端子连接到Arduino引脚3,然后Arduino通过分析PWM信号确定按下了哪个键。
实验1
在这个实验中,我们将使用电视遥控器点亮和熄灭两个LED。
需要的硬件 ● 电视遥控器 ● 红外接收器 ● Arduino Mega2560开发板 ● LED指示灯 ● 330欧姆电阻 ● 面包板 ● 连接导线
接线图 如下图所示连接组件。红外接收器连接到Arduino开发板的引脚3。LED通过330欧姆的限流电阻连接到引脚4和5。
实验1的代码 在本实验中,我们使用IRremote.h库。在编写此代码之前,我们首先确定,如果按下遥控器的1键,IR接收器输出等于2049,如果按下2键,输出值为2050。按下1键可点亮两个LED。按下2键将熄灭两个LED指示灯。 - #include "IRremote.h"
-
- int rec = 3; // the pin where you connect the output pin of TSOP4838
- int led_1 = 4;
- int led_2 = 5;
- #define code1 2049 // code received from button 1
- #define code2 2050 // code received from button 2
- IRrecv ir_rec(rec);
-
- decode_results result;
-
- void setup()
- {
- Serial.begin(9600);
- ir_rec.enableIRIn();
- pinMode(led_1, OUTPUT);
- pinMode(led_2, OUTPUT);
-
- }
-
- 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指示灯。
需要的硬件
● 电视遥控器 ● 红外接收器 ● Arduino Mega2560开发板 ● LED指示灯 ● 330欧姆电阻 ● 面包板 ● 连接导线
接线图 接线图与实验1完全相同
实验2的代码 在本实验中,除1键和2键外,我们还将使用遥控器的电源键。按下遥控器电源键时,红外传感器的输出为2060。按下1键点亮LED 1,按下2键点亮LED 2,按下电源键将熄灭两个LED指示灯。 - #include "IRremote.h"
-
- int rec = 3; // the pin where you connect the output pin of TSOP4838
- int led_1 = 4;
- int led_2 = 5;
- #define code1 2049 // code received from button 1
- #define code2 2050 // code received from button 2
- #define code3 2060 // code received from power button
-
- IRrecv ir_rec(rec);
-
- decode_results result;
-
- void setup()
- {
- Serial.begin(9600);
- ir_rec.enableIRIn();
- pinMode(led_1, OUTPUT);
- pinMode(led_2, OUTPUT);
-
- }
-
- 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
- }
- }
复制代码
|