李 鶴,皮睿思,莊萃萃
(河北科技師范學院物理系,河北 秦皇島,066004)
智能小車是智能機器人的一種,它可以進入到各種人類無法抵達的環境中,完成人類無法完成的工作[1~3]。人們可以通過將更多的技術應用于智能小車上,可以讓它越來越“聰明”[4]。當前研究中,對于智能小車控制系統的研究主要集中在遙控控制和自動控制兩種方式上,而在遙控控制領域中,不管是直接使用遙控器還是將遙控按鍵虛擬到手機app或者其他專門程序中,都缺少與人類的直接互動。手勢識別技術是一種非接觸的直接互動模式[5~7],將手勢識別技術則應用于智能小車[8,9],通過簡單的手勢代替復雜的指令來對小車進行控制,可以豐富人們對智能小車的控制手段,降低控制難度。為此,筆者試驗了利用Verilog HDL在FPGA芯片上進行手勢識別模塊的驅動,采集信號并對信號進行處理,得到手勢所對應的控制信息,驅動智能小車進行移動,以達成利用手勢對智能小車的移動進行控制。
智能小車手勢控制系統總體設計見圖1。

圖1 智能小車手勢控制系統設計框圖
(1)手勢識別模塊與FPGA開發板之間通信,實現手勢識別模塊準確識別手勢信息后,發送給FPGA中的數據收發模塊。
(2)由FPGA解析數據收發模塊接收到的手勢信息,經過內部數據處理轉換,發送給驅動模塊。
(3)驅動模塊接收到信息后,驅動減速電機,進而驅動小車。
智能小車手勢控制系統的硬件設計方案見圖2。

圖2 智能小車手勢控制系統的硬件部分
采用基于Cyclone IV系列的FPGA開發板。芯片型號為EP4CE10F17C8,板上配有5 V和3.3 V電源,多路擴展口和I/O口,多路GND。
FPGA內部硬件設計主要有4部分,分別為與手勢識別模塊通信的IIC驅動模塊和輪詢模塊;與電機驅動模塊通信的信號控制模塊;從IIC數據獲取手勢信息并處理為驅動信號的處理模塊以及PLL鎖相環。
采用PAJ7620U2手勢識別傳感器模塊,該模塊對環境光有一定的免疫力,其電源電壓和I/O電壓要求都符合FPGA輸出范圍,易于連接,端口通訊方式為IIC總線,支持讀寫,尺寸僅為25 mm×20 mm。PAJ7620U2手勢識別傳感器模塊外觀見圖3。

圖3 智能小車手勢控制系統的手勢識別傳感器模塊
手勢識別傳感器模塊的外部端口處可插入1×6的排針,通過杜邦線同外部相連接(圖4)。共有VCC,GND,IIC_SDA,IIC_SCL,IIC_INT等5個信號端口。其中,IIC_SCL,IIC_SDA和IIC_INT等3個端口內帶4.7 kΩ上拉電阻,因此無需再添加電阻。

圖4 智能小車手勢控制系統的手勢識別傳感器模塊原理
傳感器可識別9種手勢類型。手在傳感器開窗口位置的上方,保持與傳感器的垂直距離,做出圖5中所示的手勢,可識別得出“上”“下”“左”“右”“順時針旋轉”“逆時針旋轉”“揮動”“前”“后”的識別結果。

圖5 手勢識別傳感器模塊的可識別手勢
采用L298N電機驅動模塊,可以同時輸出兩組信號,分別控制兩個電機實現勻速、差速、加減速轉動,可以實現小車的各種運動。供電范圍為5~7 V,同樣可以由FPGA板驅動,而輸出峰值電流高達2 A,輸出峰值電壓高達46 V,可以驅動大部分電機。該驅動模塊尺寸為60 mm×54 mm,可以裝置在小車底板上,符合本設計中的需求。圖6為電機驅動模塊原理圖,表1為電機驅動參數真值表。

圖6 智能小車電機驅動模塊原理

表1 L298N電機控制參數真值表
注:0表示低電平,1表示高電平,x表示可為任意電平。
采用兩輪驅動智能小車底座,用兩個電機實現小車運動。
FPGA硬件開發板作為主操控平臺,對手勢識別模塊和電機驅動模塊進行控制。本節將對FPGA內部電路控制和程序的主要控制形式進行細致論述。
本設計系統在正常工作前需要進行系統上電及寄存器初始化操作,該操作針對PAJ7620U2模塊。需要先發送包含設備(0×73)的指令,等待大于700 μs時間。可反復上述操作以確保發送成功。讀取0×00寄存器的數值,若值為0×20,則往0×72寄存器(BANK1)中寫0×01,開始工作。
喚醒成功后,進入寄存器地址需要往0×EF寄存器寫0×00,訪問寄存區域BANK0。BANK0中的0×41地址是中斷使能寄存器。8個數據位分別對應于8個手勢的識別結果,通過中斷輸出為1識別相應手勢,識別到手勢后0×43寄存器對應位置1。
IIC通信模塊對寄存器0×43循環讀數,并將讀到的數據包去掉IIC通信格式,將單獨的數據給數據處理模塊,當數據不再是全零而其中有1位被置1時,則將相應的手勢開始標志信號拉高。數據處理模塊在手勢開始標志信號的上升沿開始應用計數器將讀出的手勢指令執行一定時長(3 s),期間電機驅動模塊將驅動對應電機運動。表2為中斷使能寄存器真值表。

表2 中斷使能寄存器(0×41)真值表
根據減速電機控制狀態,控制使能均為高電平的情況下,使兩輪同時正轉,并保持同樣的電壓和給電時間,實現小車直線前進;使兩輪同時反轉,小車后退;在左輪使能為低電平,右輪使能為高電平,并使其正轉時,小車原地左轉;在右輪使能為低電平,左輪使能為高電平,并使其正轉時,小車原地右轉。
整體測試中,各模塊工作正常,對手勢模塊分別做出前、后、左、右的手勢,每次動作至少持續1 s,觀察小車運動狀態和指示燈亮起情況。觀察到小車分別前進、后退,左轉,右轉,每個狀態都持續7 s,指示燈分別亮起,對應正確,達到預期設計效果。
本次設計采用FPGA芯片,PAJ7620U2手勢識別傳感器,L298N電機驅動模塊,利用Verilog HDL進行通信程序、控制程序和驅動程序的編寫,完成了手勢控制智能小車運動方向的設計。