الجمعة، 30 مايو 2014

SKYLAB SKM53 GPS MODULE

بسم الله الرحمن الرحيم

انهارده هنتكلم على موديول تعبت جدا انى اوصل لحد شارح  شرح كامل  لكيفيه تشغيله و دائما اغلب المواقع مش حاطين المكتبه بتاعته كامله يا أما فها اخطاء .

الموديول ده هو SKYLAB SKM53  GPS ال GPS ده منتشر فى السوق عندنا كتير بس تﻻقى محﻻت زى رام او فيوتشر حاطين على الموقع بتاعهم الداتا شيت و  شرح لو جربناه مش هيشغل الموديول هتﻻقى فيه بعض الاخطاء

الشغل على الموديول ده خد منى يومين علشان اعرف اطلع منه اﻻحداثيات مظبوطه

من غير كﻻم كتير نبدأ الشرح

دى صوره الموديول:



ال pins بتوعه مش standard يعنى مش هتيجى قد ال breadboard ف انا عن نفسى لحمت في كل pin سلكه بس اﻻختيار ده كان صعب ف انتا ممكن تجب سلك male - female او فى بورد صغيره مخصوصه ليه ممكن تجيبها و انتا بتشتريها.


انا استخدمت معاه بورده اردوينوا اونو
و Arduino IDE 1.0.5
المهم  هو هيتوصل كالاتى:

5v ==> 5v
GND ==> GND
RX in GPS ==> TX in arduino
TX in GPS ==> RX in arduino


ال TX , RX بتوع اﻻردوينوا بنحددهم فى الكود
انا عاملهم 2,3  و جربت كذا PIN تانيين و اشتغل تمام.


بعد ما وصلنا ال GPS فى library اسمها TinyGPS و دى واحد عاملها و بتعمل كل ال Functions الخاصه ب ال GPS
هنزلها من اللينك ده انا نزلتها من موقع مش فاكر اسمه بصراحه ف علشان كده حطيته على ميديا فير

https://www.mediafire.com/?7vxtbat79fuar2z

بعد ما ننزلها
نفك الضغط و ناخد الفولدر كوبى و نحطه فى ال file ده
c://Sketchbook//libraries
,و تقفل البرنامج لو كنت فاتحه و تفتحه من اول و جدد هتﻻقى ال library دى تم اضافتها فى
Sketchbook ==> import library

كده احنا موصلين الموديول و عملنا import  ل ال library اللى احنا محتاجنها يبقى فاضل الكود


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

unsigned long fix_age;

SoftwareSerial GPS(2,3);                     
TinyGPS gps;
void gpsdump(TinyGPS &gps);
bool feedgps();
void getGPS();
long lat, lon;
float LAT, LON;

void setup(){
  GPS.begin(9600);
  Serial.begin(9600);
}

void loop(){
  long lat, lon;
  unsigned long fix_age, time, date, speed, course;
  unsigned long chars;
  unsigned short sentences, failed_checksum;

  // retrieves +/- lat/long in 100000ths of a degree
  gps.get_position(&lat, &lon, &fix_age);

  getGPS();
  Serial.print("Latitude : ");
  Serial.print(LAT/1000000,7);
  Serial.print(" :: Longitude : ");
  Serial.println(LON/1000000,7);
}

void getGPS(){
  bool newdata = false;
  unsigned long start = millis();
  // Every 1 seconds we print an update
  while (millis() - start < 1000)
  {
    if (feedgps ()){
      newdata = true;
    }
  }
  if (newdata)
  {
    gpsdump(gps);
  }
}

bool feedgps(){
  while (GPS.available())
  {
    if (gps.encode(GPS.read()))
      return true;
  }
  return 0;
}

void gpsdump(TinyGPS &gps)
{
  //byte month, day, hour, minute, second, hundredths;
  gps.get_position(&lat, &lon);
  LAT = lat;
  LON = lon;
  {
    feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors
  }
}


_____________________________
الكود ده انا جربته و دى كانت النتيجه 



