Arduino - CHQ1838B红外接收模块控制LED实验(附.Tinkercad图形化编程)

红外接收头原理

 

CHQ1838B实物图

总所周知,人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为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更新)

Tinkercad 平台

功能:

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);
    
}

  • 6
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naiva

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值