آموزش آردوینوپروژه های آردوینو

ساخت ردیاب جی پی اس GPS ماشین با A9G و آردوینو

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

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

ماژول جی پی اس A9G

ماژول مبتنی بر A9G دارای ویژگی های مختلفی است، اکثر ویژگی هایی که این برد ارائه می دهد بر اساس خود تراشه AG9 است، اما ویژگی های دیگری نیز وجود دارد که به طور خاص برای این ماژول ارائه شده و در این بخش از مقاله به همه آن ویژگی ها خواهیم پرداخت.

ماژول جی پی اس A9G

A9G یک ماژول چهار بانده کامل GSM/GPRS+GPS بر اساس تراشه RDA8955 است. طراحی Low BOM این ماژول یک راه حل مقرون به صرفه برای برنامه های مدرن مبتنی بر اینترنت اشیا ارائه می دهد. مانند هر ماژول GPRS دیگری، این ماژول دارای قابلیت تماس و پیامک است. به غیر از آن، این ماژول دارای یک حالت کم مصرف با حداقل مصرف جریان 2 میلی آمپر است. همچنین امکان به روز رسانی سیستم عامل از طریق پورت UART را ارائه می دهد.

برد پودینگ مبتنی بر A9G

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

برد پودینگ مبتنی بر A9G

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

مطلب پیشنهادی:  راه اندازی سنسور تیلت Tilt با آردوینو

قطعات مورد نیاز برای سیستم ردیابی خودرو

برای ساخت یک سیستم ردیابی خودرو مبتنی بر A9G، به قطعات زیادی نیاز ندارید. برای ساخت این ردیاب جی پی اس آردوینو فقط به چند قطعه نیاز دارید.

قطعات مورد نیاز برای سیستم ردیابی خودرو

  • آردوینو پرو مینی
  • مبدل FTDI
  • ماژول A9G GSM/GPS
  • نگهدارنده باتری
  • باتری لیتیومی 18650
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

مدار ردیاب GPS با آردوینو

مدار ردیاب GPS با آردوینو

مدار شماتیک ردیاب GPS مبتنی بر A9G ساده است. ماژول A9G از مجموعه دستورات AT پشتیبانی می کند. برای کنترل ماژول A9G فقط باید برد را با ولتاژ 5 ولت تغذیه کنید و باید پایه TX و RX آردوینو را به پایه RX و TX ماژول A9G متصل کنید. این تمام ارتباطی است که برای کار با این ماژول باید انجام دهید. علاوه بر این، ما از یک باتری برای تغذیه ماژول استفاده می کنیم که در شکل شماتیک قرار داده شده است. این یک ماژول همه کاره است و با کمی تغییر آن می توانید یک ردیاب GPS برای ماشین، یک ردیاب GPS برای دوچرخه یا حتی یک مکان یاب GPS برای فعالیت های مرتبط با سفر بسازید.

مدار ردیاب جی پی اس با آردوینو

دستورات AT برای ماژول A9G GSM/GPS

اگر برای اولین بار از ماژول A9G GSM و GPS استفاده می کنید، برای بررسی تمام عملکردهایی که ماژول می تواند انجام دهد، باید به لیست دستورات AT نگاهی بیاندازید. برخی از دستورات AT در زیر فهرست شده اند.

  • AT+CREG?: بررسی میکند که اتصال به شبکه وجود دارد یا خیر (1 =متصل)
  • AT+CCID: اطلاعات مربوط به شما را نمایش میدهد
  • AT+CSQ: قدرت سیگنال را نشان می دهد

دستورات مرتبط با GPS:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
  • AT+GPS = 1: GPS را روشن می کند
  • AT+GPS = 0: GPS را خاموش می کند
  • AT+GPSRD=1: شروع به چاپ داده های جی پی اس می کند
  • AT+GPSRD=0: چاپ داده های جی پی اس را متوقف می کند
  • AT+LOCATION=1: این دستور برای دریافت اطلاعات مکان از طریق سرور استفاده می شود

