
به نام خدا
پروژه ی ساخت ساعت با استفاده از آردوینو و ماژول جی پی اس
اطراف زمین تعداد زیادی ماهواره ی جی پی اس وجود دارند. وظیفه ی آن ها تعیین دقیق مختصات هر نقطه از زمین می باشد. این ماهواره ها علاوه بر مختصات ، زمان و تاریخ هر نقطه را نیز در اختیار کاربر قرار می دهند. ما در این پروژه با استفاده آردوینو و ماژول GPS ساعت دیجیتالی میسازیم که هم زمان و تاریخ را نشان می دهد. این ساعت با دقت بالای یک میلیونیوم ثانیه کار می کند.
قطعات مورد نیاز برای پروژه ی ساخت ساعت با استفاده از آردوینو و ماژول جی پی اس :
آردوینو یونو
ماژول جی پی اس
ال سی دی
سیم برد بورد
منبع تغذیه
شرح کار :
ماژول جی پی اس داده ها را به فرمت NMEA ارسال می کند. در زیر یک تصویر از داده های خروجی ماژول را مشاهده می کنید. داده ای به فرمت NMEA دارای چندین جمله است که ما به دقیقا به یک قسمت از آن برای استخراج تاریخ و زمان نیاز داریم. این قسمت با $GPRMC شروع می شود که شامل مختصات ، زمان و دیگر اطلاعات ارزشمند است. این قسمت دارای ۷۰ کاراکتر است.
همانطور که مشاهده می شود این جمله شامل تاریخ ، زمان ، سرعت و … می باشد.
$GPRMC,123519.000,A,7791.0381,N,06727.4434,E,022.4,084.4,230394,003.1,W*6A $GPRMC,HHMMSS.SSS,A,latitude,N,longitude,E,speed,angle,date,MV,W,CMD
Identifier |
Description |
RMC |
Recommended Minimum sentence C |
HHMMSS.SSS |
Time in hour minute seconds and milliseconds format. |
A |
Status // A=active and V= void |
Latitude |
Latitude 49 deg. 16.45 min. North |
N |
Direction N=North, S=South |
Longitude |
Longitude(Coordinate) |
E |
Direction E= East, W=West |
Speed |
speed in knots |
Angle |
Tracking angle in degrees |
Date |
DATE in UTC |
MV |
Magnetic Variation |
W |
Direction of variation E/W |
CMD (*6A) |
Checksum Data |
ما برای استخراج داده های زمان و تاریخ می توانیم تعداد کاما ها را در رشته ی $GPRMC بشماریم. با کمک آردوینو و برنامه نویسی این رشته پیدا و به صورت آرایه ذخیره می شود. سپس زمان به فرم ۲۴ ساعتی بعد از یک کاما و تاریخ بعد از نه کاما قابل مشاهده است.
ماهواره جی پی اس تاریخ و ساعت را بر اساس ساعت جهانی (UTC) ارائه می کند که بر اساس موقعیت ما باید مقداری به آن اضافه و یا کم کنیم. در اینجا برای موقعیت هندوستان ۵:۳۰ را به آن اضافه کرده ایم.
شماتیک مدار:
پین Txماژول گیرنده ی جی پی اس به پین ۱۰ آردوینو متصل است. زمین ماژول نیز به زمین آردوینو اتصال داده شده است. پین های ال سی دی مطابق شماتیک زیر به آردوینو وصل شده اند.
دانلود کد پروژه :
دانلود فایل#include<LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #include <SoftwareSerial.h> SoftwareSerial Serial1(10, 11); // RX, TX char str[70]; char *test="$GPRMC"; int temp,i; void setup() { lcd.begin(16,2); Serial1.begin(9600); lcd.setCursor(0,0); lcd.print("GPS Updated Clock"); lcd.setCursor(0,1); lcd.print(" Circuit Digest "); delay(300); } void loop() { serial1Event(); if (temp) { lcd.clear(); int str_lenth=i; int x=0,comma=0; String UTC_hour=""; String UTC_minut=""; String UTC_second=""; String UTC_date=""; String UTC_month=""; String UTC_year=""; String str1=""; while(x<str_lenth) { if(str[x]==',') comma++; if(comma==1) { x++; UTC_hour+=str[x++]; UTC_hour+=str[x++]; UTC_minut+=str[x++]; UTC_minut+=str[x++]; UTC_second+=str[x++]; UTC_second+=str[x]; comma=2; } if(comma==10) { x++; UTC_date+=str[x++]; UTC_date+=str[x++]; UTC_month+=str[x++]; UTC_month+=str[x++]; UTC_year+=str[x++]; UTC_year+=str[x]; } x++; } int UTC_hourDec=UTC_hour.toInt(); int UTC_minutDec=UTC_minut.toInt(); int Second=UTC_second.toInt(); int Date=UTC_date.toInt(); int Month=UTC_month.toInt(); int Year=UTC_year.toInt(); int Hour=UTC_hourDec+5; if(Hour>23) { Hour-=24; Date+=1; } int Minut=UTC_minutDec+30; if(Minut>59) Minut-=60; // UTC_ind_zone_time lcd.clear(); lcd.print("Date: "); lcd.print(Date); lcd.print("/"); lcd.print(Month); lcd.print("/"); lcd.print("20"); lcd.print(Year); lcd.setCursor(0,1); lcd.print("Time: "); lcd.print(Hour); lcd.print(":"); lcd.print(Minut); lcd.print(":"); lcd.print(Second); // delay(100); temp=0; // j=0; i=0; x=0; str_lenth=0; // k=0; } // delay(1000); } void serial1Event() { while(1) { while (Serial1.available()) //checking serial data from GPS { char inChar = (char)Serial1.read(); str[i]= inChar; //store data from GPS into str[] i++; if (i < 7) { if(str[i-1] != test[i-1]) //checking for $GPRMC sentence { i=0; } } if(i>65) { temp=1; break; } } if(temp) break; } }
دیدگاهها (0)