硬件选型与电路设计:红外收发核心器件
做红外遥控项目,硬件选型是第一步。我见过不少新手,代码写得飞起,结果硬件上栽了跟头——要么接收距离只有几十厘米,要么发射管烧了。嗯,咱们今天就把红外接收头、发射管、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外设来发射和接收红外信号。到时候你会发现,硬件搞定了,软件其实没那么难。