红外学习遥控

来自Microduino Wikipedia
跳转至: 导航搜索
Language English

目的

接收红外遥控器的发射编码,并保存起来,然后可以读取并发射相同红外信号。

原理

利用红外接收传感器接收红外遥控器发射的编码,保存到EEPROM,然后可以通过读取EEPROM发射相同的红外信号。

设备

模块 数量 功能
mCookie-CoreUSB/zh 1 核心板
mCookie-Hub/zh 1 传感器转接板
Microduino-IR receiver/zh 1 红外接收传感器
Sensor-IR Sensor/zh 1 红外发送传感器
Microduino-Converter/zh 1 转接板

搭建硬件

  • Setup 1:将CoreUSB与Sensorhub叠堆。
  • Setup 2:将红外发射传感器通过转接板接到Sensorhub的D3引脚上,将红外接收传感器接到Sensorhub的D10引脚上.

软件调试

  • EEPROM读写方法定义,及红外接收、发射模块定义
#define EEPROM_write(address, var) eeprom_write_block((const void *)&(var), (void*)(address),sizeof(var)) //EEPROM写入
#define EEPROM_read(address, var) eeprom_read_block((void*)&(var),(const void *)(address),sizeof(var))    //EEPROM读取

IRrecv irrecv(RECV_PIN);    //红外接收
decode_results results;     //编码读取结果
IRsend irsend;              //红外发射
 
int RECV_PIN = 10;          //红外接收引脚
int num = 0;
unsigned long readValue;
  • 串口及红外接收模块初始化
Serial.begin(9600);
irrecv.enableIRIn(); //启动红外接收
  • 主要功能包括学习红外编码和发射红外编码,学习的红外编码保存到EEPROM中,地址范围为1~9。可以通过读取EEPROM中地址1~9的数据得到相关的红外编码,然后发射红外信号。
Serial.println("Please enter the num: 1.learn IR code 2.Send IR code");
  while(!Serial.available());
  num = Serial.read();
  if(num == '1')              //学习红外编码
  {
    Serial.println("please enter the learn num: 1~9");
    while(!Serial.available());
    num = Serial.read()-48;
    if(num>=1&&num<=9)
    {
      Serial.println("please send the IR;");
      while(!irrecv.decode(&results));       //识别红外编码
      EEPROM_write(num,results.value);       //将红外编码写入到EEPROM中
      Serial.print("input IR code:");
      Serial.println(results.value, HEX);
      Serial.println("IR learning Done");
      irrecv.resume(); // Receive the next value
    }
    else
    {
      Serial.println("invalid num");
    }
  }
  if(num == '2')
  {
    Serial.println("please enter the send num: 1~9");
    while(!Serial.available());
    num = Serial.read()-48;
    if(num>=1&&num<=9)
    {
      EEPROM_read(0,readValue);            //从EEPROM中读取数据
      irsend.sendSony(readValue, 32);      //发射红外信号
      Serial.print("output IR code:");
      Serial.println(readValue, HEX);
      Serial.println("IR sending Done");
    }
    else
    {
      Serial.println("invalid num");
    }
  }
  • 注意:如果感觉红外发射器遥控距离太短,可以通过减小红外发射器上的限流电阻来增加发射距离。

程序

[MicroduinoIrRemoteLearning]

结果

可以接受和保存红外遥控器发射的红外编码,并发射出相同的红外信号。

视频