红外遥控系统由红外接收模块(IR Receiver)和​遥控器组成。

硬件连接

红外接收模块(如VS1838B、TSOP1738)通常有3个引脚:

​VCC → Arduino ​5V
​GND → Arduino ​GND
​OUT → Arduino ​数字引脚(如D11)​

注意:

  • 确保模块与遥控器之间无遮挡,避免强光干扰。
  • 部分模块工作电压为3.3V,需确认规格

代码

第一步:安装库

使用 ​IRremote库​(最新版为IRremote.hpp):

在Arduino IDE中:​工具 > 管理库 > 搜索“IRremote”并安装。

第二步:读取遥控器键值

#include <IRremote.hpp> // 使用新版库
#define RECV_PIN 11  // 红外接收器接D11

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // 启动接收
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.print("键值(十六进制): 0x");
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    IrReceiver.resume(); // 继续接收下一信号
  }
  delay(100);
}

操作:按下遥控器按键后,串口监视器显示十六进制键值(如0xFFA25D)。

第三步:根据键值控制LED开关:

#include <IRremote.hpp>
#define RECV_PIN 11
#define LED_PIN 13

void setup() {
  pinMode(LED_PIN, OUTPUT);
  IrReceiver.begin(RECV_PIN);
}

void loop() {
  if (IrReceiver.decode()) {
    unsigned long keyValue = IrReceiver.decodedIRData.decodedRawData;
    switch (keyValue) {
      case 0xFFA25D: // 按键1:开灯
        digitalWrite(LED_PIN, HIGH);
        break;
      case 0xFFE01F: // 按键2:关灯
        digitalWrite(LED_PIN, LOW);
        break;
    }
    IrReceiver.resume();
  }
}

常见问题

  • ​键值不一致:不同遥控器协议(NEC、SONY等)编码不同,需先读取实际键值。
  • ​信号干扰:避免强光直射接收头,或增加软件滤波。
  • 库冲突:新版Arduino IDE需使用IRremote.hpp而非旧版IRremote.h

扩展应用

  • 控制继电器/电机:替换LED控制代码为继电器引脚操作。
  • ​万能遥控器:记录键值实现自定义控制。

更多协议详解参考官网文档:IRremote库文档

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