朱克武,林金妹,袁小放
(廣東食品藥品職業(yè)學(xué)院,廣州510520)
隨著醫(yī)療技術(shù)的發(fā)展、生活水平的提高,人們的壽命不斷提高,人口老齡化不可避免,人老了,身體的各方面機(jī)能都會下降,老年人護(hù)理是一個新興產(chǎn)業(yè)。社會上需要一大批有豐富經(jīng)驗的護(hù)理人員。護(hù)理工作比較累臟,很多年輕人不愿從事這份職業(yè)。開發(fā)一些護(hù)理設(shè)備,能夠減輕護(hù)理人員的勞動強(qiáng)度,這樣會吸引不少年輕人從事這份有愛心的職業(yè)。開發(fā)一個能夠運(yùn)送垃圾或者貨物的小車顯得非常有必要,該產(chǎn)品有實(shí)際的市場需求。
智能小車采用輪式行走機(jī)構(gòu),主要硬件有車輪、電池、機(jī)架、串口-Wi-Fi模塊、攝像頭等部件,組裝成一輛能夠行走的小車。使用手機(jī)控制小車的運(yùn)動,需要在手機(jī)上實(shí)時顯示小車當(dāng)前的狀態(tài),通過手機(jī)界面上的控制鍵(前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)),向小車發(fā)送指令,控制小車的行走,達(dá)到對小車遠(yuǎn)程控制的目的。
目前,全社會都注重節(jié)能環(huán)保,人們的日常出行,都經(jīng)常使用電動車、節(jié)能車代步,鋰電池具有高存儲能量密度;使用壽命長,可以使用6年以上;額定電壓高,單體工作電壓為3.2V;具備高功率承受力;自放電率低;重量輕等優(yōu)點(diǎn),它的這些優(yōu)點(diǎn),使得鋰電池被廣泛應(yīng)用。本系統(tǒng)的電源,使用5V電壓供電,如果使用普通的電池,電池的電量不足以長時間給小車供電。隨著鋰電池技術(shù)的發(fā)展,鋰電池的體積做的很小,容量大,因此,選用5V的鋰電池給小車的供電。
采用四輪驅(qū)動的方式,四個電機(jī)分別驅(qū)動四個車輪。小車的行走的原理是電機(jī)驅(qū)動小車行走,電機(jī)由STM32的GPIO管腳控制的,通過PWM的導(dǎo)通時間來控制GPIO口,這樣,就實(shí)現(xiàn)了小車的行走控制。例如:左右兩個電機(jī)的PWM導(dǎo)通時間相同,則直線行走;導(dǎo)通的時間長,則速度快;導(dǎo)通的時間短,則速度慢;設(shè)置電機(jī)正轉(zhuǎn),則前進(jìn);設(shè)置電機(jī)反轉(zhuǎn),則后退;左邊電機(jī)導(dǎo)通時間長,右邊電機(jī)導(dǎo)通時間短,則右轉(zhuǎn);左邊電機(jī)導(dǎo)通時間短,右邊導(dǎo)通時間長,則左轉(zhuǎn)。
本系統(tǒng)采用ST M32F103芯片,該芯片有串口模塊、GPIO管腳、定時器模塊、DMA控制器等,芯片的功能非常強(qiáng)大,可以實(shí)現(xiàn)很多功能,滿足本系統(tǒng)控制的要求。電機(jī)的控制采用PWM技術(shù)。PWM是脈沖寬度調(diào)制,對脈沖的寬度進(jìn)行控制。PWM的工作原理如圖1所示,CNT是定時器的計數(shù)值,ARR是自動重裝載寄存器,CCR是捕獲比較寄存器。設(shè)定定時器工作在向上計數(shù)PWM模式,當(dāng)定時器的計數(shù)值小于CRR(捕獲比較寄存器)的數(shù)值,輸出0,低電平;當(dāng)計數(shù)值大于CRR的時候,輸出1;當(dāng)計數(shù)值等于ARR的數(shù)值的時候,重新歸零,一個計數(shù)周期結(jié)束。然后,定時器重新向上計數(shù),依次循環(huán)。PWM就輸出一個矩形波。使用PWM波形控制GPIO口,就控制了電機(jī)的轉(zhuǎn)動,實(shí)現(xiàn)行走的控制。
改變CRR的數(shù)值,就可以改變PWM輸出的占空比,改變ARR的值,可以改變PWM的輸出頻率。
圖1 PWM原理示意圖
串口-以太網(wǎng)-無線網(wǎng)模塊有多種產(chǎn)品,價格多在400元以內(nèi),串口-Wi-Fi設(shè)備硬件組成主要有RS-232串口模塊、Wi-Fi模塊。設(shè)備內(nèi)部內(nèi)置TCP/IP協(xié)議,能夠?qū)崿F(xiàn)用戶串口、以太網(wǎng)、無線網(wǎng)(Wi-Fi)3個接口之間的通訊。
串口-無線網(wǎng)模塊工作在AP模式下,Wi-Fi功能使能,通過Wi-Fi無線網(wǎng)絡(luò),將串口數(shù)據(jù)通過無線網(wǎng)絡(luò)發(fā)送出去。AP模式下,模塊就是一個標(biāo)準(zhǔn)的無線路由器,手機(jī)等設(shè)備通過Wi-Fi連接到該設(shè)備上,成為Wi-Fi局域網(wǎng)下的設(shè)備。單片機(jī)的串口和手機(jī)外部設(shè)備,通過串口-Wi-Fi設(shè)備(相當(dāng)于一個橋梁),進(jìn)行數(shù)據(jù)的收發(fā),實(shí)現(xiàn)單片機(jī)串口和手機(jī)的通訊。
本系統(tǒng)的軟件系統(tǒng)分為單片機(jī)下位機(jī)系統(tǒng)和手機(jī)App上位機(jī)系統(tǒng)。采用模塊化設(shè)計,以小車行走為設(shè)計核心,各模塊分工明確,便于程序的調(diào)試和運(yùn)行,以及后期系統(tǒng)的維護(hù)升級。串口-Wi-Fi模塊不需要編程,只需要設(shè)置串口的波特率等參數(shù)、TCP服務(wù)器的地址、端口號等參數(shù),相關(guān)的參數(shù)設(shè)置完成后,就自動在單片機(jī)串口、手機(jī)App之間進(jìn)行數(shù)據(jù)傳遞,不需要用戶干預(yù)。單片機(jī)下位機(jī)系統(tǒng)的模塊主要是GPIO模塊、PWM模塊、串口模塊。手機(jī)App上位機(jī)系統(tǒng)的模塊主要是按鈕事件、Socket網(wǎng)絡(luò)通訊。
STM32單片機(jī)程序的主程序是main函數(shù),首先,初始化工作,包括初始化時鐘、GPIO管腳、定時器、串口。其次,while循環(huán),讀取中斷的數(shù)據(jù),判斷是否有串口數(shù)據(jù),如果沒有,則執(zhí)行行走函數(shù)。如果有,則判斷是前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn),執(zhí)行行走函數(shù)。
在定時器初始化中,使用定時器5的通道1來PWM方波。設(shè)置定時器的預(yù)分頻、定時器向上計數(shù)模式、ARR自動重裝載數(shù)值,通過使用TIM_OC1Init函數(shù),設(shè)置PWM的輸出方式,設(shè)置完成后,使能定時器5,定時器開始工作。通過修改定時器的CCR1來控制通道1的輸出占空比。
初始化串口后,開啟串口中斷。只要串口-Wi-Fi設(shè)備發(fā)送數(shù)據(jù)到串口,串口中斷就會響應(yīng),設(shè)置串口中斷標(biāo)志,接收數(shù)據(jù),串口中斷是一次接收一個字節(jié),因此,應(yīng)當(dāng)給串口的接收設(shè)置一個聯(lián)絡(luò)信號,如“ ”,使用回車換行作為數(shù)據(jù)接收結(jié)束的標(biāo)記。
串口的發(fā)送直接使用串口的發(fā)送指令即可,不需要使用中斷發(fā)送數(shù)據(jù)。串口的接收是無法預(yù)測的,不知道在哪個時間段,有數(shù)據(jù)到來,因此,必須使用中斷的方式,來接收數(shù)據(jù)。串口數(shù)據(jù)的發(fā)送,是可以控制的,可以直接調(diào)用串口發(fā)送指令,靈活方便。
手機(jī)端App設(shè)計,首先是界面設(shè)計,在界面上,放置6個按鈕,1個編輯控件,分別對應(yīng)小車的“前進(jìn)”、“后退”、“左轉(zhuǎn)”、“右轉(zhuǎn)”、“加速”、“減速”。給 6 個按鈕添加單擊事件,onClick事件。因為,要將控制信號發(fā)送給單片機(jī)的串口,涉及網(wǎng)絡(luò)通訊,因此,在按鈕的單擊事件中,添加線程,在線程中,調(diào)用Socket對象,收發(fā)數(shù)據(jù)。將接收的數(shù)據(jù),顯示在界面上。
Socket網(wǎng)絡(luò)通訊,首先,創(chuàng)建Socket對象,指定服務(wù)器的IP地址、端口號,連接到服務(wù)器。設(shè)置要發(fā)送的數(shù)據(jù)到發(fā)送區(qū),Socket通訊一般是byte字節(jié)數(shù)組的形式,發(fā)送和接收的數(shù)據(jù)都在byte字節(jié)數(shù)組里面。創(chuàng)建OutputStream輸出流,使用write函數(shù)、flush函數(shù),將字節(jié)數(shù)組中的數(shù)據(jù)發(fā)送給串口-Wi-Fi設(shè)備,通過透傳的方式,將字節(jié)數(shù)據(jù),發(fā)給串口。Socket發(fā)送結(jié)束,關(guān)閉Socket連接。
App網(wǎng)絡(luò)通訊的流程是,在按鈕事件中,創(chuàng)建一個線程,在線程中,將控制信息添加到發(fā)送區(qū)數(shù)組中,創(chuàng)建Socket對象,連接服務(wù)器,創(chuàng)建OutputStream輸出流對象,將數(shù)據(jù)發(fā)送出去。關(guān)閉Socket,如果不關(guān)閉,客戶端一直連接服務(wù)器,導(dǎo)致后面的套接字可能連不上服務(wù)器,套接字不釋放,會一直占用資源,因此,套接字使用完成后,要及時關(guān)閉,釋放它占用的資源。
Android的網(wǎng)絡(luò)編程,需要配置網(wǎng)絡(luò)的權(quán)限,能夠使用Internet權(quán)限。
通過小車控制系統(tǒng)的研究,掌握小車的硬件組成,包括電機(jī)的選型、電源的選型、STM32芯片的選型等,為后續(xù)添加新的硬件設(shè)備提供經(jīng)驗積累。小車軟件系統(tǒng)圍繞小車的行走控制開展,App上位機(jī)發(fā)送指令,提供串口-Wi-Fi設(shè)備,將指令發(fā)送給STM32單片機(jī),串口接到數(shù)據(jù)后,根據(jù)指令的類型,進(jìn)行處理。通過本項目的研究,實(shí)現(xiàn)了對小車的控制,為后續(xù)開發(fā)小車的智能行走,提供了一些理論積累。