دستورات مرتبط با اینترنت:

  • AT+CIPSTATUS: بررسی می کند که آیا آی پی متصل است یا خیر
  • AT+CGDCONT=1: به اینترنت متصل می شود
  • AT+HTTPGET: برای دریافت داده ها از سرور استفاده میشود
  • AT+HTTPPOST: برای ارسال داده ها به سرور استفاده میشود

دستورات مرتبط با تماس:

  • ATA: به تماس ورودی پاسخ میدهد
  • ATD: یک شماره را با این دستور ارسال کنید تا تماس بگیرد
  • ATH: برای قطع تماس ورودی یا خروجی استفاده می شود
  • AT+SNFS=0: اگر 0 باشد در حالت هدفون و اگر 1 باشد در حالت بلندگو قرار میگیرد

دستورات مرتبط با پیامک:

  • AT+CMGF=1: برای تنظیم فرمت پیام استفاده می شود 1 در قالب متن و قالبهگز است
  • AT+CMGL: این دستور برای خواندن پیامک از حافظه ماژول استفاده می شود
  • AT+CMGS: برای ارسال پیامک استفاده میشود

این دستور برای ارسال پیام به یک شماره مشخص استفاده می شود. مثلا AT+CMGS = "+919804049270". پس از زدن اینتر شما باید متن پیام را نیز وارد کنید.

کد آردوینو برای ردیاب GPS

کد ارتباط A9G GSM/GPS با آردوینو بسیار ساده و قابل درک است، اما قبل از شروع باید کتابخانه TinyGPSPlus.h را که توسط ساخته شده است mikalhart دانلود و نصب کنیم.

مطلب پیشنهادی:  پروژه آردوینو رقص نور و پمپ آب با صدای محیط

ما کد خود را با فراخوانی کردن تمام کتابخانه های مورد نیاز و تعریف همه متغیرهای مورد نیاز شروع می کنیم. ابتدا کتابخانه TinyGPSPlus و کتابخانه SoftwareSerial را فراخوانی میکنیم. سپس RXPin و TXPin را تعریف کردیم که ماژول A9G خود را به آن پین ها وصل کردیم. در مرحله بعد، یک متغیر رشته ای تعریف کرده ایم که در آن لینک نقشه های گوگل را ذخیره کرده ایم.

#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
static const int RXPin = 6, TXPin = 5;
String s = "www.google.com/maps/dir/";

ما چند متغیر دیگر داریم که بعداً در کد استفاده خواهند شد. Interval و previousMillis در بخشی از کد مورد استفاده قرار خواهند گرفت که در آن ما یک تابع را به طور مکرر پس از یک دوره معین فراخوانی میکنیم. GPSBaud برای تنظیم Baud Rate سریال آردوینو استفاده می شود. در نهایت، متغیر data_counter را داریم، هدف ما در کد این است که 10 نقطه داده را از GPS دریافت کرده و از طریق SMS ارسال کنیم به همین دلیل از متغیر data_counter استفاده میشود.

unsigned long interval = 10000;
static const uint32_t GPSBaud = 9600;
unsigned long previousMillis = 0;
int data_counter;

سپس، یک بافر کاراکتر داریم. بافر char باید مقادیر داده float را نگه دارد، بنابراین ابتدا یک بافر کاراکتری را ایجاد کرده و سپس آن را به یک داده اشاره گر Float منتقل می کنیم تا زمانی که داده ها را به آن اختصاص می دهیم، به طور خودکار در متغیر دیگر ذخیره شوند.

const size_t BUFSIZE = 300;
char f_buffer[BUFSIZE];
float *f_buf = (float*)f_buffer;

در مرحله بعد، ما یک نمونه برای کتابخانه TinyGPSPlus و کتابخانه SoftwareSerial ایجاد کرده ایم.

TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);

در مرحله بعد، ما تابع setup را داریم، در تابع setup، ارتباط سریال و سریال نرم افزاری را مقداردهی اولیه می کنیم و با شروع کار در سریال مانیتور کلمه AT را ارسال میکنیم. سپس باید OK را به عنوان پاسخ دریافت کنیم.

