PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Su Dung GPS Module (http://www.picvietnam.com/forum/showthread.php?t=12262)

longtu 22-12-2011 09:45 AM

Su Dung GPS Module
 
Chào các bạn,

Mình vừa có dịp làm việc với GPS module, một chút kinh nghiệm mình xin chia sẽ đến diễn đàn của chúng ta.

Mục đích:
- Giới thiệu loại GPS module rẻ và có bán ở VN, phù hợp với các ứng dụng nhỏ độ chính xác vừa phải.
- Cách kết nối phần cứng cho GPS module.
- Cách tách chuỗi dữ liệu cần thiết từ chuỗi dữ liệu của GPS module.
- Một số lưu ý khi vẽ mạch PCB

longtu 22-12-2011 10:07 AM

1. Một số loại GPS module
 
2 Attachment(s)
GPS module có các hãng thông dụng sau:
- Holux
- Globalsat
- Royaltek
- Skylap
- FTech
- Simcom
- ...
Tấc nhiên là tùy thuộc vào ứng dụng mà ta chọn loại GPS module phù hợp.
Nếu các bạn cần tư vấn chọn lựa GPS phù hợp hãy liên lạc với anh Linh: http://vn-et.com
Mình cũng đã từng nhờ anh Linh tư vấn chọn lựa loại GPS phù hợp, giá cả hợp lý. Nhân đây cũng xin cám ơn anh Linh, nhờ có anh mà mình đã làm xong sản phẩm của mình.

Mình giới thiệu một số loại GPS module giá thành hạ: Khoảng 300k-400K
- M89
- GR89
- UB93
Chú ý: Giá GPS module tăng dần theo thứ tự bên trên(chênh lệch nhau khoảng vài chụp ngàn).

Phụ kiền cần thiết cho GPS module:
- Ngoài GPS module, chúng ta cần phải có GPS anten. Có 2 loại External hay Internal anten
1. External anten: Nếu bạn chòn loại anten này phải cần mua thêm RC-C-SMA connector để có thể gắn trực tiếp trên mạch PCB. Xem hình External Anten.
2. Internal Anten: Xem hình ảnh Internal Anten. Với loại này, connector cho anten nay mình không tìm được, đành phải cắt bỏ connector này. Khi cắt bỏ đầu connector sẽ có: đây lõi(tín hiệu GPS-RF) + lưới bọc bên ngoài(nối mass).

longtu 22-12-2011 10:29 AM

2. Cách kết nối phần cứng tối thiểu để GPS hoạt động.
 
1 Attachment(s)
Mình làm việc với UB93 GPS module, vì vậy mình trình bày kết nối phần cứng cho module này. Loại module khác cũng sẽ tương tự.
- Kết nối phần cứng: Xem hình ảnh đính kèm.
Chú ý:
+ Tùy chọn sử dụng loại External hay Internal anten. Tuy nhiên, kinh nghiệm của mình thì Internal anten(nhỏ gọn, sắp xếp đặt được ngay trên mạch PCB được) hoạt động tốt không thua kém gì External(to, dây dài để có thể kéo ra bên ngoài).
+ Chân 1PPS: chân này được nối qua 1 Led. Ý nghỉa như su:
* Led tắt: chưa thu được tín hiệu từ vệ tinh.
* Led sáng: đang dò tìm tín hiệu từ vệ tinh
* Led chớp tắt: Tín hiệu thu được từ vệ tinh là tốt.
Khi kết nối GPS thành công, cứ khoảng 1s, GPS sẽ nhận được tín hiệu từ vệ tinh và khi đó ta chỉ cần quan sát Led này chớp tắt có nghỉa là việc thu tín hiệu đã tốt.
+ Chân TX0: Chân truyền dữ liệu từ GPS module. Để có thể xử lý data từ GPS module thông qua việc giao tiếp với Microcontroller, ta sẽ dụng chân này. Tuy nhiên, GPS module sử dụng 3.3V, microcontroller thông dụng lại là 5V. Vì vậy việc thêm 2 transistor(xem hình) là cần thiết.
Ngõ ra TX_GPS sẽ đuợc nối vào chân RX của microcontroller.

longtu 22-12-2011 11:11 AM

3. Cách tách data cần thiết từ chuỗi data nhận được từ Vệ tinh
 
Việc kết nối GPS module(chân TX0) với Microcontroller qua chân RX, ta sử dụng ngắt RDA để thực hiện việc lấy chuỗi data cũng như tách lấy dữ liệu cần lấy.
Ví dụ: Chuỗi data cần lấy:
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70
Ghi nhận:
*Sau dấu "," thứ nhất: Thông tin thời gian
*Sau dấu "," thứ 2: thông tin Latitude
*Sau dấu "," thứ 4: thông tin Longitude
* ....
Code:

char GPSbuffer[70];
char GPRMC[6]={"$GPRMC"};//Nếu muốn lấy chuỗi data ta GPRMC
char Comma_position[13];
int8 check= 0;
/* Find comma in GPS datas -------------*/
Void FindComma()
{
  int8 i, counter= 0;
  for(i= 0;i<70; i++)
  {
      if(GPSbuffer[i]== ',' )
        Comma_position[counter++]= i;
  }
}
/*Received data from GPS module: ------------*/
#INT_RDA
Void Receive_GPSbuffer()
{
  char c;
  c= getc();
  if(check == 69) return;
  GPSbuffer[check++]= getc();
  if(check<7)
  {
      if((GPSbuffer[check-1]) != (GPRMC[check-1]))
        check= 0;
  }
}
Void TimeGPS()//Vi dụ mang tính minh họa lấy thời gian từ GPS module.
{
  char i;
  i= Comma_position[0];  //ngay sau vị trí dấu , đầu tiên là thông tin THOI GIAN
  printf("TIME(HHMMSS): %c%c:%c%c:%c%c\r\n",GPSbuffer[i+1],GPSbuffer[i+2],
                                    GPSbuffer[i+3],GPSbuffer[i+4],
                                    GPSbuffer[i+5],GPSbuffer[i+6]);
 
  delay_ms(10);
}
Void LatitudeGPS()
{
char i;
 i= Comma_position[2];
...
}
Vode LongitudeGPS()
{
char i;
 i= Comma_position[4];
...
}
Void GetData()
{
  FindComma();
  TimeGPS(); 
  LatitudeGPS();//*Sau dấu "," thứ 2: thông tin Latitude
  LongitudeGPS();//*Sau dấu "," thứ 4: thông tin Longitude
  //...
  check= 0;//The next get GPS datas.
}

void main()
{
  if(check == 69) GetData();
}

Code trên, chỉ là để minh hoạ cách lấy data cũng như tách lấy data cần sử dụng. Các bạn thay đổi để phù hợp với ứng dụng của mình.

longtu 22-12-2011 11:21 AM

Tổng kết:
 
- Hy vọng qua các bài viết ở trên, các bạn có thể hiểu cách thức làm việc với GPS module. Từ đó tuỳ biến sử dụng cho sản phẩm của mình.
- Nếu có chổ nào chưa thật rõ ràng, các bạn cần thêm thông tin, hãy gửi email cho mình(xem chữ ký).

longtu 22-12-2011 03:24 PM

4. Một số lưu ý khi vẽ PCB
 
3 Attachment(s)
Một số chú ý khi vẽ PCB cho đường RF và các đặt GPS module trên mạch PCB.

lambaotrung 12-03-2012 10:30 PM

cũng rất cảm ơn bạn, nhưng mình đọc đi đọc lại bài viết của bạn máy lần..... nhưng minh chưa biết làm thế nào.... kết nói kiễu sao với PIC hay là loại VĐK nào...

vd: bạn có thể đưa lên 1 bài về những gì bạn đạt dc ở một modell cụ thể ra làm sao. và bạn đã dạt đến mức nào..

trong diễn đàn cũng có 1 bạn cũng muốn tiềm hiểu về GPS về hiễn thi tọa đô lên màn hình LCD. để đạt dc như thế mình làm sao bạn có thể giúp thêm ko.


ví dụ modell GPS kết nói với VDK kiểu gì loại gì.....

và giá trị của modell GPS đưa cho vi điều khiển dưới dạng nào... ..


mong bạn giúp nhiều hơn. chân thành cảm on.

longtu 13-03-2012 09:42 AM

Trả lời bạn Lâm Bảo Trung
 
Chào Trung, mình trả lời các câu hỏi của bạn ở dưới email của bạn:

[Lâm Bảo Trung]:cũng rất cảm ơn bạn, nhưng mình đọc đi đọc lại bài viết của bạn máy lần..... nhưng minh chưa biết làm thế nào.... kết nói kiễu sao với PIC hay là loại VĐK nào...
[Tuân 2012.03.13]: Trung để ý, mình cũng đã gửi schematic cho việc kết nối giữa GPS module và Microcontroller PIC(Microcontroller khác cũng tương tự). Việc giao tiếp giữa GPS và Microcontroller chỉ đơn giãn qua chân TX. Chú ý mức điện áp chỉ 3.3V cho GPS và thường 5V cho Microcontroller(xem hình ảnh schematic đã gửi).

[Lâm Bảo Trung]:vd: bạn có thể đưa lên 1 bài về những gì bạn đạt dc ở một modell cụ thể ra làm sao. và bạn đã dạt đến mức nào..
[Tuân 2012.03.13]: Bạn mong muốn gì ở GPS module, phải chăng là lấy và sử dụng được các thông tin nhận được từ vệ tinh thông qua GPS module này: thời gian, kinh đọ, vĩ độ... Bài viết của mình đã làm được điều này rồi mà. Bạn cần xem lại đoạn code mình đã gửi lên diễn dàn, đó là code tham khảo để lấy các thông tin từ vệ tinh. Còn mục đích sử dụng thì tùy vào ứng dụng, tùy vào mục đích của bạn.

[Lâm Bảo Trung]:trong diễn đàn cũng có 1 bạn cũng muốn tiềm hiểu về GPS về hiễn thi tọa đô lên màn hình LCD. để đạt dc như thế mình làm sao bạn có thể giúp thêm ko.
[Tuân 2012.03.13]: Việc hiển thị tọa độ lên LCD cũng đơn giản như bạn muốn hiển thị 1 data nào đó lên LCD mà thôi. Bạn đã làm được đến đâu(xem các câu hỏi bên dưới)?:
- Microcontroller mà ban tìm hiểu là gì(PIC, AVR, AMR...)?
- Bạn đã sử dụng được LCD với Microcontroller chưa?
Tiếp theo bạn thay data ở trên bởi dữ liệu là tọa độ rồi cho LCD hiển thị thôi.

[Lâm Bảo Trung]:ví dụ modell GPS kết nói với VDK kiểu gì loại gì.....
[Tuân 2012.03.13]: Hình như bạn không đọc kỹ bài viết của mình, không xem các hình ảnh dính kèm về schematic...
[Lâm Bảo Trung]:và giá trị của modell GPS đưa cho vi điều khiển dưới dạng nào... ..
[Tuân 2012.03.13]: Hình như bạn không đọc kỹ bài viết của mình, không xem các hình ảnh dính kèm về schematic, đoạn code minh họa...

mong bạn giúp nhiều hơn. chân thành cảm on.
[Tuân 2012.03.13]: Không ai giúp bạn được nếu như bạn chưa thật sự cố gắng, chưa tìm hiểu kỹ. Tấc cả các câu hỏi trên của bạn mình cho rằng bài viết của mình đã trả lời được hết rồi, hãy đặt câu hỏi cho đúng vấn đề, tấc cả mọi người trên diễn dàn này đều sẵn sàng giúp đở.

lambaotrung 14-03-2012 10:06 PM

máy bác ơi cho em làm phiền.....

cái chuyện làm modull để từ từ rành rẻ về PIC thì hay làm. bày giờ em muốn làm 1 bài tập về truyền nhận dữ liệu từ PIC này sang PIC kia ( PIC1 đến PIC2) qua cổng RS232.

em truyền 1 số "123 " , hay 1 chử cái " A " đi và dùng ngắt RDA thì mình làm tốt và hiện thị giá trị lên LCD tốt.

nhưng khi em truyền 1 mãng char string[]=" PICVIETNAM ";
dùng lệnh Printf(string); nói chung thì no truyền đi dc.

nhưng ở phần PIC nhận thì em chỉ nhận dc có chứ "P" khi em dùng lệnh

IN=getc(); thì chi hiện chử 'P' á. . // khai bao char IN[10];

khi dùng lệnh gets(IN); thì nó đơ luôn. ko hiện hồn chử gì lên LCD cả.

các bác giúp em chổ này và bác Longtu ơi bác giúp noi rõ hơn về việc tìm dấu " , ". nhé anh. thật tình thi em chậm tiêu lam. đoạn code của bác em đọc tởi đọc lui 2 ngày mà chưa nghộ ra dc nhiều.


em kết nói 8bit với LCD qua portD.

tienchuan 17-03-2012 12:22 AM

Trích:

Nguyên văn bởi lambaotrung (Post 54834)
máy bác ơi cho em làm phiền.....

cái chuyện làm modull để từ từ rành rẻ về PIC thì hay làm. bày giờ em muốn làm 1 bài tập về truyền nhận dữ liệu từ PIC này sang PIC kia ( PIC1 đến PIC2) qua cổng RS232.

em truyền 1 số "123 " , hay 1 chử cái " A " đi và dùng ngắt RDA thì mình làm tốt và hiện thị giá trị lên LCD tốt.

nhưng khi em truyền 1 mãng char string[]=" PICVIETNAM ";
dùng lệnh Printf(string); nói chung thì no truyền đi dc.

nhưng ở phần PIC nhận thì em chỉ nhận dc có chứ "P" khi em dùng lệnh

IN=getc(); thì chi hiện chử 'P' á. . // khai bao char IN[10];

khi dùng lệnh gets(IN); thì nó đơ luôn. ko hiện hồn chử gì lên LCD cả.

các bác giúp em chổ này và bác Longtu ơi bác giúp noi rõ hơn về việc tìm dấu " , ". nhé anh. thật tình thi em chậm tiêu lam. đoạn code của bác em đọc tởi đọc lui 2 ngày mà chưa nghộ ra dc nhiều.


em kết nói 8bit với LCD qua portD.

đọc xog bài của bạn mih cũng đơ lun, hehe :D
bây h bạn làm từ từ cho hắn khỏi đơ :D
bạn muốn kiểm tra bên gởi đã gởi được hay chưa thì test qua Hyper Terminal đã nhé, nếu nhận OK hết rồi hãy kết nối với PIC để xử lý
Bên Pic nhận thì làm ngược lại, lấy Hyper gởi xuống chuỗi gì đó rồi cho hiện lên LCD
Xong 2 cái, bạn cắm lại vs nhau là OK thôi,
Nhớ đấu chéo 2 dây TX và RX nhé
p/s: bày vẻ bạn đủ thứ để cho có việc làm+ lần sau nên tạo chủ đề mới để hỏi nhé, làm loãng topic của a longtu :D
Thân.

lambaotrung 19-03-2012 11:37 AM

cám ơn các anh.

hiện em đã làm tốt việc nhận và xử lý tách chuổi dữ liệu qua rs232 giữa 2 PIC. côi như phần cần cơ bản em đã làm xong.

bày giờ quay lại đoạn chuỗi giữ liệu của bác Longtu.
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70

sau dấu ',' thứ 1: là thời gian ok em hiểu.
sau dấu ',' thứ 2: là vĩ độ " latitude " A,5133.82 đoạn này em ko hiểu.
sau dấu ',' thứ 4: là kinh độ " longitude" N,00042.24 đoạn này cũng ko hiểu.

ở 2 đoạn kia là các con số phần tích thế nào anh longtu. nếu như ở miền nàm thi nằm trong khoảng
- longitude: 105 độ, 55' 37.04" E.
- latitude: 10 độ 08' 59.07" N. " là tọa độ của máy tính em cung cấp vì máy laptop có card wwan + GPS.

như vậy em so sanh với đoạn code cua modull GPS đưa ra thì em ko hiểu luôn.. híc bác longtu giúp em. giải thích thêm nhe. cảm ơn bác longtu và các bác đã có những lời khuyên cho em và em đã thành công. hihi

tienchuan 19-03-2012 11:09 PM

@ Trung : vì làm code minh họa ví dụ nên chắc a longtu ghi nhầm đó, bạn cộng thêm 1 để lấy các giá trị đó, tức vĩ độ sau dấu phẩy thứ 3, kinh độ sau dấu phẩy thứ 5,... còn chữ A sau chuỗi thời gian báo hiệu cho biết thời gian thu được có hợp lệ hay chưa (A: có,V:ko),còn các chữ cái N - Bắc; W - Tây; E - Đông; S - Nam để chỉ hướng.
Bạn coi thêm định dạng chuỗi GPRMC trong chuẩn NMEA quy định để biết thông tin của chuỗi.
Còn về vấn đề tọa độ của Module gởi về , ở đây mih nói module sim 548C vì đang dùng, nếu dùng module khác, bạn coi datasheet module gởi về chuẩn gì, tra chuẩn, để biết thông tin của chuỗi.
Ở đây mih lấy cái chuỗi ở trên làm lun, chuỗi GPRMC.
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70
Trong đó:
+ kinh độ(ddmm.mmmm) : 5133.82=51 độ+33.82 phút=51,5637độ
+vĩ độ(dddmm.mmmm):00042.24=0 độ+ 42.24 phút=0,704độ
Sau lên gg sợt cái là qua tới bên London lun, chắc nhà a longtu ở gần đó :D
p/s:mọi người coi giúp e đổi đúng chưa mà sao đi xa quá :D

lambaotrung 20-03-2012 09:44 AM

chưa hiễu về công thức tính toán kinh độ ,vĩ độ cũa bác.

kinh độ: (ddmm.mmmm): " độ độ phút phút. phút phút phút phút ".
cách quy đổi 5133.82= 51 độ+ 33.82 phút =51,5637 độ bác....
em chưa hiểu, bác nói rõ hơn về cách tính đi.

bac nay len GG lam sao search ra vi tri cua minh test xem minh dung hay sai bac.

em dung URL nay tim ma ko dc: http://www.google.com/maps?q=[1]+[2]&t=m&z=16
[1] kinh do= 5133.82
[2] vi do= 00042.24

e dua du lieu nhu tren vao doan URL kia ong GG bo tay.

lambaotrung 20-03-2012 11:23 AM

may bac oi trong protues cua minh co mo phong dc su giao tiep truyen thong RS232 giua Microcontroller va PC ko cac bac.. chi giup em nha hom bua em len youtube em xem 1 doan video anh kia lam dc chuyen do. ket hop voi mot phan mem viec bang Visua C# de goi 1 chuoi qua RS232 nhung chi la ao. thui.

longtu 20-03-2012 02:15 PM

Trích:

Nguyên văn bởi lambaotrung (Post 54958)
may bac oi trong protues cua minh co mo phong dc su giao tiep truyen thong RS232 giua Microcontroller va PC ko cac bac.. chi giup em nha hom bua em len youtube em xem 1 doan video anh kia lam dc chuyen do. ket hop voi mot phan mem viec bang Visua C# de goi 1 chuoi qua RS232 nhung chi la ao. thui.

To Trung: Trung tạo 1 luồng khác về vấn đề nay nhé. Luồng này, nên chỉ nói về GPS thôi.


Múi giờ GMT. Hiện tại là 07:08 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam