HC-SR501是基于红外线技术的自动控制模块,采用德国原装进口 LHI778 探头设计,灵敏度高,可靠性强,超低电压工作模式,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。实物图如下所示:
这个模块有很多的应用范围,可用在走廊、楼道、卫生间、地下室、仓库、车库等场所的自动照明、排气扇的自动抽风以及其它电器(白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗衣机)特别适用于企业,宾馆、商场、库房敏感区域或安全区域和报警系统。还可用于防盗等用途。 该模块的电气参数如下:
模块支持延时响应调节,感应距离调节。
1、调节距离电位器顺时针旋转,感应距离增大(约7米),反之,感应距离减小(约3米)。 2、调节延时电位器顺时针旋转,感应延时加长(约300S),反之,感应延时减短(约0.5S)。 由于模块只需要用到三个引脚,即VCC、OUT、GND,VCC可连接精英板上的5V引脚,OUT与板上的PB7脚连接。
参考的代码如下:
#include"HC-SR501/bsp_HC-SR501.h"voidHC_SR501_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStruct;HC_SR501_RCC_CLK_ENABLE();GPIO_InitStruct.Pin = HC_SR501_GPIO_PIN;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull= GPIO_PULLDOWN;HAL_GPIO_Init(HC_SR501_GPIO, &GPIO_InitStruct); }staticvoidHC_SR501_ScanDelay(void){ uint32_t i,j;for(i=0;i<10;++i)for(j=0;j<100;++j){ } } HC_SR501_State_TypeDefHC_SR501_StateRead(void){if(HAL_GPIO_ReadPin(HC_SR501_GPIO,HC_SR501_GPIO_PIN)==HC_SR501_ACTIVE_LEVEL) {HC_SR501_ScanDelay();if(HAL_GPIO_ReadPin(HC_SR501_GPIO,HC_SR501_GPIO_PIN)==HC_SR501_ACTIVE_LEVEL) {returnHC_SR501_HIGH; } }returnHC_SR501_LOW; }
#include"stm32f1xx_hal.h"typedefenum{HC_SR501_LOW =0, HC_SR501_HIGH =1, }HC_SR501_State_TypeDef;#defineHC_SR501_RCC_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()#defineHC_SR501_GPIO_PIN GPIO_PIN_7#defineHC_SR501_GPIO GPIOB#defineHC_SR501_ACTIVE_LEVEL 1voidHC_SR501_GPIO_Init(void);HC_SR501_State_TypeDefHC_SR501_StateRead(void);
#include"stm32f1xx_hal.h"#include"usart/bsp_debug_usart.h"#include"led/bsp_led.h"#include"HC-SR501/bsp_HC-SR501.h"voidSystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn,0,0); }intmain(void){HAL_Init();SystemClock_Config();LED_GPIO_Init();HC_SR501_GPIO_Init();MX_DEBUG_USART_Init();printf("正点原子精英板\n");printf("HC-SR501人体红外模块检测\n");while(1) {if(HC_SR501_StateRead()==HC_SR501_LOW) { LED1_OFF;printf("未发现人体信号\n"); }else{ LED1_ON;printf("HC-SR501检测到人体信号\n"); }HAL_Delay(500); } }
编译下载后,感应效果展示如下视频:
感应效果演示
|