Lấy vị trí GPS từ các mô-đun GPS U-blox Neo-6 và Neo-7 với Arduino
Dự án này trình bày cách kết nối mô-đun GPS U-blox Neo-6M hoặc Neo-7M với Arduino để lấy dữ liệu vị trí (vĩ độ và kinh độ). Các mô-đun giá rẻ này, có sẵn trực tuyến, cung cấp một cách đơn giản để thêm chức năng GPS vào các dự án của bạn. Đèn LED màu xanh đặc trưng trên Neo-7M (trong video tại 02:53) báo hiệu tín hiệu GPS đã khóa, một tính năng tiện lợi để xác nhận việc thu tín hiệu.
Dưới đây là một số ý tưởng dự án sử dụng mô-đun GPS và Arduino:
- Thiết bị theo dõi GPS: Ghi lại dữ liệu vị trí và hiển thị trên bản đồ.
- Công cụ Geocaching: Điều hướng đến các tọa độ cụ thể.
- Điều hướng phương tiện tự động: Dẫn đường cho robot hoặc drone.
- Trạm thời tiết: Thêm dữ liệu vị trí vào các chỉ số thời tiết.
- Theo dõi động vật hoang dã: Giám sát chuyển động của động vật.
Phần cứng/Linh kiện
- Arduino Uno (hoặc bo mạch tương thích)
- Mô-đun GPS U-blox Neo-6M hoặc Neo-7M
- Dây jumper
- Cáp USB
- (Tùy chọn) Ăng-ten ngoài và đầu nối SMA
Hướng dẫn đấu dây
Việc đấu dây rất đơn giản (trong video tại 10:39):
%%WIRING%%
- Chân VCC của GPS đến chân 3.3V của Arduino
- Chân GND của GPS đến chân GND của Arduino
- Chân TX của GPS đến chân 3 của Arduino (được định nghĩa là RX trong mã)
- Chân RX của GPS đến chân 4 của Arduino (được định nghĩa là TX trong mã)
Hãy nhớ rằng, TX kết nối với RX và ngược lại (trong video tại 11:10). Video cũng hướng dẫn cách sử dụng dây jumper đơn giản cho các kết nối (trong video tại 10:24).
Giải thích mã
Dự án này sử dụng thư viện TinyGPS++. Tải xuống và cài đặt nó thông qua trình quản lý thư viện của Arduino IDE. Các điều chỉnh mã thiết yếu là định nghĩa chân serial mềm và tốc độ baud (trong video tại 07:00):
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600; // Mặc định cho các mô-đun U-blox
Các biến RXPin và TXPin định nghĩa các chân Arduino kết nối với mô-đun GPS. Tốc độ baud mặc định cho các mô-đun U-blox là 9600. Phần cốt lõi của mã nằm ở việc đọc dữ liệu serial từ GPS và phân tích nó bằng thư viện TinyGPS++ (trong video tại 08:03):
// Đối tượng TinyGPS++
TinyGPSPlus gps;
// Kết nối serial với thiết bị GPS
SoftwareSerial ss(RXPin, TXPin);
// ... (bên trong hàm loop) ...
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();
Hàm displayInfo() sau đó trích xuất và in vĩ độ cùng kinh độ bất cứ khi nào có tín hiệu GPS hợp lệ (trong video tại 09:07):
void displayInfo()
{
// ... mã khác ...
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6); // Vĩ độ với 6 chữ số thập phân
Serial.print(F(","));
Serial.print(gps.location.lng(), 6); // Kinh độ với 6 chữ số thập phân
}
// ... mã khác ...
}
Dự án/Demo trực tiếp
Video (trong video tại 12:29) trình bày dự án hoạt động, hiển thị đầu ra "INVALID" ban đầu khi không có tín hiệu GPS và sau đó hiển thị tọa độ hợp lệ khi đã khóa được tín hiệu. Đèn LED xanh nhấp nháy trên Neo-7M cung cấp xác nhận trực quan về tín hiệu GPS (trong video tại 13:49).
Chương
- [00:00] Giới thiệu và Tổng quan dự án
- [00:32] Các biến thể mô-đun GPS (Neo-6M và Neo-7M)
- [04:30] Đấu dây mô-đun GPS với Arduino
- [06:12] Giải thích mã và thư viện TinyGPS++
- [10:07] Giải thích chi tiết về đấu dây và nguyên lý TX/RX
- [12:29] Demo trực tiếp và thu tín hiệu
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
* Original library source: https://github.com/mikalhart/TinyGPSPlus
This sample sketch demonstrates the normal use of a TinyGPSPlus object.
It requires the use of SoftwareSerial, and assumes that you have a
4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).
Modified by Ahmad Shamshiri for Robojax.com
on September 09, 2018 at 20:20 in Ajax, Ontario, Canada
Watch video instructions for this code:https://youtu.be/hbRpr1HbDf8
*/
static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
void setup()
{
Serial.begin(115200);
ss.begin(GPSBaud);
Serial.println(F("Robojax GPS Demo"));
Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
Serial.println(F("by Mikal Hart"));
Serial.println();
}
void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while(true);
}
delay(100);
}
void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
Tài nguyên & tài liệu tham khảo
-
Bên ngoàiGet TinyGPSPlus (from GitHub)github.com
-
Bên ngoàiOfficial TinyGPSPlus Websitearduiniana.org
-
Bên ngoàiUblox websiteu-blox.com
Tập tin📁
Các tập tin khác
-
GPS TinyGPSPlus NEO-7 DataSheetDatasheet for the u-blox NEO-7 GPS module, a compact GNSS receiver with high sensitivity and low power consumption. It provides positioning data via UART and is commonly used with Arduino and the TinyGPSPlus library.
robojax_GPS_TinyGPSPlus_NEO-7_DataSheet.pdf1.73 MB