GPS GPSCircuitImplement 作者 : 陳躍升系級 : 通訊工程學系三甲學號 :D9932275 開課老師 : 趙啟時課程名稱 : 無線網路系統開課系所 : 通訊工程學系開課學年 : 101 學年度第 1 學期
中文摘要 (1) 目的 : 主要實踐課堂上老師所授予我們的內容, 以及了解 GPS 相關電路和訊息的接收和處理 (2) 過程及方法 : 此次 GPS 電路是以 Arduino UNO 這塊板子來做為它的中心處理器, 並以一塊 GPS 模組接上一條天線用來接收 GPS 訊號, 將收到的 GPS 訊號送到 Arduino UNO 板子在由此板子把訊號經過字串處理後經由電腦的 Serial Port 使電腦螢幕顯示 GPS 相關訊息, 以及送往在電路板上的 LCD 顯示器, 顯示時間以及經緯度, 來完成定時以及定位功能 (3) 結果 : 這次的結果主要分成兩部分, 第一部分是沒有經過字串處理的訊息, 完全的把從 GPS 收到的訊號完整地呈現在電腦螢幕, 像是 GPRMC 等等封包 ; 第二部分則是有經過字串處理, 由 Arduino UNO 板子將所收到的 GPS 訊息藉由判斷封包的名子來了解它的資料結構, 並將之把我們所需之訊息 ( 時間 經緯度 ) 切割出來並將它送往電腦以及 LCD 顯示器上 第一部分所獲得的結果都是衛星傳送給電路的直接訊息要靠了解它封包的資料結構才能完成, 且 LCD 因為螢幕的限制並無法正確顯示 ; 第二部分的結果是經過字串處理, 可以很直觀的了解現在時間以及經緯度, 且能顯示在 LCD 顯示器上 關鍵字 : 1. 訊號處理 2.Arduino UNO 3.Fritzing 4.Global Positioning System (GPS) 1 逢甲大學學生報告 epaper(2012 年 )
Abstract 1. Purpose: Mainly practice teacher granted in class, and to realize the GPS associated circuitry and signal receive process. 2. Procedure and Method: This GPS circuit is based on the board of Arduino UNO, Arduino UNO is the central processor of board. Use a GPS module connecting an antenna for receiving GPS signal. Then sent the receiving GPS signal to the Arduino UNO board which use the signal to do string handling, finally the board sent the processed signal through PC's serial port making the PC screen display relative signal of GPS, another monitor is the on board LCD module, display time, latitude and longitude. 3. Result: The result mainly divided into two parts, first part the signal is not string handling, sent the fully GPS signal making PC screen display, likes the packet of GPRMC;second part the signal is string handling, Arduino UNO board sent the receiving GPS signal by determine the name of packets and then realize it's data structure, finally display on PC monitor and LCD module the useful imformation likes time, latitude and longitude. First part the result are all the satellite sent the signal to the circuit and fully done by realize the packet's data structure, and LCD module has limit due to it's monitor;second part the result is string handling, it can direct realize about the time latitude and longitude, and can display on the LCD module. Keyword: 1.Signal Process 2.Arduino UNO 3.Fritzing 4.Global Positioning System (GPS) 2 逢甲大學學生報告 epaper(2012 年 )
目次 一. 電路圖二. 接收訊號顯示三. 程式碼四. 成果展示五. 心得六.GPS 資料搭配 GOOGLE MAP 七. 流程總結 P5 P6 P11 P17 P25 P26 P28 3 逢甲大學學生報告 epaper(2012 年 )
4 逢甲大學學生報告 epaper(2012 年 ). (1) Fritzing (2) Fritzing
5 逢甲大學學生報告 epaper(2012 年 ). 1. Arduino SerialMonitor (1)() (2)()
(3)() (4)() 6 逢甲大學學生報告 epaper(2012 年 )
2. RealTerm (1)() (2)() 7 逢甲大學學生報告 epaper(2012 年 )
(3)() (4)() 8 逢甲大學學生報告 epaper(2012 年 )
3. VisualGPS (1) GPS (2), ( 5 ), GPS,, 9 逢甲大學學生報告 epaper(2012 年 )
. Arduino, Arduino1.0.3 Arduino C (LikeC) 1.Arduino 2.Arduino (1) #include<softwareserial.h>// SoftwareSerialmySerial(3,4);// Arduino RX,TX voidsetup() {//setup(), 10 逢甲大學學生報告 epaper(2012 年 )
//Openserialcommunicationsandwaitforporttoopen: Serial.begin(9600);//RS-232 while(serial){ ;//waitforserialporttoconnect.neededforleonardoonly } //setthedatarateforthesoftwareserialport myserial.begin(9600);//arduino } voidloop()//runoverandover {//loop(), RESET if(myserial.available())// Serial.write(mySerial.read());// myserial.read(), //Serial.write() if(serial.available())// myserial.write(serial.read());// Arduino } ///////////////////////////////////////////////////////////////////// ///////////// (2) #include<softwareserial.h> #include<liquidcrystal.h>// LCD SoftwareSerialmySerial(3,4);// Arduino RX,TX #definebuffsiz100// inti=0; charbuffer[buffsiz];//gps char*parseptr;// charbuffidx;// uint8_thour,minute,second;// uint32_tlatitude,longitude;//, charlatdir,longdir;// charstatus; charf; LiquidCrystallcd(5,6,7,8,9,10,11);// LCD //LCD Arduino : 11 逢甲大學學生報告 epaper(2012 年 )
//LiquidCrystal(RS,RW,Enable,D4,D5,D6,D7) voidsetup() {//setup(), //Openserialcommunicationsandwaitforporttoopen: Serial.begin(9600);//RS-232 while(serial){ ;//waitforserialporttoconnect.neededforleonardoonly //setthedatarateforthesoftwareserialport myserial.begin(9600); lcd.begin(16,2);// LCD } voidloop()//runoverandover {//loop(), RESET uint32_ttmp; readline();// NMEA if(strncmp(buffer,"$gprmc",6)==0)// GPRMC //GPRMC : GNSS //GPRMC /*$GPRMC,090902.000,A,2410.8189,N,12038.9887,E,0.00,359.21,241212,,,A *6F $GPRMC RMC 090902.000 (.) A (A=,V=) 2410.8189 (.) N ((N)(S)) 12038.9887 (.) E ((E)(W)) 0.00 (0.0 1851.8 ) 359.21 (()) 241212 () */ {//hhmmsstimedata parseptr=buffer+7; tmp=parsedecimal(parseptr);// 12 逢甲大學學生報告 epaper(2012 年 )
hour=(tmp/10000+8)%24;// 2,, minute=(tmp/100)%100;//+8 second=tmp%100; parseptr=strchr(parseptr,',')+1;// status=parseptr[0]; parseptr+=2; //latitude latitude=parsedecimal(parseptr); if(latitude=0) { latitude*=10000; parseptr=strchr(parseptr,'.')+1; latitude+=parsedecimal(parseptr); } parseptr=strchr(parseptr,',')+1; //readlatituden/sdata if(parseptr[0]=',') latdir=parseptr[0]; //longitude parseptr=strchr(parseptr,',')+1; longitude=parsedecimal(parseptr); if(longitude=0) { longitude*=10000; parseptr=strchr(parseptr,'.')+1; longitude+=parsedecimal(parseptr); } parseptr=strchr(parseptr,',')+1; //readlongitudee/wdata if(parseptr[0]=',') longdir=parseptr[0]; //,,, Serial.print("Time:"); Serial.print(hour,DEC);Serial.print(':'); Serial.print(minute,DEC);Serial.print(':'); Serial.println(second,DEC); 13 逢甲大學學生報告 epaper(2012 年 )
// Serial.print("Lat:"); if(latdir=='n') Serial.print('N'); elseif(latdir=='s') Serial.print('S'); //, Serial.print(latitude/1000000,DEC);Serial.print('/'); Serial.print((latitude/10000)%100,DEC);Serial.print('/'); Serial.println((latitude%10000)*6/1000,DEC); // Serial.print("Long:"); if(longdir=='e') Serial.print('E'); elseif(longdir=='w') Serial.print('W'); //, Serial.print(longitude/1000000,DEC);Serial.print('/'); Serial.print((longitude/10000)%100,DEC);Serial.print('/'); Serial.println((longitude%10000)*6/1000,DEC); i=second%2;/* LCD, i, */ if(i==0) {//, lcd.clear();// LCD lcd.print("time:"); lcd.print(hour,dec);lcd.print(':'); lcd.print(minute,dec);lcd.print(':'); lcd.print(second,dec); second=second++; } else {//, lcd.clear();// LCD 14 逢甲大學學生報告 epaper(2012 年 )
lcd.print("lon:n");lcd.print(latitude/1000000,dec); lcd.print("."); lcd.print((latitude/10000)%100,dec); lcd.print((latitude/10000)*6/1000,dec); lcd.setcursor(0,1); delay(50);// 0.05, Arduino lcd.print("lat:e");lcd.print(longitude/1000000,dec); lcd.print("."); lcd.print((longitude/10000)%100,dec); lcd.print((longitude/10000)*6/1000,dec); } } } voidreadline(void) {// NMEA charc; buffidx=0;//startatbegninning if(myserial.available()) { while(1) { c=myserial.read(); if(c==-1) continue; if(c=='\n') continue; if((buffidx==buffsiz-1) (c=='\r'))//\r { buffer[buffidx]=0; return; } buffer[buffidx++]=c; } } } 15 逢甲大學學生報告 epaper(2012 年 )
uint32_tparsedecimal(char*str)// { uint32_td=0; while(str[0]=0) { if((str[0]>'9') (str[0]<'0')) returnd; d*=10; d+=str[0]-'0'; str++; } returnd; }. 1. GOOGLEMAP 16 逢甲大學學生報告 epaper(2012 年 )
2. (1): (2)GPS :(GPS) 17 逢甲大學學生報告 epaper(2012 年 )
18 逢甲大學學生報告 epaper(2012 年 ) (3)Arduino : GPS (4)LCD :LCD, LCD
3.( LCD) (1) GPS GPS(GlobalPositionSystem),,(Satellite),.GPS,,,,,, 3, GPS 4, 4,. (2): GPS, GPS ( TX) Arduino (Arduino RX ),Arduino ( TX) USB( RS232)( RX),, LCD,LCD,,(,), LCD. 19 逢甲大學學生報告 epaper(2012 年 )
(3) 20 逢甲大學學生報告 epaper(2012 年 )
(4) (5)_1 21 逢甲大學學生報告 epaper(2012 年 )
(5)_2 (6) 22 逢甲大學學生報告 epaper(2012 年 )
23 逢甲大學學生報告 epaper(2012 年 ) 4.( LCD) (1):,+8 (2): 3, GPS 4, 4,
(3) GPS,. Arduino LCD GPS GPS,, GPS. GPS, GPS, 11. GPS, Arduino,,,, GPS,, GPS,. GPS () GoogleMap, LCD,, googlemap,,. 24 逢甲大學學生報告 epaper(2012 年 )
.GPS GOOGLEMAP( ) (1) (2) (3) 25 逢甲大學學生報告 epaper(2012 年 )
(4) 26 逢甲大學學生報告 epaper(2012 年 )
27 逢甲大學學生報告 epaper(2012 年 ). 1. (1)( LCD) (2) ()_1
(2)()_2 (3) 28 逢甲大學學生報告 epaper(2012 年 )
(4)( VisualGPS,) 2. (1)( LCD),, GPS 29 逢甲大學學生報告 epaper(2012 年 )
(2)() (3) 30 逢甲大學學生報告 epaper(2012 年 )
31 逢甲大學學生報告 epaper(2012 年 ) (4) RealTerm (5) Arduino SerialMonitor
32 逢甲大學學生報告 epaper(2012 年 ) (6) LCD [] [] (7) GOOGLEMAP(NOTDONE)
參考文獻 1. 最簡單的互動設計 Arduino 一試就上手 作者 : 孫駿榮 吳明展 盧聰勇 http://www.books.com.tw/exep/prod/booksfile.php?item=0010491102 33 逢甲大學學生報告 epaper(2012 年 )