红外接收头原理

总所周知,人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
CHQ1838B红外一体化接收模块,内置PIN光敏二极管和前置放大器IC,实现红外遥控信号的拾取、放大和解调,检波输出信号可以直接由微处理器解码。采用可滤除可见光干扰的环氧树脂封装,不易受环境光干扰,并能够抑制非控制信号的脉冲输出。
红外遥控信号是一连串的二进制脉冲码。为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调治在特定的载波频率上,然后再经红外发射二极管发射出去,而红外线接收装置则要滤除其他杂波,只接收该特定频率的信号并将其还原成二进制脉冲码,也就是解调。
目前,对于这种进行了调制的红外遥控信号,通常是采用一体化红外线接收头进行调解。一体化红外线接收头将红外发光二极管,低噪音放大器,限幅器,带通滤波器,解调器,以及整形驱动电路等集成在一起。一体化红外线接收头体积小,灵敏度高,外接元件少,抗干扰能力强,使用十分方便。
电路连接:
CHQ1838B红外接收器三个引脚,正面对着自己(弧面)从左往右的引脚依次为:
- 信号(pin 6)
- GND
- VCC(5v)
LED连接:
- VCC(pin 7)
- GND
开发板:
- Arduino nano
代码如下:
Arduino IDE 可能没有这个"#include <IRremote.h>"库文件,需自行下载。
#include <IRremote.h>
//int RECV_PIN = 11;// remote pin 11
//IRrecv irrecv(RECV_PIN);// set remote pin 11
IRrecv irrecv(6); // remote pin 6
decode_results results;// requet remote value xxx
void setup()
{
Serial.begin(9600);
// In case the interrupt driver crashes on setup, give a clue
// to the user what's going on.
//Serial.println("Enabling IRin"); //input starting receive
irrecv.enableIRIn(); // Start the receiver
Serial.println("Enabled IRin"); //input receive done!
pinMode(7,OUTPUT); //nano board PIN 7 is led and output
}
void loop() {
if (irrecv.decode(&results)) // if receive remote
{
//Serial.println(results.value); //input receive value
if(results.value==16755285) //16755285是原HEX,遥控器的按键编码
{
digitalWrite(7,!digitalRead(7)); //star led
}
irrecv.resume(); // Receive the next value
}
delay(100);
}
修改(2018.09.18):
#include <IRremote.h>
//int ledPin = 7;
/*注意:这里不能把引脚7定义成“int ledpin = 7”与后面这个函数“digitalWrite(ledpin,!digitalRead(ledpin));”一起使用哦!*/
//int buzzer = 8;
//int RECV_PIN = 9;IRrecv irrecv(RECV_PIN);//
IRrecv irrecv(9);
decode_results results;//
void setup()
{
Serial.begin(9600);
Serial.println("Enabling IRin");
irrecv.enableIRIn(); //
Serial.println("Enabled IRin");
pinMode(7, OUTPUT);//LED
pinMode(8,OUTPUT);//buzzer
}
void loop() {
int j=0;
if (irrecv.decode(&results)) {
//Serial.println(results.value, HEX);
if(results.value)//
{
Serial.println(results.value, HEX);//
digitalWrite(7,!digitalRead(7));//
buzzer();//
}
irrecv.resume();
}
delay(100);
}
void buzzer()
{
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
}
(2018.10.18更新)
米思齐:
红外发射模块:
/*
红外发射模块就是普通的LED二极管,两个引脚,也有三个引脚的;
接 线:
GND PWM-3Pin(固定) VCC
*/
#include <IRremote.h>//IRremote.h库文件例程IRSendDemo
IRsend irsend;
void setup()
{
}
void loop() {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12);//Sony红外协议指令码A90 12位 这涉及很多专业知识!可以自行搜索学习!
delay(40);
}
delay(5000); //5 second delay between each signal burst
}
(2020.05.08更新)
功能:
1、遥控器按键1、2、3对应的LED灯红、黄、绿
2、对应的按键按动一下LED灯亮,再按一下灭
//由左至右引脚为信号输出腳,GND,5V
#include <IRremote.h>
int led_red = 11; // the red LED
int led_yellow = 10; // the yellow LED
int led_green = 9; // the green LED
long ir_item;
int remote_pin = 8; //信号输出腳接腳位9
IRrecv irrecv(remote_pin); //定义红外线接收物件的变量,并传入信号脚位编号
decode_results results; //定义接受返回值的变量
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); //启动IR接收功能
// set up all the LEDs as OUTPUT
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
}
void loop() {
if( irrecv.decode(&results) )
{
ir_item = results.value;
//接收到信号时,进行解析
Serial.println(ir_item, HEX); //把遥控器的按键编码以十六进制打印在串口监视器
if(ir_item)
{
//digitalWrite(led_red,!digitalRead(led_red));
}
switch (ir_item)
{
case 0xFD08F7:
digitalWrite(led_red,HIGH);
break;
case 0xFD8877:
digitalWrite(led_yellow,HIGH);
break;
case 0xFD48B7:
digitalWrite(led_green,HIGH);
break;
default :
Serial.println("ERRO ");
digitalWrite(led_green,LOW);
digitalWrite(led_yellow,LOW);
digitalWrite(led_red,LOW);
break;
}
irrecv.resume(); //重新开始接受信号
}
delay(10);
}