家里的电视、空调遥控器随手就能拿来控制自己做的 Arduino 小项目:用 VS1838B 这个红外接收头把遥控器的按键码读出来,再让 Arduino 去开个灯、换个档、翻个页。这篇讲清楚引脚、接线和解码代码。
接收头原理
遥控发送的是调制成 38kHz 载波的红外信号。VS1838B 是自带载波解调的一体化接收头,把收到的信号解调后从输出脚送出一串高低电平,正好对应遥控器每个按键的编码。它常见三只脚:信号脚、5V、GND,注意不同封装引脚顺序会不一样,看丝印或数据手册确认。

接线只要三根
VS1838B 的供电接 5V 和 GND,信号输出脚接 Arduino 的一个数字脚(下面用 D2)。它比较吃供电,接在面包板长线上偶尔收不到,用的时候尽量让线短一点、供电稳一点。

解码代码
用 IRremote 库(Arduino IDE 库管理器里搜“IRremote”)就能解码,按下遥控器按键,串口会打印出对应的协议和按键编码:
#include
const int RECV_PIN=2;
void setup(){
Serial.begin(115200);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);
}
void loop(){
if(IrReceiver.decode()){
uint32_t code=IrReceiver.decodedIRData.decodedRawData;
Serial.print("码值: "); Serial.println(code, HEX);
if(code==0xFFA25D) Serial.println("按下了 1");
IrReceiver.resume();
}
}把解码用起来
先跑一遍解码代码,把遥控器每个按键的码值记下来,再在 if 判断里写对应的动作,就能实现「按 1 开灯、按 2 关灯」。要控制更多东西,把某个码值的分支里改成操作继电器或 PWM 就行,逻辑和普通的按钮一模一样,只是一键变成“无线”触发了。
常见问题
一是供电不足会经常收不到,优先保证 5V 稳定。二是红外线是直线传播,中间别放遮挡物,接收端对着遥控器。三是不同遥控器同一按键码值可能不同,务必用自己手头的遥控器先解一遍。




供电稳这个确实是坑,面包板长线容易白搭。
先解一遍码再写动作,顺序很关键,不然乱猜码值。
38kHz 解调这个细节讲明了,难怪接收头要选对型号。
拿着电视遥控器控制 Arduino,这个玩法挺实用的。