人體熱釋紅外傳感器

目錄


上一個網文實現了流水燈,《利用STM32F103C8T6最小系統板點亮流水燈 》,這個主要用到了單片機的IO可以輸出高低電平的特性,程序裏置1即輸出高電平;程序裏置0即輸出低電平。

當然,GPIO除了對外可以輸出高低電平以外,單片機的IO還可以當做輸入使用,當與單片機的某個IO引腳相連的電壓爲高電平的時候,程序中讀取該IO的值爲邏輯“1”;當輸入的電壓爲低電平的時候,程序中讀取該IO的值爲邏輯“0”。

注意:
因爲單片機的IO爲TTL電平,所以輸入的電壓要注意電壓範圍,避免輸入電壓過高燒燬單片機IO引腳;
單片機的IO作爲輸出使用時,注意輸出電流的能力是有限的,即一般只使用IO作爲觸發信號,而不是作爲功率IO使用;
補充:
TTL電平的電壓範圍:
輸出高電平>2.4V,輸出低電平<0.4V
輸入高電平≥2.0V,輸入低電平≤0.8V

GPIO輸入的應用場景

  • 按鍵讀取
  • 熱釋紅外人體感應傳感器
  • 紅外接收頭
  • 帶lm393的一些傳感器模塊,比如:熱敏傳感器、光照傳感器、聲音傳感器等模塊

這種模塊上面一般都有一個電位器,用於調節閾值。

這種模塊的輸出引腳一般標識爲DO,可以輸出TTL信號,進而單片機可以得到兩種狀態,感應(達到)到目標,或者未感應(未達到)。

個別傳感器模塊還有一個模擬量輸出引腳,一般標識爲AO,比如MQ2煙霧傳感器,通過其模擬信號輸出引腳AO與AD芯片或者單片機的ADC引腳相連,可以獲得強度值,這種方法可以不調節硬件的情況下,通過程序來控制響應閾值,更靈活。

人體熱釋紅外傳感器HC-SR501

在這裏插入圖片描述

電氣參數

  • 工作電壓範圍:直流電壓4.5-20V
  • 電平輸出:高3.3 V /低0V
  • 觸發方式:L不可重複觸發/H重複觸發(默認重複觸發)
  • 延時時間:0.5-200S(可調)可製作範圍零點幾秒-幾十分鐘
  • 封鎖時間:2.5S(默認)可製作範圍零點幾秒-幾十秒
  • 感應角度:<100度錐角

功能特點

  • 全自動感應:人進入其感應範圍則輸出高電平,人離開感應範圍則自動延時關閉高電平,輸出低電平。
  • 光敏控制(可自己購買了安裝,出廠時未設):模塊預留有位置,可設置光敏控制,白天或光線強時不感應。
  • 觸發方式跳線選擇。
    • 不可重複觸發方式:即感應輸出高電平後,延時時間段一結束,輸出將自動從高電平變成低電平;
    • 可重複觸發方式:即感應輸出高電平後,在延時時間段內,如果有人體在其感應範圍活動,其輸出將一直保持高電平,直到人離開後才延時將高電平變爲低電平(感應模塊檢測到人體的每一次活動後會自動順延一個延時時間段,並且以最後一次活動的時間爲延時時間的起始點)。
  • 具有感應封鎖時間(默認設置:2.5S封鎖時間):感應模塊在每一次感應輸出後(高電平變成低電平),可以緊跟着設置一個封鎖時間段,在此時間段內感應器不接受任何感應信號。此功能可以實現“感應輸出時間”和“封鎖時間”兩者的間隔工作,可應用於間隔探測產品;同時此功能可有效抑制負載切換過程中產生的各種干擾。(此時間可設置在零點幾秒—幾十秒鐘)。

注意:
紅外線熱釋電傳感器根據實現原理,對人體的敏感程度還和人的運動方向關係很大。紅外線熱釋電傳感器對於徑向移動反應最不敏感, 而對於橫切方向 (即與半徑垂直的方向)移動則最爲敏感。
==>所以安裝不對的話,可能會出現不工作的情況,另外,根據模塊實現的原理,靜止的人,無法感應。
傳感器只對移動或運動的人體起作用。
==>所以如果用於檢測球場或者教室內是否有人的話,理論上來說,不是很準確。

應用範圍

  • 安防產品
  • 人體感應玩具
  • 人體感應燈具
  • 工業自動化控制等
     

  配合外圍電路,它能自動快速開啓各類白熾燈、熒光燈、蜂鳴器、自動門、電風扇、烘乾機和自動洗衣機等裝置。

  特別適用於賓館、商場、庫房及家庭的過道、走廊等場所。

硬件電路

在這裏插入圖片描述
在這裏插入圖片描述

代碼實例

實現目標:
人體紅外熱釋感應模塊OUT引腳輸出高電平(檢測出有人)時,板載LED(PC13)亮,反之,LED滅。

我們將SR501的OUT引腳與核心板的PA5相連,並將PA5設置爲輸入;詳細代碼見void SR501_Init(void)函數實現;

爲了控制板載LED的亮滅,需要將PC13設置爲輸出;詳細代碼見void LED_Init(void)函數實現;

main.c完整代碼如下:

#include "stm32f10x.h"  
#include "delay.h"
#include "usart.h" 

#define SR501_OUT  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)		//讀取SR501返回值
#define LED PCout(13)

//SR501_OUT初始化--PA5,設置成輸入
void SR501_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
 
	//SR501_OUT
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

// 板載LED初始化--PC13
void LED_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//使能PORTA時鐘
 
	//SR501_OUT
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	LED = 1;   
}


int main(void)  
{
	//初始化
	delay_init();    
	SR501_Init();
	LED_Init();
	
	while(1) 
	{		
		if(SR501_OUT)
		{
			LED = 0; 
		}
		else
		{
			LED = 1;
		}
		
		delay_ms(10); 
	}  
}

成果展示

當手靠近人體熱釋紅外傳感器時,綠燈亮;延時一定時間以後,綠燈滅。
在這裏插入圖片描述

資料獲取

微信公衆號後臺回覆“SR501”,可以下載工程源碼及HC-SR501人體紅外熱釋感應模塊資料

推薦閱讀

STM32單片機最小系統詳解
STM32中精確延時函數的實現
基於STM32固件庫的MDK5工程建立
修改Keil工程名稱並添加其他模塊文件
利用STM32F103C8T6最小系統板點亮流水燈


六月份的“每月一練”活動已經開始投票了,六月份做什麼,由你們決定。
感興趣的進入下面鏈接投票。

六月活動明天投票就截止了哈。
2020.06 “每月一練”活動開始投票了

 

活動介紹及日程安排,詳見公衆號底部菜單欄“每月活動”。

在這裏插入圖片描述


在這裏插入圖片描述

若覺得本次分享的文章對您有幫助,隨手點贊、收藏或轉發分享,也是對我的支持。
歡迎評論中討論,大家一起提高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章