الخميس، 16 يوليو، 2015

SKYLAB SKM53 GPS


نظام التموضوع العالمي SKYLAB SKM53

SKYLAB SKM53 هو موديول ينتمي لعائلة الدارات المستقبلة لبيانات الأقمار الصناعية الخاصة بنظام التموضع العالمي GPS تتميز بسهولة استخدامها و برمجته .



سنقوم بهذه التجربة بتوصيله للاردوينو و أخذ البيانات الرئيسية القادمة من الأقمار الصناعية و عرضها على شاشة الحاسوب .

سنحتاج في هذه التجربة إلى :
1)بطاقة أردوينو
2) 
SKYLAB SKM53 GPS
3)لوحة توصيل BreadBoard
4)اسلاك توصيل jumper






بالغالب لا يعمل ال GPS داخل الأماكن المغلقه لذلك يفضل تجربته في مكان مفتوح حتى تحصل على نتائج صحيحة .

لا يوجد على هذا الموديول ضوء LED لاظهار ما اذا تم التزامن مع الاقمار الصناعية ام لا .



سأقسم هذه التجربة إلى قسمين : 

1) سيتم برمجته بواسطة الحاسوب مع برمجية مخصصة من الشركة المصنعه لهذه القطعه 

2) برمجته بواسطة الأردوينو .

القسم الأول : 

1) نفتح برنامج الأردوينو و نحمل فيه برنامج فارغ Blank code كما يلي  : 
// Blank Code
//Mohannad Rawashdeh
void setup() 
{
}

void loop() 
{
}


2) نقوم بتوصيل ال GPS بالأردوينو كما يلي  :





3) نذهب لبرنامج U Center و نختار رقم المنفذ التسلسلي الخاص بالأردوينو .






4) تأكد من ضبط سرعه الاتصال عند 9600 و من اختيار NEO 6 كما في الصورة . 





5) بعدها نضغط Connect و نرى تحديث البيانات من الGPS على الشاشة  .



الجزء الثاني : البرمجة بواسطة الأردوينو :
1)سنقوم باغلاق البرنامج السابق " مهم جداً " .
2)نقوم بتغيير التوصيل كما يلي : 




3) يجب عليك امتلاك مكتبة TinyGPS لاستخدام هذا الموديول , لتحميله من هنا .




4) نحمل البرنامج التالي :
#include <SoftwareSerial.h>
#include <TinyGPS.h>
/* 
 Skylab SKM53 GPS module test 
Connect :
SKM53     ARDUINO
VCC   >>>  5V
Tx    >>>  D3
Rx    >>>  D4
GND    >>>  GND
Arduino board LED On D13 here 
is to indicate if data available 
written By : Mohannad Rawashdeh
http://www.genotronex.com
*/
TinyGPS SKM53;
const int RXpin = 3 ;// Connect with TX pin in GPS
const int TXpin = 4 ;// Connect with RX pin in GPS
const int LedPin= 13;
SoftwareSerial Genotronex(RXpin,TXpin);
unsigned int  buadRateGPS= 9600 ; 
unsigned long buadRateUART= 115200 ; 
const unsigned int DelayGPStime = 1000 ; 
void setup()
{
  Serial.begin(buadRateUART);
  Genotronex.begin(buadRateGPS);
  Serial.println("Skylab SKM53 GPS Test");
  Serial.print("TinyGPS library version :");
  Serial.println(TinyGPS::library_version());
  Serial.print("Mohannad Rawashdeh , ");
  Serial.println("www.genotronex.com");
  pinMode(LedPin,OUTPUT);
}

void loop()
{
  bool newData = false;
  digitalWrite(LedPin,newData);
  for (unsigned long start = millis(); millis() - start < DelayGPStime;)
  {
    while (Genotronex.available())
    {
      char c = Genotronex.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (SKM53.encode(c)) // Did a new valid sentence come in?
        newData = true;
         digitalWrite(LedPin,newData);
    }
  }

  if (newData)
  {
    float fLat, fLon;
    unsigned long age;
    SKM53.f_get_position(&fLat, &fLon, &age);
    int year;
    byte month, day, hour, minute, second, hundredths; 
    SKM53.crack_datetime(&year, &month, &day,&hour, &minute, &second, &hundredths);
    Serial.println("Latitude \t longitude \t SATELLITE \t   date \t    time");
    Serial.print(fLat,6);
    Serial.print("\t ");
    Serial.print(fLon, 6);
    Serial.print(" \t");
    Serial.print(SKM53.satellites());
    Serial.print("\t \t");
    Serial.print(day);
    Serial.print("/");
    Serial.print(month);
    Serial.print("/");
    Serial.print(year);
    Serial.print(" \t");
    Serial.print(hour);
    Serial.print(":");
    Serial.print(minute);
    Serial.print(":");
    Serial.println(second);
  }  
}




بعدها تستطيع فتح نافذة السيريال و قراءة البيانات الخاصة بنظام التموضع العالمي . 


ِشرح البرنامج : 

طريقة كتابة البرنامج سهلة , بالبداية الجزء الخاص بالتحقق من وجود بيانات اتصال مع القمر الصناعي هو :


 if (SKM53.encode(c)) // Did a new valid sentence come in?
        newData = true;

في حالة وجود بيانات سيتم جعل المتغير newData صحيحياً و يتحقق الشرط الخاص بقراءة البيانات الخاصة بال gps

في هذه المتغيرات يتم حفظ القيم المطلوبة مثل الاحداثيات , الوقت , التاريخ : 


    float fLat, fLon;
    unsigned long age;
    int year;
    byte month, day, hour, minute, second, hundredths; 
   

هنا هذين الأمرين يقومان بتخزين قيم الأحداثيات بالمتغيرات المخصصة لهما fLat,fLon 
    SKM53.f_get_position(&fLat, &fLon, &age);

يتم تخزين الوقت و التاريخ كلاً حسب وحدته من خلال هذا الأمر:


 SKM53.crack_datetime(&year, &month, &day,&hour, &minute, &second, &hundredth





3 التعليقات :

  1. السلام عليكم ممكن طريقة للتواصل معك لاني احتاج مساعدتك ف هذا المجال؟

    ردحذف
  2. السلام عليكم ممكن طريقة للتواصل معك لاني احتاج مساعدتك ف هذا المجال؟

    ردحذف
  3. السلام عليكم ممكن طريقة للتواصل معك لاني احتاج مساعدتك ف هذا المجال؟

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.