به نام خدا
پروژه ی ردیاب خورد رو با استفاده از آردوینو و GPS و GSM
در این پروژه ما قصد داریم تا با استفاده از جی پی اس و جی اس ام وسیله ی نقلیه ای را ردیابی کنیم. از این سیستم نیز میتوان به عنوان سیستم هشدار تصادف ، ردیابی سرباز و بسیاری موارد دیگر استفاده کرد.
در این پروژه مختصات خودروی مورد نظر با طول عرض جغرافیایی (مختصات) بررسی می شود. مکان دقیق وسیله ی نقلیه ی مورد نظر به طور پیوسته توسط آردوینو گذارش می شود. این سیستم برای کاربرد های بیرونی و خارج از محیط بسته بسیار کار آمد است.
قطعات مورد نیاز برای پروژه ی ردیاب خورد رو با استفاده از آردوینو و GPS و GSM:
آردوینو
ماژول جی اس ام (SIM900A)
ماژول جی پی اس (SKG13BL )
ال سی دی
منبع تغذیه
سیم برد بورد
پتانسیومتر ۱۰ کیلو اهمی
ماژول جی پی اس و طرز کار آن:
از این ماژول برای پیدا کردن مختصات جغرافیایی زمین استفاده می شود. این ماژول مهم ترین قسمت سیستم ما می باشد که به طور پیوسته داده های زمان و مکان را از ماهواره می گیرد و آن را به آردوینو می دهد. آردوینو نیز این داده ها را با ماژول جی اس ام از طریق پیامک برای کاربر ارسال می کند.
ماژول جی پی اس داده ها را به فرمت NMEA ارسال می کند. در زیر یک تصویر از داده های خروجی ماژول را مشاهده می کنید. داده ای به فرمت NMEA دارای چندین جمله است که ما به دقیقا به یک قسمت از آن برای استخراج تاریخ و زمان نیاز داریم. این قسمت با $GPRMC شروع می شود که شامل مختصات ، زمان و دیگر اطلاعات ارزشمند است. این قسمت دارای ۷۰ کاراکتر است.
ما برای استخراج داده های زمان و تاریخ می توانیم تعداد کاما ها را در رشته ی $GPGGA بشماریم. عرض جغرافیایی پس دو کاما و طول جغرافیایی پس از ۴ کاما قابل مشاهده است. با کمک آردوینو و برنامه نویسی این رشته پیدا و به صورت آرایه ذخیره می شود.
در زیر یک رشته ی $GPGGA با مخصات قابل مشاهده است:
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47
$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data
Identifier | Description |
$GPGGA | Global Positioning system fix data |
HHMMSS.SSS | Time in hour minute seconds and milliseconds format. |
Latitude | Latitude (Coordinate) |
N | Direction N=North, S=South |
Longitude | Longitude(Coordinate) |
E | Direction E= East, W=West |
FQ | Fix Quality Data |
NOS | No. of Satellites being Used |
HPD | Horizontal Dilution of Precision |
Altitude | Altitude from sea level |
M | Meter |
Height | Height |
Checksum | Checksum Data |
شماتیک مدار:
همانطور که در شکل زیر می بینید اتصالات این پروژه ساده هستند. پین TX ماژول جی پی اس به طور مستقیم به پین ۱۰ دیجیتال آردوینو متصل است. با استفاده از کتاب خانه ی Software Serial Library ، ما توانایی ایجاد ارتباط سریال پین های ۱۰ ، ۱۱ ، Rx و Tx را ایجاد کردیم. همچنین تغذیه ی ماژول ها را به تغذیه ی ۱۲ ولتی متصل کردیم.
با توجه به شکل پین های Rx و Tx ماژول جی اس ام به طور مستیم به پین های ۰ و ۱ آردوینو متصل است. ال سی دی نیز مطابق شکل به آردوینو و ماژول ها متصل است و از یک پتانسیومتر برای تنظیم نور ال سی دی استفاده می شود. از ماژول جی اس ام برای ارسال داده های جی پی اس به فرد از طریق پیامک استفاده می شود.
دانلود کد پروژه ردیاب خودرو:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | #include<LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #include <SoftwareSerial.h> SoftwareSerial gps(10,11); // RX, TX //String str=""; char str[70]; String gpsString=""; char *test="$GPGGA"; String latitude="No Range "; String longitude="No Range "; int temp=0,i; boolean gps_status=0; void setup() { lcd.begin(16,2); Serial.begin(9600); gps.begin(9600); 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 "); get_gps(); 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(); if(temp) { get_gps(); tracking(); } } void serialEvent() { while(Serial.available()) { if(Serial.find("Track Vehicle")) { temp=1; break; } else temp=0; } } void gpsEvent() { gpsString=""; while(1) { while (gps.available()>0) //checking serial data from GPS { char inChar = (char)gps.read(); gpsString+= inChar; //store data from GPS into gpsString i++; if (i < 7) { if(gpsString[i-1] != test[i-1]) //checking for $GPGGA sentence { i=0; gpsString=""; } } if(inChar=='\r') { if(i>65) { gps_status=1; break; } else { i=0; } } } if(gps_status) break; } } void gsm_init() { lcd.clear(); lcd.print("Finding Module.."); boolean at_flag=1; while(at_flag) { Serial.println("AT"); 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 get_gps() { gps_status=0; int x=0; while(gps_status==0) { gpsEvent(); int str_lenth=i; latitude=""; longitude=""; int comma=0; while(x<str_lenth) { if(gpsString[x]==',') comma++; if(comma==2) //extract latitude from string latitude+=gpsString[x+1]; else if(comma==4) //extract longitude from string longitude+=gpsString[x+1]; x++; } int l1=latitude.length(); latitude[l1-1]=' '; l1=longitude.length(); longitude[l1-1]=' '; lcd.clear(); lcd.print("Lat:"); lcd.print(latitude); lcd.setCursor(0,1); lcd.print("Long:"); lcd.print(longitude); i=0;x=0; str_lenth=0; delay(2000); } } void init_sms() { Serial.println("AT+CMGF=1"); delay(400); Serial.println("AT+CMGS=\"+91**********\""); // use your 10 digit cell no. here delay(400); } void send_data(String message) { Serial.println(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:"); send_data("Your Vehicle Current Location is:"); Serial.print("Latitude:"); send_data(latitude); Serial.print("Longitude:"); send_data(longitude); send_data("Please take some action soon..\nThankyou"); send_sms(); delay(2000); lcd_status(); } |
قوانین ارسال دیدگاه