聶茹
遙控小車是玩具市場(chǎng)一種很常見的玩具,但是,每個(gè)小車都有自己特定的遙控器,原裝遙控器壞了很難與其它型號(hào)的進(jìn)行匹配?,F(xiàn)在手機(jī)使用十分普遍,如果利用手機(jī)這個(gè)平臺(tái),通過軟件編程,通過藍(lán)牙來控制我們的玩具小車[1-2],可以很方便的在一個(gè)硬件平臺(tái)實(shí)現(xiàn)多種小車的遙控器。 因此,本論文先設(shè)計(jì)一種手機(jī)對(duì)智能遙控車的控制方案,利用本系統(tǒng)的控制模塊可擴(kuò)展至對(duì)所有家電的控制。
Andriod是一個(gè)完全開放的標(biāo)準(zhǔn)平臺(tái),在2007年11月5日這天,谷歌公司正式向外界展示了這款名為Android的操作系統(tǒng),本程序是基于Android 2.1系統(tǒng),所用開發(fā)工具為Eclipse集成開發(fā)環(huán)境,Eclipse是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境,在此開發(fā)環(huán)境下開發(fā)軟件非常的方便。
本次設(shè)計(jì)要求實(shí)現(xiàn)一個(gè)手機(jī)可以遠(yuǎn)程通過藍(lán)牙控制小車的前進(jìn)、后退、左轉(zhuǎn)和右轉(zhuǎn)。
本設(shè)計(jì)是以 AT89C52單片機(jī)為核心,以設(shè)置手機(jī)界面來設(shè)置前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止等功能。單片機(jī)控制電機(jī)驅(qū)動(dòng)來控制電機(jī)的正反轉(zhuǎn)以實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止。HC-06為藍(lán)牙接收模塊,通過與手機(jī)端的藍(lán)牙進(jìn)行連接配對(duì),從而接收從手機(jī)端發(fā)送過來的動(dòng)作指令。接收到的指令再傳給單片機(jī),單片機(jī)通過分析傳遞過來的指令不同,而跳轉(zhuǎn)到不同的子程序來控制電機(jī)驅(qū)動(dòng),從而實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止等不同的動(dòng)作。電源提供給單片機(jī)5V直流電,L298需要從外部接兩個(gè)電壓,一個(gè)是給電機(jī)的,另一個(gè)給L298芯片的[3]。
本系統(tǒng)的系統(tǒng)框圖如圖1所示:
圖1 系統(tǒng)框圖
整個(gè)系統(tǒng)的硬件可以分為4個(gè)模塊:電源電路、單片機(jī)最小系統(tǒng)、電機(jī)驅(qū)動(dòng)模塊、藍(lán)牙模塊。電源電路為整個(gè)系統(tǒng)供電,包括單片機(jī)AT89C52、電機(jī)驅(qū)動(dòng)、藍(lán)牙模塊、及其他外圍電路。電源電路分兩個(gè)部分:(1)接外部電源給電機(jī)供電;(2)由4節(jié)干電池作為電源,給系統(tǒng)供電,以確保單片機(jī)、電機(jī)驅(qū)動(dòng)、藍(lán)牙模塊的正常運(yùn)行。在電源電路給系統(tǒng)供電時(shí),綠色指示燈點(diǎn)亮,只是當(dāng)前供電正常。單片機(jī)最小系統(tǒng)部分是整個(gè)系統(tǒng)的智能控制部分,也是整個(gè)系統(tǒng)的核心部分。電機(jī)驅(qū)動(dòng)模塊L298需要從外部接兩個(gè)電壓,一個(gè)是給電機(jī)的,另一個(gè)給L298芯片的[4]。
單片機(jī)的最小系統(tǒng)就是讓單片機(jī)能正常工作并發(fā)揮其功能時(shí)所必須的組成部分,也可理解為是用最少的元件組成的單片機(jī)可以工作的系統(tǒng)。對(duì)51系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:?jiǎn)纹瑱C(jī)、時(shí)鐘電路、復(fù)位電路、輸入/輸出設(shè)備等[5-6]。
L298是SGS公司的產(chǎn)品,比較常見的是15腳Multiwatt封裝的L298N,內(nèi)部同樣包含4通道邏輯驅(qū)動(dòng)電路。可以方便的驅(qū)動(dòng)兩個(gè)直流電機(jī),或一個(gè)兩相步進(jìn)電機(jī)。L298N芯片輸出電壓最高可達(dá)50V,可以直接通過電源來調(diào)節(jié)輸出電壓;電路簡(jiǎn)單,使用比較方便。1腳和15腳下管的發(fā)射極分別單獨(dú)引出以便接入電流采樣電阻,形成電流傳感信號(hào)。L298可驅(qū)動(dòng)2個(gè)電動(dòng)機(jī),OUT1、OUT2和OUT3、OUT4之間可分別接電動(dòng)機(jī),本實(shí)驗(yàn)裝置我們選用驅(qū)動(dòng)一臺(tái)電動(dòng)機(jī)。5、7、10、12腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn)。EnA、EnB接控制使能端,控制電機(jī)的停轉(zhuǎn)。
本模塊分主機(jī)和從機(jī),主機(jī)能和從機(jī)配對(duì)通信,從機(jī)與從機(jī)之間或主機(jī)與主機(jī)之間不能通信,從機(jī)能和電腦、手機(jī)等的藍(lán)牙配對(duì)通信,購(gòu)買時(shí)默認(rèn)為從機(jī)。在做智能小車控制時(shí),藍(lán)牙模塊主要是實(shí)現(xiàn)接收從手機(jī)端發(fā)送過來的指令,所以我們需要的是從機(jī)模塊。藍(lán)牙串口在模塊功能上,偶數(shù)命名的互相兼容,從機(jī)命名的也互相兼容,也就是說,HC-04與HC-06,HC-03與 HC-05在功能上是兼容的。HC-04與HC-06是比較早的版本,用戶不可以自己切換主機(jī)或者從機(jī),AT指令集很少,包括修改藍(lán)牙名(限于從機(jī)),修改密碼,修改波特率,詢問版本號(hào)等幾個(gè)基本功能。在本次設(shè)計(jì)中我們只需實(shí)現(xiàn)簡(jiǎn)單的通信,因此選用 HC-06模塊。HC-06模塊只記憶最后一次配對(duì)過的從機(jī),并只與該從機(jī)配對(duì),直到KEY(26腳)高電平觸發(fā)時(shí)放棄記憶,26腳默認(rèn)應(yīng)該為低電平。
在本次設(shè)計(jì)中,主程序主要是在單片機(jī)的控制下,對(duì)藍(lán)牙模塊輸入的信息進(jìn)行存儲(chǔ)分析,來控制電機(jī)驅(qū)動(dòng),以達(dá)到控制小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。在這個(gè)過程中,單片機(jī)首先進(jìn)行初始化,包括設(shè)置單片機(jī)各個(gè)端口的方向,各個(gè)變量的初始化,以及單片機(jī)振蕩頻率的校準(zhǔn)等。單片機(jī)定時(shí)對(duì)藍(lán)牙模塊串口讀數(shù)據(jù),如果串口的數(shù)據(jù)讀出,則對(duì)讀出的數(shù)據(jù)進(jìn)行分析,讀出的數(shù)據(jù)如果為 A、B、C、D則分別對(duì)應(yīng)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。
本程序是基于Android 2.1系統(tǒng),所用開發(fā)工具為Eclipse集成開發(fā)環(huán)境,Eclipse是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語(yǔ)言開發(fā),但是目前亦有人通過插件使其作為其他計(jì)算機(jī)語(yǔ)言比如 C++、Python和Android的開發(fā)工具,在此開發(fā)環(huán)境下開發(fā)軟件非常的方便。首先設(shè)計(jì)本系統(tǒng)手機(jī)端軟件的程序界面,為了盡快實(shí)現(xiàn)程序的功能,本程序沒有對(duì)軟件界面設(shè)計(jì)做特別美化的設(shè)計(jì),僅包含我們所用到的幾個(gè)按鈕和圖形顯示,以實(shí)現(xiàn)我們的功能為最大目標(biāo)。
(1)手機(jī)界面程序設(shè)計(jì)
在設(shè)置手機(jī)界面的時(shí)候,在Eclipse集成開發(fā)環(huán)境下,首先,新建一個(gè) android項(xiàng)目工程,興建路徑是File—New—android project—project name,選擇 android 1.6版本,工程名命名為Bluetooth-car,選擇Create Activity,則自動(dòng)創(chuàng)建了一個(gè)Activity。手機(jī)界面圖如圖2所示:
圖2 手機(jī)界面圖
(2)手機(jī)監(jiān)聽程序設(shè)計(jì)
在Eclipes開發(fā)平臺(tái)上,首先在Layout文件中采用相對(duì)布局的形式設(shè)計(jì)完成手機(jī)界面以后,就要考慮為我們的每個(gè)Butten按鍵綁定監(jiān)聽程序,以實(shí)現(xiàn)在每個(gè)按鍵按下時(shí),就能通過手機(jī)藍(lán)牙發(fā)送相應(yīng)的數(shù)據(jù)到小車藍(lán)牙接收模塊。首先在Layout文件中,每添加一個(gè)控件,都會(huì)為這個(gè)控件設(shè)置一個(gè)ID,(如android:id="@+id/button1"),然后在R.JAVA文件就會(huì)自動(dòng)生成一個(gè)ID地址。然后在主程序里面編寫監(jiān)聽程序,當(dāng)按鍵按下的時(shí)候,通過監(jiān)聽按鍵的ID地址的不同,采用switch結(jié)構(gòu),跳轉(zhuǎn)到不同的case里,向小車藍(lán)牙模塊發(fā)送不同的數(shù)據(jù)。在程序里直接寫進(jìn)小車藍(lán)牙模塊的藍(lán)牙地址(00:12:10:31:01:70),當(dāng)程序開始運(yùn)行時(shí),將會(huì)自動(dòng)搜索該地址的藍(lán)牙芯片,當(dāng)進(jìn)行過一次配對(duì)連接以后,將會(huì)記憶該地址,以后每次只要打開手機(jī)界面,開始運(yùn)行時(shí)就會(huì)自動(dòng)進(jìn)行搜索配對(duì)連接好[7-8]。
根據(jù)電路原理圖、實(shí)物 圖把電路板實(shí)物做出來后,下一步就是電路板調(diào)試。電路板調(diào)試是最關(guān)鍵的一步,前面所做的電路設(shè)計(jì)的成功與否就是在調(diào)試步驟里體現(xiàn)的。本系統(tǒng)的調(diào)試主要分為硬件調(diào)試、軟件調(diào)試和系統(tǒng)整體調(diào)試等3大部分。
硬件電路調(diào)試包括獨(dú)立元件的檢測(cè)、單片機(jī)最小系統(tǒng)的調(diào)試、電源電路的調(diào)試、驅(qū)動(dòng)模塊的調(diào)試4部分。下面,主要介紹驅(qū)動(dòng)模塊的調(diào)試情況。驅(qū)動(dòng)模塊為驅(qū)動(dòng)電機(jī)的芯片,L298需要從外部接兩個(gè)電壓,一個(gè)是給電機(jī)的,另一個(gè)給L298芯片的。首先檢查驅(qū)動(dòng)芯片與單片機(jī)的各個(gè)連線是否都正確以后,給芯片通上電源,單片機(jī)指示燈點(diǎn)亮以后。運(yùn)行單片機(jī)上的程序,通過單片機(jī) P2口的數(shù)據(jù)變化來控制L298的IN1、IN2、IN3、IN4的電平的高低。L298輸入端的高低電平的變化,通過輸入端的LED燈的亮滅來顯示。當(dāng)運(yùn)行前進(jìn)程序的時(shí)候,IN1、IN2、IN3、IN4的值為1、0、1、0,分別點(diǎn)亮LED1和LED3,左右電機(jī)都正轉(zhuǎn),實(shí)現(xiàn)小車前進(jìn);運(yùn)行左轉(zhuǎn)程序的時(shí)候,IN1、IN2、IN3、IN4分別為 1、0、0、1,分別點(diǎn)亮 LED1、LED4,左電機(jī)正轉(zhuǎn),右電機(jī)反轉(zhuǎn),實(shí)現(xiàn)小車左轉(zhuǎn);運(yùn)行右轉(zhuǎn)程序的時(shí)候,IN1、IN2、IN3、IN4的值為0、1、1、0,點(diǎn)亮LED2,LED3,左電機(jī)反轉(zhuǎn),右電機(jī)正轉(zhuǎn),實(shí)現(xiàn)小車右轉(zhuǎn);運(yùn)行后退程序的時(shí)候,IN1、IN2、IN3、IN4 的值分別為 0、1、0、1,分別點(diǎn)亮 LED2、LED4,左右電機(jī)都反轉(zhuǎn),實(shí)現(xiàn)小車后退。通過調(diào)試電機(jī)驅(qū)動(dòng)模塊能實(shí)現(xiàn)基本的功能。其調(diào)試圖如圖3~圖6所示:
圖3 小車前進(jìn)指示圖
圖4 小車后退指示圖
圖5 小車左轉(zhuǎn)指示圖
圖6 小車右轉(zhuǎn)指示圖
將做好的工程添加進(jìn)入Eclipes開發(fā)環(huán)境中,檢查各個(gè)文件夾下面的程序有沒有出現(xiàn)打紅色X的問題以及警告,點(diǎn)開下方的problem的文件,檢查該工程有沒有出現(xiàn)問題,當(dāng)排除了所有的問題以后。配置一個(gè)2.2版本的模擬器,然后啟動(dòng)模擬器,在模擬器上運(yùn)行該工程,在模擬器上將會(huì)出現(xiàn)已經(jīng)做好的手機(jī)界面,運(yùn)行完成,調(diào)試成功。然后將手機(jī)連接到電腦上,打開安卓手機(jī)的USB接口。接下來點(diǎn)擊運(yùn)行整個(gè)工程項(xiàng)目,在手機(jī)上出現(xiàn)前面那個(gè)做好的藍(lán)牙小車控制界面。點(diǎn)擊各個(gè)按鈕,都無問題,證明該JAVA程序沒有問題。
藍(lán)牙控制小車的硬件模塊和軟件模塊分別調(diào)試通過后,接下來就可以進(jìn)行系統(tǒng)的整體測(cè)試。首先檢查各個(gè)模塊之間,以及電機(jī)驅(qū)動(dòng)與電機(jī)的連接都沒有出錯(cuò)的情況下,打開給各個(gè)模塊提供的5V電源以及打開給電機(jī)提供的另一個(gè)6V電源。此時(shí)最小系統(tǒng)模塊指示燈點(diǎn)亮,表示單片機(jī)供電正常,藍(lán)牙模塊指示燈開始閃爍,表示藍(lán)牙模塊也供電正常。此時(shí)打開安卓手機(jī)的藍(lán)牙,搜索該藍(lán)牙芯片,進(jìn)行配對(duì)。然后打開我們做好的手機(jī)界面,當(dāng)界面打開之后,開始自動(dòng)搜索藍(lán)牙芯片的地址進(jìn)行連接,當(dāng)藍(lán)牙芯片的指示燈由閃爍轉(zhuǎn)變?yōu)槌A烈院?,表示藍(lán)牙配對(duì)連接成功。在剛開始的時(shí)候調(diào)試的時(shí)候遇到了一些問題,在電機(jī)驅(qū)動(dòng)方面,當(dāng)在手機(jī)端的界面上點(diǎn)擊前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)按鈕的時(shí)候,藍(lán)牙模塊能接受手機(jī)端發(fā)送的字符 A、B、C、D的ASCII碼值,并且能夠通過串口相應(yīng)的傳遞給單片機(jī),單片機(jī)通過分析串口傳過來的數(shù)據(jù),改變P2口的值分別為65、66、67、68,來控制電機(jī)驅(qū)動(dòng)的輸入端IN1、IN2、IN3、IN4。相應(yīng)的電機(jī)驅(qū)動(dòng)端的四個(gè)指示 LED燈都能根據(jù)數(shù)據(jù)的變化采取不同的亮和滅的組合情況,來相應(yīng)控制小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。
本文闡述一種通過手機(jī)藍(lán)牙遙控小車行走的軟、硬件設(shè)計(jì)。手機(jī)藍(lán)牙作為客戶端,小車上的藍(lán)牙模塊 HC-06作為服務(wù)端??蛻舳瞬捎肊clipse開發(fā)環(huán)境,JAVA編程,服務(wù)端采用單片機(jī)控制。雙方通過串口進(jìn)行通信,單片機(jī)驅(qū)動(dòng)直流電機(jī)控制小車行動(dòng)。實(shí)驗(yàn)結(jié)果表明,小車可以接收手機(jī)遙控信號(hào)并靈活地進(jìn)行前行、倒退、左轉(zhuǎn)、右轉(zhuǎn)和停止等功能。
[1] 符強(qiáng),任風(fēng)華.基于手機(jī)藍(lán)牙的遙控小車的設(shè)計(jì)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2011, (31):77-79.
[2] 林長(zhǎng)青,成海量.基于Android系統(tǒng)和藍(lán)牙通信的手機(jī)遙控車設(shè)計(jì)[J].山西電子技術(shù),2012, (03):56-58.
[3] 孫玉艷.實(shí)現(xiàn)PC機(jī)與單片機(jī)的數(shù)據(jù)通信與控制[J].廣東白云職業(yè)技術(shù)學(xué)院廣州白云工商高級(jí)技工學(xué)校學(xué)報(bào),2002,(04) : 46-49.
[4] 李學(xué)軍.如何用MCS-51單片機(jī)擴(kuò)展串口進(jìn)行通訊[J].寧夏機(jī)械,2003,(2) :24-26.
[5] 張毅剛,彭喜元,彭宇.單片機(jī)原理及應(yīng)用[M].北京:高等教育出版社,2010.
[6] 李艷紅. 單片機(jī) I/O口不宜用作直接驅(qū)動(dòng)出口[J].電站設(shè)備自動(dòng)化,2003,(2) :20-23.
[7] 張桂珠,劉麗,陳愛國(guó).Java面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:北京郵電大學(xué)出版社,2007.
[8] Ken Dunham, Mobile Malware Attacks and Defense[M],2008:162.