цифровая электроника
вычислительная техника
встраиваемые системы

 
» » GPS часы на Arduino своими руками

GPS часы на Arduino своими руками

Автор: Mike(admin) от 23-08-2018, 06:55

GPS (Глобальная система позиционирования) становится все более популярной в наши дни благодаря ее функциональности и удобству применения в недорогих проектах. GPS – это не только данные о местоположении, но и другая полезная информация со спутников.


GPS часы на Arduino своими руками

В этом обучающем проекте с Arduino мы создадим электронные цифровые часы исключительно на основе модуля GPS. Устройство собирает информацию со спутника в виде длинной строки длиной 70 символов и показывает только дату и время. В этой статье мы покажем вам, как извлечь точную дату и время из строки ($GPRMC), которая была получена с помощью модуля GPS.


Центральным вычислительным элементом данного проекта является плата Arduino Uno на основе микроконтроллера ATmega328. В качестве GPS модуля в данном случае применяется SIM808 EVB-V3.2 компании SIMCOM, который представляет собой высокоинтегрированный модуль с возможностями GSM/GPRS, GPS и Bluetooth. Также для отображения данных (время и день недели) используется буквенно-цифровой ЖК-дисплей 16X2. Схема подключения аппаратной части приведена далее:


GPS часы на Arduino своими руками. Схема подключения

Подключение компонентов очень простое, вывод GPS-модуля Tx подключается к выходу Rx (D0) платы Arduino Uno, а контакт Rx модуля заземлен, как показано на схеме. Земли платы Arduino Uno board и GPS-модуля должны быть подключены друг к другу. Дисплей подключен в соответствии с 4-битным режимом работы.


Ниже приведен код (скетч) для Arduino. Программная часть достаточно проста и понятна. Эта программа проверяет данные с GPS-приемника и извлекает только строку $GPRMC, которая содержит дату и время, и отображает ее на ЖК-дисплее.



#include<LiquidCrystal.h>
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
char str[70];
char *test="$GPRMC";
int temp,i;
DFRobot_SIM808 sim808(&Serial);
void setup() 
{
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("GPS DigitalClock");
  lcd.setCursor(0,1);
  lcd.print("Best Engg. Proj.");
  delay(300);
  if( sim808.attachGPS())
      Serial.println("Open the GPS power success");
  else 
      Serial.println("Open the GPS power failure");
}
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+45;// измените минуты в соответствии с вашим часовым поясом
    if(Minut>59)
    {
    Minut-=60;
    Hour+=1;
    }
    
   // UTC_Nepal_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 (Serial.available())            // проверка последовательных данных с GPS
   {
    char inChar = (char)Serial.read();
     str[i]= inChar;                    // запись данных из GPS в str[]
     i++;
     if (i < 7)                      
     {
      if(str[i-1] != test[i-1])         // проверка строки $GPRMC
      {
        i=0;
      }
     }
    if(i>65)
    {
     temp=1;
     break;
    }
  }
   if(temp)
    break;
  }
}



© digitrode.ru


Теги: Arduino, GPS, часы



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий