آردوینو نانو Nano سیم کارت GSM - GPRS

پروژه ردیاب خودرو با شیلد ProMake Nano و ماژول سیم کارت Sim800

car-tracker-gps-sim800l-with-easy-iot-promake-nano-shield-digispark
نوشته شده توسط معین صابری

شیلد! یکی از ابزارهای بسیار کاربردی جهت پیاده سازی آسان پروژه ها! به کمک این ابزار شما می توانید مدار خود را به سادگی و بدون درگیر شدن با سیم، برد بورد و…. پیاده سازی کنید. بسیاری از مشکلات پروژه ها حین تست تنها به دلیل لقی و سفت نبودن اتصالات رخ می دهد. همچنین سیم کشی و برقراری اتصالات در مدارهای بزرگ هم امری طاقت فرسا به شمار می رود. جهت حلوگیری از این مشکلات، امروز می خواهیم یک پروژه ردیاب خودرو را به کمک شیلدهای پرومیک(ProMake) اجرا کنیم. در ادامه آموزش ردیاب خودرو با Promake، در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.

 


شیلد آردوینو نانو ProMake


شیلد آردوینو نانو ProMake واقعا فوق العاده است. این شیلد سیم کشی را کامل حذف کرده و دیگر نیازی نیست ساعتها بین ماژل ها سیم کشی کنیم. شیلد آردوینو نانو پرومیک دارای اسلات‌های مختلف جهت اتصال ماژول‌ها است. به عنوان مثال می توانید ماژول GPS، GSM، رله، سنسور و…. را به سادگی روی شیلد قرار دهید. برای اجرای پروژه‌های حرفه‌ای می‌توانید از شیلدهای پرومیک بهره بگیرید. تنوع مختلفی در خصوص پروژه‌ها را میتوانید به کمک این شیلد پیاده سازی کنید.

شیلد آردوینو نانو پرومیک ProMake - دانشجو کیتشیلد آردوینو نانو پرومیک دارای قسمت های مختلفی است. که در ادامه توضیح می‌دهیم.

۱- قسمت اتصال آردوینو نانو

۲- دارای سه قسمت جهت اتصال انواع ماژول و یا سنسور

۳- پورت USB مدل TYPEC جهت اتصال تغذیه

۴- پورت اتصال به پایه ۶ و A1

۵- پورت جهت اتصال OLED

۶- سوکت اتصال باتری سکه ای

۷- ال ای دی RGB و بازر

۸- ترمینال اتصال برق ورودی

بخش های مختلف شیلد آردوینو نانو پرومیک ProMake - دانشجو کیت

 


تعریف پروژه ردیاب خودرو با Promake


دستگاه‌های ردیاب در پروژه‌های مختلف با اهداف متفاوتی به کار برده می‌شوند. معمولا برای سنجش محل خودرو، جلوگیری از سرقت و… اهمیت زیادی دارد. در این سیستم موقعیت خودرو از طریق پیامک به کاربر ارسال می شود. همچنین کاربر می تواند با ارسال پیامک، به دو کانال رله از راه دور فرمان دهد. تا بخش‌های مختلفی از خودرو را فعال و غیر فعال کند. پردازش مرکزی در این پروژه از طریق برد آردوینو نانو صورت می‌گیرد. این برد وظیفه دارد تا واحدهای GPS/GSM و رله را کنترل و مدیریت کند. از آنجاییکه از شیلد آدروینو پرومیک استفاده می کنیم، آردوینو نانو به سادگی بر روی شیلد قرار می گیرد.

برد آردوینو نانو در پروژه ردیاب خودرو - دیجی اسپارک

 

