مقدمة
في هذا الدرس سنصنع نظام تحديد المواقع GPS باستخدام الاردوينو ووحدة اتصال وارسال واستقبال الإشارة GPRS GSM Module ثم يتم ارسال بيانات الموقع على شكل رسالة نصية SMS.
المواد والأدوات
1× اردوينو اونو
1× محول تيار (12Volt adapter 2A)
1× وحدة اتصال وارسال واستقبال الإشارة (GPRS GSM Module)
1× شريحة (SIM)
وحدة اتصال وارسال واستقبال الإشارة (GPRS GSM Module)
تستخدم الوحدة في مشاريع انترنت الأشياء حيث يتم ربطها مع متحكم الاردوينو لتوفير الاتصال بالإنترنت.
يمكن من خلالها إرسال رسائل SMS وإجراء المكالمات الهاتفية وغيرها من الأوامر.
تتضمن الوحدة لاقط هوائي لاستخدامات تحديد الموقع GPS.
كما تتضمن لاقط هوائي GSM لنقل إشارات الإتصال.
توصيل الدائرة
وصل الدائرة الكهربائية كما في الشكل المقابل.
اضغط ضغطًا مطولًا على زر الطاقة حتى تضيء المصابيح الجانبية، هنا نتأكد بأن اللوحة تعمل بالشكل الصحيح.
ادخل الشريحة SIM من المنفذ التالي.
البرمجة
في البداية عليك تحميل مكتبة SoftwareSerial لمعرفة كيفية تنزيل المكتبات يمكنك الرجوع إلى الدرس التالي.
قبل رفع الكود البرمجي على لوحة الاردوينو عليك قراءة شرح الكود البرمجي.
#include <SoftwareSerial.h> SoftwareSerial sim808(11,10); char phone_no[] = "053366****"; // replace with your phone no. String data[5]; #define DEBUG true String state,timegps,latitude,longitude; void setup() { sim808.begin(9600); Serial.begin(9600); delay(50); //sim808.print("AT+CSMP=17,167,0,0"); // set this parameter if empty SMS received //delay(100); sim808.print("AT+CMGF=1\r"); delay(400); sendData("AT+CGNSPWR=1",1000,DEBUG); delay(50); sendData("AT+CGNSSEQ=RMC",1000,DEBUG); delay(150); } void loop() { sendTabData("AT+CGNSINF",1000,DEBUG); if (state !=0) { Serial.println("State :"+state); Serial.println("Time :"+timegps); Serial.println("Latitude :"+latitude); Serial.println("Longitude :"+longitude); sim808.print("AT+CMGS=\""); sim808.print(phone_no); sim808.println("\""); delay(300); sim808.print("http://maps.google.com/maps?q=loc:"); sim808.print(latitude); sim808.print(","); sim808.print (longitude); delay(200); sim808.println((char)26); // End AT command with a ^Z, ASCII code 26 delay(200); sim808.println(); delay(20000); sim808.flush(); } else { Serial.println("GPS Initializing…"); } } void sendTabData(String command , const int timeout , boolean debug){ sim808.println(command); long int time = millis(); int i = 0; while((time+timeout) > millis()){ while(sim808.available()){ char c = sim808.read(); if (c != ',') { data[i] +=c;delay(100); } else { i++; } if (i == 5) { delay(100); goto exitL; } } }exitL: if (debug) { state = data[1]; timegps = data[2]; latitude = data[3]; longitude =data[4]; } } String sendData (String command , const int timeout ,boolean debug){ String response = ""; sim808.println(command); long int time = millis(); int i = 0; while ( (time+timeout ) > millis()){ while (sim808.available()){ char c = sim808.read(); response +=c; } } if (debug) {Serial.print(response);} return response; }
شرح الكود البرمجي
نستدعي مكتبة SoftwareSerial.h التي تسمح بالاتصال التسلسلي مع المنافذ الرقمية في لوحة الاردوينو.
#include <SoftwareSerial.h>
هنا نكتب المنافذ التي استخدمناها لربط لوحة الاردوينو مع وحدة اتصال وارسال واستقبال الإشارة (GPRS GSM Module)
المنفذ الرقمي 10 مع TX
والمنفذ الرقمي 11 مع RX.
SoftwareSerial sim808(11,10);
اكتب رقم الهاتف الذي تريد إرسال له بيانات الموقع، والمكوَن من عشرة أرقام.
char phone_no[] = "053366****"; // replace with your phone no.
عندما تتم قراءة بيانات الموقع سيتم إرسالها مباشرة إلى الهاتف المحمول عن طريق رسالة SMS.
String data[5]; #define DEBUG true String state,timegps,latitude,longitude; void setup() { sim808.begin(9600); Serial.begin(9600); delay(50); //sim808.print("AT+CSMP=17,167,0,0"); // set this parameter if empty SMS received //delay(100); sim808.print("AT+CMGF=1\r"); delay(400); sendData("AT+CGNSPWR=1",1000,DEBUG); delay(50); sendData("AT+CGNSSEQ=RMC",1000,DEBUG); delay(150); }
في الدالة loop سيتم توضيح بيانات الموقع والوقت والحالة على شاشة الاتصال التسلسلي.
إذا لم يتم قراءة بيانات الموقع لخلل ما، على سبيل المثال خلل في توصيل الدائرة الكهربائية أو فقدان مصدر الطاقة ستظهر رسالة GPS Initializing.
void loop() { sendTabData("AT+CGNSINF",1000,DEBUG); if (state !=0) { Serial.println("State :"+state); Serial.println("Time :"+timegps); Serial.println("Latitude :"+latitude); Serial.println("Longitude :"+longitude); sim808.print("AT+CMGS=\""); sim808.print(phone_no); sim808.println("\""); delay(300); sim808.print("http://maps.google.com/maps?q=loc:"); sim808.print(latitude); sim808.print(","); sim808.print (longitude); delay(200); sim808.println((char)26); // End AT command with a ^Z, ASCII code 26 delay(200); sim808.println(); delay(20000); sim808.flush(); } else { Serial.println("GPS Initializing…"); } }
بعد إكمال الخطوات المطلوبة يمكنك رفع الكود البرمجي الخاص بنظام تحديد المواقع GPS على لوحة الاردوينو.
ستظهر البيانات على شاشة الاتصال التسلسلي وستصلك رسالة تتضمن رابط الموقع على خرائط قوقل Google map، وسيتم تحديثه كل فترة وإعادة إرساله بشكل تلقائي.