Mạch định vị GPS GY-NEO 6M V2 là module định vị toàn cầu sử dụng hệ thống vệ tinh GPS của Mỹ. Mạch định vị GPS NEO-6M cho tốc độ xác định vị trí nhanh và chính xác, có nhiều mức năng lượng hoạt động, phù hợp với các ứng dụng chạy pin.
Module định vị GPS sử dụng board điều khiển kết nối của hãng U-BLOX đến từ Thụy Sĩ có rất nhiều năm kinh nghiệm trong lĩnh vực sản xuất module định vị toàn cầu.
THÔNG SỐ KỸ THUẬT
- Mạch định vị GPS GY-NEO 6M, nguồn cung cấp 3V-5V
- Mẫu: GY-GPS6MV2
- Mô-đun với ăng-ten bằng sứ, tín hiệu mạnh
- EEPROM power-down lưu dữ liệu tham số cấu hình
- Với pin dự phòng dữ liệu
- Chỉ báo tín hiệu LED
- Kích thước ăng ten 12*12mm
- Kích thước module 23mm*30mm
- Lắp đặt khẩu độ 3mm
- Tốc độ baud mặc định: 9600
- Tương thích với nhiều module điều khiển chuyến bay, cung cấp kiểm tra máy tính GPS
Sơ đồ chân:
VCC – 3.3 – 5V
GND – GND
TX : chân truyền dữ liệu
RX : chân truyền dữ liệu
Sơ đồ mạch
Sơ đồ kết nối với Arduino:
————————–CODE THAM KHẢO————————-
#include <TinyGPS++.h> #include <SoftwareSerial.h> static const int RXPin =8, TXPin = 9; static const uint32_t GPSBaud = 9600; TinyGPSPlus gps; SoftwareSerial ss(RXPin, TXPin); void setup() { Serial.begin(115200); ss.begin(GPSBaud); Serial.println(TinyGPSPlus::libraryVersion()); Serial.println(); Serial.println(F("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum")); Serial.println(F(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail")); Serial.println(F("----------------------------------------------------------------------------------------------------------------------------------------")); } void loop() { static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002; printInt(gps.satellites.value(), gps.satellites.isValid(), 5); printFloat(gps.hdop.hdop(), gps.hdop.isValid(), 6, 1); printFloat(gps.location.lat(), gps.location.isValid(), 11, 6); printFloat(gps.location.lng(), gps.location.isValid(), 12, 6); printInt(gps.location.age(), gps.location.isValid(), 5); printDateTime(gps.date, gps.time); printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2); printFloat(gps.course.deg(), gps.course.isValid(), 7, 2); printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2); printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.deg()) : "*** ", 6); unsigned long distanceKmToLondon = (unsigned long)TinyGPSPlus::distanceBetween( gps.location.lat(), gps.location.lng(), LONDON_LAT, LONDON_LON) / 1000; printInt(distanceKmToLondon, gps.location.isValid(), 9); double courseToLondon = TinyGPSPlus::courseTo( gps.location.lat(), gps.location.lng(), LONDON_LAT, LONDON_LON); printFloat(courseToLondon, gps.location.isValid(), 7, 2); const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon); printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6); printInt(gps.charsProcessed(), true, 6); printInt(gps.sentencesWithFix(), true, 10); printInt(gps.failedChecksum(), true, 9); Serial.println(); smartDelay(1000); if (millis() > 5000 && gps.charsProcessed() < 10) Serial.println(F("No GPS data received: check wiring")); } static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } static void printFloat(float val, bool valid, int len, int prec) { if (!valid) { while (len-- > 1) Serial.print('*'); Serial.print(' '); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); // . and - flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; for (int i=flen; i<len; ++i) Serial.print(' '); } smartDelay(0); } static void printInt(unsigned long val, bool valid, int len) { char sz[32] = "*****************"; if (valid) sprintf(sz, "%ld", val); sz[len] = 0; for (int i=strlen(sz); i<len; ++i) sz[i] = ' '; if (len > 0) sz[len-1] = ' '; Serial.print(sz); smartDelay(0); } static void printDateTime(TinyGPSDate &d, TinyGPSTime &t) { if (!d.isValid()) { Serial.print(F("********** ")); } else { char sz[32]; sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year()); Serial.print(sz); } if (!t.isValid()) { Serial.print(F("******** ")); } else { char sz[32]; sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second()); Serial.print(sz); } printInt(d.age(), d.isValid(), 5); smartDelay(0); } static void printStr(const char *str, int len) { int slen = strlen (str); for (int i = 0; i <len; ++ i) Nối tiếp .print (i <slen? str [i]: ''); smartDelay (0); }
Kết quả:
Lấy thông số tìm vị trí trên google map ta được: