ردیاب خودرو با آردوینو
در این مطلب قصد داریم یک پروژه ردیاب خودرو با آردوینو را در اختیار شما قرار بدهیم. برای همین منظور اجازه بدید تا گام به گام با هم پیش بریم تا با برد آردوینو که در بین مهندسین و برنامه نویس ها از محبوبیت بالایی برخورد است، یک ردیاب خوردو بسازیم.
برای طراحی حرفه ای هر گونه برد و مدارات الکترونیکی توسط تیم متخصص و جوان مرصا همین الان بر روی لینک زیر کلیک کنید و سفارش برد الکترونیکی خود را برای ما ارسال کنید. ردیاب خودرو یا هر گونه برد الکترونیکی دیگری که بخواهید چه عملکرد آنلاین داشته باشد چه آفلاین را برای شما در بهترین زمان و کیفیت طراحی خواهیم کرد.
نگاه کلی: سیستم ردیاب خودرو مبتنی بر GPS و آردوینو
در ابتدا باید بررسی کنیم که کلیات سیستم ردیاب خودرو که با GPS و GSM چگونه کار می کنند. درحال حاضر اکثر خودرو های موجود در بازار گران قیمت هستند و به نوعی باعث شده که ردیاب ها (Trackers) نیز گران قمیت باشند. شاید با این پروژه شما بتوانید یک ردیاب خودرو ارزان قیمت برای خود بسازید.
سیستم کلی ردیاب های خودرو بر پایه ارسال مختصات محل دستگاه کار می کند. که معمولاً برای نمایش آن از گوگل مپ (Google map) بهره می برند. روال کار بسیار ساده است، شما یک در خواست برای دستگاه ارسال می کنید و دستگاه کافی است که مختصات خود را در جواب برگرداند. به این صورت شما می توانید محل خودروی خود را بر روی نقشه مشاهده کنید.
این روش ارزان تری نسبت به روش GPS دو طرفه است که ارتباط بین ماهواره GPS و دستگاه به صورت دو طرفه برقرار می شود ولی برای انجام آن نیاز به مودم GSM است. در این پروژه، از یک ماژول GSM تنها برای برقراری ارتباط از طریق شبکه 2G بین موبایل و دستگاه کمک گرفته ایم.
برای اجرا این پروژه به یک ماژول GSM توان پایین و یک ماژول GPS نیاز داریم. به این منظور از یک ماژول GPS با نام Neo-6M و ماژول GSM معروف SIM800/900 به همراه برد آردوینو اونو (Arduino UNO) استفاده کرده ایم.
لیست قطعات مورد نیاز برای ردیاب خودرو
برای انجام این پروژه برد های مجتمع شده ای مانند Maduino Zero که از ماژول A9G بهره می برد نیز وجود دارد. ولی ما قصد داریم این دستگاه را با قطعات جدا از هم و به کمک آردوینو اونو بسازیم. برای شروع به کار به قطعاتی که در زیر لیست شده نیاز داریم:
ردیف | نام قطعه | توضیحات | تعداد |
1 | Arduino | Arduino UNO R3/ Nano یا سایر بردهای آردوینو | 1 |
2 | LCD Display | 16X2 LCD Display | 1 |
3 | GSM Module | SIM800/900 GSM Module | 1 |
4 | GPS Module | Neo-6M GPS Module | 1 |
5 | Potentiometer | Neo-6M GPS Module | 1 |
6 | Connecting Wires | 10K | 10 |
7 | Breadboard | Jumper Wires | 1 |
ردیاب خودرو مبتنی بر آردوینو، SIM800/900، NEO-6M
خوب خیلی از شما دوستان می دانید که وظیفه هر کدام از قطعات معرفی شده چیه ولی برای اطمینان بیشتر توضیح مختصری درباره بخش های اصلی این دستگاه را ارائه می کنیم. برد های پردازنده آردوینو از محبوبیت و قدرت پردازش بسیار خوبی برخوردار می باشند برای این پروژه بسیار مناسب هستند. علاوه بر این وجود IDE قدرتمند این بردها در کنار کدهای Open-source موجود در اینترنت انجام این پروژه را آسانتر خواهد کرد.
در بخش ارتباط با شبکه GSM از ماژول SIM800/900 بهره می بریم که بسیار متداول و دسترس است. برای انتقال اطلاعات بهینه ترین حالت استفاده از شبکه 2G و ارسال SMS است. زیرا هم از پوشش بسیار خوبی برخوردار است و هم هزینه مالی و توانی کمی دارد. این ماژول به ما کمک می کند اطلاعات و درخواست ها را از طریق شبکه GSM منتقل نماییم.
ماژول GPS Neo-6M هم که از اسمش پیداست. وظیفه پیدا کردن مختصات جغرافیایی دستگاه را از طریق ماهواره های GPS (Global positioning system) را بر عهده دارد. برای نمایش محل دستگاه بر روی نقشه کره زمین تنها به دو مولفه عرض و طول جغرافیایی (Latitude and Longitude) نیاز است. این ماژول به کمک آنتن مخصوص این اطلاعات را از ماهواره دریافت می کند و در اختیار آردوینو قرار می دهد.
رابط بین ماژول ها و برد آردوینو به صورت سریال می باشد و هر کدام با استفاده از پورت های جداگانه با آردوینو ارتباط بر قرار می کند. برای مکالمه از دستورات AT استفاده می شود که به صورت استاندارد بوده و در دیتاشیت این قطعات لیست شده اند. با توجه به کد های برنامه متوجه خواهید شد که کلیات کار بسیار ساده و آسان است.
تغذیه
برای تغذیه این دستگاه در نظر داشته باشید که SIM800/900 در بازه ولتاژی 3.7V تا 4.2V به خوبی عمل می کند. از طرفی آردوینو برای عملکرد مطمئن به حداقل 5V نیاز دارد. اگر قصد دارید به صورت قابل حمل از این دستگاه استفاده نمایید پیشنهاد می کنم که از یک باتری 18650 استفاده کنید. محدوده ولتاژ باتری های لیتیوم یون 18650 بین 3.4V تا 4.2V است. با این شرایط می شود باتری را به صورت مستقیم به SIM800/900 متصل کنید.
در ادامه از یک مبدل DC-DC Boost Converter Step Up استفاده نمایید و ولتاژ 5 ولت آردوینو را تامین نمایید. در بردهای آردوینو، یک خروجی ولتاژ 3.3V تعبیه شده است که می توان برای تغذیه ماژول Neo-6M که حداکثر ولتاژ کاری آن 3.6V است، استفاده کرد.
اگر از ولتاژ باتری خودرو برای تغذیه استفاده می کنید باید از دو مبدل ولتاژ بهره ببرید و دو سطح ولتاژ، یکی 3.9V تا 4.1V برای SIM800/900 و یکی 5V برای آردوینو فراهم نمایید. البته برای بردهای آردوینو ولتاژ ورودی بین 6 تا 20 ولت قابل قبول می باشد اما کمتر از 7V می تواند باعث شود ولتاژ تغذیه آردوینو زیر 5V رود و برد پایدار نباشد و برای بالای 12V می تواند منجر به داغ شدن بیش از حد رگولاتور شود.
سیم بندی
برای ادامه کار باید سیم بندی را به درستی انجام بدیم و قطعات را به یکدیگر متصل کنیم. حال با توجه به تصویر زیر مسیر ارتباطی بین قطعات را فراهم می آوریم. در مرحله تست می توانید پروژه را بر روی Breadboard پیاده نمایید بعد از اطمینان برای آن برد مدار چاپی (PCB) طراحی و سفارش دهید.
کدنویسی ردیاب خودرو با IDE آردوینو
محیط برنامه نویسی آردوینو بسیار محبوب و کارآمد است به گونه ای که اکنون برای برنامه نویسی برای سایر پردازنده ها نیز مورد استفاده قرار می گیرد. خوب دیگر به بخش مورد علاقه کدنویس ها رسیدیم 😁. کد های زیر را بر روی برد آردوینو خود آپلود کنید. این کد پایه خوبی برای ردیاب خودرو شخصی شما خواهد بود.
#include <TinyGPS++.h>
#include
#include
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
int temp=0,i;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
String stringVal = "";
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
lcd.begin(16,2);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
lcd.print("Vehicle Tracking");
lcd.setCursor(0,1);
lcd.print(" System ");
delay(2000);
gsm_init();
lcd.clear();
Serial.println("AT+CNMI=2,2,0,0,0");
lcd.print("GPS Initializing");
lcd.setCursor(0,1);
lcd.print(" No GPS Range ");
delay(2000);
lcd.clear();
lcd.print("GPS Range Found");
lcd.setCursor(0,1);
lcd.print("GPS is Ready");
delay(2000);
lcd.clear();
lcd.print("System Ready");
temp=0;
}
void loop()
{
serialEvent();
while(temp)
{
while (ss.available() > 0)
{
gps.encode(ss.read());
if (gps.location.isUpdated())
{
temp=0;
digitalWrite(13,HIGH);
tracking();
}
if(!temp)
break;
}
}
digitalWrite(13,LOW);
}
void serialEvent()
{
while(Serial.available()>0)
{
if(Serial.find("Track Vehicle"))
{
temp=1;
break;
}
else
{
temp=0;
}
}
}
void gsm_init()
{
lcd.clear();
lcd.print("Finding Module..");
boolean at_flag=1;
while(at_flag)
{
Serial.println("AT");
delay(1);
while(Serial.available()>0)
{
if(Serial.find("OK"))
at_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Module Connected..");
delay(1000);
lcd.clear();
lcd.print("Disabling ECHO");
boolean echo_flag=1;
while(echo_flag)
{
Serial.println("ATE0");
while(Serial.available()>0)
{
if(Serial.find("OK"))
echo_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Echo OFF");
delay(1000);
lcd.clear();
lcd.print("Finding Network..");
boolean net_flag=1;
while(net_flag)
{
Serial.println("AT+CPIN?");
while(Serial.available()>0)
{
if(Serial.find("+CPIN: READY"))
net_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Network Found..");
delay(1000);
lcd.clear();
}
void init_sms()
{
Serial.println("AT+CMGF=1");
delay(400);
Serial.println("AT+CMGS=\"850xxxxxxx\""); // use your 10 digit cell no. here
delay(400);
}
void send_data(String message)
{
Serial.print(message);
delay(200);
}
void send_sms()
{
Serial.write(26);
}
void lcd_status()
{
lcd.clear();
lcd.print("Message Sent");
delay(2000);
lcd.clear();
lcd.print("System Ready");
return;
}
void tracking()
{
init_sms();
send_data("Vehicle Tracking Alert:");
Serial.println(" ");
send_data("Your Vehicle Current Location is:");
Serial.println(" ");
Serial.print("Latitude: ");
Serial.print(gps.location.lat(), 6);
Serial.print("\n Longitude: ");
Serial.println(gps.location.lng(), 6);
// https://www.google.com/maps/@8.2630696,77.3022699,14z
Serial.print("https://www.google.com/maps/@");
Serial.print(gps.location.lat(), 6);
Serial.print(',');
Serial.print(gps.location.lng(), 6);
Serial.print(",14z");
send_sms();
delay(2000);
lcd_status();
}
تماس با مرصا
با همکاران ما در شرکت مرصا ارائه دهنده خدمات طراحی، تولید و مونتاژ بردهای الکترونیکی تماس بگیرید و ما شما را در انجام پروژه های الکترونیکی یاری خواهیم کرد. مشتاقانه منتظر تماس شما هستیم، تامل نکنید و همین الان از طریق لینک زیر با ما تماس بگیرید.