李凱 劉麗霞 曹楊
摘? 要:為了實現(xiàn)對提線木偶的無線自動控制,設(shè)計了一套利用手機(jī)App通過藍(lán)牙模塊發(fā)出控制指令,通過Arduino控制4個舵機(jī)驅(qū)動牽引線完成提線木偶左右手臂和左右腿動作的裝置。該裝置既可以完成提線木偶的單一動作,也可完成連續(xù)多個動作。經(jīng)搭建實物測試,設(shè)計的裝置可以流暢的完成提線木偶的動作。
關(guān)鍵詞:App Inventor 2;藍(lán)牙通信;Arduino平臺;舵機(jī)驅(qū)動
中圖分類號: TP29 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-2945(2019)16-0012-03
Abstract: In order to realize the wireless automatic control of the wire lifting puppet, a set of device is designed, which uses the mobile phone App to send out the control command through the Bluetooth module, and uses Arduino to control the four steering gear driving leads to complete the left and right arms and left and right legs of the wire lifting puppet. The device can not only complete the single action of the puppet, but also complete a plurality of continuous actions. After building the physical test, the designed device can smoothly complete the action of wire lifting puppets.
Keywords: App Inventor 2; bluetooth communication; Arduino platform; actuator drive
1 概述
手機(jī)APP控制的可編程智能玩具市場日趨繁榮,它集娛樂和益智于一體,深受青少年的喜歡。手機(jī)APP平臺App Inventor 2是一個圖形化開發(fā)應(yīng)用環(huán)境,它可以實現(xiàn)如“搭積木”一樣編寫程序,完成手機(jī)APP的制作[1]。Arduino是目前非常流行的開源創(chuàng)客工具,它對底層硬件進(jìn)行了良好封裝,提供了豐富的庫函數(shù)可供開發(fā)者調(diào)用,有強(qiáng)大的社區(qū)論壇,以上使得開發(fā)過程更加簡單快速[2]。
為結(jié)合科技與娛樂,激發(fā)青少年的興趣,本文通過借助手機(jī)APP平臺App Inventor 2,運用藍(lán)牙BLE4.0模塊[3],利用舵機(jī)[4]驅(qū)動牽引線實現(xiàn)手機(jī)對智能提線木偶手臂和腿部的動作,可以實現(xiàn)提線木偶手臂、腿部的單獨動作和連續(xù)動作兩種模式的動作。用戶可對連續(xù)運動的動作進(jìn)行設(shè)計,實現(xiàn)提線木偶完成一系列連貫動作。
2 系統(tǒng)設(shè)計
系統(tǒng)設(shè)計包括4部分內(nèi)容,依次是總體方案設(shè)計、提線木偶動作設(shè)計、硬件電路設(shè)計和軟件設(shè)計,具體內(nèi)容如下所述。
2.1 總體方案
本設(shè)計的總體方案如圖1所示,Arduino控制器接收由手機(jī)APP經(jīng)由藍(lán)牙模塊傳來的指令,以此通過驅(qū)動電路控制舵機(jī)操作木偶運動。設(shè)計內(nèi)容包括Android手機(jī)APP設(shè)計、藍(lán)牙通信連接、Arduino控制器程序編寫與調(diào)試、舵機(jī)驅(qū)動電路設(shè)計、提線木偶的動作設(shè)計,以及為各個模塊供電的直流電源模塊等。實現(xiàn)的目標(biāo)包括:(1)能夠通過Android手機(jī)APP操作界面實現(xiàn)提線木偶的手臂和腿部的抬/放動作。(2)手臂或腿部能夠?qū)崿F(xiàn)單獨動作和連續(xù)動作。(3)當(dāng)超出藍(lán)牙控制范圍時,提示藍(lán)牙連接中斷,并保持提線木偶動作。
2.2 提線木偶動作設(shè)計
提線木偶可以實現(xiàn)的基本動作包括抬左手、放左手、抬右手、放右手、抬左腿、放左腿、抬右腿、放右腿8個動作。如圖2所示,由于上述8個基本動作由四個獨立的舵機(jī)控制,每個部位都可單獨動作,若將這8個動作組合,同時增加延時環(huán)節(jié),可形成更多動作組合。如抬左手的同時抬右手并保持,延時2秒,抬左腳并保持,待左腳到位后抬右腳,保持2秒,全部復(fù)位。這樣木偶既可以實現(xiàn)單個動作,又可同時實現(xiàn)多個動作組合形成連續(xù)動作,且可以控制前一個(組)動作和后一個(組)動作之間的時間。
2.3 硬件電路設(shè)計
本系統(tǒng)的硬件電路原理圖見圖3所示,Arduino控制板、藍(lán)牙模塊、PCA9685芯片、4個舵機(jī)及5V直流電源(圖中未畫出)組成。
木偶動作是由舵機(jī)驅(qū)動牽引線來實現(xiàn)的,舵機(jī)可以實現(xiàn)180度(-90度—+90度)范圍內(nèi)旋轉(zhuǎn)。舵機(jī)有3個外接引腳,分別是Vcc(+5V)、GND(接地)和PWM三個引腳。舵機(jī)供電由Vcc和GND兩個引腳實現(xiàn),舵機(jī)的旋轉(zhuǎn)角度由PWM引腳接入脈沖信號的占空比來控制。PWM接入信號的頻率為50Hz,舵機(jī)旋轉(zhuǎn)-90—+90度線性對應(yīng)PWM引腳脈沖信號占空比2.5%-12.5%。如PWM脈沖信號占空比為2.5%時,舵機(jī)旋轉(zhuǎn)到-90度的位置,PWM脈沖信號占空比為12.5%時,舵機(jī)旋轉(zhuǎn)到+90度的位置,PWM脈沖信號占空比為7.5%時,舵機(jī)旋轉(zhuǎn)到0度的位置。
本設(shè)計選用Arduino Uno控制板為主控單元,由于其引腳資源有限,也為了后期擴(kuò)展方便,選用能夠同時控制16路舵機(jī)的PCA9685芯片[5]作為舵機(jī)驅(qū)動模塊。Arduino控制板與PCA9685芯片之間的通訊采用IIC協(xié)議[6],硬件接線需將Arduino的A4、A5引腳分別與PCA9685芯片的SDA、SCL引腳連接。PCA9685芯片的A0-A5都接地,即設(shè)置芯片的地址為0x40。本設(shè)計中使用PCA9685芯片的PWM9、PWM11、PWM13和PWM15四個引腳作為4路舵機(jī)轉(zhuǎn)角控制的PWM脈沖引腳,故需要將它們分別與4路舵機(jī)對應(yīng)的PWM引腳相連。
手機(jī)利用藍(lán)牙模塊對Arduino下達(dá)指令,硬件連接需將藍(lán)牙模塊的TX、RX引腳分別與Arduino的D0(RX)、D1(TX)引腳相連。
最后為各個芯片模塊和舵機(jī)提供5V直流電源(圖中未畫出)即完成硬件電路設(shè)計。
2.4 軟件設(shè)計
軟件設(shè)計分為兩部分,分別是利用App Inventor 2完成手機(jī)APP的設(shè)計,利用C語言完成Arduino控制程序的設(shè)計。
2.4.1 APP的設(shè)計
手機(jī)APP是利用App Inventor 2平臺完成的,根據(jù)上文提線木偶的動作設(shè)計,手機(jī)APP需要完成的功能如圖4所示。所需要的組件分別為實現(xiàn)通信連接的BluetoothLE藍(lán)牙通信組件,實現(xiàn)時間觸發(fā)的計時器組件,以及實現(xiàn)點擊和顯示的按鈕和標(biāo)簽組件。
程序的初始化需要完成記錄動作的空列表的創(chuàng)建,記錄列表項數(shù)量的變量定義以及定時時間標(biāo)志位的定義等,并且自動開啟手機(jī)藍(lán)牙通信的功能。連接藍(lán)牙需要完成手機(jī)藍(lán)牙與藍(lán)牙模塊的通信連接。記錄動作需要完成將每次新增動作所對應(yīng)的字符添加到列表的最后一項,直到添加完所有動作。發(fā)送動作需要完成將列表中的每一項依次(利用定時器實現(xiàn)時間次序,本設(shè)計的發(fā)送時間間隔為1.5秒)通過藍(lán)牙模塊發(fā)送給Arduino控制板。
2.4.2 Arduino控制程序的設(shè)計
Arduino控制程序流程圖見圖5所示。Arduino控制程序的初始化需要完成IIC通信(Arduino控制板和舵機(jī)驅(qū)動板PCA9685之間的通信)配置和藍(lán)牙通信初始化配置(Arduino控制板和藍(lán)牙模塊之間的通信),以及PCA9685芯片地址和PCA9685芯片寄存器地址的定義。藍(lán)牙通信和IIC通訊初始化配置后,等待接收手機(jī)APP的動作指令,當(dāng)接收到指令,判斷指令動作,執(zhí)行相應(yīng)動作。流程圖5中動作1到動作9分別對應(yīng),抬左手、放左手、抬右手、放右手、抬左腳、放左腳、抬右腳、放右腳和延時共9個動作。
在Arduino程序編寫環(huán)境中,IIC通信需要引用“wire.h”庫文件,在setup()函數(shù)中調(diào)用Wire.begin()函數(shù)開啟IIC通信,調(diào)用Serial.begin(9600) 開啟Arduino串口通信以此接受藍(lán)牙指令。然后需要分別編寫IIC通信協(xié)議下的對PCA9685芯片存儲單元寫8位數(shù)據(jù)的函數(shù)和讀8位數(shù)據(jù)的函數(shù),以及通過調(diào)用上述兩個函數(shù)完成PCA9685芯片PWM頻率設(shè)置的函數(shù)和PCA9685芯片PWM占空比設(shè)置函數(shù),以上4個自定義函數(shù)可以完成舵機(jī)驅(qū)動的初始化配置。Arduino程序編寫環(huán)境中l(wèi)oop()函數(shù)內(nèi)則要采用Serial.available()函數(shù)判斷是否有藍(lán)牙指令傳輸,若有則用Serial.read()函數(shù)讀取指令,然后利用switch選擇結(jié)構(gòu)分別控制舵機(jī)執(zhí)行相應(yīng)指令動作。
3 系統(tǒng)調(diào)試
系統(tǒng)調(diào)試分為APP安裝、Arduino程序下載及硬件電路調(diào)試兩部分內(nèi)容。
3.1 APP安裝
手機(jī)APP的安裝有兩種方式,一是將調(diào)試好的程序生成APK下載到手機(jī)中,然后在手機(jī)的文件管理器中點擊安裝。二是將調(diào)試好的程序利用App Inventor 2生成二維碼,再通過手機(jī)掃描二維碼下載安裝。安裝完成的界面如圖6所示。
3.2 Arduino程序下載及硬件電路調(diào)試
采用Arduino控制板配套的IDE環(huán)境編寫C程序,編譯完成后下載到Arduino控制板中,再將硬件電路按照圖3連接完畢,使用5V電源模塊供電后即可進(jìn)行調(diào)試。
調(diào)試過程如下:首先打開手機(jī)APP的提線木偶控制界面,點擊按鈕“連接藍(lán)牙”,若藍(lán)牙模塊的顯示燈由閃爍變?yōu)槌A?,且手機(jī)上顯示藍(lán)牙連接成功,則表示藍(lán)牙通信成功。然后可以點擊APP界面上的“抬左手”、“放左手”等的按鈕,既可一次只點擊一個按鈕,也可一次點擊多個按鈕。與此同時打開電腦上Arduino編譯環(huán)境IDE中串口的顯示界面,然后點擊手機(jī)APP界面上的“發(fā)送動作”按鈕,此時即可觀察到Arduino編譯環(huán)境的串口顯示界面有藍(lán)牙模塊傳輸過來的數(shù)據(jù),并且舵機(jī)在驅(qū)動模塊的作用下開始動作。例如:點擊“抬左手”按鈕,再點擊“發(fā)送動作”按鈕,其中1路舵機(jī)會旋轉(zhuǎn)90度。連續(xù)按下“放左手”、“抬左手”、“抬右手”按鈕,再點擊“發(fā)送動作”按鈕,則是其中1路舵機(jī)會旋轉(zhuǎn)正90度,再旋轉(zhuǎn)初始位置,然后另1路舵機(jī)旋轉(zhuǎn)到90度的位置,完成連續(xù)動作。
手機(jī)操作界面的記錄清空按鈕是將上次的列表中動作清空,重新設(shè)計動作。完成硬件電路調(diào)試(如圖7所示)即可將4路舵機(jī)分別與提現(xiàn)木偶的相應(yīng)部位連接完成本設(shè)計。經(jīng)測試,該裝置可以順暢完成設(shè)計動作。
4 結(jié)束語
該系統(tǒng)設(shè)計主要完成的是目前流行的智能手機(jī)對傳統(tǒng)的提線木偶的無線控制,主要是一種娛樂的裝置,也為Arduino單片機(jī)增加一個趣味性的案例。后期還可以增加視覺模塊,動作的設(shè)計可以靠視覺模塊采集,然后利用舵機(jī)驅(qū)動提線木偶跟隨人的動作,以此擴(kuò)展功能。
參考文獻(xiàn):
[1]李文川,曾玉.APP Inventor 2的項目應(yīng)用及教學(xué)策略[J].電子技術(shù)與軟件工程,2018(11):55-56.
[2]張哲,陳麗銀,汪棟,等.基于Arduino UNO大型汽車盲區(qū)檢測與報警裝置的設(shè)計[J].科技創(chuàng)新與應(yīng)用,2018(28):49-50.
[3]劉少軍,王瑜瑜.基于Android手機(jī)藍(lán)牙控制的智能小車設(shè)計與實現(xiàn)[J].電子測量技術(shù),2016,39(9):114-117.
[4]許曉飛.一種舵機(jī)組合控制策略的書寫機(jī)器人設(shè)計[J].高技術(shù)通訊,2018(7).
[5]周英路,王志亮,朱松青,等.基于PCA9685的多路舵機(jī)控制器設(shè)計[J].南京工程學(xué)院學(xué)報(自然科學(xué)版),2017,15(4):26-31.
[6]李強(qiáng),霍淑珍,鄭偉.基于I2C通信的PCA9685在舵機(jī)控制中的應(yīng)用[J].科技創(chuàng)新與應(yīng)用,2018(28):173-174.