Arduino如何破解IR红外遥控器

释放双眼,带上耳机,听听看~!
Arduino如何破解IR红外遥控器

简介

有没有发现生活中很多的设备都有遥控器,遥控器使用的是红外线进行无线传输的,但是每个设备各用一个遥控器是不是很麻烦呢,那么这个项目就是教你把所有遥控器集于一身,用arduino完美打造万能遥控器.

你能用这个项目做什么?

  • 用Arduino替换所有遥控器。
  • 使用Arduino +蓝牙模块创建您自己的通用红外遥控器。
  • 使用任何协议发送和接收红外信号。
  • 将IR数据存储在手机中。
  • 自动连接到Arduino。
  • 对每个红外按钮进行排序和重命名。
  • 更改每个IR按钮的图标。

步骤一 材料准备

硬件准备:

  • Arduino UNO和Genuino UNO× 1
  • 红外LED× 1
  • 红外接收器(通用)× 1
  • 蓝牙模块(HM-10或Bluefruit,也可以使用HC-05或HC-06)× 1
  • 通用晶体管NPN

软件准备:

  • Arduino Uno

步骤三 电路搭建

HM-10接线图:

Arduino如何破解IR红外遥控器

Bluefruit UART接线图:

Arduino如何破解IR红外遥控器

HC-06或HC-05接线图:

Arduino如何破解IR红外遥控器
  • arduino_rx_pin ——-> Bluetooth_tx_pin
  • arduino_tx_pin ——-> Bluetooth_rx_pin – 如果您使用的是Bluefruit模块,请确保将CTS引脚接地。
  • IR接收器——->引脚11
  • 红外发射器——->引脚3 仅限UNO
  • 红外发射器——->引脚13 仅限LEONARDO
  • 红外发射器——->引脚9 仅限MEGA

步骤四 编写程序

程序如下:

/*
 连接:
 arduino_rx_pin -------> Bluetooth_tx_pin   
 arduino_tx_pin -------> Bluetooth_rx_pin    - 如果您使用的是Bluefruit模块,请确保将CTS引脚接地。      
 IR接收器------->引脚11   
 红外发射器------->引脚3 仅限UNO   
 红外发射器------->引脚13 仅限LEONARDO   
 红外发射器------->引脚9 仅限MEGA
*/
#include 
#include 

#define arduino_rx_pin 10  //  arduino_rx_pin 10 ------->   Bluetooth_tx_pin
#define arduino_tx_pin 8  //  arduino_tx_pin 8 ------->   Bluetooth_rx_pin

String ir[3];
int recvPin = 11;
unsigned int irBuf[100];
unsigned int irBufLen;
unsigned int irBufType;
boolean repeat = false;

SoftwareSerial mySerial(arduino_rx_pin, arduino_tx_pin); // RX, TX
IRrecv irrecv(recvPin);//pin 11
IRsend irsend;//引脚3是UNO,引脚13是Leo,引脚9是Mega

void process() {

  String command = mySerial.readStringUntil('/');

  if (command == "ir") {
    irCommand();
  }

  if (command == "irR") {//R代表重复代码
    irCommandR();
  }

  if (command == "allstatus") {
    allstatus();
  }
}

void irCommand() {

  repeat = false;
  String codeType, codeValue, codeLen;
  codeType = mySerial.readStringUntil('/');
  codeValue = mySerial.readStringUntil('/');
  codeLen = mySerial.readStringUntil('\r');
  irBufLen = codeLen.toInt();
  irBufType = codeType.toInt();
  stringToIntArry(codeValue);
  sendCode();
    Serial.println(F("Sent Raw "));
}

void irCommandR() {

  String codeType, codeValue, codeLen;
  codeType = mySerial.readStringUntil('/');

  if (codeType == "off") {
    repeat = false;
  } else {
      codeValue = mySerial.readStringUntil('/');
  codeLen = mySerial.readStringUntil('\r');
    stringToIntArry(codeValue);
    irBufLen = codeLen.toInt();
    irBufType = codeType.toInt();
    repeat = true;
  }
    Serial.println(F("Sent Repeat Raw "));
}

void allstatus() {
  String data_status = "{\"T\":\"\",\"D\":[]}";
  mySerial.println(data_status);
  Serial.println(F("Connected"));
}

void  dumpCode (decode_results *results)
{
  int codeType = results->decode_type;
  int codeLen = results->bits;
  unsigned long codeValue = results->value;
  String data_status;
  data_status += F("{\"T\":\"");
  data_status += codeType;
  data_status += F("\",\"D\":[\"");
  data_status += codeValue;
  data_status += F("\",\"");
  for (int i = 1; i < results->rawlen ; i++)
  {
    data_status += results->rawbuf[i] * USECPERTICK;
    if (i != results->rawlen - 1)data_status += ",";
  }
  data_status += F(",\",\"");
  data_status += results->rawlen;

  data_status += F("\"]}");
  mySerial.println(data_status);
  Serial.println(F("Got IR Code"));
}


余下程序,直接放到上面的程序最下面即可:

步骤五 验证结果

给TA打赏
共{{data.count}}人
人已打赏
Arduino

基于DHT11的Arduino OLED温度计和湿度计

2018-11-29 19:11:18

Arduino

炫丽的RGB灯

2018-12-8 23:23:10

2 条回复 A文章作者 M管理员
  1. 三头六臂

    网站所有视频该插件不支持,要下载对应播放器?

    • Luca

      用主流的浏览器就可以 播放需要flash插件 一般浏览器都自带 我用的google浏览器直接就可以看

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();