HC-SR501人体红外传感器详解(STM32)

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

一、HC - SR501人体红外传感器简介

HC - SR501是一种基于红外线技术的自动控制模块,常用于检测人体的红外辐射变化。它能在检测到人体活动时输出高电平信号,当人体离开检测范围一段时间后,输出恢复为低电平。该传感器具有灵敏度高、可靠性强、低功耗等优点,广泛应用于安防、照明控制等领域。

主要参数

  • 工作电压:DC 4.5V - 20V
  • 静态电流:<50μA
  • 电平输出:高 3.3V/低 0V
  • 触发方式:L 不可重复触发/H 可重复触发
  • 延时时间:5s - 5min(可调)
  • 感应角度:<120°锥角
  • 感应距离:7m - 12m(可调)

二、硬件连接

将HC - SR501与STM32进行连接,一般只需要连接三根线:

  • VCC:连接到STM32的电源正极(如3.3V或5V)
  • GND:连接到STM32的地
  • OUT:连接到STM32的一个GPIO输入引脚,用于读取传感器的输出信号

假设将HC - SR501的OUT引脚连接到STM32的PA0引脚,以下是具体的硬件连接图示例(此处可简单手绘或用文字描述):

HC - SR501STM32
VCC3.3V
GNDGND
OUTPA0

三、STM32代码实现

1. 初始化GPIO引脚

在使用之前,需要对连接HC - SR501的GPIO引脚进行初始化,将其配置为输入模式。以下是基于STM32 HAL库的初始化代码:

#include "stm32f1xx_hal.h"

// 定义连接HC - SR501的GPIO引脚
#define HC_SR501_PIN GPIO_PIN_0
#define HC_SR501_PORT GPIOA

void GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 使能GPIOA时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();

    // 配置PA0为输入模式
    GPIO_InitStruct.Pin = HC_SR501_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(HC_SR501_PORT, &GPIO_InitStruct);
}

2. 读取传感器状态

编写一个函数来读取HC - SR501的输出信号,判断是否检测到人体活动。

uint8_t Read_HC_SR501_State(void)
{
    return HAL_GPIO_ReadPin(HC_SR501_PORT, HC_SR501_PIN);
}

3. 主函数

在主函数中,初始化GPIO引脚,然后不断读取传感器的状态,并根据状态进行相应的操作。

int main(void)
{
    HAL_Init();
    GPIO_Init();

    while (1)
    {
        uint8_t state = Read_HC_SR501_State();
        if (state == GPIO_PIN_SET)
        {
            // 检测到人体活动
            // 这里可以添加相应的处理代码,如点亮LED等
            // 示例:点亮PB12引脚连接的LED
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
        }
        else
        {
            // 未检测到人体活动
            // 熄灭LED
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
        }
    }
}

四、代码解释

  1. GPIO_Init函数:该函数用于初始化连接HC - SR501的GPIO引脚。首先使能GPIOA的时钟,然后将PA0引脚配置为输入模式,不使用上拉或下拉电阻。
  2. Read_HC_SR501_State函数:该函数用于读取HC - SR501的输出信号,通过调用HAL_GPIO_ReadPin函数获取引脚的电平状态。
  3. 主函数:在主函数中,首先调用HAL_Init函数进行HAL库的初始化,然后调用GPIO_Init函数初始化GPIO引脚。在无限循环中,不断读取传感器的状态,根据状态控制PB12引脚连接的LED的亮灭。

五、注意事项

  • 电源稳定性:确保HC - SR501的电源稳定,避免因电源波动导致传感器工作异常。
  • 安装位置:合理选择传感器的安装位置,避免阳光直射、强热源等干扰因素。
  • 触发方式:根据实际需求选择合适的触发方式(可重复触发或不可重复触发),并通过传感器上的跳线进行设置。

通过以上步骤,你可以使用STM32读取HC - SR501人体红外传感器的状态,并根据检测结果进行相应的控制。

HC-SR501是基于红外线技术的自动控制模块,采用德国原装进口LHI778探头设计,灵敏度高,可靠性强,超低电压工作模式,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。 电气参数 产品型号HC--SR501人体感应模块 工作电压范围直流电压4.5-20V 静态电流<50uA 电平输出高3.3 V /低0V 触发方式L不可重复触发/H重复触发(默认重复触发) 延时时间5-200S(可调)可制作范围零点几秒-几十分钟 封锁时间2.5S(默认)可制作范围零点几秒-几十秒 电路板外形尺寸32mm*24mm 感应角度<100度锥角 工作温度-15-+70度 感应透镜尺寸直径:23mm(默认) 功能特点: 1、全自动感应:人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平。 2、光敏控制(可选择,出厂时未设)可设置光敏控制,白天或光线强时不感应。 3、温度补偿(可选择,出厂时未设):在夏天当环境温度升高至30~32℃,探测距离稍变短,温度补偿可作一定的性能补偿。 4、两种触发方式:(可跳线选择) a、不可重复触发方式:即感应输出高电平后,延时时间段一结束,输出将自动从高电平变成低电平; b、可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。 5、具有感应封锁时间(默认设置:2.5S封锁时间):感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。(此时间可设置在零点几秒—几十秒钟)。 6、工作电压范围宽:默认工作电压DC4.5V-20V。 7、微功耗:静态电流<50微安,特别适合干电池供电的自动控制产品。 8、输出高电平信号:可方便与各类电路实现对接。 实物购买链接:https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-981744861.13.F4vK7o&id=10566272393
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值