Kod Ara

U-blox Neo-6 ve Neo-7 GPS Modüllerinden Arduino ile GPS Konumu Alın

U-blox Neo-6 ve Neo-7 GPS Modüllerinden Arduino ile GPS Konumu Alın

Bu proje, bir Arduino ile U-blox Neo-6M veya Neo-7M GPS modülünün nasıl arayüzleneceğini ve konum verilerinin (enlem ve boylam) nasıl alınacağını gösterir. Çevrimiçi olarak kolayca bulunabilen bu uygun fiyatlı modüller, projelerinize GPS işlevselliği eklemenin basit bir yolunu sağlar. Neo-7M üzerindeki belirgin mavi LED (videoda 02:53'te) GPS sinyalinin alındığını gösterir; bu, sinyal edinimini doğrulamak için kullanışlı bir özelliktir.

gps_neo-6m_neo-7m-1

İşte bir GPS modülü ve Arduino kullanarak yapabileceğiniz bazı proje fikirleri:

  • GPS Takip Cihazı: Konum verilerini kaydedin ve bir harita üzerinde görüntüleyin.
  • Geocaching Aracı: Belirli koordinatlara gidin.
  • Otomatik Araç Navigasyonu: Bir robotu veya dronu yönlendirin.
  • Hava İstasyonu: Hava durumu okumalarına konum verileri ekleyin.
  • Yaban Hayatı Takibi: Hayvan hareketlerini izleyin.
gps_neo-6m_neo-7m-4

Donanım/Bileşenler

  • Arduino Uno (veya uyumlu kart)
  • U-blox Neo-6M veya Neo-7M GPS modülü
  • Jumper kablolar
  • USB kablosu
  • (İsteğe bağlı) Harici anten ve SMA konnektörü
gps_neo-6m_neo-7m-3

Bağlantı Kılavuzu

gps_neo-6m_neo-7m-2-wiring

Bağlantı basittir (videoda 10:39'da):

%%WIRING%%

  • GPS VCC'yi Arduino 3.3V'a bağlayın
  • GPS GND'yi Arduino GND'ye bağlayın
  • GPS TX'i Arduino pin 3'e bağlayın (kodda RX olarak tanımlanır)
  • GPS RX'i Arduino pin 4'e bağlayın (kodda TX olarak tanımlanır)

Unutmayın, TX, RX'e bağlanır ve tam tersi (videoda 11:10'da). Video ayrıca bağlantılar için basit jumper kabloların nasıl kullanılacağını da gösterir (videoda 10:24'te).

Kod Açıklaması

Bu proje TinyGPS++ kütüphanesini kullanır. Arduino IDE'nin kütüphane yöneticisi aracılığıyla indirip kurun. Temel kod ayarlamaları, yazılım seri pin tanımları ve baud hızıdır (videoda 07:00'de):


#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600; // U-blox modülleri için varsayılan

RXPin ve TXPin değişkenleri, GPS modülüne bağlı Arduino pinlerini tanımlar. U-blox modülleri için varsayılan baud hızı 9600'dür. Kodun özü, GPS'ten gelen seri verileri okumak ve TinyGPS++ kütüphanesini kullanarak ayrıştırmaktır (videoda 08:03'te):


// TinyGPS++ nesnesi
TinyGPSPlus gps;

// GPS cihazına seri bağlantı
SoftwareSerial ss(RXPin, TXPin);

// ... (loop fonksiyonu içinde) ...
while (ss.available() > 0)
  if (gps.encode(ss.read()))
    displayInfo();

displayInfo() fonksiyonu daha sonra geçerli bir GPS sinyali alındığında enlem ve boylamı çıkarır ve yazdırır (videoda 09:07'de):


void displayInfo()
{
  // ... diğer kod ...

  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6); // 6 ondalık basamaklı enlem
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6); // 6 ondalık basamaklı boylam
  }
  // ... diğer kod ...
}

Canlı Proje/Gösterim

Video (videoda 12:29'da) projeyi çalışırken gösterir; GPS sinyali olmadığında ilk "INVALID" çıktısını ve sinyal alındığında geçerli koordinatların görüntülendiğini gösterir. Neo-7M üzerindeki yanıp sönen mavi LED, GPS sinyalinin görsel olarak doğrulanmasını sağlar (videoda 13:49'da).

GPS__451
GPS__451

Bölümler

  • [00:00] Giriş ve Proje Genel Bakışı
  • [00:32] GPS Modülü Çeşitleri (Neo-6M ve Neo-7M)
  • [04:30] GPS Modülünü Arduino'ya Bağlama
  • [06:12] Kod Açıklaması ve TinyGPS++ Kütüphanesi
  • [10:07] Detaylı Bağlantı Açıklaması ve TX/RX Prensipleri
  • [12:29] Canlı Gösterim ve Sinyal Edinimi

Görseller

GPS__451
GPS__451
gps_neo-6m_neo-7m-1
gps_neo-6m_neo-7m-1
gps_neo-6m_neo-7m-2-wiring
gps_neo-6m_neo-7m-2-wiring
gps_neo-6m_neo-7m-3
gps_neo-6m_neo-7m-3
gps_neo-6m_neo-7m-4
gps_neo-6m_neo-7m-4
155-Get GPS location from U-Blox Neo-6 and Neo-7 GPS modules with Arduino
Dil: C++
#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();
}

Kaynaklar ve referanslar

Dosyalar📁

Diğer dosyalar

  • GPS TinyGPSPlus NEO-7 DataSheet
    Datasheet 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.pdf 1.73 MB