原文鏈接:[https://www.yourcee.com/newsinfo/2925937.html]
傳感器簡介
PAJ-7620U2是由原相科技公司開發(fā)的一款手勢識別芯片, 內(nèi)集成了光學(xué)數(shù)組式傳感器單元,可以快速準(zhǔn)確的對輸入信號進(jìn)行感應(yīng)和輸出處理。內(nèi)置光源和環(huán)境光抑制濾波器,能在黑暗或低光環(huán)境下工作。它支持上、下、左、右、前、后、順時(shí)針旋轉(zhuǎn)、逆時(shí)針旋轉(zhuǎn)和揮動的手勢動作識別,以及支持物體接近檢測等功能??纱笾聶z測物體體積大小和亮度。使用IIC通信接口可達(dá)400KHz通信速率。
傳感器內(nèi)部自帶 LED 驅(qū)動器,傳感器感應(yīng)陣列、目標(biāo)信息提取陣列和手勢識別陣列。傳感器工作時(shí)通過內(nèi)部 LED 驅(qū)動器,驅(qū)動紅外 LED 向外發(fā)射紅外線信號,當(dāng)傳感器陣列在有效的距離中探測到物體時(shí),目標(biāo)信息提取陣列會對探測目標(biāo)進(jìn)行特征原始數(shù)據(jù)的獲取,獲取的數(shù)據(jù)被保存在寄存器中,同時(shí)手勢識別陣列會對原始數(shù)據(jù)進(jìn)行識別處理,最后將手勢結(jié)果存到寄存器中,用戶可根據(jù) I2C 接口對原始數(shù)據(jù)和手勢識別的結(jié)果進(jìn)行讀取。
模塊原理圖

VIN供電輸入3.3-5V,GND供電負(fù)極,SDA數(shù)據(jù)線,SCL時(shí)鐘線,INT中斷輸出
手勢方向定義
STM32F407ZGT6開發(fā)板與傳感器連接

代碼片
手勢傳感器獲取感應(yīng)信息,將結(jié)果通過開發(fā)版 usart1 串口輸給串口調(diào)試助手程序顯示出來。
在 main 函數(shù)中,首先對 USART 串口與 KEY 按鍵進(jìn)行初始化配置。然后對傳感器paj7620u2 進(jìn)行初始化配置。當(dāng)對傳感器初始化成功后則退出 while 循環(huán),進(jìn)入第 21 行paj7620u2 傳感器功能測試階段。
int main(void)
{
/*初始化USART 配置模式為 115200 8-N-1,中斷接收*/
Debug_USART_Config();
EXTI_Key_Config();
printf(" 歡迎使用野火開發(fā)板rn");
printf(" 手勢識別傳感器實(shí)驗(yàn)rn");
while(!paj7620u2_init()) //PAJ7620U2傳感器初始化
{
printf("PAJ7620U2 初始化失敗!!!rn");
delay_ms(600);
}
printf("PAJ7620U2 初始化成功rn");
while(1)
{
paj7620u2_sensor_test();//PAJ7620U2傳感器測試
}
}
在 test 函數(shù)中,第 12 行使用 scanf 函數(shù),使開發(fā)板獲取來自串口調(diào)試助手發(fā)出的控制指令。當(dāng)開發(fā)板接收到的指令字符為“1”時(shí),開發(fā)板控制傳感器進(jìn)入手勢識別工作模式;當(dāng)接收到的指令字符為“2”時(shí),開發(fā)板控制傳感器進(jìn)入接近檢測工作模式;當(dāng)接收的字符既不是“1”也不是“2”時(shí),則打印提示用戶輸入合法指令。
/**
* @brief PAJ7620U2傳感器測試
* @param 無
* @retval 無
*/
void paj7620u2_sensor_test(void)
{
uint32_t ch;
Show_Mode_Message();//顯示普通測量模式UI
while(1)
{
scanf("%d",&ch);
printf("接收到字符:%drn",ch);
switch(ch)
{
case 1: Gesrure_test(); break;//手勢檢測模式
case 2: Ps_test(); break;//接近檢測模式
default: printf("請輸入合法指令!rn"); break;
}
Show_Mode_Message();
}
}
手勢識別傳感器可以工作在手勢識別與接近檢測 2 種模式狀態(tài)下。為了進(jìn)行工作模式
的切換,我們采用了 KEY 按鈕外部中端的方式。
- KEY 外部中斷
當(dāng)我們想退出當(dāng)前的工作模式時(shí),可通過按住 key1 按鈕,激發(fā)產(chǎn)生 EXTI 中斷響應(yīng)。在 IRQHandler 中斷處理函數(shù)中,(第 9 行)當(dāng)接受到中斷信號時(shí),變量 flag 賦值為 1。
中斷代碼如下
void KEY1_IRQHandler(void)
{
//確保是否產(chǎn)生了EXTI Line中斷
if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET)
{
flag=1;
//清除中斷標(biāo)志位
EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);
}
}
- 手勢識別工作模式
在 Gesrure_test()函數(shù)中,首先對 PAJ7620U2 手勢識別檢測進(jìn)行初始化,(第 14 行代碼)配置其 gesture_arry 數(shù)組的參數(shù)值。該數(shù)組有使能 9 個(gè)手勢識別的中斷標(biāo)志輸出的配置,初始化完畢后,在 while 循環(huán)中一直讀取手勢中斷標(biāo)志寄存器(第 26 行代碼),當(dāng)識別到相應(yīng)的手勢,手勢標(biāo)志會置 1,讀取寄存器標(biāo)志會自動清 0。根據(jù)手勢的標(biāo)志手勢結(jié)果將被打印到串口上。當(dāng)按下 KEY 按鍵,在中斷處理函數(shù)中標(biāo)志變量 flag 被賦值 1(第 20 行代碼),此時(shí)關(guān)閉 9 個(gè)手勢識別的檢測輸出,退出當(dāng)前的手勢識別測試模式。
/**
* @brief 手勢識別測試
* @param 無
* @retval 無
*/
void Gesrure_test(void)
{
uint8_t status,i;
uint8_t data[2]={0x00};
uint16_t gesture_data;
paj7620u2_selectBank(BANK0);//進(jìn)入BANK0
for(i=0;i< GESTURE_SIZE;i++)
{
GS_Write_Byte(gesture_arry[i][0],gesture_arry[i][1]);//手勢識別模式初始化
}
paj7620u2_selectBank(BANK0);//切換回BANK0
printf("按KEY1鍵退出當(dāng)前模式rn");
while(1)
{
if(flag)
{
flag=0;
GS_Write_Byte(PAJ_SET_INT_FLAG1,0X00);//關(guān)閉手勢識別中斷輸出
GS_Write_Byte(PAJ_SET_INT_FLAG2,0X00);
break;
}
status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data[0]);//讀取手勢狀態(tài)
if(!status)
{
gesture_data =(uint16_t)data[1]< 8 | data[0];
if(gesture_data)
{
switch(gesture_data)
{
case GES_UP:
printf("Uprn"); break; //向上
case GES_DOWM:
printf("Dowmrn"); break; //向下
case GES_LEFT:
printf("Leftrn"); break; //向左
case GES_RIGHT:
printf("Rightrn"); break; //向右
case GES_FORWARD:
printf("Forwardrn"); break; //向前
case GES_BACKWARD:
printf("Backwardrn"); break; //向后
case GES_CLOCKWISE:
printf("Clockwisern"); break; //順時(shí)針
case GES_COUNT_CLOCKWISE:
printf("AntiClockwisern"); break; //逆時(shí)針
case GES_WAVE:
printf("Wavern"); break; //揮動
default: break;
}
}
}
}
}
- 接近檢測測試
Ps_test()函數(shù)實(shí)現(xiàn)接近檢測,獲取接近物體的體積大小和亮度的數(shù)據(jù)。首先對PAJ7620U2 接近檢測進(jìn)行初始化,配置其 proximity_arry 的數(shù)組參數(shù)值(第 16 行代碼),初始化完成后,在 while(1)循環(huán)中,讀取獲取體積大小和亮度的寄存器,并將讀取結(jié)果打印到串口上。當(dāng)按下 KEY 按鍵,在中斷處理函數(shù)中標(biāo)志變量 flag 被賦值 1(第 23 行代碼),退出當(dāng)前的接近檢測測試模式。
/**
* @brief 接近檢測測試
* @param 無
* @retval 無
*/
void Ps_test(void)
{
uint8_t i;
uint8_t data[2]={0x00};
uint8_t obj_brightness=0;
uint16_t obj_size=0;
paj7620u2_selectBank(BANK0);//進(jìn)入BANK0
for(i=0;i< PROXIM_SIZE;i++)
{
GS_Write_Byte(proximity_arry[i][0],proximity_arry[i][1]);//接近檢測模式初始化
}
paj7620u2_selectBank(BANK0);//切換回BANK0
printf("按KEY1鍵退出當(dāng)前模式rn");
while(1)
{
if(flag)
{
flag=0;
break;
}
obj_brightness = GS_Read_Byte(PAJ_GET_OBJECT_BRIGHTNESS);//讀取物體亮度
data[0] = GS_Read_Byte(PAJ_GET_OBJECT_SIZE_1);//讀取物體大小
data[1] = GS_Read_Byte(PAJ_GET_OBJECT_SIZE_2);
obj_size = ((uint16_t)data[1] & 0x0f)< 8 | data[0];
printf("obj_brightness: %drn",obj_brightness);
printf("obj_size: %drn",obj_size);
delay_ms(500);
}
}


