Có rất nhiều vệ tinh GPS xung quanh Trái đất được sử dụng để cung cấp vị trí chính xác của bất kỳ nơi nào. Cùng với tọa độ vị trí (Vĩ độ và Kinh độ), nó cũng cung cấp các dữ liệu khác như thời gian, ngày tháng, độ cao, góc theo dõi hướng, v.v. Chúng tôi đã học cách đọc dữ liệu GPS này từ Vệ tinh bằng Arduino. Vì vậy, chúng tôi sẽ tạo đồng hồ GPS bằng cách sử dụng dữ liệu 'Thời gian và Ngày' từ vệ tinh GPS. Đồng hồ cập nhật GPS rất chính xác và cung cấp dữ liệu thời gian thực với độ chính xác đến từng mili giây.
Các thành phần:
- Arduino Uno
- Mô-đun GPS
- LCD 16x2
- Kết nối dây
- Nguồn cấp
Giải thích làm việc:
Mô-đun GPS gửi dữ liệu ở định dạng NMEA, xem kết quả đầu ra của dữ liệu GPS trong ảnh chụp màn hình bên dưới. Định dạng NMEA bao gồm một số câu, trong đó chúng ta cần một câu để trích xuất Ngày và Giờ. Câu này bắt đầu từ $ GPRMC và chứa tọa độ, thời gian và các thông tin hữu ích khác. Đây $ GPRMC được gọi GPS cụ thể đề nghị tối thiểu / dữ liệu Transit, và độ dài của chuỗi này là khoảng 70 ký tự. Trước đây chúng tôi đã trích xuất chuỗi $ GPGGA trong Hệ thống Theo dõi Xe để tìm Tọa độ Vĩ độ và Kinh độ. Đây là đầu ra GPS:
Và chuỗi $ GPRMC chủ yếu chứa vận tốc, thời gian, ngày tháng và vị trí
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4.084.4.230394.003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, vĩ độ, N, kinh độ, E, tốc độ, góc, ngày, MV, W, CMD
Định danh |
Sự miêu tả |
RMC |
Đề xuất Câu tối thiểu C |
HHMMSS.SSS |
Thời gian ở định dạng giờ phút giây và mili giây. |
A |
Trạng thái // A = active và V = void |
Vĩ độ |
Vĩ độ 49 độ. 16,45 phút. Bắc |
N |
Hướng N = Bắc, S = Nam |
Kinh độ |
Kinh độ (Tọa độ) |
E |
Hướng E = Đông, W = Tây |
Tốc độ |
tốc độ tính bằng hải lý |
Góc |
Theo dõi góc độ |
Ngày |
DATE theo giờ UTC |
MV |
Biến đổi từ tính |
W |
Hướng biến thiên E / W |
CMD (* 6A) |
Dữ liệu Checksum |
Chúng ta có thể trích xuất Ngày và Giờ từ chuỗi $ GPRMC bằng cách đếm các dấu phẩy trong chuỗi. Với sự trợ giúp của Arduino và lập trình, chúng tôi tìm thấy chuỗi $ GPRMC và lưu trữ nó trong một mảng, sau đó Thời gian (định dạng 24 giờ) có thể được tìm thấy sau một dấu phẩy và Ngày có thể được tìm thấy sau chín dấu phẩy. Ngày và giờ được lưu thêm trong chuỗi.
Vệ tinh GPS cung cấp Ngày và Giờ theo Giờ Phối hợp Quốc tế (UTC), vì vậy chúng ta cần chuyển đổi nó cho phù hợp. Để chuyển đổi theo giờ Ấn Độ, chúng tôi đã thêm 5:30 theo giờ UTC, vì giờ Ấn Độ trước UTC / GMT 5 tiếng rưỡi.
Sơ đồ mạch:
Các kết nối mạch của Đồng hồ GPS Arduino rất đơn giản. Arduino được sử dụng để điều khiển toàn bộ quá trình, nó nhận dữ liệu GPS từ vệ tinh thông qua mô-đun GPS, trích xuất Ngày và Giờ từ chuỗi $ GPRMC và hiển thị trên màn hình LCD.
Các chân dữ liệu D4, D5, D6, D7 của LCD 16x2 được kết nối với chân số. 5, 4, 3, 2 của Arduino và chân lệnh RS và EN của LCD được kết nối tương ứng với chân 7 và 6 của Arduino. Bộ thu GPS Chân mô-đun Tx được kết nối với chân Rx 10 của Arduino. Mã PIN mặt đất của Arduino và GPS được kết nối với nhau. Ở đây chúng tôi đã sử dụng mô-đun SKG13BL GPS, hoạt động ở tốc độ truyền 9800 bps. Arduino cũng được cấu hình ở tốc độ truyền 9800 bps bằng cách sử dụng hàm “Serial.begin (9800)”.
Giải thích lập trình:
Trong phần lập trình đầu tiên, chúng tôi bao gồm các thư viện và xác định các chân cho giao tiếp nối tiếp LCD và phần mềm. Cũng xác định một số biến với các mảng để lưu trữ dữ liệu. Bằng cách sử dụng Thư viện nối tiếp phần mềm tại đây, chúng tôi đã cho phép giao tiếp nối tiếp trên chân 10 và 11, đồng thời đặt chúng thành Rx và Tx tương ứng. Theo mặc định, chân 0 và 1 của Arduino được sử dụng để giao tiếp nối tiếp nhưng bằng cách sử dụng thư viện SoftwareSerial, chúng tôi có thể cho phép giao tiếp nối tiếp trên các chân kỹ thuật số khác của Arduino
#include
Sau khi nó, chúng tôi đã khởi tạo giao tiếp nối tiếp và LCD trong chức năng thiết lập và hiển thị thông báo chào mừng trên màn hình LCD.
Sau đó, chúng tôi đã trích xuất thời gian và ngày biểu mẫu chuỗi nhận được.
trong khi (x
Và sau đó chuyển đổi ngày và giờ thành số thập phân và sửa đổi nó thành giờ Ấn Độ (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int Ngày = UTC_date.toInt (); int Tháng = UTC_month.toInt ();……………
Và cuối cùng thì Giờ và Ngày đã được hiển thị trên màn hình LCD bằng chức năng lcd.print , hãy kiểm tra Mã đầy đủ bên dưới.