الخميس، 18 يونيو، 2015

نظام التموضع العالمي NEO-6M

NEO-6M GPS 




 NEO-6M  هو موديول ينتمي لعائلة الدارات المستقبلة لبيانات الأقمار الصناعية الخاصة بنظام التموضع العالمي GPS تتميز بسهولة استخدامها و برمجتها اضافة لزمن تشغيل سريع .

تتميز هذه الدارة بوجود بطارية احتياطية , و ذاكرة فير قابلة للمسح كهربائياً EEPROM لتخزين الأعدادات الخاصة بال GPS , وتتميز بتقنية تمنع التشويش المقصود عليها Anti jamming technology , بالأضافة لدعمها اخراج البيانات ببروتوكولات مختلفه (UART , USB , SPI ) .



ما سنقوم به بهذه التجربة هي الحصول على بيانات المتعلقة بالاحداثيات الجغرافية , الوقت و التاريخ .



سنحتاج لتنفيذ هذه التجربة إلى : 

لوحة أردوينو 
الموديول NEO-6M 
اسلاك توصيل Jumper
لوحة توصيل BreadBoard



يجب الأنتباه لموضوع التغذية لمثل هذه الدارات اذ انها تعتمد على تغذية 3.3 فولت و اي فولتية أعلى من هذه الفولتية , سواءاً فولتية التغذية vcc او الفولتية المطبقة على المداخل و المخارج I/O 



بالغالب لا يعمل ال 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>
/* 
NEO 6M GPS module test 
Connect :
NEE6M     ARDUINO
VCC   >>>  3V3
Tx    >>>  D3
Rx    >>>  D4
GND    >>>  GND
written By : Mohannad Rawashdeh
http://www.genotronex.com
*/
TinyGPS NEO6M;
const int RXpin = 3 ;// Connect with TX pin in GPS
const int TXpin = 4 ;// Connect with RX pin in GPS
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("uBlox Neo 6M GPS Test");
  Serial.print("TinyGPS library version :");
  Serial.println(TinyGPS::library_version());
  Serial.print("Mohannad Rawashdeh , ");
  Serial.println("www.genotronex.com");
}

void loop()
{
  bool newData = false;
  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 (NEO6M.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float fLat, fLon;
    unsigned long age;
    NEO6M.f_get_position(&fLat, &fLon, &age);
    int year;
    byte month, day, hour, minute, second, hundredths; 
    NEO6M.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(NEO6M.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);
  }  
}




5) بعد تحميل البرنامج , تأكد من أن الضوء LED في الGPS يتوهج ببطء و افتح نافذة السيريال سترى بيانات ال GPS كما يلي  .







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


 if (NEO6M.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 
    NEO6M.f_get_position(&fLat, &fLon, &age);

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



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






13 التعليقات :

  1. عمل رائع تشكر عليه وبكامل السورس كود الخاص به

    وفقك الله اخي الغالي .... والى الامام

    ردحذف
  2. االسلام عليكم .
    اخي المبرمجة وين نجيبها او شو مبدئها

    ردحذف
    الردود
    1. اولاً حمّل المكتبه موجو الرابط بالمقال .
      الكود موجود عند النقطه 4
      يرجى قراءة المقال جيداص فالكود المصدري واضح

      حذف
  3. اتمنى اخباريةوامنى ارفاق رابط البرنامج وشكرا

    ردحذف
  4. السلام عليكم
    اخي عندي الموديول اول ما اوصل له الفولت يومض ومضه واحدة و بعدها ينطفئ شو المشكلة لو سمحت ؟

    ردحذف

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