總結(jié)
本實(shí)驗(yàn)可以通過揮舞手勢直觀的了解傳感器的手勢識別的基本功能以及接近檢測的功能。
審核編輯 黃宇
-
濾波器
+關(guān)注
關(guān)注
162文章
8457瀏覽量
186192 -
手勢識別傳感器
+關(guān)注
關(guān)注
0文章
5瀏覽量
4980
發(fā)布評論請先 登錄
探索MAX32664:超低功耗生物識別傳感器集線器的卓越性能
MAX32663A:超低功耗心電圖生物識別傳感器集線器的卓越之選
零知IDE——基于零知標(biāo)準(zhǔn)板驅(qū)動PAJ7620U2手勢控制L9110風(fēng)扇模塊和SG90舵機(jī)系統(tǒng)
零知IDE——基于STM32F103RBT6的PAJ7620U2手勢控制WS2812 RGB燈帶系統(tǒng)
零知IDE——基于STM32F103RBT6的PAJ7620U2手勢控制WS2812 RGB燈帶系統(tǒng)
基于STMicroelectronics AEK-SNS-2TOFM1手勢檢測系統(tǒng)的技術(shù)解析與應(yīng)用實(shí)踐
新品 | Unit Fingerprint2,高性能指紋識別傳感器單元
XenG202G | 揮手手勢識別參考設(shè)計(jì)(三維)
華怡豐推出ISC-B/C系列圖像識別傳感器
MAX32663A超低功耗ECG生物識別傳感器綜述
MAX32664超低功耗生物識別傳感器集中器技術(shù)手冊
MAX32663A超低功耗ECG生物識別傳感器技術(shù)手冊
STM32驅(qū)動PAJ7620手勢識別傳感器
評論