جهت دریافت اطلاعات موقعیت از ماهواره های GPS، از ماژول پرومیک مدل NEO6M استفاده می کنیم. بدون نیاز به هیچ کار خاصی، این ماژول به سادگی روی شیلد قرار می گیرد. پس از قرارگیری تغذیه شده و شروع به ارسال داده می کند. در کنار این، نیاز داریم تا داده ها را از طریق پیامک به کاربر ارسال کنیم. در این پروژه کاربر با شماره سیم کارت دستگاه تماس گرفته و اطلاعات GPS به وی ارسال می شود. به همین منظور، از ماژول GSM-SIM800C مدل پرومیک استفاده می کنیم. این ماژول هم به سادگی، بدون نیاز به سیم کشی بر روی شیلد قرار گرفته و فرامین را اجرا می نماید.

ماژول سیم کارت Sim800 در پروژه ردیاب خودرو - دانشجو کیت

 

در ادامه، ماژول رله نیز طبق فرامین کاربر، شروع به سوییچ می کند. این ماژول نیز همانند سایر ماژول های پرومیک، به سادگی روی شیلد قرار گرفته و بدون نیاز به سیم کشی، به میکروکنترلر متصل می‌شود. در ادامه، شیلد رله را داریم. این شیلد به سادگی روی شیلد نانو قرار می گیرد. این شیلد تمام امکانات لازم جهت راه اندازی رله را داشته و نیاز به هیچ ابزار اضافه، نیست! خروجی‌های ماژول رله هم دارای ترمینال هستند که میتوانید به سادگی برای فرمان به یک وسیله برقی از آن بهره بگیرید.

ماژول رله دو کاناله پرومیک Promake - دانشجو کیت

 


نصب کتابخانه های مورد نیاز


در پروژه‌ی ردیاب خودرو با Promake از کتابخانه TingGPS++ جهت دریافت داده از ماژول GPS استفاده می‌کنیم. برای نصب این کتابخانه در آردوینو، می توان به صورت دستی و یا خودکار (از مخازن آردوینو) اقدام نمود. در اینجا از روش خودکار و با استفاده از نرم افزار آردوینو، به نصب کتابخانه ++TnyGps می‌پردازیم. برای این مورد، ابتدا در محیط نرم افزار آردوینو، بر روی گزینه Tools و سپس Manage Libraries کلیک کنید. پس از کلیک بر روی گزینه Manage Libraries، با تصویر زیر رو به رو می شوید. این منو کتابخانه های در دسترس را به شما نمایش می دهد. مطابق تصویر زیر اقدام کنید.

اصول نصب کتابخانه آردوینو - دیجی اسپارک

 

 در تصویر فوق کادر جستجوی کتابخانه ها با فلش قرمز رنگ مشخص شده است. در این کادر عبارت ++TnyGps را تایپ کنید. در مرحله بعدی، با تصویر زیر رو به رو خواهید شد. با کلیک بر روی گزینه install این کتابخانه را می توانید نصب کنید.

نصب کتابخانه ++TinyGps در آردوینو - دیجی اسپارک

 


کدهای پروژه ردیاب خودرو با Promake


پس از نصب کتابخانه، نوبت به کدهای پروژه ردیاب خودرو با Promake می‌رسد. لطفا کدهای زیر را روی برد خود آپلود نمایید. {لینک کدهای پروژه، کلیک کنید} همچنین میتوانید از بخش زیر اقدام به کپی کردن کدها کنید. به هنگام پروگرام کردن برد آردوینو نانو، دو روش دارید. یکی اینکه روی شیلد پرومیک قرار گرفته باشد که در این صورت بایستی کلید Prog را فعال کنید تا خروجی سریال متصل شده به ماژول‌های GPS و GSM را غیر فعال کند. روش دوم هم پروگرام کردن برد آردوینو نانو به صورت مستقل است و پس از پروگرام کردن به شیلد منتقل کنید.

#include    //کتابخانه سریال نرم افزاری جهت ارتباط GPS و آردوینو
SoftwareSerial gps(4, 7);   //تعیین پایه های ارتباط سریال، توجه: ورودی اول پایه RX ماژول ESP و ورودی دوم پایه TX آن را تعیین می کند.
#include <TinyGPS++.h>   //کتابخانه GPS
TinyGPSPlus gps_d;  //ایجاد یک نمونه شی از کلاس کتابخانه GPS
TinyGPSCustom pdop(gps_d, "GPGSA", 15); //  تعیین تعدیل دقت موقعیت، فیلد ۱۵ از پکت GPGSA مربوط به دقت موقعیت است.
TinyGPSCustom hdop(gps_d, "GPGSA", 16); // تعیین تعدیل دقت افقی، فیلد ۱۶ از پکت GPGSA مربوط به این دقت است.
TinyGPSCustom vdop(gps_d, "GPGSA", 17); //تعیین تعدیل دقت عمودی، فیلد ۱۷ از پکت GPSA مربوط به این دقت است.
//برای اطلاعات بیشتر در زمینه تعدیل دقت،  لینک زیر را مطالعه کنید.
//https://www.agsgis.com/What-is-PDOP-And-Why-its-Obsolete_b_43.html
//توجه داشته باشید که ماژول های GPS داده های خود را تحت فرمت NMEA ارسال می کنند. این فرمت که استاندارد نام گذاری نیروی دریایی ایالات متحده است، داده های دریافتی از ماهواره ها را
//به شکل قابل فهم برای کاربر تبدیل می کنند. برای اطلاعات بیشتر در این زمینه، می توانید لینک زیر را مطالعه کنید.
//https://www.gpsworld.com/what-exactly-is-gps-nmea-data/
#define relay 10
void setup()
{
  //Init serial
  Serial.begin(9600);   //تعیین باودریت
  check_connect();  // اتصال به شبکه این تابع منتطر اتصال ماژول sim800l به شبکه مامده و پس از اتصال، برنامه ادامه می یابد.
  Serial.print("AT+CMGF=1\r\n");   //به کمک این دستور ارسال پیامک در حالت متن قرار می گیرد.
  delay(1000);
  Serial.print("AT+CMGD=1,4\r\n");    //به کمک این دستور حافظه پیامک ها را خالی می کنیم.
  delay(1000);
  Serial.print("AT+CSMP=17,167,0,0\r\n");   //به کمک این دستور تنظیمات ارسال پیامک را انجام می دهیم. این دستور برای سیم کارت ایرانسل الزامی است.
  delay(1000);
  gps.begin(9600);  //راه اندزای سریال نرم افزاری، توجه: باودریت ماژول GPS در حالت عادی ۹۶۰۰ است.
  delay(2500);
  pinMode(relay, OUTPUT);

}

