Arduino GPS

Trong hướng dẫn này, chúng ta sẽ học cách lấy tọa độ GPS (kinh độ, vĩ độ, độ cao), vận tốc GPS (km/h), và ngày giờ từ mô-đun GPS NEO-6M. Chúng ta cũng sẽ học cách tính khoảng cách từ vị trí GPS hiện tại đến một tọa độ GPS được định trước (ví dụ: tọa độ của London).

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×NEO-6M GPS module
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Giới thiệu về mô-đun GPS NEO-6M

Bố trí chân

Mô-đun GPS NEO-6M bao gồm 4 chân:

  • Chân VCC: cần được kết nối với VCC (5V)
  • Chân GND: cần được kết nối với GND (0V)
  • Chân TX: được sử dụng cho giao tiếp nối tiếp, cần được kết nối với chân RX Serial (hoặc SoftwareSerial) trên Arduino.
  • Chân RX: được sử dụng cho giao tiếp nối tiếp, cần được kết nối với chân TX Serial (hoặc SoftwareSerial) trên Arduino.
sơ đồ chân của module GPS neo-6m

Sơ đồ đấu dây

sơ đồ nối dây của module GPS Arduino

This image is created using Fritzing. Click to enlarge image

Xin lưu ý rằng mặc dù sơ đồ mạch được cung cấp ở trên có thể hoạt động, nhưng điều này không được khuyến nghị. Đầu TX của Arduino phát ra tín hiệu ở mức 5V, trong khi đầu RX của module GPS chỉ có thể nhận 3.3V. Để đảm bảo an toàn, nên sử dụng một bộ chia điện áp giữa đầu TX của Arduino và đầu RX của module GPS, như trong sơ đồ dưới đây.

sơ đồ nối dây cho bộ chia điện áp của mô-đun GPS Arduino

This image is created using Fritzing. Click to enlarge image

Mã Arduino

Đọc tọa độ GPS, tốc độ (km/h), và ngày giờ

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-gps */ #include <TinyGPS++.h> #include <SoftwareSerial.h> #define RX_PIN 4 // Arduino Pin connected to the TX of the GPS module #define TX_PIN 3 // Arduino Pin connected to the RX of the GPS module TinyGPSPlus gps; // the TinyGPS++ object SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // the serial interface to the GPS module void setup() { Serial.begin(9600); gpsSerial.begin(9600); // Default baud of NEO-6M GPS module is 9600 Serial.println(F("Arduino - GPS module")); } void loop() { if (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { if (gps.location.isValid()) { Serial.print(F("- latitude: ")); Serial.println(gps.location.lat()); Serial.print(F("- longitude: ")); Serial.println(gps.location.lng()); Serial.print(F("- altitude: ")); if (gps.altitude.isValid()) Serial.println(gps.altitude.meters()); else Serial.println(F("INVALID")); } else { Serial.println(F("- location: INVALID")); } Serial.print(F("- speed: ")); if (gps.speed.isValid()) { Serial.print(gps.speed.kmph()); Serial.println(F(" km/h")); } else { Serial.println(F("INVALID")); } Serial.print(F("- GPS date&time: ")); if (gps.date.isValid() && gps.time.isValid()) { Serial.print(gps.date.year()); Serial.print(F("-")); Serial.print(gps.date.month()); Serial.print(F("-")); Serial.print(gps.date.day()); Serial.print(F(" ")); Serial.print(gps.time.hour()); Serial.print(F(":")); Serial.print(gps.time.minute()); Serial.print(F(":")); Serial.println(gps.time.second()); } else { Serial.println(F("INVALID")); } Serial.println(); } } if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); }

Hướng dẫn từng bước

  • Mở Arduino IDE
  • Điều hướng đến biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “TinyGPSPlus”, sau đó tìm thư viện TinyGPSPlus do Mikal Hart
  • Nhấn nút Cài đặt để cài đặt thư viện TinyGPSPlus.
thư viện tinyGPS++ cho Arduino
  • Sao chép mã ở phía trên và mở bằng Arduino IDE
  • Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Xem kết quả trên Trình theo dõi nối tiếp:
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Tính khoảng cách từ vị trí hiện tại đến một vị trí được xác định trước

Đoạn mã dưới đây tính toán khoảng cách giữa vị trí hiện tại và Luân Đôn (vĩ độ: 51.508131, kinh độ: -0.128002)

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-gps */ #include <TinyGPS++.h> #include <SoftwareSerial.h> #define RX_PIN 4 // Arduino Pin connected to the TX of the GPS module #define TX_PIN 3 // Arduino Pin connected to the RX of the GPS module TinyGPSPlus gps; // the TinyGPS++ object SoftwareSerial gpsSerial(RX_PIN, TX_PIN); // the serial interface to the GPS module const double LONDON_LAT = 51.508131; const double LONDON_LON = -0.128002; void setup() { Serial.begin(9600); gpsSerial.begin(9600); // Default baud of NEO-6M GPS module is 9600 Serial.println(F("Arduino - GPS module")); } void loop() { if (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { if (gps.location.isValid()) { double latitude = gps.location.lat(); double longitude = gps.location.lng(); unsigned long distanceKm = TinyGPSPlus::distanceBetween(latitude, longitude, LONDON_LAT, LONDON_LON) / 1000; Serial.print(F("- latitude: ")); Serial.println(latitude); Serial.print(F("- longitude: ")); Serial.println(longitude); Serial.print(F("- distance to London: ")); Serial.println(distanceKm); } else { Serial.println(F("- location: INVALID")); } Serial.println(); } } if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); }

Hướng dẫn từng bước

  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Xem kết quả trên Serial Monitor:
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

WARNING

Hướng dẫn này đang được phát triển.

Bài hướng dẫn liên quan