و خد الاحداثيات اللى طلعت و حطتها على الماب و طلعلى مكانى مظبوط

من المشاكل اللى قابلتنى ان  الموديول ده ﻻزم يكون فى مكان مفتوح او بمعنى اصح كون شايف الستاﻻيت
هو مرضيش يشتغل معايا جوا الشقه و اشتغل فى البلكونه

لو حد عنده اى معلومه زياده  يتفضل يقولها
و كل المعلومات عن الموديول هتﻻقوها موجوده فى الداتاشيت

ارجوا الدعاء
و شكرا

SKM53 GPS moule datasheet
http://www.nooelec.com/files/SKM53_Datasheet.pdf













الجمعة، 23 مايو 2014

Wireless communication using xbee



السلام عليكم و رحمه الله و بركاته :
الموضوع ده اول مشاركه ليا فى المنتديات و انا حبيت اكتبه لانى نفذته فى مشروع التخرج بتاعى و عانيت بسببه و اخد وقت طويل جدا ف فضلت اكتبه للناس علشان ميتعبوش زيى و يستفادوا بأذن الله:

Xbee pro s2b



مبدئيا لازم نعرف يعنى ايه xbee  و ايه مميزاتها ؟ طب وليه استخدمها و مااستخدمش البلوتوث مثلا؟

انا استخدمت xbee pro s2b

مميزات xbee:
Operating voltage: 2.1 – 3,6V.

Operating current: 40MA - 3.3v.

Indoor range: 60 m

Outdoor range: 1000 m.

RF-data rate: 250 Kbps.


Through put speed :35 Kbps.

Frequency: ISM 2.4 GHz.

Receiver Sensitivity: -102 dBm.


هنلاحظ ان من مميزاتها  ان ال range  بتاعها indoor  60 متر  و outdoor  ممكن توصل ل             1 كيلومتر   فبالتالى هى افضل من البلوتوث لو هتستخدمها فى التحكم فى روبوت مثلا .



و كمان من اهم مميزات ال xbee انها بتنقل البيانات بسرعه كبيره جدا 250kb فى الثانيه و دى مفيده جدا علشان تقدر تبعت اوامر كتير و بسرعه كبيره و ده ممكن نستخدمه لو بنتحكم فى روبوت و بنبعتله واومر بسرعه كبيره.

ال xbee  بتستخدم بروتكول فى الشبكه اسمه zigbee و البروتكول ده بكل اختصار بيدعم او بيشتغل على 3 انواع من الشبكات 
 a) mesh topology
b) star topology.                                       
c) Cluster-tree topology.                         

ال xbee بتشتغل على mesh topology network  و دى معناها ان كل الاجهزه على الشبكه متصلين ببعض.

ال xbee بيتم تهيئتها ل نوع واحد من  3 انواع من الاجهزه:
1)    Coordinator.
2)    Router.
3)    Endpoint.

1) ال coordinator  ده هو ال xbee اللى بتنظم الشبكه و اى اتنين xbee  ميقدروش يكلموا بعض إلا بوجود ال coordinator   بمعنى ادق اى شبكه لازم يكون فيها xbee متهيئه على انها coordinator.  
و ده واحد بس فى كل شبكه.


2)اما ال router ف ده ممكن يكون موجود اكثر من واحد  فى الشبكه الواحده و ده يقدر ينقل بيانات بين اتنين من ال endpoint و ده مينفعش يبقى sleep ابدا 

يعنى ايه sleep :دى خاصيه لل xbee  بتحدث عند عدم استقبال اوامر زى ما بيحصل فى الكمبيوتر مثلا.



3)و اخيرا ال End point  device  ده ممكن يكون موجود اكتر من جهاز برضه فى الشبكه الواحده بس ده ميقدرش يوصل بيانات  من راوتر ل راوتر اخر ... و كمان يقدر  يشغل خاصيه ال sleep.


Xbee network

هنعرف بعد شويه ازاى اخلى ال xbee تشتغل ك  coordinator Or router Or endpoint device.




ال xbee  ممكن تتوصل بالاردوينوا عن طريق ال xbee pro arduino shield 
Xbee pro shield





و بتبقى بالطريقه دى :



xbee and xbee shield
و فى الحاله دى لازم ناخد بالنا من الليد اللى فى الشيلد دى لانها طريقه نورها تدل على حاله ال xbee
و اسمها Association LED

و هى ليها 3 حالات:

1)    انها تنور ببطىء (مره واحد فى الثانيه):
و ده معناها ان ال coordinator  اشتغل بطريقه صحيحه.
و لو مشتغلش بتفضل منوره من غير ما تطفى.


2)    انها تنور و تطفى بسرعه كبيره جدا (5 مرات فى الثانيه تقريبا):
و ده معناه ان فى غلط فى ال ENDPOINT device  و انك لازم تتأكد من الاعدادات الخاصه بيه.

3)    انها تنور و تطفى بسرعه مش كبيره (مرتين فى الثانيه):
و ده معناه ان ال END POINT استقبل موافقه من ال coordinator لدخول الشبكه و لسه مستقبلش او بيانات.


او ممكن تتوصل من غير ال شيلد هكذا
xbee connected to arduino without shield



بس لازم ناخد بالنا انها بتشتغل ب 3.3v  و لو وصلها فولت من كده هتبوظ.
و فى مشكله ممكن تواجهكم لو ال XBEE  اللى معاكوا s1  ان الاردوينوا بيطلع 5 فولت فى باقى ال pins اللى هتنقل البيانات ف انتوا ممكت بأستخدام قانون اوم تحسبانتا محتاج مقاومات اد ايه و توصل مقاومات فى TX pin & RX pin

او ممكن نستخدم 

logical level converter:
store.fut-electronics.com/BOB-08745.html
  

و ده بيحول من 5 فولت غلى 3.3 فولت




انما لو xbee s2 ف ممكن توصله عادى بس متنساش ان ال vcc = 3.3v
و بتتوصل كالاتى:

Arduino
Xbee
3.3v
Vcc
RX
Dout
DIN
DIN
GND
GND



ازاى بقا نستخدم ال xbee

زى ما قولنا قبل كده ان احنا لازم نعمل ضبط و اعدادات لل xbee علشان تعرف هى هتشتغل ك coordinator or router or endpoint

احنا المفروض بنعمل الضبط ده عن طريق السيريال يعنى بنبعت اوامر عن طريق اى terminal لل xbee  لتحديد الاعدادات المطلوبه


بس الشركه المصنعه لل xbee و اسمها digi  عملتلنا برنامج ب واجهه سهله الاستخدام علشان نقدر نضبط الاعدادات الخاصه ب ال xbee بدون البحث عن اوامر ال terminal .

البرنامج اسمه xcut  و بننزله من اللينك ده


دلوقتى هنعمل اعدادات ال Endpoint:

اولا بنحرق سكيتش فاضى على بورده اردوينوا كالاتى:
void setup()
{}
Void loop()
          {}
بعد كده بنركب ال xbee shield على الاردوينوا و بيكون ال 2 jumpers على الناحيه اليمين اللى مكتوب عليها USB و ده معناه انك مش مشغل ال xbee علشان تتصل ب شبكه لاء انتا مشغلها علشان تعملها تهيئه و فى الحاله دى بتقدر تحرق كود على ال اردوينوا





بعد ما حرقنا الكود و ركبنا الشيلد على الاردوينوا بورد نركب ال xbee على الشيلد و بعدين نوصل الاردوينوا على الكمبيوتر و نفتح برنامج xcut

فى اول tap  و اسمه PC setting  بنختار ال com-port  اللى متوصل عليه الاردوينوا و ندوس test/Query  





هيظهرلنا رساله زى دى
 
Xcut successful found xbee in com-port

و دى معناها ان البرنامج شاف ال xbee و جاهز للكتابه عليها:


ملحوظه :
 فى الجزء ده انا واجهتنى مشكله ان البرنامج مش شايف ال xbee و خدت منى وقت طويل انى اشوف المشكله فين لكن المشكله اتحلت لما اشتريت كابل جديد بيوصل الاردوينوا ب الكمبيوتر.



