首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

树莓派Pico红外接收模块使用教程(含38kHz发射+接收完整实现)

  3103 
 0
 9
HoyAnGx   丫丫 
文章主图

一:传感器介绍

本文将详细介绍树莓派与ESP32是如何搭配一体化的红外接收模块,实现38kHz红外信号的接收检测,同时搭配红外发射功能,完成“发射+接收”的闭环测试,适合新手快速上手。

1.工作原理

红外发射模块:核心为 940nm 红外发光二极管(IR LED)。单片机输出带有 38kHz 载波调制 的脉冲信号(如常见的 NEC 编码),经板载三极管放大后驱动 LED 发射人眼不可见的红外光。


红外接收模块:核心为集成式红外接收头(如 VS1838B / HS0038)。内部集成了光电二极管、前置放大器、38kHz 带通滤波器与解调电路。它能自动滤除可见光及环境杂光干扰,并将 38kHz 载波解调为标准数字逻辑电平(有信号时输出低电平,空闲时输出高电平)。

2.技术参数

工作电压:3.3V - 5V

核心元件:940nm红外发射二极管与VS1838B/1838一体化接收头

接收频率:38kHz

红外波长:940nm

发射功能:数字信号(输入 38kHz 脉冲调制波)

接收功能:数字信号(无信号高电平)(有信号低电平)

核心判断:检测到38kHz信号时输出0,未检测到输出1

接收距离:0.5~5米无遮挡情况下,对准后稳定接收,适合短距离测试

引脚定义:VCC(电源)、GND(接地)、OUT(信号输出)接线时切勿接反,否则模块无法工作

工作温度:-20℃ ~ 60℃

3.注意事项

1必须38kHz载波调制:接收头内部带有 38kHz 带通滤波器。如果发射端仅输出常高/常低电平,接收端将无法正确识别信号。开发时建议直接调用现成的库(如 Arduino 的 IRremote 库等)。


2方向性与遮挡:红外线属于直线光波传输,穿透力弱,两模块之间不能有不透明物体遮挡,且二极管需尽量正对以保证最大通信距离。


3环境光干扰:避免强直射阳光或强白炽灯直射接收头,强光会导致接收灵敏度下降或误触发。

Image

重点提醒:不要用普通光敏二极管替代一体化接收头!普通光敏二极管无法解调38kHz载波,会导致无法检测到红外信号,必须使用HX1838、VS1838这类一体化模块。

4.电路原理图

38kHz红外发射/接收模块电路原理图

二:树莓派例程

1.树莓派接线图

1.接收模块接线图
以树莓派Pico开发板为例,提醒: 请按下图的引脚标识接线,务必不能接错。如果接错线通电后会导致设备烧毁!

Image

2.发射模块接线图
以树莓派Pico开发板为例,提醒: 请按下图的引脚标识接线,务必不能接错。如果接错线通电后会导致设备烧毁!

Image

2.Python程序

通过上面参数我们已经了解到红外接收传感器是可直接识别38kHz标准红外载波信号。我们使用红外发射模块来发送出38KHz信号,将发射对准接收就能被识别到。我这里发射使用树莓派Pico的GP16引脚用PWM(脉冲宽度调制),来生成38kHz方波(红外载波)按图接好后运行程序,只需要将发射头对着红外接收传感器不停的晃动就能显示:已检测到信号。


main 下载这个main源代码上传至树莓派pico文件内,直接运行查看数据(如下图)

如果你还没有搭建好树莓派Python的编程环境可参考这个帖子→:如何搭建Python编程环境

Image


3.功能说明

如果此时你还有别的红外频率为38KHz发射装置,也可以对着接收传感器模块就能检测到发射过来的信号!

1. 本教程实现的是“红外载波检测”,若需实现红外遥控(如接收红外遥控器的按键信号),可在本代码基础上,增加红外信号解码逻辑(如NEC编码解码)。

2. 红外发射管的发射距离可通过调整占空比优化(占空比越大,发射功率越强,距离越远),但不建议超过60%(避免发热)。

3. 若不需要持续发射红外信号,可在代码中添加按键控制,实现“按下按键发射,松开停止”的功能。

4.本文完整覆盖了树莓派Pico红外接收模块的使用,从硬件参数、接线、代码的实现,可快速完成“发射-接收”的闭环测试。

三:ESP32例程

1.ESP32接线图

本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁设备

接收模块:VCC接3v供电,GND接GND,OUT接GPIO4

发射模块:VCC接3v供电,GND接GND,DAT接GPIO5

Image

2.C++程序

VS838 下载这个源代码直接用Arduino IDE编译上传程序打开串口监视查看,查看检测数据(如下图) 

如果你还没有搭建好ESP32的ArduinoIDE的编程环境可参考这个帖子→:搭建ArduinoIDE编程环境


测试方法:发射和接收模块靠近时会显示已接收到信号,如果中间用不透明的物体挡住就会显示远离区域未收到信号。


Image

3.代码逻辑

代码流程:

1. GPIO4 通过 PWM 输出 38kHz 方波,驱动红外发射模块。

2. VS1838 接收模块接 GPIO5:

   - 未收到 38kHz 红外信号:输出 HIGH(1)

   - 收到 38kHz 红外信号:输出 LOW(0)

3. 程序先关闭发射,读取一次 GPIO5 的待机状态。

4. 然后开启 GPIO4 的 38kHz 信号,在 30ms 内连续读取 GPIO5 共 100 次。

5. 只要读到一次 LOW,就说明接收模块收到了发射模块的红外信号,闭环测试成功。

6. 检测完成后关闭发射,避免红外 LED 长时间工作。


4.二次开发思路

可以把红外模块当作一种“无线开关”:

- 把发射端输出 38kHz的红外信号,加入一个按键来控制他输出。不按下按键时不输出,只有按下才会让发射模块输出38kHz的红外信号

- 把接收端GPIO5 检测是否收到 38kHz 信号。加一个输出引脚,如果收到信号就控制其他设备开启,如果没有收到就关闭设备。


以下用按键通过红外发射接收来控制led灯举例:

按下发射端按键

   ↓

GPIO4 输出 38kHz 红外

   ↓

接收模块 GPIO5 变为 LOW

   ↓

ESP32 点亮 LED


松开发射端按键

   ↓

GPIO4 停止输出 38kHz

   ↓

GPIO5 恢复 HIGH

   ↓

ESP32 熄灭 LED





作者签名: www.ydxhuo.com   楼主  2026-04-14 20:04:35
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.216.115 , 2026-08-21 23:23:45
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(9) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