Arduino逆向工程天空远程红外输出数据

时间:2017-12-13 18:57:29

标签: arduino reverse-engineering arduino-uno circuit infrared

项目: 将现有的Sky遥控器转换为蓝牙HID设备(以控制PC)

步骤:

  • 移除红外LED
  • 使用现有的远程电路
  • 解码输出详细信息
  • 将输出翻译为键盘按钮
  • 使用蓝牙HC-05和RN42固件实现蓝牙HID功能
  • 坐下来用天空遥控器控制电脑:)

问题: 使用现有电路,我想读取控制器发送到IR LED的输出值。我不知道该怎么做。

我已将电线焊接到IR LED的(+)正极端子,并尝试使用以下草图代码读取它:

#include <IRremote.h>

int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    irrecv.resume(); // Receive the next value
  }
}

我的逻辑是,如果发送到IR LED的数据与接收器读取的数据相同,我可以直接从电路读取数据而无需IR LED / IR接收器。然而,这并没有真正起作用,我收到的结果是不正常的。

当我按下按钮时,大多数时间数据都会打印在串行监视器上,但这些数据并不一致。有时,当我按下按钮时,不会打印任何数据。串行监视器结果按下“向右”按钮5次:

1915173721
1967414055

按其他箭头按钮时会有更多结果:

749184133
4255908178
2645846893
3808018029
1874349767
489623152
4272685797
1488398475
2816865927
1510598699
1286666972
881703980
1976667380

我是以错误的方式来做这件事的吗?我想是这样的:/

任何建议都将不胜感激

谢谢!

1 个答案:

答案 0 :(得分:0)

IR LED的信号输出是用特定载波频率调制的编码脉冲。对于大多数遥控器,载波频率为38KHz。但你仍然可以找到其他载波频率,如40KHz,甚至56KHz。

IR接收器设计用于接收以特定载波频率调制的IR信号。接收器然后将移除载波并仅输出编码脉冲。

因此,当您移除IR LED并直接读取信号时,您获得的结果与从IR接收器输出读取的结果不同。

在将信号馈入串行读卡器之前,您需要使用一些滤波电路来移除载波。