树莓派资料
显示屏资料
系统下载
树莓派Pico
首页 动态 发帖 版块 我的
 退出
游客  
等级:
金币:
经验值:

树莓派pico使用人体红外感应传感器 实现人来灯亮人走灯灭Python编程

  5731 
 0
 2
lamp   single 

一:人体传感器工作原理介绍

HCSR501人体感应传感器原理图


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

Image

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

Image

二:硬件连接

通过上述的介绍,我们已知传感器实际有人时会输出高电平,无人时输出低电平。那么我们可以写一个Python程序来监测传感器的引脚的信号输出情况,判断是否有高低电平状态。当有高电平时显示有人,无高电平时显示无人,这样就非常好理解了!


下图接线方式:传感器需要接主板的5V来供电,主板使用GP0引脚来读取信号,监测传感器是否有信号输出。

树莓派Pico人体红外传感器模块
5VVCC正
GNDGND负
GP0信号输出

注意:人体传感器需要接5V供电

三:Python编程

以下代码逻辑:初始化主板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)

直接运行代码结果如下:

注意:人体传感器需要接5V供电

注意:传感器在通电后的1分钟内探头的正前方是不可以出现人 。等待传感器初始化完成后,当人物出现会输出高电平!

三:Python编程,控制人来亮灯(进阶)

以下代码逻辑: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物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...



标签:
作者签名:    楼主  2025-08-28 17:08:28
回复列表
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权
您的IP: 18.97.9.171 , 2025-11-12 20:27:47
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权