| HCSR501人体感应传感器原理图 |
HCSR501人体感应传感器,也叫热释电传感器,工作原理是在范围内检测动物或人体自身散发出的红外线时,会发出一个脉冲信号(脉冲宽度固定)。当有人体时会产生红外线交替出现在“盲区”和“高灵敏区”,就一直有脉冲信号输出(实测人静止不动时不会输出)。所以此款传感器检测的是移动的人体。该模块添加了放大器BISS0001,这样就将脉冲信号转化为更直观的高/低电平,通俗的理解:有人时输出高电平,无人时输出低电平。并在放大电路上设置电位器可调节输出信号的灵敏度范围(比如探头产生n个脉冲,模块才输出高电平),还可调节高电平的持续输出时间。(如下图所示)

(如下图所示:传感器探头的正前方角度为100°,距离为2-7M,左右最大3-4米。 其中模块的内部可以自定义DIY添加热敏和光敏探头,其目的可让传感器在特定的环境下才能工作。比如光敏可实现白天传感器不会工作,只有夜晚传感器才会工作。更有效的增加了传感器的可玩性)

通过上述的介绍,我们已知传感器实际有人时会输出高电平,无人时输出低电平。那么我们可以写一个Python程序来监测传感器的引脚的信号输出情况,判断是否有高低电平状态。当有高电平时显示有人,无高电平时显示无人,这样就非常好理解了!
下图接线方式:传感器需要接主板的5V来供电,主板使用GP0引脚来读取信号,监测传感器是否有信号输出。
| 树莓派Pico | 人体红外传感器模块 |
| 5V | VCC正 |
| GND | GND负 |
| GP0 | 信号输出 |

以下代码逻辑:初始化主板GPIO引脚(导入模块、配置引脚)然后进入无限循环:1.读取 GP0 引脚当前电平状态 2.根据电平高低判断并输出对应信息
3.短暂延时后重复检测
# www.raspi.cc树莓派极客网站
# 检测GP0引脚电平,高电平显示"有人",低电平显示"无人"
from machine import Pin
import time
# 配置GP0引脚为输入模式,启用内部下拉电阻
# 无输入时默认低电平,有高电平输入时触发状态变化
sensor_pin = Pin(0, Pin.IN, Pin.PULL_DOWN)
# 主循环:持续监测引脚状态
while True:
# 读取引脚当前电平状态(1为高电平,0为低电平)
current_state = sensor_pin.value()
# 根据电平状态输出对应信息
if current_state == 1:
print("有人")
else:
print("无人")
# 延时0.1秒,控制检测频率
time.sleep(0.1)直接运行代码结果如下:

注意:传感器在通电后的1分钟内探头的正前方是不可以出现人 。等待传感器初始化完成后,当人物出现会输出高电平!
以下代码逻辑:1.读取 GP0 引脚当前电平状态 ,根据电平高低判断,有高电平时显示有人并打开板载WS2812灯。 没有高电平时显示 无人并关闭灯!
# 树莓派Pico GP0引脚状态监测程序
# 功能:检测GP0引脚电平,控制板载WS2812灯并显示有人/无人
from machine import Pin
import time
from neopixel import NeoPixel
# 配置GP0引脚为输入模式,启用内部下拉电阻
sensor_pin = Pin(0, Pin.IN, Pin.PULL_DOWN)
# 配置板载WS2812 LED(通常连接在GP25引脚)
# 这里假设LED数量为1,实际根据硬件情况调整
led_pin = Pin(25, Pin.OUT)
np = NeoPixel(led_pin, 1) # 创建NeoPixel对象,1个LED
# 定义颜色
WHITE = (255, 255, 255) # 白色
BLACK = (0, 0, 0) # 熄灭
# 主循环:持续监测引脚状态
while True:
# 读取引脚当前电平状态(1为高电平,0为低电平)
current_state = sensor_pin.value()
# 根据电平状态控制LED并输出对应信息
if current_state == 1:
print("有人")
np[0] = WHITE # 设置第一个LED为白色
else:
print("无人")
np[0] = BLACK # 熄灭LED
np.write() # 将颜色数据写入LED
time.sleep(0.1) # 延时0.1秒,控制检测频率
程序采用循环检测模式,通过内部下拉电阻保证输入信号稳定,每次检测间隔 0.1 秒以平衡响应速度和系统负载。整体结构清晰,包含硬件初始化、状态检测、逻辑判断和执行输出四个主要部分。该代码主要实现两个核心功能是:
1.通过 GP0 引脚检测外部输入的高低电平,高电平时输出 "有人",低电平时输出 "无人"
2.根据检测到的电平状态控制板载 WS2812 LED:高电平时点亮白色,低电平时熄灭
核心知识点:
1.Python 硬件控制基础
1.machine.Pin类:用于配置和操作 GPIO 引脚,支持输入 / 输出模式切换
2.引脚模式:Pin.IN(输入模式) 和Pin.OUT(输出模式) 的区别与应用场景,内部电阻:Pin.PULL_DOWN下拉电阻的作用(稳定悬空引脚电平,避免误触发)
3.WS2812 LED 控制neopixel.NeoPixel类:用于驱动 WS2812 等可编程 LED-RGB 颜色表示:通过三元组(R, G, B)定义颜色,值范围 0-255数据写入:np.write()方法将颜色数据发送到 LED 的原理
程序结构设计:
初始化部分:硬件资源配置应放在循环外,避免重复初始化
无限循环:while True实现持续监测的典型应用
条件判断:if-else结构实现不同状态的分支处理
实时系统考量
延时控制:time.sleep(0.1)的作用(平衡检测频率和 CPU 占用)
状态同步:确保传感器检测与 LED 控制的状态一致性
硬件接口知识
GPIO 引脚编号:树莓派 Pico 的 GP0 对应物理引脚 1
板载 LED 通常连接在 GP25 引脚(不同型号可能有差异)
数字输入信号:高低电平的电气特性(通常高电平为 3.3V,低电平为 0V)
这些知识点涵盖了从硬件配置到软件逻辑的完整流程,是嵌入式系统开发的基础技能,可应用于各类传感器检测与外设控制场景。
联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意
提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...