栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32实现红外感应传感器功能

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32实现红外感应传感器功能

原理

人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10um 左右的红外线。人体发射的 10um 左右的红外线通过菲涅尔滤光片增强后聚集到红外感应源上,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路检测处理后就能产生报警信号。

实物图(正反面)

型号:HC-SR50

传感器特性

工作电压范围 直流电压 4.5-20V
电平输出 高 3.3 V /低 0V
触发方式 L 不可重复触发/H 重复触发
延时时间 0.5-200S(可调)
封锁时间 2.5S(默认)可制作范围零点几秒-几十秒
感应范围 3米到7米

实验

全自动感应 :人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平。
感应模块通电后有一分钟左右的初始化时间,在此期间模块会间隔地输出 0-3 次,一分钟后进入待机状态。

如果检测到红外,则LED灯亮,否则灭。
模块数据输出接到PA4

  • 中断功能
  • 配置中断向量控制器NVIC
  • 配置外部中断口
  • 实现中断函数

中断控制器

#define SR501_INT_GPIO_PORT         GPIOA
#define SR501_INT_GPIO_CLK          (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)
#define SR501_INT_GPIO_PIN          GPIO_Pin_4

#define SR501_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOA
#define SR501_INT_EXTI_PINSOURCE    GPIO_PinSource4
#define SR501_INT_EXTI_LINE         EXTI_Line4
#define SR501_INT_EXTI_IRQ          EXTI4_IRQn

#define SR501_IRQHandler            EXTI4_IRQHandler


//嵌套中断向量控制器
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
  NVIC_InitStructure.NVIC_IRQChannel = SR501_INT_EXTI_IRQ;//外部中断线
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  NVIC_Init(&NVIC_InitStructure);
}

外部中断口

//IO 为EXIT外部中断口
void EXTI_SR501_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	EXTI_InitTypeDef EXTI_InitStructure;
	
	RCC_APB2PeriphClockCmd(SR501_INT_GPIO_CLK,ENABLE);											
	NVIC_Configuration();
	
    GPIO_InitStructure.GPIO_Pin = SR501_INT_GPIO_PIN;//gpioy引脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  	
    GPIO_Init(SR501_INT_GPIO_PORT, &GPIO_InitStructure);

	
    GPIO_EXTILineConfig(SR501_INT_EXTI_PORTSOURCE, SR501_INT_EXTI_PINSOURCE); 
    EXTI_InitStructure.EXTI_Line = SR501_INT_EXTI_LINE;//中断线
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE; 	
    EXTI_Init(&EXTI_InitStructure);
}

中断函数

void SR501_IRQHandler(void)
{
	if(EXTI_GetITStatus(SR501_INT_EXTI_LINE) != RESET) 
	{
		LED1_TOGGLE;
		EXTI_ClearITPendingBit(SR501_INT_EXTI_LINE);     
	}  
}

LED灯配置

#define LED1_GPIO_PORT    	GPIOB			         
#define LED1_GPIO_CLK 	    RCC_APB2Periph_GPIOB	
#define LED1_GPIO_PIN		GPIO_Pin_5			

void LED_GPIO_Config(void)
{		
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd( LED1_GPIO_CLK , ENABLE);
		GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;	
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
		GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);	
		GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
}

主函数

int main(void)
{
	LED_GPIO_Config();
	EXTI_SR501_Config(); 	
	while(1)                            
	{
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号