نروح بقا لل Configuration modem :

اهم 3 خصائص لل xbee هى ال
PAN ID(Personal Area network)
 و الرقم ده لازم يكون واحد فى كل ال xbee  اللى فى شبكه واحده ده عامل زى كلمه السر اللى بتخليهم يتعرفوا على بعض و يتصلوا ببعض و لو الرقم ده مختلف ال xbee مش هيتصلوا ببعض من الافضل تخليه رقم مكون من 4 ارقام مثلا.


2,3) ال Serial address و ده عنوان بيتكون من 16بت متقسمه على عنوانين هما ال Serial High و ال Serial Low   ودول اكتبهم فى ورقه لانك هتقولهم لل coordinator كمان شويه.

و كمان فى خاصيه اسمها sleep و دى بتحدد ال End point يعمل sleep بعد اد ايه من عدم استقباله البيانات.



بعد ما تخلص تعلم على update frameware و تختار نوع ال xbee بتاعتك و الاصدار بتاعها و هتلاقيهم مكتوبين على xbee و تختار  فى ال function set  تختار router or enddevice AT


باقى الاعدادات انا مجتش جمبها بس انتا ممكن تقرا نبذه عن كل خاصيه و هى بتعمل ايه من على اللينك اللى بنعمل داونلود من عليه.


و تدوس Write  هتلاقى البرنامج بيكتب على ال xbee و بعد اما يخلص كده ال endpoint device جاهز للعمل.

End-point ready to work


الخطوه التانيه: نعمل اعدادات ال Coordinator
هنركب ال xbee التانيه و نعمل نفس الخطوات لحد ال configuration setting
هنكتب نفس ال PAN ID اللى عملناه فى ال xbee الاولى

بعد كده فى ال DH parameter هنكتب ال عنوان بتاع ال SH فى ال ENDpoint device
و فى الDL parameter هنكتب العنوان بتاع ال SL فى ال ENDpoint device

بعد كده تعلم على  update frameware و تختار نوع الxbee و الاصدار بتاعها و بعد كده نختار من ال function set  coordinator AT
وندوس write

coordinator ready to work
و بكده احنا عندنا اتنين xbee قادرين على الاتصال ببعض و نقل البيانات بينهم 
بس مننساش لو كنا بنستعمل شيلد نحط ال jumpers ناحيه ال xbee  لما نجى نشغل ال xbee علشان يتصلوا ببعض و لما نعملكده مش هنعرف نحرق كود على الاردوينوا غير لما نشيل الشيلد او نحط الjumpers ناحيه ال USB


دلوقتى عايزين نعمل تجربه:
نحط البرنامج ده على ال coordinator  
Void setup()
{
Serial.begin(9600);
}
Void loop()
{
Serial.print(‘H’);
Delay(2000);
Serial.print(‘L’);
Delay(2000);

}

وده برنامج بيبعت للسيريال H و يستنى ثانيتين و يبعت L
ثانيا نختار من ال examples اللى فى arduino IDE  برنامج اسمه Physical pixel من communication

و ده برنامج بيقول انه لو جاله من السيريال حرف H بينور ليد متصله ب pin رقم 13 و لو جاله L بيطفى الليد المتصله ب pin رقم 13

و نحرق الكود ده على بورده اردوينوا اللى متركب عليها ال END POINT

بعد كده نشغل البوردتين و نستنى حوالى 30 ثانيه هتلاقى الليلد ابتدت تشتغل و تطفى
 












 كل هذه الخطوات انا مجربها ب ايدى و خدت منى 4 ايام متواصلين علشان اوصل للنتيجه دى لو اى حد عنده اى استفسار يتفضل يسأل
 
 



نسألكم الدعاء و شكرا




 Xbee data sheet:
https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-2.5-Manual.pdf  


My xbee link: 
https://www.sparkfun.com/products/10418

configuration from arduino.cc
http://arduino.cc/en/Guide/ArduinoWirelessShieldS2