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

 
» » 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, часы




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

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

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

  • 20 сентября 2018 07:30
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Наш магазин - это дочерний проект крупнейшего в России рыболовного клуба FION

У нашего магазина есть важное преимуществ
086; – налажена обратная связь с огромным числом рыболовов клуба FION Это значит, что мы можем на деле проверять и качество и работу снастей и выявлять предпочтени
103; рыбаков. А значит, наш магазин может совершенств
086;вать ассортимент – отказыватьс
103; от нерабочих приманок и добавлять проверенные.

https://www.ulovistaya.ru/?p=542