void loop()
{
  send_data(); //تابع جهت تشخیص تماس تلفنی و ارسال داده ها
  smartDelay(100); //تابع جهت خواندن داده های GPS، در این تابع مدت زمان جهت انتظار برای خواندن داده های جدید را در ورودی به میلی ثانیه قرار می دهیم.
  relay_ctrl();
}
void check_connect() {
  char ccalr[] = {"+CCALR: 1"};
  Serial.println("WAITING TO CONNECT TO NETWORK");
  Serial.flush();
  while (true) {
    Serial.print("AT+CCALR?\r\n"); // ارسال دستور AT+CCALR به ماژول، در صورتیکه ماژول به شبکه متصل گردد ماژول عبارت CCALR: 1 را بر میگرداند
    if (Serial.find(ccalr) == true) // نتیجه تابع find در صورتی true می شود که عبارت مورد نظر یافت شده باشد، در غیر اینصورت درون حلقه تا زمانیکه نتیجه مورد نظر یافت نشود، باقی خواهد ماند
      break; // خروج از حلقه با یافتن پیام مورد نظر
  }
  Serial.println("CONNECTED TO NETWORK");
  Serial.flush();
}
void send_data() {
  char RING[] = {"RING"};  // زمانیکه که با شماره سیم کارت درون ماژول تماس گرفته شود، ماژول عبارت RING را بر می گرداند.
  String number = "";
  String data = "";
  if (Serial.find(RING) == true) {   //در صورتیکه تابع find عبارت RING را در بافر سریال بیابد، یعنی با ماژول تماس گرفته شده است.
    delay(500);
    Serial.print("ATH\r\n");//قطع تماس تلفنی
    delay(1000);
    send_sms("DATA:");   //تابع send_sms مخصوص ارسال پیام است. ورودی این تابع متن پیام را قبول کرده و سایر داده ها نظیر سرت و لینک موقعیت جغرافیایی را پیامک می کند. در این جا متن ابتدایی پیامک را DATA قرار می دهیم
  }
}
static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (gps.available())   //تا زمانیکه در بافر داده وجود دارد
      gps_d.encode(gps.read());  //داده ها را بخوان
  } while (millis() - start < ms); //مدت زمان جهت خواندن بافر ما در اینجا ۵۰۰ میلی ثانیه را تعیین کرده ایم. } void send_sms( String data) { //توجه: مطابق فرمت زیر، داده های در پیامک با ویرگول از هم جدا می شوند. به عنوان مثال داده ها به صورت زیر خواهند بود String number = ""; unsigned long tm = 0; char cmgs[] = {"+CMGS:"}; // متغیر جهت کنترل ارسال پیام متنی if (Serial.available () > 0)
    Serial.readString();
  String cbc = ""; //متغیر جهت ذخیره شارژ باتری
  Serial.print("AT+CBC\r\n");   //دستور جهت دریافت میزان شارژ باتری
  delay(1500);
  cbc = Serial.readString();
  cbc = cbc.substring(cbc.indexOf(",") + 1);   //جداسازی داده ها جهت رسیدن به میزان شارژ باتری برای اطلاعات بیشتر، لینک زیر را مطالعه کنید.
  //https://digispark.ir/practical-at-commands-in-sim800l-gsm-module/
  cbc = cbc.substring(0, cbc.indexOf(","));
  data = data + "\nCURRENT SPEED:";
  data = data + String(gps_d.speed.kmph());  //دریافت سرعت
  //************************************************
  data = data + "\nBATTEY CHARGE:";
  data = data + cbc;
  //********************************************************
  data = data + "\n";  //یک خط پایین تر می بریم تا داده های GPS را به همراه لینک گوگل مپ قرار دهیم.
  //*************************************************
  data = data + "google.com/maps?q=";  //برای نمایش داده در گوگل مپ، می بایست پس از عبارت رو به رو، طول و عرض جغرافیایی را قرار داده و این دو مقدار را با یک ویرگول از هم جدا کنیم.
  data = data + String(gps_d.location.lat(), 6);  //دریافت عرض جغرافیایی
  data = data + ",";
  data = data + String(gps_d.location.lng(), 6);  //دریافت طول جغرافیایی با ۶ رقم دقت اعشار
  //**************************************************
  number = "+98*************";//در اینجا به جای ستاره ها شماره تماس خود را قرار دهید. به این شماره داده ها ارسال می گردد.
  Serial.print("AT+CMGS=\"" + number + "\"\r\n");
  Serial.flush();
  delay(1000);
  Serial.println(data);//ارسال متن پیام که اطلاعات بیمار به همراه موقعیت جغرافیایی است
  Serial.flush();
  delay(1000);
  Serial.write(0x1a);  //کاراکتر ctrl+z جهت ارسال پیام
  delay(1000);
  tm = millis();
  while (Serial.find(cmgs) == false && (millis() - tm) < 20000) // دراین قسمت چنانچه پیامک ارسال شود عبارت CMGS+ از سمت ماژول دریافت می گردد. برای مدت ۲۰ ثانیه صبر می کنیم. چنانچه این عبارت دریافت نشد، از حلقه خارج می شویم. delay(50); Serial.print("AT+CSCLK=2"); //قرارگیری ماژول سیم کارت در حالت کم مصرف delay(2500); } void relay_ctrl() { String data=""; char CMTI[] = {"+CMTI"}; //در صورت دریافت پیامک این عبارت توسط ماژول ارسال می شود. if (Serial.find(CMTI) == true) { //در صورت دریافت پیامک if (Serial.available() > 0)  //پاک کردن بافر سریال از داده های پیشین
      Serial.readString();
    Serial.print("AT+CMGR=1\r\n");  //خواندن متن پیام از خانه شماره ۱ حافظه سیم کارت همیشه پس از دریافت پیامک حافظه را پاک می کنیم تا پیام تنها در خانه شماره یک حافظه باشد.
    while (Serial.available() == 0) { ///انتظا ربرای دریافت پاسخ که متن پیامک در آن قرار دارد.
      delay(20);
    }
    data = Serial.readString();
    if (data.indexOf("ON10") >= 0)  // با عبارت ON10 رله فعال می شود.
      digitalWrite(relay, HIGH);
    else if (data.indexOf("OFF10") >= 0)   // با عبارت OFF10 رله خاموش می شود.
      digitalWrite(relay, LOW);
    Serial.print("AT+CMGD=1,4\r\n"); //پاک کردن پیام های حافظه سیم کارت
    delay(1000);
  }
}

 


