徐寧 索朝舉 沈沛雨 劉靜波
摘 要:設(shè)計(jì)了一種采用重力感應(yīng)的手勢控制小車的運(yùn)動系統(tǒng)。該系統(tǒng)包括手持端和小車端兩部分。手持端包括STM32控制器,ADXL345加速度傳感器,ZigBee無線發(fā)射模塊;小車包括STM32控制器,電機(jī)和舵機(jī)驅(qū)動單元,ZigBee無線接收模塊;手持端的STM32控制器通過采集加速度傳感器的數(shù)據(jù),得到多個(gè)方向的手勢變化,通過無線模塊發(fā)送指令信息給小車,小車與手持端的ZigBee模塊配置在同一個(gè)網(wǎng)絡(luò),接收來自手持端的指令信息,然后根據(jù)不同的指令信息驅(qū)動電機(jī)和舵機(jī)實(shí)現(xiàn)小車的前進(jìn)、后退、轉(zhuǎn)彎等方向的運(yùn)動。這種采用重力感應(yīng)并結(jié)合無線收發(fā)方式下的非接觸式控制方式,具有反應(yīng)靈敏、動作快速的特點(diǎn),同時(shí)具有較為廣泛的應(yīng)用場景。
關(guān)鍵詞:重力感應(yīng);手勢控制;無線模塊;脈沖調(diào)制
中圖分類號:TN925;TP391.41 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2019)02-0019-04
Abstract:A motion control system based on gravity sensor is designed. The system includes a handheld end and a car end. The handheld terminal comprises a STM32 controller,a ADXL345 acceleration sensor,a ZigBee wireless transmitting module,the small car includes a STM32 controller,a motor and a steering gear driving unit,and a ZigBee wireless receiving module. The STM32 controller on the handheld side can acquire the data of the acceleration sensor and get the gesture change in many directions,and send the instruction information to the car through the wireless module. The car and the ZigBee module of the handheld end are configured on the same network. Receive the instruction information from the handheld end,then drive the motor and steering gear according to the different command information to realize the movement of the car in the direction of forward,backward,turn and so on. This non-contact control mode which adopts gravity induction and wireless transceiver,has the characteristics of sensitive response and fast action,and has a wide range of application scenarios at the same time.
Keywords:gravity induction;gesture control;wireless module;pulse modulation
0 引 言
隨著科技的發(fā)展和社會需求的增加,非接觸式的重力感應(yīng)方式控制得到迅速發(fā)展,無論在消費(fèi)類電子產(chǎn)品,還是工業(yè)、建筑方面都有大量的應(yīng)用。它具有良好的可操作性、可遷移性,具備方便快捷、高性能低功耗的特點(diǎn),因而在諸多領(lǐng)域得到廣泛的應(yīng)用。ZigBee無線傳輸?shù)膽?yīng)用,也拓展了傳統(tǒng)接觸控制的局限,以實(shí)現(xiàn)對設(shè)備的智能控制。采用重力感應(yīng)的手勢控制技術(shù)[1]相比傳統(tǒng)的控制方式,使用方便,控制靈活,方式多樣,因而越來越多的應(yīng)用在各個(gè)領(lǐng)域。
1 系統(tǒng)組成
本系統(tǒng)包括手勢端和小車兩部分。它們之間通過ZigBee模塊進(jìn)行數(shù)據(jù)通信,手持端發(fā)送指令控制小車運(yùn)動。手持端采用STM32F103C8T6單片機(jī)最小系統(tǒng)為控制器,采用加速度傳感器ADXL345檢測手勢變化。隨著使用者手勢的變化,ADXL345輸出的重力加速度在X軸、Y軸、Z軸的數(shù)據(jù)分量也隨之變化。STM32控制器讀取到不同的手勢狀態(tài)下X軸、Y軸、Z軸的數(shù)據(jù),結(jié)合設(shè)定的角度換算算法[2],通過ZigBee模塊向小車發(fā)送不同的指令,從而完成小車的正前、正后、左前、左后、右前、右后和停止七個(gè)方向的運(yùn)動。
手持端由三節(jié)鋰電池供電,采用STM32F103C8T6的AD轉(zhuǎn)換來測量電池電壓,同時(shí)配置了一塊128×64點(diǎn)陣OLED顯示屏,用于顯示三軸數(shù)據(jù)分量、發(fā)送給小車的指令信息、電池電壓等。手持端的結(jié)構(gòu)圖,如圖1(a)所示。
小車組成框圖,如圖1(b)所示。小車部分包含了兩個(gè)后輪獨(dú)立電機(jī)驅(qū)動單元、舵機(jī)轉(zhuǎn)向控制單元、STM32控制器、ZigBee模塊等。ZigBee模塊接收手持端的指令信息,得到手持端發(fā)送的明確運(yùn)動方向后,STM32控制器在I/O口輸出PWM波來控制小車的前進(jìn)、后退基本動作。小車的轉(zhuǎn)向由STM32的I/O口輸出周期為20ms脈寬可調(diào)信號(一般為0.5~2.5ms),控制小車實(shí)現(xiàn)左右轉(zhuǎn)向。小車前進(jìn)后退結(jié)合舵機(jī)的轉(zhuǎn)向控制,一共完成前文所述七個(gè)方向的運(yùn)動。
2 手勢變化與角度換算
3 系統(tǒng)硬件設(shè)計(jì)
3.1 控制器設(shè)計(jì)
手持端和小車端均選用STM32F103C8T6單片機(jī)構(gòu)成最小系統(tǒng)作為核心控制器。相比于51系列單片機(jī),STM32的外設(shè)更多,對不同外設(shè)的編程是基于庫函數(shù)的開發(fā)編程[3,4],使得外設(shè)初始化配置和功能應(yīng)用更方便。具備3個(gè)通用定時(shí)器、3個(gè)串口、1個(gè)高級定時(shí)器(可以配置為PWM發(fā)生器)、多路AD轉(zhuǎn)換、具備直接存儲器訪問(DMA)和中斷控制。以其豐富的資源配置、足夠數(shù)量的I/O端口,足以滿足手持端和小車控制器的設(shè)計(jì)需求。
3.2 加速器傳感器設(shè)計(jì)
ADXL345是一款小而薄、超低功耗的加速度傳感器,可以測量運(yùn)動或沖擊導(dǎo)致的動態(tài)加速度,在本系統(tǒng)中,作為傾斜檢測應(yīng)用,當(dāng)手勢發(fā)生變化后,測量重力加速度在X軸、Y軸的數(shù)據(jù)分量。其測量范圍為±16g(13位分辨率)。ADXL345與STM32控制器通過IIC方式連接[5],ADXL345與STM32控制器采用IIC數(shù)字方式訪問,通過軟件模擬IIC時(shí)序,讀取ADXL345寄存器的數(shù)據(jù),從而獲得不同手勢下的X軸、Y軸數(shù)據(jù)分量。ADXL345讀出的有效數(shù)據(jù)是從地址為0x32開始的連續(xù)6個(gè)寄存器。依次為X軸、Y軸和Z軸數(shù)據(jù)。每個(gè)軸有兩個(gè)字節(jié)組成的16位二進(jìn)制補(bǔ)碼輸出,其高四位為符號位。
3.3 ZigBee模塊
ZigBee模塊采用致遠(yuǎn)電子出品的ZM5168P0,基于NXP JN5168芯片開發(fā)的低功耗、高性能型ZigBee模塊,它提供一個(gè)完整的基于IEEE 802.15.4標(biāo)準(zhǔn)ISM(2.4~ 2.5GHz)頻段的應(yīng)用集成方案??煽焖賾?yīng)用于工業(yè)控制、工業(yè)數(shù)據(jù)采集、農(nóng)業(yè)控制、礦區(qū)人員定位、智能家居,智能遙控器等場合。該模塊主要技術(shù)指標(biāo):發(fā)射功率為2.5dBm,接收靈敏度為-95dBm,其應(yīng)用電路如圖3所示。該模塊由STM32控制,通過串口連接。
ZigBee模塊分為終端節(jié)點(diǎn)和路由節(jié)點(diǎn)等類型,終端節(jié)點(diǎn)可以配置成不同的目標(biāo)地址。采用ZigBee無線模塊傳輸指令數(shù)據(jù),可以為后面手持端控制多個(gè)終端的擴(kuò)展提供很大的便利[6]。
3.4 電池電壓測量
3.5 小車電機(jī)驅(qū)動
小車的電機(jī)驅(qū)動電路可選擇兩片A4950或單片TB66 12,TB6612是雙路電機(jī)驅(qū)動芯片,單片機(jī)驅(qū)動TB6612一路電機(jī)需要3個(gè)I/O口,其中一個(gè)是PWM信號,另外兩個(gè)控制電機(jī)正反轉(zhuǎn)[7];A4950雖然是單路電機(jī)驅(qū)動芯片,單片機(jī)驅(qū)動一路電機(jī)只需要2個(gè)I/O口,這2個(gè)I/O口輸出的PWM波存在壓差,就控制小車的運(yùn)行方向和速度。采用兩片A4950,分別控制兩個(gè)驅(qū)動電機(jī)。
圖5是多條路徑的其中一種路電機(jī)的驅(qū)動電路設(shè)計(jì)。A4950的2和3腳接小車STM32控制器的I/O口,用以產(chǎn)生PWM波來控制小車的運(yùn)動。IN1、IN2通常設(shè)定為頻率相同的PWM波,而通過調(diào)節(jié)IN1、IN2不同占空比的PWM波,來實(shí)現(xiàn)正反轉(zhuǎn)和控制電機(jī)的運(yùn)行速度。式(5)表示電機(jī)驅(qū)動時(shí)的最大限制電流,如圖5所示,可知當(dāng)前電機(jī)最大限制電流為2A。
4 軟件設(shè)計(jì)
4.1 手持端主程序設(shè)計(jì)
手持端在讀取到三軸數(shù)據(jù)后,根據(jù)前文所述的手勢變化與角度換算的關(guān)系,轉(zhuǎn)化為直接對X軸、Y軸數(shù)據(jù)的判斷,并根據(jù)X軸、Y軸的數(shù)據(jù)做出七個(gè)方向指令的約定。如表1所示。
主流程圖如圖6所示。程序不斷地讀取三軸數(shù)據(jù),并根據(jù)表1約定的規(guī)則做出不同的手勢判斷,從而發(fā)送不同的指令給小車,與此對應(yīng),小車收到不同的指令后,再做出七個(gè)不同的運(yùn)動狀態(tài)。
4.2 ZigBee發(fā)送與接收程序
手持端與小車通過ZigBee模塊實(shí)現(xiàn)指令的傳輸。Zig-Bee模塊與STM32控制器之間都是通過串口方式連接。為提高無線傳輸?shù)目煽啃?,本系統(tǒng)對收發(fā)兩端的串口通信格式進(jìn)行統(tǒng)一規(guī)劃,采用9600bps的波特率,每幀數(shù)據(jù)包含Byte0-Byte4五字節(jié),依次是0x5A、0x5A、0x01、指令數(shù)據(jù)、校驗(yàn)碼。其中0x5A是Byte0,Byte1的幀頭,Byte2為0x 01,代表當(dāng)前指令數(shù)據(jù)的數(shù)據(jù)量為一個(gè)指令數(shù)據(jù)。Byte3為不同手勢下的指令數(shù)據(jù),詳情見表1所示,Byte4是前面Byte0-Byte3數(shù)據(jù)的累加和,僅保留低8位。
小車接收端接收到數(shù)據(jù)后,經(jīng)過對幀頭的判斷以及對校驗(yàn)和的驗(yàn)證,最后取得有效指令數(shù)據(jù)來實(shí)現(xiàn)不同運(yùn)動狀態(tài)的控制。圖7為小車接收一幀數(shù)據(jù)的流程圖。
4.3 小車運(yùn)動系統(tǒng)控制程序
圖8是小車運(yùn)動系統(tǒng)程序流程。小車在接收到運(yùn)動方向的指令后,根據(jù)不同的指令做出向不同方向的運(yùn)動狀態(tài)。其中一幀數(shù)據(jù)中Byte3是指令數(shù)據(jù),有明確的運(yùn)動方向定義。因此,小車在接收數(shù)據(jù)并完成校驗(yàn)后,提取指令數(shù)據(jù),接下來就是STM32控制器I/O口輸出對應(yīng)的PWM波,控制電機(jī)和舵機(jī)實(shí)現(xiàn)包括停止在內(nèi)的七個(gè)方向的運(yùn)動,小車運(yùn)行的速度與舵機(jī)之間有一定的關(guān)系,左右驅(qū)動電機(jī)需要合理的控制方法保證小車運(yùn)行速度的要求,本系統(tǒng)中,電機(jī)驅(qū)動部分帶有編碼器測速單元,因此對速度的控制是采用PID控制算法[7],就是將測量的速度與上一次測量速度進(jìn)行比較,利用PID控制算法,控制單片機(jī)輸出PWM脈沖到電機(jī)驅(qū)動模塊PWM端,控制電機(jī)轉(zhuǎn)速。
5 結(jié) 論
本設(shè)計(jì)采用ADXL345的重力感應(yīng)實(shí)現(xiàn)手勢控制小車運(yùn)動。對手持端和小車的軟硬件設(shè)計(jì)做了較為詳細(xì)的介紹。通過電路設(shè)計(jì)、軟件編寫以及系統(tǒng)調(diào)試方式,最終實(shí)現(xiàn)了手勢控制下的小車多方向運(yùn)動系統(tǒng)的設(shè)計(jì)。手持端重力感應(yīng)控制方式與小車之間的ZigBee無線模塊數(shù)據(jù)傳輸達(dá)到了應(yīng)用手勢控制小車的目的。實(shí)際測試結(jié)果表明,該方式操作簡便靈活,控制過程方便可靠,可以應(yīng)用于其他工業(yè)控制中。
參考文獻(xiàn):
[1] 張軒,王富奎,趙如凡,等.基于無線遙控的兩輪自平衡車設(shè)計(jì) [J].自動化與儀器儀表,2016(3):78-80+82.
[2] 肖茜,陳慶.基于ADXL345的超低功耗傾角測量儀的設(shè)計(jì) [J].電腦知識與技術(shù),2014,10(16):3923-3925+3932.
[3] 劉軍,張洋,嚴(yán)漢宇.例說STM32 [M].北京:北京航空航天大學(xué)出版社,2018.
[4] 劉火良,楊森.STM32庫開發(fā)實(shí)戰(zhàn)指南 [M].北京:機(jī)械工業(yè)出版社,2016.
[5] 云中華,劉洪春,李勇峰,等.STM32的方位角度與傾斜數(shù)據(jù)測量儀系統(tǒng)設(shè)計(jì) [J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2015,15(10):44-46+58.
[6] 陳佩嘉,朱松青,許有熊,等.基于ZigBee的地鐵門振動加速度無線采集系統(tǒng)設(shè)計(jì) [J].南京工程學(xué)院學(xué)報(bào)(自然科學(xué)版),2017,15(3):8-12.
[7] 范政,何繼靖,朱永業(yè),等.基于STM32的無線智能小車控制系統(tǒng)設(shè)計(jì) [J].輕工科技,2018,34(6):83-85+87.
作者簡介:徐寧(1997-),女,漢族,黑龍江七臺河人,本科,研究方向:電子技術(shù)應(yīng)用。