Serial.begin(9600);
  ss.begin(GPSBaud); 
  Serial.println("Starting...");
  ss.println("\r");
  ss.println("AT\r");
  delay(10);

سپس، ما دستورات AT خود را داریم که برای فعال کردن GPS استفاده می شود. GPRS را فعال میکنیم و ماژول را نیز روی حالت TEXT قرار می دهیم تا داده ها را از طریق SMS به صورت متن ارسال کند. در نهایت، GPS را طوری تنظیم می کنیم که داده ها را روی یک سریال مانیتور چاپ کند.

ss.println("\r");
ss.println("AT+GPS=1\r");
delay(100);
ss.println("AT+CREG=2\r");
delay(6000);
//ss.print("AT+CREG?\r");
ss.println("AT+CGATT=1\r");
delay(6000);
ss.println("AT+CGDCONT=1,\"IP\",\"WWW\"\r");
delay(6000);
 // ss.println("AT+LOCATION=1\r");
ss.println("AT+CGACT=1,1\r");
delay(6000);
//Initialize ends
//Initialize GPS
ss.println("\r");
ss.println("AT+GPS=1\r");
delay(1000);
//ss.println("AT+GPSMD=1\r");   //مکان یاب ماژول را در حالت فقط جی پی اس تنظیم میکنیم
ss.println("AT+GPSRD=10\r");
delay(100);
// تنظیم حالت اس ام اس روی متنی
ss.println("AT+CMGF=1\r");
  delay(1000);
  //ss.println("AT+LOCATION=2\r");
}

در مرحله بعد، ما تابع loop را داریم. در تابع loop، تابع smartDelay(2000) را داریم که تضمین می کند داده های دریافتی از ماژول GPS در آرایه ای که با آن کار می کنیم پر می شود.

 smartDelay(2000);

در مرحله بعد، ما تابع بررسی وضعیت خود را داریم که اگر داده ای از UART دریافت نشود، هر 5 ثانیه یک متن اعلام خطا چاپ می کند.

  if (millis() > 5000 && gps.charsProcessed() < 10)
    Serial.println(F("No GPS data received: check wiring"));

در نهایت در تابع حلقه یک تابع تایمر داریم. این تابع تایمر هر 30 ثانیه اجرا می‌شود و تابع send_gps_data() را فراخوانی می‌کند که تمام داده‌های GPS را جمع‌آوری می‌کند و وقتی 10 داده جمع‌آوری شد، داده‌ها را از طریق پیامک ارسال می‌کند.

if ((unsigned long)(currentMillis - previousMillis) >= interval) {
    send_gps_data();
    previousMillis = currentMillis;
  }

سپس ، ما تعریف تابع smartDelay را داریم. این تابع داده های GPS را از پایه های ارتباط سریال نرم افزاری دریافت می کند و داده های فرآیند را از طریق کتابخانه tinyGPS ارسال می کند.

static void smartDelay(unsigned long ms) {
  unsigned long start = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

سپس، تابع send_gps_data() را داریم. این تابع داده های GPS را پردازش می کند و آن را در یک متغیر رشته ای قرار می دهد و آن متغیر رشته ای به عنوان یک پیام ارسال می شود.

void send_gps_data(){
  if (gps.location.lat() == 0 || gps.location.lng() == 0)  {
    Serial.println("Return Executed");
    return;
  }
  data_counter++;
  Serial.print("Latitude (deg): ");
  f_buf[data_counter] = gps.location.lat();
  Serial.println(f_buf[data_counter]);
  Serial.print("Longitude (deg): ");
  f_buf[data_counter + 1] = gps.location.lng();
  Serial.println(f_buf[data_counter + 1]);
  Serial.println(data_counter);
  Serial.println();
  s += String(gps.location.lat(), 6);
  s += ",";
  s += String(gps.location.lng(), 6);
  s += "/";
  Serial.println(s);
  if (data_counter >= 10)  {
    data_counter = 0;
    Serial.println("Sending Message");
    ss.println("AT+CMGF=1\r");
    delay(1000);
    ss.println("AT+CNMI=2,2,0,0,0\r");
    delay(1000);
    ss.print("AT+CMGS=\"+919804049270\"\r"); //با شماره موبایل خود جایگزین کنید
    delay(1000);
    ss.print(s);
    ss.write(0x1A);
    delay(1000);
    s = "www.google.com/maps/dir/";
  }
}

حالا قسمت هایی از کد هست که باید بیشتر توضیح داد. عبارت if (gps.location.lat() == 0 || gps.location.lng() == 0) بررسی می کند که آیا داده های رمزگشایی شده صفر هستند یا خیر. اگر داده های رمزگشایی صفر باشد، به تابع اصلی برگردانده میشود. در غیر این صورت، متغیر data_counter را افزایش می دهیم و مقادیر طول و عرض جغرافیایی را از نمونه gps در آرایه بزرگی که قبلاً اعلام کرده ایم قرار می دهیم. اکنون تمام داده‌هایی را داریم که به متغیر s متصل می‌کنیم و رشته را از طریق پیامک ارسال می‌کنیم.

مطلب پیشنهادی:  تشخیص سرعت با برد آردوینو و سنسور مادون قرمز

آزمایش ردیاب GPS با ماژول A9G

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

آزمایش ردیاب GPS با ماژول A9G

بعد از آن ماژول را بیرون بردیم و قدم زدیم و همانطور که می بینید مختصات GPS را به صورت پیامک دریافت کردیم.

GPS Tracker ردیابی مختصات GPS

وقتی روی پیام کلیک کردیم، چیزی شبیه به آنچه در تصویر زیر می بینید، دیدیم.

دریافت مختصات جی پی اس آردوینو

این آموزش به پایان رسید. امیدوارم این مقاله برای شما مفید باشد و بتواند به خوبی مدار ردیاب خود را طراحی کنید. اگر سوالی دارید در قسمت نظرات اعلام کنید.

3.6 (9 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

برای ارسال تصاویر از انجمن سایت استفاده کنید.

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

10 نظر

  1. سلام برای اجرا در پروتئوس چطور ماژول A9G رو اضافه کنم، کتابخانش رو پیدا نکردم!

    1. سلام عزیز
      خیلی از ماژول ها قابلیت شبیه سازی در پروتئوس را ندارند همچنین این ماژول کاملا جدید هست به همین خاطر فکر نمیکنم جایی کتابخانه ای برای این مورد پیدا کنید.

  2. سلام خسته نباشید
    یه سوال …
    من درست متوجه شدم یعنی هر ۵ دقیقه یک بار یه پیام از دستگاه به موبایل ارسال میشه و مسیر طی شده توی اون ۵ دقیقه رو نشون میده
    اینجوریه ؟

    بعد یه عرض دیگه
    میشه اموزش ساخت gps رو بزارید که بشه با هاش انلاین مشاهده کرد یعنی مثل همین برنامه ی بلد که گوشی یه داده ای رو ۵ ثانیه یک بار به یک شبکه ارسال میکنه و ما از طریق همون برنامه بلد یا اسنپ میفهمیم که طرف کجاست
    میشه این اموزش رو بزارید

  3. سلام وقت بخیر ردیاب با این باتری حداکثر چند روز یا چند ساعت کار میکنه؟

  4. از ماژول های جی پی اس دیگه که gsmنداشته باشه میشه استفاده کرد؟

    1. سلام عزیز
      در این صورت برای انتقال اطلاعات از خودرو به موبایل باید یک راهکار رو داشته باشید که یکیشون gsm هست

  5. همین پروژه بدون آردویونو هم انجام میشه.
    هم با اینترنت خود سیم کارت میشه که نیاز به راه اندازی سرور gps داره.
    و هم میشه ارسال پیامکی داشته باشه که در این صورت سرور نیاز نداره.

    1. سلام عزیز
      این پروژه نیازمند یک کنترلر مثل آردوینو یا … هست

  6. سلام
    سپاسگزارم از مطالب خوبتون
    ولی به نظر من بدون آردیونو هم میشه راش انداخت و هزینه پروژه هم کمتر میشه
    سپاس

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *