HC-SR501人体红外传感器

了解人体红外传感器HC-SR501的驱动原理,通过配置STM32F030芯片GPIO相关寄存器,让人体红外传感器识别到人体时使蜂鸣器响起的基础实验。

1、HC-SR501是基于红外线HC-SR501是基于红外线技术的自动控制模块 ,采用德国原装进口LHI778 探头设计,灵敏度高,可靠性强,超低电压工作模式 ,广泛应用于各类自动感应电器设备 ,尤其是干电池供电的自动控制产品。

2、模块为全自动感应,当人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平。传感器有两种触发方式(可通过跳线进行选择):第一种不可重复触发方式,即感应输出高电平后,延时一段时间结束,输出将自动从高电平变成低电平。第二种可重复触发方式,即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)

3、具有感应封锁时间(默认设置:2.5S 封锁时间):感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。(此时间可设置在零点几秒—几十秒钟)。感应模块通电后有一分钟左右的初始化时间,在此期间模块会间隔地输出0-3 次,一分钟后进入待机状态。

下面是传感器的调节方法:

HC-SR501人体红外传感器_第1张图片

 

注:a)调节延时电位器顺时针旋转,感应延时加长(约300S),反之,感应延时减短(约 0.5S)。b)调节距离电位器顺时针旋转,感应距离增大(约 7 米),反之,感应距离减小(约 3 米)。

 

 8、在Sensor_human.c文件中定义传感器读取引脚初始化函数

 // 引脚初始化
void HC_SR501_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct; // 定义结构体变量
	EXTI_InitTypeDef EXTI_InitStruct; // 定义外部中断结构体变量
	NVIC_InitTypeDef NVIC_InitStruct;
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); // 初始化 GPIO时钟
	
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // 设置为推挽输出
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; // 设置引脚为输入模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; // 引脚为 PA0
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; // 浮空
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3; // 50MHz
	GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化函数 
	
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // 选择用作EXTI线的GPIO引脚
	
	EXTI_InitStruct.EXTI_Line = EXTI_Line0; // 选择中断线0
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; // 选择中断触发
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; // 选择双边沿触发
	EXTI_InitStruct.EXTI_LineCmd = ENABLE; // 使能中断线
	EXTI_Init(&EXTI_InitStruct); // 初始化外部中断
	
	// 配置中断
	NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn; // 选择中断通道
	NVIC_InitStruct.NVIC_IRQChannelPriority = 2; // 选择中断优先级
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
	NVIC_Init(&NVIC_InitStruct);
}

9、配置中断服务函数

 // 配置中断服务函数
void EXTI0_1_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line0))
    {
	EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
	{
	   BUZZER_ON; // 蜂鸣器开	
	}
	else
	{
	   BUZZER_ON; // 蜂鸣器开	
	}
    }
}

10、在Sensor_human.h文件中进行声明

#ifndef _SENSOR_HUMAN_H_
#define _SENSOR_HUMAN_H_

#include "stm32f0xx.h"

void HC_SR501_Init(void);

#endif

11、在main.c文件中的main()函数中调用函数。

int main()
{
    Buzzer_Init();  // 蜂鸣器初始化
    HC_SR501_Init(); // 传感器读取引脚初始化
    while(1)
    {                                                                                                                                                                                                                                                                                                                                                                                                  
    }
}

12、编译整个工程并且下载程序到开发板

     将程序下载到开发板中后,等待传感器初始化后,当人从传感器经过则可以听到开发板上的蜂鸣器响起。

 

你可能感兴趣的:(传感器开发)