#申请原创# 人体红外传感器HC-SR501相信大伙都不陌生,这类传感器功耗低,常用于智能家居,红外监控的项目上。其工作原理也比较简单,人体会发出特定波长为10um左右的红外线,HC-SR501模块集成了红外感应源,该感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经检测处理后就能产生报警信号。
下面来看看这个功能模块,实物图如下图所示:
模块的功能特点:
①、全自动感应:人进入其感应范围则输出高电平, 人离开感应范围则自动延时关闭高电平,输出低电平。
②、光敏控制(可选择,出厂时未设)可设置光敏控制,白天或光线强时不感应。
③、温度补偿(可选择,出厂时未设):在夏天当环境温度升高至30~32℃,探测距离稍变短,温度补偿可作一定的性能补偿。
④、两种触发方式:(可跳线选择)
a、不可重复触发方式:即感应输出高电平后,延时时间段一结束,输出将自动从高电平变成低电平;
b、可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。
⑤、具有感应封锁时间(默认设置:2.5S 封锁时间):感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。(此时间可设置在零点几秒—几十秒钟)。
⑥、工作电压范围宽:默认工作电压DC4.5V-20V。
⑦、微功耗:静态电流<50 微安,特别适合干电池供电的自动控制产品。
⑧、输出高电平信号:可方便与各类电路实现对接。
HC-SR501功能模块带有可调节旋钮,两个可调节旋钮实物图如下所示:
距离调节:调节距离电位器顺时针旋转,感应距离增大(约7 米),反之,感应距离减小(约3 米)。
延时调节:调节延时电位器顺时针旋转,感应延时加长(约200S),反之,感应延时减短(约8S )。
关于该模块的软件部分,实现也比较简单,代码展示如下:
- #include "../inc/main.h"
- #include "bsp_HC-SR501.h"
- #define LED_GPIO_PORT CW_GPIOB
- #define LED_GPIO_PINS GPIO_PIN_8 | GPIO_PIN_9
- void Delay(uint16_t nCount);
- int32_t main(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- HC_SR501_GPIO_Init();
- RCC_HSI_Enable(RCC_HSIOSC_DIV6);
- __RCC_GPIOC_CLK_ENABLE();
- GPIO_InitStruct.IT = GPIO_IT_NONE;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pins = LED_GPIO_PINS;
- GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
- while (1)
- {
- if(HC_SR501_StateRead()==HC_SR501_LOW)
- {
- GPIO_WritePin(LED_GPIO_PORT,LED_GPIO_PINS,GPIO_Pin_RESET);
- Delay(0xFFFF);
- }
- else
- {
- GPIO_WritePin(LED_GPIO_PORT,LED_GPIO_PINS,GPIO_Pin_SET);
- Delay(0xFFFF);
- }
- }
- }
- void Delay(__IO uint16_t nCount)
- {
- /* Decrement nCount value */
- while (nCount != 0)
- {
- nCount--;
- }
- }
- /* 包含头文件 ----------------------------------------------------------------*/
- #include "bsp_HC-SR501.h"
- /**
- * 函数功能: 人体红外感应模块IO引脚初始化.
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明:对人体红外感应模块接入的引脚进行初始化
- *
- */
- void HC_SR501_GPIO_Init(void)
- {
- /* 定义IO硬件初始化结构体变量 */
- GPIO_InitTypeDef GPIO_InitStruct;
-
- /* 使能(开启)HC_SR501引脚对应IO端口时钟 */
- __RCC_GPIOA_CLK_ENABLE();
-
- //GPIO_InitStruct.IT = GPIO_IT_HIGH;
- /* 设定HC_SR501对应引脚IO为浮空输入模式 */
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- /* 设定HC_SR501对应引脚IO编号 */
- GPIO_InitStruct.Pins = HC_SR501_GPIO_PIN;
- /* 初始化HC_SR501对应引脚IO */
- GPIO_Init(HC_SR501_GPIO, &GPIO_InitStruct);
- }
- /**
- * 函数功能: 简单粗暴的延时函数
- * 输入参数: time;延时时间设置
- * 返 回 值: 无
- * 说 明:软件消抖
- */
- static void HC_SR501_ScanDelay(void)
- {
- uint32_t i,j;
- for(i=0;i<10;++i)
- for(j=0;j<100;++j){ }
- }
- /**
- * 函数功能: 读取引脚的状态
- * 输入参数:无
- * 返 回 值: HC_SR501_HIGH:有人;
- * HC_SR501_LOW:没人
- * 说 明:无。
- */
- HC_SR501_State_TypeDef HC_SR501_StateRead(void)
- {
- /* 读取模块输出信号,若此时输出的是高电平 ,则进入下一步判断*/
- if(GPIO_ReadPin(HC_SR501_GPIO,HC_SR501_GPIO_PIN)==HC_SR501_ACTIVE_LEVEL)
- {
- /* 延时一小段时间,消除抖动 */
- HC_SR501_ScanDelay();
- /* 延时时间后再来判断引脚状态,如果还是高电平那么确实就是高电平 */
- if(GPIO_ReadPin(HC_SR501_GPIO,HC_SR501_GPIO_PIN)==HC_SR501_ACTIVE_LEVEL)
- {
- /* 按键扫描完毕,确定有人,返回有人状态(高电平) */
- return HC_SR501_HIGH;
- }
- }
- /* 没人,返回没人状态 */
- return HC_SR501_LOW;
- }
- #ifndef __BSP_HC_SR501_H__
- #define __BSP_HC_SR501_H__
- /* 包含头文件 -----------------------------------------------------------*/
- #include "../inc/main.h"
- /* 类型定义 --------------------------------------------------------------*/
- typedef enum
- {
- HC_SR501_LOW = 0,
- HC_SR501_HIGH = 1,
- }HC_SR501_State_TypeDef;
- /* 宏定义 --------------------------------------------------------------------*/
- #define HC_SR501_RCC_CLK_ENABLE() _RCC_GPIOA_CLK_ENABLE()
- #define HC_SR501_GPIO_PIN GPIO_PIN_7
- #define HC_SR501_GPIO CW_GPIOA
- #define HC_SR501_ACTIVE_LEVEL 1
- /* 函数声明 ------------------------------------------------------------------*/
- void HC_SR501_GPIO_Init(void);
- HC_SR501_State_TypeDef HC_SR501_StateRead(void);
- #endif
编译完成后,下载到CW32L031CxTx StartKit开发板中,然后使用手挥动触发人体红外感应,演示的效果见下面视频展示。大体上感觉还算比较灵敏。当然这个红外感应模块还是存在些缺点的,1)容易受各种热源、光源干扰;2)被动红外穿透力差,人体的红外辐射容易被遮挡,不易被探头接收;3)易受射频辐射的干扰;4)环境温度和人体温度接近时,探测和灵敏度明显下降,有时造成短时失灵。
HC-SR501人体感应模块.pdf
(700.89 KB, 下载次数: 0)
|