- Các thành phần bắt buộc:
- Sơ đồ mạch và giải thích: -
- Nhận Dữ liệu Vị trí từ GPS:
- Các bước để giao diện GPS với Vi điều khiển PIC: -
- Giải thích mã:
GPS là dạng viết tắt của Hệ thống Định vị Toàn cầu. Đây là một hệ thống cung cấp chính xác Cao độ, Vĩ độ, Kinh độ, giờ UTC và nhiều thông tin khác, được lấy từ 2, 3, 4 hoặc nhiều vệ tinh hơn. Để đọc dữ liệu từ GPS, chúng tôi cần một số Vi điều khiển và chúng tôi đã kết nối GPS với Arduino và với Raspberry Pi.
Chúng tôi đã chọn mô-đun GPS G7020 do U-blox sản xuất. Chúng tôi sẽ nhận được Kinh độ và vĩ độ của một vị trí cụ thể từ vệ tinh và sẽ hiển thị giống nhau trên màn hình LCD 16x2 Ký tự. Vì vậy ở đây chúng ta sẽ giao diện GPS với vi điều khiển PIC16F877A bằng vi mạch.
Các thành phần bắt buộc:
- Pic16F877A - gói PDIP40
- Bảng bánh mì
- Pickit-3
- Bộ chuyển đổi 5V
- LCD JHD162A
- mô-đun GPS uBLOX-G7020
- Dây kết nối thiết bị ngoại vi.
- Điện trở 4,7k
- Hủ 10k
- Tinh thể 20mHz
- 2 chiếc tụ gốm 33pF
Sơ đồ mạch và giải thích: -
LCD 16x2 ký tự được kết nối qua vi điều khiển PIC16F877A, trong đó RB0, RB1, RB2 được kết nối tương ứng với chân LCD là RS, R / W và E. RB4, RB5, RB6 và RB7 được kết nối qua 4 chân D4, D5 của LCD, D6, D7. Màn hình LCD được kết nối ở chế độ 4bit hoặc chế độ nibble. Tìm hiểu thêm về giao tiếp LCD với Vi điều khiển PIC.
Một bộ tạo dao động tinh thể tần số 20MHz với hai tụ gốm 33pF được kết nối qua chân OSC1 và OSC2. Nó sẽ cung cấp tần số xung nhịp không đổi 20 MHz cho vi điều khiển.
uBlox-G7020 mô-đun GPS, nhận và truyền dữ liệu bằng UART. PIC16F877A bao gồm một trình điều khiển USART bên trong chip, chúng tôi sẽ nhận dữ liệu từ mô-đun GPS bằng USART, vì vậy một kết nối chéo sẽ được thực hiện từ chân Rx của vi điều khiển đến chân Tx của GPS và chân Nhận USART được kết nối qua chân Truyền của GPS.
UBlox-G7020 có mã màu cho các chân cắm. Chân Dương hoặc 5V có màu Đỏ, chân Âm hoặc GND có màu Đen và chân Truyền có màu Xanh lam.
Tôi đã kết nối tất cả những thứ này trong breadboard.
Nhận Dữ liệu Vị trí từ GPS:
Hãy xem cách giao tiếp GPS bằng USART và xem kết quả trong màn hình LCD 16x2 ký tự.
Mô-đun sẽ truyền dữ liệu theo nhiều chuỗi với tốc độ 9600 Baud. Nếu chúng tôi sử dụng thiết bị đầu cuối UART với tốc độ 9600 Baud, chúng tôi sẽ thấy dữ liệu nhận được bằng GPS.
Mô-đun GPS gửi dữ liệu vị trí theo dõi thời gian thực ở định dạng NMEA (xem ảnh chụp màn hình ở trên). Định dạng NMEA bao gồm một số câu, trong đó bốn câu quan trọng được đưa ra dưới đây. Bạn có thể xem thêm chi tiết về câu NMEA và định dạng dữ liệu của nó tại đây.
- $ GPGGA: Dữ liệu sửa chữa hệ thống định vị toàn cầu
- $ GPGSV: Các vệ tinh GPS trong chế độ xem
- $ GPGSA: GPS DOP và các vệ tinh đang hoạt động
- $ GPRMC: Dữ liệu GPS / Phương tiện công cộng tối thiểu được đề xuất
Tìm hiểu thêm về dữ liệu GPS và chuỗi NMEA tại đây.
Đây là dữ liệu nhận được bằng GPS khi kết nối với tốc độ 9600 baud.
$ GPRMC, 141848,00, A, 2237.63306, N, 08820.86316, E, 0,553, 100418,,, A * 73 $ GPVTG,, T,, M, 0,553, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237,63306, N, 08820.86316, E, 1,03,2.56,1,9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820.86316, E, 141848,00, A, A * 65
Khi chúng tôi sử dụng mô-đun GPS để theo dõi bất kỳ vị trí nào, chúng tôi chỉ cần tọa độ và chúng tôi có thể tìm thấy điều này trong chuỗi $ GPGGA. Chỉ chuỗi $ GPGGA (Dữ liệu sửa chữa hệ thống định vị toàn cầu) chủ yếu được sử dụng trong các chương trình và các chuỗi khác bị bỏ qua.
$ GPGGA, 141848.00,2237,63306, N, 08820.86316, E, 1,03,2.56,1,9, M, -54,2, M,, * 74
Ý nghĩa của dòng đó là gì?
Ý nghĩa của dòng đó là: -
1. Chuỗi luôn bắt đầu bằng dấu "$"
2. GPGGA là viết tắt của Global Positioning System Fix Data
3. Dấu phẩy “,” cho biết khoảng cách giữa hai giá trị
4. 141848.00: Giờ GMT là 14 (giờ): 18 (phút): 48 (giây): 00 (mili giây)
5. 2237,63306, N: Vĩ độ 22 (độ) 37 (phút) 63306 (giây) Bắc
6. 08820.86316, E: Kinh độ 088 (độ) 20 (phút) 86316 (giây) Đông
7. 1: Sửa Số lượng 0 = dữ liệu không hợp lệ, 1 = dữ liệu hợp lệ, 2 = sửa DGPS
8. 03: Số lượng vệ tinh đang xem.
9. 1.0: HDOP
10. 2,56, M: Độ cao (Độ cao trên mực nước biển tính bằng mét)
11. 1.9, M: Chiều cao Geoids
12. * 74: tổng kiểm tra
Vì vậy, chúng ta cần số 5 và số 6 để thu thập thông tin về vị trí mô-đun hoặc vị trí của nó.
Các bước để giao diện GPS với Vi điều khiển PIC: -
- Đặt cấu hình của bộ vi điều khiển bao gồm cấu hình Bộ tạo dao động.
- Đặt cổng mong muốn cho LCD bao gồm thanh ghi TRIS.
- Kết nối mô-đun GPS với bộ vi điều khiển bằng USART.
- Khởi tạo hệ thống USART ở chế độ nhận liên tục, với tốc độ truyền 9600 và LCD với chế độ 4bit.
- Lấy hai mảng ký tự tùy thuộc vào Độ dài của Vĩ độ và Kinh độ.
- Nhận từng bit một ký tự tại một thời điểm và kiểm tra xem nó có được bắt đầu từ $ hay không.
- Nếu $ Nhận thì nó là một chuỗi, chúng ta cần kiểm tra GPGGA, 5 chữ cái này và dấu phẩy.
- Nếu đó là GPGGA, thì chúng tôi sẽ bỏ qua thời gian và tìm Vĩ độ và Kinh độ, Chúng tôi sẽ lưu trữ Vĩ độ và Kinh độ trong hai mảng ký tự cho đến khi không nhận được N (Bắc) và E (Đông).
- Chúng tôi sẽ in mảng trong màn hình LCD.
- Xóa mảng.
Giải thích mã:
Chúng ta hãy xem xét từng dòng mã. Vài dòng đầu tiên là để thiết lập các bit cấu hình đã được giải thích trong hướng dẫn trước, vì vậy tôi đang bỏ qua chúng ngay bây giờ. Mã hoàn chỉnh được đưa ra ở cuối hướng dẫn này.
Năm dòng này được sử dụng để bao gồm các tệp tiêu đề thư viện, lcd.h và eusart.h tương ứng dành cho LCD và USART. Và xc.h dành cho tệp tiêu đề vi điều khiển.
#include
Trong hàm void main () , system_init () ; được sử dụng để khởi tạo LCD và USART.
Void main (void) { TRISB = 0x00; // Đặt làm đầu ra system_init ();
Các lcd_init (); và EUSART_Intialize (); được gọi từ hai thư viện lcd.h và eusart.h
void system_init (void) { lcd_init (); // Thao tác này sẽ khởi tạo lcd EUSART1_Initialize (); // Điều này sẽ khởi tạo Eusart }
Trong khi vòng lặp chúng ta phá vỡ chuỗi GPGGA để có được những kinh độ và vĩ độ phối hợp. Chúng tôi nhận từng bit một và so sánh nó với các ký tự riêng lẻ có trong chuỗi GPGGA.
Chúng tôi phá vỡ các mã chúng tôi sẽ nhận được: -
incomer_data = EUSART1_Read (); // Kiểm tra chuỗi '$ GPGGA,' / * ------------------------------ Từng bước tìm dòng GPGGA- --------------------------- * / if (incomer_data == '$') {// Câu lệnh đầu tiên của dữ liệu GPS bắt đầu bằng $ sign incomer_data = EUSART1_Read (); // Nếu if đầu tiên trở thành true thì giai đoạn tiếp theo if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'P'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// đầu tiên, đã nhận incomer_data = EUSART1_Read (); // Ở giai đoạn này Kiểm tra hoàn tất, GPGGA được tìm thấy.
Bằng cách sử dụng mã này, chúng tôi bỏ qua thời gian UTC.
while (incomer_data! = ',') {// bỏ qua Giờ GMT incomer_data = EUSART1_Read (); }
Mã này để lưu trữ dữ liệu Vĩ độ và Kinh độ trong mảng ký tự.
incomer_data = EUSART1_Read (); vĩ độ = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); vĩ độ = incomer_data; // Lưu trữ dữ liệu Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitude = incomer_data; // Lưu trữ dữ liệu Kinh độ } }
Và cuối cùng chúng tôi đã in kinh độ và vĩ độ trên màn hình LCD.
số_mảng = 0; lcd_com (0x80); // Dòng LCD một lựa chọn while (array_count <12) {// Mảng dữ liệu Latitude là 11 chữ số lcd_data (latitude); // In mảng dữ liệu Latitude_count ++; } array_count = 0; lcd_com (0xC0); // Lựa chọn dòng lcd hai trong khi (array_count <13) {// Mảng dữ liệu Kinh độ là 12 chữ số lcd_data (kinh độ); // In dữ liệu kinh độ mảng_count ++; }
Đây là cách chúng ta có thể giao tiếp mô-đun GPS với Vi điều khiển PIC để lấy Vĩ độ và kinh độ của vị trí hiện tại.
Toàn bộ mã và tệp tiêu đề được cung cấp bên dưới.