تحديد المواقع GPS باستخدام الاردوينو ورسائل SMS

مبتدئ

image_pdf

مقدمة

في هذا الدرس سنصنع نظام تحديد المواقع GPS باستخدام الاردوينو ووحدة اتصال وارسال واستقبال الإشارة GPRS GSM Module ثم يتم ارسال بيانات الموقع على شكل رسالة نصية SMS.

المواد والأدوات

sim808-gps-gsm-module-sending-gps-location-sms

1× اردوينو اونو

number-conversion-by-arduino

1× سلك الاردوينو

الأنظمة العددية

حزمة أسلاك توصيل (ذكر – أنثى)

 

12V adapter

1× محول تيار (12Volt adapter 2A)

تحديد المواقع GPS

وحدة اتصال وارسال واستقبال الإشارة (GPRS GSM Module)SIM

1× شريحة (SIM)

وحدة اتصال وارسال واستقبال الإشارة (GPRS GSM Module)

تستخدم الوحدة في مشاريع انترنت الأشياء حيث يتم ربطها مع متحكم الاردوينو لتوفير الاتصال بالإنترنت.

يمكن من خلالها إرسال رسائل SMS وإجراء المكالمات الهاتفية وغيرها من الأوامر.تحديد المواقع GPS

 

تتضمن الوحدة لاقط هوائي لاستخدامات تحديد الموقع GPS. GPS

كما تتضمن لاقط هوائي GSM لنقل إشارات الإتصال.
GSM

توصيل الدائرة

وصل الدائرة الكهربائية كما في الشكل المقابل.تحديد المواقع GPS

اضغط ضغطًا مطولًا على زر الطاقة حتى تضيء المصابيح الجانبية، هنا نتأكد بأن اللوحة تعمل بالشكل الصحيح.تحديد المواقع GPS

ادخل الشريحة SIM من المنفذ التالي.تحديد المواقع GPS

البرمجة

في البداية عليك تحميل مكتبة 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، وسيتم تحديثه كل فترة وإعادة إرساله بشكل تلقائي.تحديد المواقع GPS

X
Product added to the cart