目錄
模塊介紹:
基本部分:
引腳配置:
工作原理:
展示部分:
代碼部分展示(在正點(diǎn)的基礎(chǔ)上加了一個(gè)讀手勢(shì)去控制舵機(jī)):
視頻展示:
模塊介紹:
基本部分:
手勢(shì)模塊搭載的芯片是PAJ7620,無論是正點(diǎn)原子的還是別的手勢(shì)模塊的底層是一致的,甚至代碼也是通用的。
芯片內(nèi)部集成了光學(xué)數(shù)組式傳感器,以使復(fù)雜的手勢(shì)和光標(biāo)模式輸出,自帶九種手勢(shì)識(shí)別,支持上、下、左、右、前、后、順時(shí)針旋轉(zhuǎn)、逆時(shí)針旋轉(zhuǎn)和揮動(dòng)的手勢(shì)動(dòng)作識(shí)別,有效探測(cè)距離為5-15cm;也可以檢測(cè)物體的距離和大小
原理圖(正點(diǎn)的):
引腳配置:
VCC-GND:3.3V到5V
SCL-SDA:IIC接口
(額外)正點(diǎn)的模塊是多兩個(gè)個(gè)INT和NC的引腳:NT是中斷引腳,NC是未連接引腳。NC沒用.主要是INT,INT是中斷引腳,或者相當(dāng)于手勢(shì)識(shí)別模塊的輸出引腳,NT引腳連接到外部微控制器的中斷輸入引腳(例如Arduino的數(shù)字引腳),用于通知微控制器檢測(cè)到手勢(shì)。當(dāng)檢測(cè)到手勢(shì)時(shí),PAJ7620芯片會(huì)將基于手勢(shì)識(shí)別的控制信號(hào)轉(zhuǎn)換成一個(gè)電平,從INT引腳輸出,通過這個(gè)引腳,可以實(shí)現(xiàn)手勢(shì)識(shí)別后的外部設(shè)備控制。
工作原理:
手勢(shì)識(shí)別模塊的原理:通過紅外線傳感器讀取手部的動(dòng)作信息來識(shí)別手勢(shì),然后將手勢(shì)信息轉(zhuǎn)化為電信號(hào)輸出,通過電路接口給連向的設(shè)備控制指令。
具體來說,芯片內(nèi)置有一個(gè)紅外線LED和一個(gè)接收電路。紅外線LED發(fā)射一束紅外線,當(dāng)手部移動(dòng)或進(jìn)行手勢(shì)動(dòng)作時(shí),紅外線會(huì)被反射回來。接收電路接收反射回來的紅外線,并將其轉(zhuǎn)化為電信號(hào)。這些信號(hào)經(jīng)過處理后,可以識(shí)別手勢(shì),然后轉(zhuǎn)化為符合IIC協(xié)議的電信號(hào)輸出到電路接口,用于操控外部設(shè)備。
模塊展示:
?
?注意:圖三,凹進(jìn)去的地方在上方,才是正確的擺放位置,如圖三的方位就是正確的文章來源:http://www.zghlxwxcb.cn/news/detail-723809.html
展示部分:
代碼部分展示(在正點(diǎn)的基礎(chǔ)上加了一個(gè)讀手勢(shì)去控制舵機(jī)):
//手勢(shì)識(shí)別測(cè)試
void Gesrure_test(void)
{
u8 i;
u8 status;
u8 key;
Servo_Init();
u8 data[2]={0x00};
u16 gesture_data;
u8 ledflash=0;
paj7620u2_selectBank(BANK0);//進(jìn)入BANK0
for(i=0;i<GESTURE_SIZE;i++)
{
GS_Write_Byte(gesture_arry[i][0],gesture_arry[i][1]);//手勢(shì)識(shí)別模式初始化
}
paj7620u2_selectBank(BANK0);//切換回BANK0
i=0;
POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
LCD_Fill(30,170,300,300,WHITE);
LCD_ShowString(30,180,200,16,16,"KEY_UP: Exit the test");
LCD_ShowString(30,210,200,16,16,"Gesrure test");
POINT_COLOR=RED;//設(shè)置字體為藍(lán)色
while(1)
{
key = KEY_Scan(0);
if(key==WKUP_PRES)
{
GS_Write_Byte(PAJ_SET_INT_FLAG1,0X00);//關(guān)閉手勢(shì)識(shí)別中斷輸出
GS_Write_Byte(PAJ_SET_INT_FLAG2,0X00);
break;
}
status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data[0]);//讀取手勢(shì)狀態(tài)
if(!status)
{
gesture_data =(u16)data[1]<<8 | data[0];
if(gesture_data)
{
switch(gesture_data)
{
case GES_UP: LCD_ShowString(110,250,200,16,24,"UP ");
printf("Up\r\n"); ledflash=1; break; //向上
case GES_DOWM: LCD_ShowString(100,250,200,16,24,"Dowm ");
printf("Dowm\r\n"); ledflash=1; break; //向下
case GES_LEFT: LCD_ShowString(100,250,200,16,24,"Left ");
printf("Left\r\n"); ledflash=1; break; //向左
case GES_RIGHT: LCD_ShowString(100,250,200,16,24,"Right ");
printf("Right\r\n"); ledflash=1; break; //向右
case GES_FORWARD: LCD_ShowString(80,250,200,16,24,"Forward ");
printf("Forward\r\n"); ledflash=1; break; //向前
case GES_BACKWARD: LCD_ShowString(80,250,200,16,24,"Backward ");
printf("Backward\r\n"); ledflash=1; break; //向后
case GES_CLOCKWISE: LCD_ShowString(70,250,200,16,24,"Clockwise ");
printf("Clockwise\r\n"); Angle += 30; ledflash=1; break; //順時(shí)針
case GES_COUNT_CLOCKWISE: LCD_ShowString(50,250,200,16,24,"AntiClockwise");
printf("AntiClockwise\r\n");Angle -= 30; ledflash=1; break; //逆時(shí)針
case GES_WAVE: LCD_ShowString(100,250,200,16,24,"Wave ");
printf("Wave\r\n"); ledflash=1; break; //揮動(dòng)
default: ledflash=0; break;
}
if (Angle > 180)
{
Angle = 0;
}
if (Angle < 0)
{
Angle = 180;
}
Servo_SetAngle(Angle);
if(ledflash)//DS1閃爍
{
LED1=0;delay_ms(80);LED1=1;delay_ms(80);
LED1=0;delay_ms(80);LED1=1;delay_ms(80);
delay_ms(300);
LCD_ShowString(40,250,200,16,24," ");
ledflash=0;
}
}
}
delay_ms(50);
i++;
if(i==5)
{
LED0=!LED0;//提示系統(tǒng)正在運(yùn)行
i=0;
}
}
}
視頻展示:
VID_20230506_194518文章來源地址http://www.zghlxwxcb.cn/news/detail-723809.html
到了這里,關(guān)于STM32 手勢(shì)識(shí)別傳感器模塊(PAJ7620)學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!