人体红外传感器(PIR,常见 HC-SR501)检测人或动物发出的红外线,有移动就输出高电平。
[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
VCC → Pico 5V(VBUS,模块标称 4.5–20V;部分模块也支持 3.3V)GND → Pico GNDOUT → Pico GP15(3.3V 电平,可直接连 GPIO,不用分压)# ============ 接线 ============
# HC-SR501 VCC → Pico 5V(VBUS)
# HC-SR501 GND → Pico GND
# HC-SR501 OUT → Pico GP15(3.3V 输出,直接连,不用分压)
# 板载 LED 在 GP25,检测到人时点亮
# =============================
from machine import Pin
import time
pir = Pin(15, Pin.IN)
led = Pin(25, Pin.OUT)
print('人体红外传感器测试')
print('检测到人体时 LED 会点亮')
while True:
if pir.value() == 1: # 检测到移动热源
print('检测到人体!')
led.on()
time.sleep(5) # 保持点亮一会儿
else:
led.off()
time.sleep(0.1)
# ============ 接线 ============
# HC-SR501 VCC → 5V,GND → GND,OUT → GP15(3.3V 直连)
# =============================
from machine import Pin
import time
pir = Pin(15, Pin.IN)
led = Pin(25, Pin.OUT)
count = 0
last_state = 0
print('人体计数器')
while True:
current_state = pir.value()
if current_state != last_state: # 状态发生变化才算一次
if current_state == 1:
count += 1
print(f'检测到人体,累计: {count} 次')
led.on()
else:
led.off()
last_state = current_state
time.sleep(0.1)
# ============ 接线 ============
# HC-SR501 VCC → 5V,GND → GND,OUT → GP15(3.3V 直连)
# 继电器模块(已带驱动,GPIO 只给信号,灯强电由模块隔离):
# 继电器模块 IN → Pico GP14
# 继电器模块 VCC → Pico 3V3
# 继电器模块 GND → Pico GND
# 继电器模块 COM/NO 接灯和电源(别碰强电)
# =============================
from machine import Pin
import time
pir = Pin(15, Pin.IN)
relay = Pin(14, Pin.OUT) # 继电器模块信号脚
LIGHT_DURATION = 60 # 灯亮持续时间(秒)
print('自动感应灯')
last_detection = 0
while True:
if pir.value() == 1:
print('检测到人体,开灯')
relay.on()
last_detection = time.time()
# 超过设定时间且仍开着,就关灯
if relay.value() == 1 and time.time() - last_detection > LIGHT_DURATION:
print('超时,关灯')
relay.off()
time.sleep(0.5)
H(可重复触发 / Retrigger):人在范围内持续移动,OUT 会一直保持高,灯常亮L(不可重复触发 / Single):一次触发后固定亮一段时间(由延时电位器定),期间再动也不延长H,做计数/单次报警用 LTX(延时):调一次触发后高电平持续多久(约 0.3 秒~5 分钟)SX(灵敏度):调检测距离远近(顺时针更远)Q: 传感器一直输出高 / 灯一直亮?
A: 看跳线帽是不是在 H 且现场一直有热源;或灵敏度(SX)调太高。改成 L 模式或调低灵敏度试试。
Q: 完全检测不到人? A: 查 VCC/GND/OUT 有没有接反,OUT 是否真到 GP15;灵敏度调高、避开遮挡,并等上电预热结束。
Q: 刚一通电就乱报? A: 这是 HC-SR501 上电自检(几十秒),正常;等它稳定后再测试即可,不用修代码。