这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】+精英板红外人体感应

共1条 1/1 1 跳转至

【换取手持数字示波器】+精英板红外人体感应

专家
2024-05-05 13:40:49   被打赏 10 分(兑奖)     打赏

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

HC-SR501.png

     这个模块有很多的应用范围,可用在走廊、楼道、卫生间、地下室、仓库、车库等场所的自动照明、排气扇的自动抽风以及其它电器(白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗衣机)特别适用于企业,宾馆、商场、库房敏感区域或安全区域和报警系统。还可用于防盗等用途。该模块的电气参数如下:

电气参数.png     模块支持延时响应调节,感应距离调节。
使用说明.png
1、调节距离电位器顺时针旋转,感应距离增大(约7米),反之,感应距离减小(约3米)。

2、调节延时电位器顺时针旋转,感应延时加长(约300S),反之,感应延时减短(约0.5S)。

由于模块只需要用到三个引脚,即VCCOUTGNDVCC可连接精英板上的5V引脚,OUT与板上的PB7脚连接。

原理图.png参考部分代码如下:

#include "HC-SR501/bsp_HC-SR501.h"

void HC_SR501_GPIO_Init(void)
{
   /* 定义IO硬件初始化结构体变量 */
  GPIO_InitTypeDef GPIO_InitStruct;
  /* 使能(开启)HC_SR501引脚对应IO端口时钟 */  
  HC_SR501_RCC_CLK_ENABLE();
   
  /* 设定HC_SR501对应引脚IO编号 */
  GPIO_InitStruct.Pin = HC_SR501_GPIO_PIN;  
  /* 设定HC_SR501对应引脚IO操作速度*/
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  
  /* 设定HC_SR501对应引脚IO为浮空输入模式 */
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  
  GPIO_InitStruct.Pull= GPIO_PULLDOWN;
  /* 初始化HC_SR501对应引脚IO */
  HAL_GPIO_Init(HC_SR501_GPIO, &GPIO_InitStruct);
}

static void HC_SR501_ScanDelay(void)
{  
  uint32_t i,j;
  for(i=0;i<10;++i)
    for(j=0;j<100;++j){ }		
}

HC_SR501_State_TypeDef HC_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)
    {      
       /* 按键扫描完毕,确定有人,返回有人状态(高电平) */
      return HC_SR501_HIGH;
    }
  }
  /* 没人,返回没人状态 */
  return HC_SR501_LOW;
}

#include "stm32f1xx_hal.h"

typedef enum
{
  HC_SR501_LOW   = 0,
  HC_SR501_HIGH = 1,
}HC_SR501_State_TypeDef;

#define HC_SR501_RCC_CLK_ENABLE()         __HAL_RCC_GPIOB_CLK_ENABLE()
#define HC_SR501_GPIO_PIN                 GPIO_PIN_7
#define HC_SR501_GPIO                     GPIOB
#define HC_SR501_ACTIVE_LEVEL             1

void HC_SR501_GPIO_Init(void);
HC_SR501_State_TypeDef HC_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"

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  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;  // 9倍频,得到72MHz主时钟
  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;       // 系统时钟:72MHz
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
  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);
}

int main(void)
{
  /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  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);
  }
}

编译下载后,感应效果展示如下视频:

感应效果.zip




关键词: 换取手持数字示波器     HC-SR501红外人体感应    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]