人體紅外感應(yīng)模塊使用的是熱釋電紅外傳感器,它是利用溫度變化的特征來探測紅外線的輻射,利用雙靈敏元互補(bǔ)的方法抑制溫度變化產(chǎn)生的干擾,提高了傳感器的工作穩(wěn)定性。產(chǎn)品應(yīng)用廣泛,例如:保險裝置、防盜報警器、感應(yīng)門、自動燈具、智能玩具等。
一模塊來源
模塊實(shí)物展示:
資料下載鏈接:https://pan.baidu.com/s/1Bu0DL-1quXvY1Ede4c9ELw
資料提取碼:8888
二 規(guī)格參數(shù)
工作電壓:4.5~20V
工作電流:< 50uA
電平輸出:高3.3V/低0V
感應(yīng)角度:< 100度錐角
輸出方式: GPIO
管腳數(shù)量:3 Pin
以上信息見廠家資料文件
三移植過程
我們的目標(biāo)是將例程移植至CW32F030C8T6開發(fā)板上【能夠測量人體】。首先要獲取資料,查看數(shù)據(jù)手冊應(yīng)如何實(shí)現(xiàn)讀取數(shù)據(jù),再移植至我們的工程。
3.1查看資料
全自動感應(yīng):人進(jìn)入其感應(yīng)范圍則輸出高電平, 人離開感應(yīng)范圍則自動延時關(guān)閉高電平,輸出低電平;
兩種觸發(fā)方式:(可跳線選擇)
不可重復(fù)觸發(fā)方式: 即感應(yīng)輸出高電平后,延時時間段一結(jié)束,輸出將自動從高電平變成低電平;
可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,在延時時間段內(nèi),如果有人體在其感應(yīng)范圍活動,其輸出將一直保持高電平,直到人離開后才延時將高電平變?yōu)榈碗娖健?/p>
HC-SR501人體感應(yīng)模塊使用說明
感應(yīng)模塊通電后有一分鐘左右的初始化時間,在此期間模塊會間隔地輸出0-3 次,一分鐘后進(jìn)入待機(jī)狀態(tài)。
避免燈光等干擾源近距離直射模塊表面的透鏡,以免引進(jìn)干擾信號產(chǎn)生誤動作;盡量避免流動的風(fēng),風(fēng)也會對感應(yīng)器造成干擾。
感應(yīng)模塊采用雙元探頭,探頭的窗口為長方形,雙元(A 元B 元)位于較長方向的兩端,當(dāng)人體從左到右或從右到左走過時,紅外光譜到達(dá)雙元的時間、距離有差值,差值越大,感應(yīng)越靈敏,當(dāng)人體從正面走向探頭或從上到下或從下到上方向走過時,雙元檢測不到紅外光譜距離的變化,無差值,因此感應(yīng)不靈敏或不工作;所以安裝感應(yīng)器時應(yīng)使探頭雙元的方向與人體活動最多的方向盡量相平行,保證人體經(jīng)過時先后被探頭雙元所感應(yīng)。為了增加感應(yīng)角度范圍,本模塊采用圓形透鏡,也使得探頭四面都感應(yīng),但左右兩側(cè)仍然比上下兩個方向感應(yīng)范圍大。
3.2引腳選擇
模塊接線圖
3.3移植至工程
移植步驟中的導(dǎo)入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_HumanIR.c與bsp_HumanIR.h。這里不再過多講述,移植完成后面修改相關(guān)代碼。
在文件bsp_HumanIR.c中,編寫如下代碼。
/*?
* Change Logs:
* Date Author Notes
* 2024-06-20 LCKFB-LP first version
*/
#include "bsp_HumanIR.h"
#include "board.h"
/******************************************************************
* 函 數(shù) 名 稱:HumanIR_Init
* 函 數(shù) 說 明:人體紅外模塊初始化
* 函 數(shù) 形 參:無
* 函 數(shù) 返 回:無
* 作 者:LC
* 備 注:無
******************************************************************/
void HumanIR_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化結(jié)構(gòu)體
RCC_HUMANIR_ENABLE(); // 使能GPIO時鐘
GPIO_InitStruct.Pins = GPIO_HUMANIR; // GPIO引腳
GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP; // 上拉輸入
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; // 輸出速度高
GPIO_Init(PORT_HUMANIR, &GPIO_InitStruct); // 初始化
}
/******************************************************************
* 函 數(shù) 名 稱:Get_HumanIR
* 函 數(shù) 說 明:獲取人體紅外輸出引腳的電平狀態(tài)
* 函 數(shù) 形 參:無
* 函 數(shù) 返 回:0=感應(yīng)到人體紅外 1=未感應(yīng)到人體紅外
* 作 者:LC
* 備 注:無
******************************************************************/
char Get_HumanIR(void)
{
return ( GPIO_ReadPin(PORT_HUMANIR, GPIO_HUMANIR)?GPIO_Pin_SET:GPIO_Pin_RESET);
}
在文件bsp_HumanIR.h中,編寫如下代碼。
/*
* Change Logs:
* Date Author Notes
* 2024-06-20 LCKFB-LP first version
*/
#ifndef _BSP_HUMANIR_H_
#define _BSP_HUMANIR_H_
#include "board.h"
#define RCC_HUMANIR_ENABLE() __RCC_GPIOA_CLK_ENABLE()
#define PORT_HUMANIR CW_GPIOA
#define GPIO_HUMANIR GPIO_PIN_1
void HumanIR_Init(void);
char Get_HumanIR(void);
#endif
四移植驗(yàn)證
在自己工程中的main主函數(shù)中,編寫如下。
/*
* Change Logs:
* Date Author Notes
* 2024-06-20 LCKFB-LP first version
*/
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_HumanIR.h"
int32_t main(void)
{
board_init(); // 開發(fā)板初始化
uart1_init(115200); // 串口1波特率115200
HumanIR_Init();
printf("Start.....rn");
while(1)
{
printf("%drn", Get_HumanIR() );
delay_ms(500);
}
}
移植現(xiàn)象:檢測到人時輸出1,未檢測到人時輸出0;
模塊移植成功案例代碼:
鏈接:https://pan.baidu.com/s/1G8KjRf8hsS41wngW8cC_8w?pwd=LCKF
提取碼:LCKF