استخدام وحدة GPS مع الأردوينو

ماهو GLOBAL POSITIONING SYSTEM (GPS)

 هو باختصار نظام ملاحة عالمي يتمكن من توفير معلومات عن المواقع على الأرض بدقة عالية باستخدام الأقمار الصناعية. بالإضافة للموقع ( بالنسبة لخطوط الطول والعرض ) يقوم GPS بتزويد المستخدمين بالوقت. في هذا الدرس سنقوم باستخدام وحدة GPS من الطراز neo 6m مع الأرديونو للحصول على الموقع الذي قد يكون مفيدا في كثير من المشاريع مثل السيارات ذاتية القيادة.

تثبيت المكتبة

لسهولة التعامل مع وحدة GPS يتم تثبيت مكتبة TinyGPSPLUS التي تساعد على عرض معلومات GPS بشكل سلس. يمكن تنزيل المكتبة بالطريقة الموضحة في الصورة أو عن طريق موقع GitHub

التوصيل

توصيل وحدة neo 6m بالأردوينو يتطلب توصيل اربع منافذ (VCC و GND) لتزويد الوحدة بالطاقة (RX و TX) لتبادل البيانات مع الأجهزة الأخرى (الأردوينو في هذا الدرس )

الحصول على الموقع وعرضه على شاشة السيريال

لاحظ أنه يتم استخدام مكتبة SoftwareSerial.h لتحديد منافذ الإتصال التسلسلي. بعد ذلك يتم التأكد من سلامة الإتصال والبيانات المرسلة من وحدة GPS ليتم الحصول على الإحداثيات باستخدام الأوامر (()gps.location.lat  و  ()gps.location.lng) . يجب الملاحظة أنه عند استخدام وحدة GPS للمرة الأولى قد تحتاج عدة دقائق للحصول على إشارة GPS. بعد رفع البرنامج على الأردوينو ستحصل على الإحداثيات لموقعك الحالي .

				
					#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
TinyGPSPlus gps;
SoftwareSerial X(3, 2); //Rx,Tx
void setup()
{ Serial.begin(115200);
  X.begin(9600);} // to communicate with gps module
void loop()
{  while (X.available() > 0)
    if (gps.encode(X.read())) {
    Serial.print("Location: ");
    if (gps.location.isValid())
    { Serial.print(gps.location.lat(), 6); Serial.print(",");
      Serial.println(gps.location.lng(), 6);}
   else { Serial.print("INVALID");}
  if (millis() > 5000 && gps.charsProcessed() < 10)
  { Serial.println("No GPS signal");
      while(true);}}}
				
			

الحصول على الوقت والتاريخ وعرضهما على شاشة السيريال

للحصول على التاريخ نستخدم مجموعة الأوامر التالية :

()gps.date.day لليوم ، ()gps.date.month للشهر و ()gps.date.year للسنة

أما للحصول على الوقت فاننا نحتاج الأوامر التالية :

()gps.time.hour للساعات ، ()gps.time.minute للدقائق و ()gps.time.second للثواني

لاحظ أن وحدة GPS تعطي الوقت بالتوقيت العالمي الموحد  UTC و لضبط التوقيت يمكنك زيادة أو انقاص الفرق بين التوقيت العالمي الموحد وتوقيتك المحلي.

				
					#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
TinyGPSPlus gps;
SoftwareSerial X(3, 2); //Rx,Tx
void setup()
{ Serial.begin(115200); X.begin(9600);} // to communicate with gps module
void loop()
{  while (X.available() > 0)
    if (gps.encode(X.read()))
    { // Display Date
  Serial.print("  Date/Time: ");
  if (gps.date.isValid())
  { Serial.print(gps.date.month()); Serial.print("/");
    Serial.print(gps.date.day()); Serial.print("/");
    Serial.print(gps.date.year());}
  else
  { Serial.print("INVALID");}
  // Display Time
  Serial.print(" ");
  if (gps.time.isValid())
  { if (gps.time.hour() < 10) Serial.print("0");
      Serial.print(gps.time.hour()); Serial.print(":");
    if (gps.time.minute() < 10) Serial.print("0");
      Serial.print(gps.time.minute()); Serial.print(":");
    if (gps.time.second() < 10) Serial.print("0");
      Serial.print(gps.time.second());}
  else {Serial.print("INVALID");}
  Serial.println();}
  if (millis() > 5000 && gps.charsProcessed() < 10)
  { Serial.println("No GPS signal");
    while(true);}}

				
			

انتقل إلى المتجر

انتقال إلى الأعلى