硬件选型与电路设计:红外收发核心器件

做红外遥控项目,硬件选型是第一步。我见过不少新手,代码写得飞起,结果硬件上栽了跟头——要么接收距离只有几十厘米,要么发射管烧了。嗯,咱们今天就把红外接收头、发射管、ESP32引脚分配和驱动电路,一次性讲透。

红外接收头:HS0038 vs VS1838

市面上最常见的红外接收头,就是HS0038和VS1838。说实话,这两者从功能上看几乎一样,都是38kHz载波解调输出。我两个都用过,说说实际感受。

参数 HS0038 VS1838
载波频率 38kHz 38kHz
工作电压 2.5V~5.5V 2.7V~5.5V
接收距离 典型18米 典型15米
输出电平 低电平有效 低电平有效
价格 略贵 便宜

我个人习惯用VS1838。为什么?便宜啊!做课程项目、打样验证,成本控制很重要。而且15米的接收距离,室内用完全够了。你想想看,谁会在15米外遥控空调?

我的经验:VS1838对电源纹波比较敏感。我曾经在一个项目里,直接用ESP32的3.3V引脚供电,结果接收距离缩水到3米。后来加了个10μF电解电容并联0.1μF瓷片电容,问题就解决了。

红外发射管选型

发射管的选择,说白了就三个参数:波长、功率、角度。

  • 波长:必须选940nm。这是红外遥控的标准波长,接收头也是针对这个波长设计的。
  • 功率:常见的有5mm直插和贴片两种。5mm直插的功率大,发射距离远。我建议用5mm的,毕竟咱们要做万能遥控器,距离不能太短。
  • 角度:一般20°~30°。角度越小,方向性越强,距离越远。家用的话,20°左右比较合适。
注意:千万别用那种大功率红外LED(比如5W的)。ESP32的GPIO驱动能力有限,强行驱动会烧引脚。我曾经见过有人用MOS管驱动大功率红外管,结果把接收头也烧了——功率太大,接收头饱和了。

ESP32引脚分配

ESP32引脚多,但也不是随便接的。我列一个我常用的分配方案:

功能 ESP32引脚 说明
红外接收数据 GPIO14 RTC域引脚,支持深度睡眠唤醒
红外发射控制 GPIO4 支持RMT外设,方便生成38kHz载波
学习按键 GPIO0 注意:GPIO0默认是BOOT模式,需要外部上拉
状态LED GPIO2 板载LED通常接这个引脚

为什么接收用GPIO14?因为它是RTC域的引脚。你想想看,如果做电池供电的遥控器,深度睡眠时只有RTC域能工作。用GPIO14,就能在收到红外信号时唤醒ESP32。这个设计我在智能家居项目里用过,效果很好。

驱动电路设计

驱动电路分两部分:接收电路和发射电路。

接收电路

接收头电路最简单,就三个引脚:VCC、GND、OUT。但要注意:

// 接收头接线
VCC → 3.3V (或5V,看接收头规格)
GND → GND
OUT → GPIO14 (加10kΩ上拉电阻到3.3V)

为什么要加上拉?因为接收头输出是开漏结构。不加的话,信号不稳定。我踩过这个坑——第一次做的时候没加上拉,结果接收到的数据全是乱码。

发射电路

发射电路需要三极管驱动。ESP32的GPIO输出电流只有40mA,直接驱动红外管不够。我常用的电路:

// 发射电路元件清单
- NPN三极管:S8050 (或2N2222)
- 限流电阻:100Ω (1/4W)
- 红外发射管:940nm 5mm
- 电源:3.3V

// 连接方式
GPIO4 → 1kΩ电阻 → 三极管基极
三极管集电极 → 红外管负极
红外管正极 → 100Ω电阻 → 3.3V
三极管发射极 → GND
关键点:限流电阻的计算。红外管正向压降约1.2V~1.5V,工作电流50mA~100mA。以3.3V供电、100mA为例:R = (3.3 - 1.2) / 0.1 = 21Ω。但实际我建议用100Ω,电流约20mA。为什么?因为ESP32的RMT外设输出的是38kHz方波,占空比50%,平均电流只有峰值的一半。20mA峰值,平均10mA,足够驱动5米内的设备了。

避坑指南

最后分享几个我踩过的坑:

  • 电源滤波:红外发射瞬间电流大,会在电源线上产生毛刺。一定要在接收头旁边加电容,否则接收会误触发。
  • 布局布线:发射管和接收头不要靠太近。我建议距离至少5cm以上,否则发射信号会直接串扰到接收端。
  • 外壳开孔:如果做成品,外壳上要给接收头开个透明窗口。普通塑料对红外有衰减,最好用专用的红外透光材料。

嗯,硬件选型和电路设计就这些。下一章咱们开始写代码,用RMT外设来发射和接收红外信号。到时候你会发现,硬件搞定了,软件其实没那么难。