Professional Documents
Culture Documents
專題報告書
遠端觸控遙控車
班級:SI-701
組別:第四組
參與同學: 97971002 宋昀融
97971004 呂岳儒
97971012 董世文
97971018 曾一之
1
財團法人資訊工業策進 遠端觸控遙控車
專題 期末報 告內容 目次
1、摘要.........................................................................................................................................3
2、功能與構想 ...........................................................................................................................4
2.1 動機與目標....................................................................................................................4
2.2 功能描述........................................................................................................................4
3、系統硬體架構.........................................................................................................................5
3.1 硬體規格........................................................................................................................5
3.2 硬體建置步驟................................................................................................................8
4、系統軟體架構.......................................................................................................................10
4.1 軟體平台架設與設定..................................................................................................10
4.2 軟體架構......................................................................................................................11
4.3 軟體模組分析..............................................................................................................11
5、系統實作...............................................................................................................................12
5.1 系統實作內容..............................................................................................................12
5.2 遭遇問題與其解決方法..............................................................................................12
5.3 期末預期成果..............................................................................................................13
5.4 實際進度與計畫差異之說明......................................................................................14
6、成果操作與展示
6.1 安裝與設定..................................................................................................................15
6.2 操作與展示..................................................................................................................17
7、自我評估…...…………………………………………………………………………….. 19
8、參考資料…...…...………………...………………………………………………..……...19
附錄: 使用手冊、程式碼等………………………………………………………………….20
2
財團法人資訊工業策進 遠端觸控遙控車
1. 摘要
由於市面上有一台頗受大家喜愛的掌上型遊戲機,那就是任天堂的NDSLite,因為多樣化
的操控介面,遊戲的操作可採用十字鈕,或者是使用觸控螢幕,還有內建軟體《塗鴉聊天
機中只提供日文假名、英文、西歐語系文字、數字與符號的虛擬鍵盤,並未內建中文或漢
字輸入功能,但仍舊可以透過塗鴉的功能傳輸手寫的文字與圖形,都是利用觸控面板來完
成。
利用掌上型遊戲機NDSLite以上的概念,利用觸控筆配合觸控面板來完成遊戲的破
關,就是它的一大特色和賣點,所以我們是想利用觸控的玩法,從遊戲裡拿到現實生活,
去操控一台實體的遙控車。
市面上賣的GPS衛星導航,都有行車記錄暨車輛監控的功能,可以掌握車子移動的速
度、現在所在位置,甚至還能設定我的最愛(經常行走的路線),方便下一次出發前,衛星
導航不需要再做設定車子就能按照衛星導航先前紀錄的路線去跑,就是記憶軌跡路線的功
能。
3
財團法人資訊工業策進 遠端觸控遙控車
2. 功能與構想
2.1 動機與目標
2.1.1 動機 :
1、抒發生活上的壓力:
因為消費性產品的排行榜上,娛樂總是居高不下的,休閒娛樂對於國
人是相當重要的,因為在繁榮的都市生活,每一位忙碌的上班族,總
是加班還是加班,如果上班的時候又不順利,又加上被主管訓話,心
情沮喪,等到下班~遊戲機器便成為抒發壓力的一個好選擇。
2、想做出不同新鮮感的玩具:
因為市面上的遙控車幾乎都是利用遙控器的電波來操控遙控車,方向
鍵和前進倒退鍵通常都是做成分別的搖桿上來操作,在操控的方便性
和簡單性都還是有待加強,甚至在遙控車的記憶軌跡路線也是可以做
一個新的突破。
2.1.2 目標 :
1、觸控筆 touch 到 ARM9 的觸控面板算出座標。
2、用觸控筆在面板上畫出車子行走路線,並透過 8051 去控制 RF 發射訊號給
遙控車。
3、車子接收到傳送的 RF 訊號後,就去驅動馬達運作。
4、並可依需求去記憶規劃路線。
2.2 功能描述
2、將ARM9和8051連接:將螢幕上繪製出的軌跡線轉換成資料,透過ARM
4
財團法人資訊工業策進 遠端觸控遙控車
9的RS-232的UART傳輸給8051的UART接收。
3、車子的移動:8051收到資料去控制馬達轉動,可以達到前進、後退、左轉、
右轉的動作。
RD 裡去開檔案,使車子沿著記憶路線到指定位置。
3. 系統硬體架構
3.1 硬體規格
平台硬體配置
5
財團法人資訊工業策進 遠端觸控遙控車
• 中央處理器
• 外部記憶體
• 電源介面
• 網路介面
• USB 介面
• 串列埠
擴充 1 通道 Full-Modem 串列埠。
• 音效介面
有音效輸入介面可接麥克風。
• 紅外通訊介面
6
財團法人資訊工業策進 遠端觸控遙控車
• LCD 介面
(+5V)。
• Touch 介面
一個觸控螢幕控制器(四線電阻式)。
• VGA 介面
• SD 卡介面
• CF 卡介面
• IDE 介面
一個,可直接掛接硬碟。
• JTAG 介面
• Reset 電路
採用手動重置和晶片重置相結合的方式,晶片採用 MAX811,重置穩定可靠。
• 平台其他功能
*四個除錯指示 LED。
*一個硬碟指示 LED。
*一個電源指示 LED。
7
財團法人資訊工業策進 遠端觸控遙控車
*矩陣鍵盤:8 個按鍵,可進行鍵盤模擬。
bytes,工作頻率可達 60MHz。
3、實習板包含六個單元:
(1) 8 顆 LED。
(2) 1 顆七段顯示器。
(5) 1 顆蜂鳴器。
每個單元都有固定的 IO 控制動作。
3.2 硬體建置步驟:
控車上、下、左、右的功能。(如下圖)
前進 P10
右轉 P13
左轉 P12
財團法人資訊工業策進 遠端觸控遙控車
(8051 電路圖 )
9
財團法人資訊工業策進 遠端觸控遙控車
(8051 電路設計製作 )
4. 系統軟體架構
4.1 軟體平台架設與設定
4.1.1 在 Linux 上安裝 Embedded QT
a. 在 Trolltech 下載免費的 QT Embedded 版本目前較穩定版本是 3.0.0,建立家目錄並
在此解壓縮
$mkdir EMBEDDED-QT
$cd EMBEDDED-QT
$cp ../*.tar.gz .
$for i in *.tar.gz; do tar vxfz
$I; done
b. 在 bash 下用 pwd 來確定當前的目錄:
$pwd
/EMBEDDED-QT/qt-embedded-free-2.3.1
c. 設定 QTDIR 的遠景
10
財團法人資訊工業策進 遠端觸控遙控車
$export QTDIR=/EMBEDDED-QT/qt-embedded-free-2.3.1
$export LD_LIBRARY_PATH=/EMBEDDED-QT/qt-
embedded-free-2.3.1/lib:$LD_LIBRARY_PATH
d. 等 make 完成,就已經把 embedded qt 安裝成功了
$mak
e. 再將 QT 多餘的部分 strip ,就可以開始使用
$QTDIR/lib/libqte.so*
$QTDIR/lib/libqpe.so*
$plugins/*/*
4.2 軟體架構
1、撰寫觸控程式:在 Linux OS 平台下撰寫螢幕觸控介面程式,作為控制遙控車行
徑軌跡的控制端。
2、撰寫 UART 程式模組:將觸控介面上的觸控點的每一點座標的位移量資料,傳
送至 Linux Kernel Module 中的 UART Module 作資料處理,並透過 RS-232 傳輸
至 8051 控制板上。
3、撰寫 8051 控制程式:藉由 8051 控制程式與接收到的 RS-232 資料,來操控遙控
車上的馬達控制。
11
財團法人資訊工業策進 遠端觸控遙控車
4.3 軟體模組分析
5. 系統實作
5.1 系統實作內容
硬體的部份,我們利用 8051 板,我們將變壓器的電源正負端提供給遙控模組,分別去
控制遙控車的前、後、左、右。軟體的部份,我們則是用 QT 去撰寫視窗的控制介面,
以及 ARM 和 8051 之間的 UART 傳輸,由於串列埠四種工作模式,由於 Mode0 主要
是用來擴充 I / O,Mode1 只有 Data 的傳輸及可設定鮑率,用於電腦 RS232 串列埠,
Mode2 是用於晶片傳輸,Mode3 是比 Mode1 多一個同位偵錯的位元,所以是傳 Data
12
財團法人資訊工業策進 遠端觸控遙控車
5.2 遭遇問題與其解決方法
往往會出現許多不可預期的任何可能,例如:軟體無法驅動硬體上的
功能,或是邏輯運算上有瑕疵等;硬體電路在實作上可能出現小區域
性無法導通,或受周遭雜訊的影響而導致硬體在傳輸上的不穩定等。
能面臨的考驗之一,資料收送的不正確,可能導致硬體的不正常運作,
方式再透過遙控車上無線傳輸模組將資料傳出去,期間可能發生的問
題點訊號的穩定性,以即在於是否能夠在觸控螢幕產生資料位移的第
一時間,將訊號正確傳至遙控車上。
位置;此部份演算法即是將觸控面板的座標位置轉換成位移資料傳輸
至遙控車上,由遙控車收到的位移資料轉換為驅動馬達正反轉的訊
員們所必須探討的。
13
財團法人資訊工業策進 遠端觸控遙控車
藍芽傳輸模組,期間遭遇的可能問題有以下幾點,如紅外線在收發階段時所考慮
到的傳輸距離,在超出限定距離的範圍之下,可能導致紅外光波長的
發散效應,或是期間遇到實體阻礙,而可能導致光訊號產生所謂的繞
射現象,而降低傳輸的訊號;藍芽傳輸模組也有傳輸距離的限制,都
會造成通訊的不穩定。
已停止運轉但輪胎持續轉動造成遙控車行逕方向與觸控面板傳送資訊
不一致的情形。
5.2.6 解決方法
於遙控車上本來就有無線傳輸裝置其頻率為 40MHz,目前操控上沒有太大
問題,故本專案採用此方式。
演算法改良至最佳化,或是尋求其他更好的路徑演算法取代之。
制馬達轉動與控制遙控車輪胎轉動,達到正確控制遙控車行逕方向。
5.3 期末預期成果
發板。
5.3.1.2 軟體的應用與規劃 :
2、完成資料傳送與接收的軟體設計。
3、完成遙控器驅動的單晶片軟體設計。
5.3.1.3 硬體的實作 :
5.4 實際進度與計畫之差異
15
財團法人資訊工業策進 遠端觸控遙控車
6. 成果操作與展示
6.1 安裝與設定
1、安裝的軟體如下:
Tmake-1.11
Qt / Embedded-2.3.10
Qt-X11-2.3.2
Qtopia-Free-Source 2.1.1
16
財團法人資訊工業策進 遠端觸控遙控車
Keil C
2、Qt-X11 環境變數設定
export QTDIR=/home/iii/qt-2.3.2
export TMAKEDIR=/home/iii/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export PATH=$QTDIR/bin:$TMAKEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib
$ cd $QTDIR
$ ./configure –no-xft
$ make
4、QVFB 編譯
$ cd $QVFB
$ tmake–o Makefileqvfb.pro
17
財團法人資訊工業策進 遠端觸控遙控車
$ make
export QTDIR=/home/iii/qt-2.3.10
export QPEDIR=/home/iii/qtopia-free-2.1.1
export TMAKEDIR=/home/iii/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$QTDIR/bin:$TMAKEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib
6、Qt / Embedded 編譯
$ mkdir $QTDIR/bin
$ cp /home/iii/qt-2.3.2/bin/uic $QTDIR/bin/
$ cp $QPEDIR/src/qt/qconfig-qpe.h$QTDIR/src/tools/
$ cd $QTDIR
$ make
18
財團法人資訊工業策進 遠端觸控遙控車
6.2 操作與展示
1. 在 UI 介面上作路徑規劃
19
財團法人資訊工業策進 遠端觸控遙控車
3. 8051 單晶片將收到的資料轉換成輸出控制訊號
4. 遙控車收到 RF 訊號後驅動馬達動作
20
財團法人資訊工業策進 遠端觸控遙控車
7. 自我評估
1、目前現況 (1)硬體:已完成自製的焊接電路板,作為遙控車與 ARM 之間溝通的橋梁。
(2)軟體:目前已完成 QT 路線規劃的程式、UART 傳送資料的程式,以及
8051 單晶片 UART 接收程式與輸出控制遙控車訊號程式。
(3)系統:QT/Embedded 的系統環境編譯,目前尚未編譯完成。
2、未來發展性:(1)、利用觸控面板的操控玩法,來取代現有的機械式元件操作。
(2)、路線規劃未來可以應用在很多地方,如工廠的生產線控管,以及餐
廳的送餐路線規劃。
8. 參考資料
8.1 ARM9 S3C2440 (Linux 及 MiniGUI 上層應用實驗篇)
8.2 ARM9 S3C2440 (ADS 應用實驗篇)
8.3 Linux 程式設計 教學手冊 (第三版)
8.4 精通 QT 4
8.5 嵌入式 Linux 程式設計(修定第二版)
8.6 單晶片 8051 實作入門(最新版)
21
財團法人資訊工業策進 遠端觸控遙控車
附錄:使用手冊、程式碼等
1 使用手冊
1.1 畫面操作 :在 QT 視窗內,按滑鼠的左鍵拖曳作路線的規劃。
1.2 功能操作:
(1)、儲存圖片:按選單的 save map 作儲存檔案格式的選擇,選擇好欲儲存的檔
案格式後,再輸入檔案名稱即可。
(2)、儲存路徑:點選功能鍵上的 save path 即可將路徑座標儲存。
(3)、執行重覆路徑:點選功能鍵上的 replay 即可將儲存的路徑座標還原 QT 視
窗並送出訊號。
(4)、清除畫面:點選功能鍵上的 clear screen,即可將 QT 視窗畫面殘留路線清除。
2 程式碼
2.1 (8051 程式碼)
#include <AT89X51.h>
int k=0,m=0;
while(count>0)
count--;
void mini_board(void)
P0=0xef; //掃描第 1 行
z='7';
else if(P0_1==0)
z='8';
else if(P0_2==0)
z='9';
if(z=='7'||z=='8'||z=='9')
goto end;
P0=0xdf;
if(P0_0==0)
z='4';
else if(P0_2==0)
z='6';
23
財團法人資訊工業策進 遠端觸控遙控車
if(z=='4'||z=='6')
goto end;
P0=0xbf;
if(P0_0==0)
z='1';
else if(P0_1==0)
z='2';
else if(P0_2==0)
z='3';
if(z=='1'||z=='2'||z=='3')
goto end;
m=0;
end :
m=1;
void switch_case(void)
int i=0;
switch(n)
{
24
財團法人資訊工業策進 遠端觸控遙控車
case'8' : //鍵盤的 8
P1=~TABLE[i];
break;
case'2' : //鍵盤的 2
P1=~TABLE[i+1];
break;
case'4' : //鍵盤的 4
P1=~TABLE[i+2];
break;
case'6' : //鍵盤的 6
P1=~TABLE[i+3];
break;
case'7' : //鍵盤的 7
P1=~TABLE[i+4];
break;
case'9' : //鍵盤的 9
P1=~TABLE[i+5];
break;
case'1' : //鍵盤的 1
P1=~TABLE[i+6];
25
財團法人資訊工業策進 遠端觸控遙控車
break;
case'3' : //鍵盤的 3
P1=~TABLE[i+7];
break;
TR1 = 1; //開始計時
main()
UART(9600); //設定串列環境及鮑率
P1=0xff;
delay(30000);
P1=0x55;
26
財團法人資訊工業策進 遠端觸控遙控車
delay(30000);
P1=0x00;
delay(30000);
P1=0xff;
while(1) //重覆執行
mini_board();
if(RI!=0)
n=SBUF;
switch_case();
delay(20000);
else if(m==1)
n=z;
switch_case();
P1=0xff;
z=' ';
else
P1=0xff;
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#define _POSIX_SOURCE 1
28
財團法人資訊工業策進 遠端觸控遙控車
char ch;
fd = open(MODEMDEVICE, O_RDWR|O_NOCTTY);
if (fd < 0) {
perror(MODEMDEVICE);
exit(1);
tcgetattr(fd, &oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
29
財團法人資訊工業策進 遠端觸控遙控車
tcflush(fd, TCIFLUSH);
close(fd);
return 0;
2.3 QT 程式碼:
2.3.1 main.cpp
#include "RemoContCar.h"
#include <qapplication.h>
REMOContCar RemoContCar;
a.setMainWidget( &RemoContCar );
30
財團法人資訊工業策進 遠端觸控遙控車
RemoContCar.show();
else
RemoContCar.showMaximized();
return a.exec();
2.3.2 RemoContCar.cpp
#include "RemoContCar.h"
#include <qapplication.h>
#include <qevent.h>
#include <qpainter.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qspinbox.h>
#include <qtooltip.h>
#include <qrect.h>
#include <qpoint.h>
#include <qcolordialog.h>
#include <qfiledialog.h>
31
財團法人資訊工業策進 遠端觸控遙控車
#include <qcursor.h>
#include <qimage.h>
#include <qstrlist.h>
#include <qpopupmenu.h>
#include <qintdict.h>
#include <string>
#include <cstdlib>
#include <qlabel.h>
#include <qpixmap.h>
buffer.fill( colorGroup().base() );
setBackgroundMode( QWidget::PaletteBase );
32
財團法人資訊工業策進 遠端觸控遙控車
#ifndef QT_NO_CURSOR
crossCursor,upArrowCursor,pointingHandCursor
#endif
TextLabel1->setText(tr("My Label"));
QPixmap pixmap("z8.xpm");
TextLabel1->setPixmap(pixmap);
TextLabel1->setScaledContents(TRUE);
if ( !no_writing )
void Canvas::clearScreen()
33
財團法人資訊工業策進 遠端觸控遙控車
buffer.fill( colorGroup().base() );
repaint( FALSE );
mousePressed = TRUE;
mousePressed = FALSE;
if ( mousePressed ) {
QPainter painter;
painter.begin( &buffer );
34
財團法人資訊工業策進 遠端觸控遙控車
painter.setPen( pen );
polyline[2] = polyline[1];
polyline[1] = polyline[0];
polyline[0] = e->pos();
painter.drawPolyline( polyline );
painter.end();
QRect r = polyline.boundingRect();
r = r.normalize();
char uart_data[2];
int x = e->x();
int y = e->y();
35
財團法人資訊工業策進 遠端觸控遙控車
int mov_x=x-tmp_x;
int mov_y=y-tmp_y;
uart_data[0]='0';
uart_data[1]='1';
uart_data[1]='7';
uart_data[1]='3';
uart_data[1]='9';
uart_data[1]='6';
uart_data[1]='4';
uart_data[1]='2';
else if(mov_y<0) // up
uart_data[1]='8';
36
財團法人資訊工業策進 遠端觸控遙控車
buf += uart_data;
system(buf.c_str());
tmp_x=x;
tmp_y=y;
QWidget::resizeEvent( e );
width() : buffer.width();
height() : buffer.height();
buffer.resize( w, h );
37
財團法人資訊工業策進 遠端觸控遙控車
buffer.fill( colorGroup().base() );
QWidget::paintEvent( e );
QRect r = rects[(int)i];
setCentralWidget( canvas );
38
財團法人資訊工業策進 遠端觸控遙控車
tools->addSeparator();
tools->addSeparator();
slotOpen() ), tools);
tools->addSeparator();
39
財團法人資訊工業策進 遠端觸控遙控車
tools->addSeparator();
void REMOContCar::slotSave()
QIntDict<QString> formats;
formats.setAutoDelete( TRUE );
QString( str ) );
menu->setMouseTracking( TRUE );
1 ) ) );
40
財團法人資訊工業策進 遠端觸控遙控車
if ( id != -1 ) {
if ( !filename.isEmpty() )
delete menu;
canvas->clearScreen();
void REMOContCar::slotSavePath()
canvas->clearScreen();
void REMOContCar::slotClear()
canvas->clearScreen();
void REMOContCar::slotOpen()
41
財團法人資訊工業策進 遠端觸控遙控車
canvas->clearScreen();
2.3.3 RemoContCar.h
#ifndef REMOCONTCAR_H
#define REMOCONTCAR_H
#include <qmainwindow.h>
#include <qpen.h>
#include <qpoint.h>
#include <qpixmap.h>
#include <qwidget.h>
#include <qstring.h>
#include <qpointarray.h>
class QMouseEvent;
class QResizeEvent;
class QPaintEvent;
class QToolButton;
class QSpinBox;
class QLabel;
42
財團法人資訊工業策進 遠端觸控遙控車
Q_OBJECT
public:
int penWidth()
{ return pen.width(); }
void clearScreen();
QLabel* TextLabel1;
protected:
43
財團法人資訊工業策進 遠端觸控遙控車
QPen pen;
QPointArray polyline;
bool mousePressed;
QPixmap buffer;
};
Q_OBJECT
public:
protected:
Canvas* canvas;
protected slots:
void slotSave();
void slotOpen();
void slotClear();
void slotSavePath();
};
44
財團法人資訊工業策進 遠端觸控遙控車
#endif
45