شماتیک و اتصالات ردیاب خودرو با Promake


حقیقتا اولین بار است که شماتیک و اتصالات نداریم!!! خیلی جالب است! فقط کافیست ماژول ها را در جای صحیح خود بگذاریم! نه درگیری سیم کشی داریم، نه مشکل قطعی برد بورد را شاهد خواهید بود. برای اتصالات قطعات را مطابق تصویر زیر روی شیلد قرار دهید، همین و بس. برای اینکه جهت اتصال ماژول‌های پرومیک روی شیلد پرومیک نانو را بتوانید تشخیص دهید، کافیست چاپ راهنمای روی برد را ملاک کار قرار دهید، تا هر ماژول به صورت صحیح در محل قرار گیرد.

 


اجرای پروژه ردیاب خودرو با Promake


جهت اجرای پروژه ردیاب خودرو با Promake می‌بایست  پس از اتصال ماژول سیم کارت به شبکه، شروع به کار کنیم. بهتر است برای ماژول GPS از آنتن سیم دار اکتیو استفاده کنید. همچنین عملکرد صحیح ماژول GPS حین حرکت دیده می‌شود. در ادامه، کافیست با شماره سیم کارت درون دستگاه تماس بگیرد. پس از این کار تماس قطع شده و موقعیت به شما ارسال می‌شود. همچنین از طریق پیامک می‌توانید وضعیت رله ها را کنترل کنید. کنترل رله ها طبق فرامین زیر صورت می گیرد:

OFF10: رله شماره ۱ خاموش

ON10: رله شماره ۱ روشن

در ادامه، فقط کافیست با شماره سیم کارت درون ماژول دستگاه تماس بگیرید. پس از تماس، مشخصات خودرو مانند سرعت، موقعیت و… به شما پیامک می شود. دقت داشته باشید که موقعیت در قالب یک لینک گوگل به شما ارسال می گردد.

 


لوازم مورد نیاز


لینک خرید شیلد اردوینو نانو پرومیک، کلیک کنید

لینک خرید برد آردوینو نانو، کلیک کنید

لینک خرید ماژول GPS مدل پرومیک، کلیک کنید

لینک خرید ماژول GSM، کلیک کنید

لینک خرید ماژول رله، کلیک کنید

 


جمع بندی


در این آموزش به طراحی و پیاده سازی یک سیستم ردیاب خودرو پرداختیم. به کمک این سیستم شما می توانید از راه دور موقعیت خودرو را مشاهده کنید. در طرف دیگر، این سیستم دارای دو رله بوده که با فرمان از راه دور، می توان وضعیت رله ها را کنترل نمایید. جهت پیاده سازی این پروژه از شیلد پرومیک استفاده کرده ایم. به کمک این شیلد کلیه ماژول های مخابراتی مانند GPS و GSM به سادگی روی برد قرار می گیرند. بدین ترتیب به سادگی، بدون اتلاف زمان می توانیم نمونه اولیه پروژه خود را بسازیم.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه