基于STM32手勢識別應用案例
1.簡介
?手勢識別是計算機科學和語言技術中的一個主題,目的是通過數學算法來識別人類手勢。 手勢可以源自任何身體運動或狀態,但通常源自面部或手。 本領域中的當前焦點包括來自面部和手勢識別的情感識別。 用戶可以使用簡單的手勢來控制或與設備交互,而無需接觸他們。姿勢,步態和人類行為的識別也是手勢識別技術的主題。手勢識別可以被視為計算機理解人體語言的方式,從而在機器和人之間搭建比原始文本用戶界面或甚至GUI(圖形用戶界面)更豐富的橋梁。
手勢識別使人們能夠與機器進行通信,并且無需任何機械設備即可自然交互。 使用手勢識別的概念,可以將手指指向計算機屏幕,使得光標將相應地移動。 這可能使常規輸入設備(如鼠標,鍵盤甚至觸摸屏)變得冗余。越來越多的電子設備都在使用手勢識別功能。顧名思義,手勢識別旨在識別人類的物理運動或“手勢”。例如,在設備前面以特定模式揮動您的手可能會告訴它啟動特定的應用程序,諸如此類的手勢識別經常出現在智能手機和平板電腦中。
手勢識別被分類為一種非接觸式用戶界面(TUI)。與觸摸屏設備不同,TUI設備無需觸摸即可控制。像Google Home和Amazon Alexa這樣的語音控制智能揚聲器是TUI的主要例子。
手勢識別也打開了通向輸入可能性的全新世界的大門。用戶可以嘗試其他基于手勢的輸入形式,而不是僅限于傳統的輸入形式。有些設備甚至允許用戶設置自己的手勢。
除智能手機和平板電腦外,手機識別還可用于汽車信息娛樂中心、視頻游戲控制臺、人機界面等。最重要的是,手勢識別技術正變得越來越流行,并且沒有任何跡象表明它會很快放慢速度。
2.PAJ7620介紹
PAJ-7620U2是由原相科技公司開發的一款手勢識別芯片, 內集成了光學數組式傳感器單元,可以快速準確的對輸入信號進行感應和輸出處理。內置光源和環境光抑制濾波器,能在黑暗或低光環境下工作。它支持上、下、左、右、前、后、順時針旋轉、逆時針旋轉和揮動的手勢動作識別,以及支持物體接近檢測等功能。可大致檢測物體體積大小和亮度。使用IIC通信接口可達400KHz通信速率。
?可直接識別 9 種基本手勢,支持手勢中斷輸出
? 板載電平轉換電路,可兼容 3.3V/5V 的邏輯電平
2.1 通訊方式
??PAJ7620使用IIC通信接口可達400KHz通信速率。
??功能模塊框圖如下所示:
其中, I2C_SCL 和 I2C_SDA 是連接 MCU 的 IIC 接口, MCU 通過這個 IIC 接口來控制PAJ7620,在上述框圖可以看到,該芯片內部自帶 LED 驅動器,傳感器感應陣列、目標信息提取陣列和手勢識別陣列。 芯片工作時通過內部 LED 驅動器,驅動紅外 LED向外發射紅外線信號,當傳感器陣列在有效的距離中探測到物體時,目標信息提取陣列會對探測目標進行特征原始數據的獲取,獲取的數據會存在寄存器中,同時手勢識別陣列會對原始數據進行識別處理,最后將手勢結果存到寄存器中,用戶可根據 I2C 接口對原始數據和手勢識別的結果進行讀取。
2.3 硬件驅動
??1.打開STM32CubeMX軟件,配置手勢識別引腳PB6(IIC_SCL)、PB7(IIC_SDA)。
2.設置引腳模式為推挽輸出模式,初始化電平為高電平。
3.軟件實現
??1.通過手勢實現時間切換、日期切換等;
??2.利用手勢實現LED控制、蜂鳴器控制;
??3.實時時間校準,可通過串口校時;
3.1 串口校時
??通過自定義串口協議,通過串口調試助手獲取PC端時間,完成RTC時間校準;發送數據格式為:*20220617121220。
??以 *作為起始標志,4字節年+2字節月+2字節日+2字節時+2字節分+2字節秒,字符串方式接收數據處理。
if(usart1_flag)
{
printf("%srn",usart1_buff_rx);
if(usart1_buff_rx[0]== '*')
{
DateToUpdate.Year=(usart1_buff_rx[3]-'0')*10+(usart1_buff_rx[4]-'0')*1;//年
DateToUpdate.Month=(usart1_buff_rx[5]-'0')*10+(usart1_buff_rx[6]-'0')*1;//月
DateToUpdate.Date=(usart1_buff_rx[7]-'0')*10+(usart1_buff_rx[8]-'0')*1;//日
sTime.Hours=(usart1_buff_rx[9]-'0')*10+(usart1_buff_rx[10]-'0')*1;
sTime.Minutes=(usart1_buff_rx[11]-'0')*10+(usart1_buff_rx[12]-'0')*1;
sTime.Seconds=(usart1_buff_rx[13]-'0')*10+(usart1_buff_rx[14]-'0')*1;
printf("time:%d/%d/%d -- %d:%d:%drn",DateToUpdate.Year,DateToUpdate.Month,DateToUpdate.Date,sTime.Hours,sTime.Minutes,sTime.Seconds);
HAL_RTC_SetDate(&hrtc, &DateToUpdate,RTC_FORMAT_BIN);
HAL_RTC_SetTime(&hrtc,&sTime,RTC_FORMAT_BIN);
}
usart1_flag=0;
usart1_count=0;
}
3.2 LED呼吸燈
??呼吸燈通過定時器PWM模式實現;設置定時器分頻系數為72,周期時間為300us;
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM4_Init 1 */
/* USER CODE END TIM4_Init 1 */
htim4.Instance = TIM4;
htim4.Init.Prescaler = 72;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 300;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
通過改變PWM波占空比來實現呼吸燈效果;
if(flag==0)j++;
else j--;
if(j>=300)flag=1;
if(j==0)flag=0;
Delay_Ms(2);
htim4.Instance->CCR3=j;//調節占空比
htim4.Instance->CCR4=j;
3.3 手勢識別檢測
??PAJ7620支持上、下、左、右、前、后、順時針旋轉、逆時針旋轉和揮動的手勢動作識別。用戶可根據 I2C 接口對原始數據和手勢識別的結果進行讀取。
paj7620u2_selectBank(BANK0);//切換BANK0寄存器區域
status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data[0]);//讀取手勢狀態
if(!status)
{
gesture_data =(u16)data[1]<<8 | data[0];
if(gesture_data)
{
switch(gesture_data)
{
case GES_UP: //向上
printf("向上 Uprn");
HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin, GPIO_PIN_RESET);//關閉蜂鳴器
ledflash=1;
break;
case GES_DOWM: //向下
HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin, GPIO_PIN_SET);//開啟蜂鳴器
printf("向下 Dowmrn");
ledflash=1;
break;
case GES_LEFT: //向左
if(rtc_stat==0)
{
rtc_stat=3;
}
else rtc_stat--;
printf("rtc_stat=%dn",rtc_stat);
printf("向左 Leftrn");
ledflash=1;
break;
case GES_RIGHT: //向右
if(rtc_stat==4)
{
rtc_stat=0;
}
else rtc_stat++;
printf("向右 Rightrn");
ledflash=1;
break;
case GES_FORWARD: //向前
printf("向前 Forwardrn");
ledflash=1;
break;
case GES_BACKWARD: //向后
printf("向后 Backwardrn");
ledflash=1;
break;
case GES_CLOCKWISE: //順時針
printf("順時針 Clockwisern");
ledflash=1;
break;
case GES_COUNT_CLOCKWISE: //逆時針
printf("逆時針 AntiClockwisern");
ledflash=1;
break;
case GES_WAVE:
printf("揮動 Wavern");
ledflash=1;
break; //揮動
default: ledflash=0; break;
}
}
}
-
STM32
+關注
關注
2270文章
10895瀏覽量
355729 -
手勢識別
+關注
關注
8文章
225瀏覽量
47786 -
HAL
+關注
關注
2文章
70瀏覽量
12607
發布評論請先 登錄
相關推薦
評論