Ребятушки всем Привет. Сегодня запилим с вами простенький GPS-трекер на Arduino. Давно хотел сделать что-то подобное. Координаты будут определяться приёмником спутниковой навигации и раз в пять секунд записываться на microSD. Запись трека включается автоматически. Все это дело потом выложим на Google Maps и посмотрим трек.

Что нам понадобиться для того чтобы собрать наш проект:

  • Arduino Uno (вообщем-то какой будет ардуино не очень важно, главное чтобы подходил шилд У меня вот такой //ali.pub/40whof/);
  • GPS\GLONASS модуль (в моем варианте Neo 6M); Брал тут //ali.pub/40wfxm
  • SD CARD шилд (может быть также любой, хоть самодельный, у меня получился Ethernet шилд c SD CARD модулем); Вот такой//ali.pub/40wgsj
  • Естественно SD карта для записи трэка;
  • Картридер;
  • PowerBank или любое другое автономное питание.

В моем случае все очень просто. Модули собираются как часы, поэтому особых трудностей не возникло. Для получения данных от GPS модулю используем библиотеку SoftwareSerial и определяем выводы rx/tx на 6 и 7 пин Arduino соответственно. SD карту форматируем под систему FAT16 или FAT32. Это точно и безоговорочно. Arduino не работает с форматами NTFS и др.

Так теперь немного о скетче для Arduino.

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <SD.h>
#include <SPI.h>

long startMillis = millis();
static const int RXPin = 6, TXPin = 7;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// Инициализируем подключение к GPS
SoftwareSerial ss(RXPin, TXPin);

File GPS_file;
const int chipSelect = 4;

void setup()
{
  Serial.begin(115200);
  ss.begin(GPSBaud);
  // Инициализируем SD карту, для отладки можно раскомментировать.
{  
  if (!SD.begin(chipSelect)) {
    //Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
// Serial.println("card initialized.");
  File GPS_file = SD.open("GPSLOG.csv", FILE_WRITE);
  // если файл существует
  if (GPS_file) {
    // записываем название будущих данных на карту памяти
    GPS_file.println("Lat, Long, Time");
    // закрываем файл
    GPS_file.close();
}
}
}


void loop()
{
  // Если данные декодированы корректно тогда начинаем запись.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
    if (millis() - startMillis > 4900)
  {
    startMillis = millis();
       logGps();
  }     
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}
void logGps()
// Все закомментированные строки с Serial, нужны для отладки. 
{
GPS_file = SD.open("GPSLOG.csv", FILE_WRITE);
if(GPS_file){
//Serial.print(F("Location: "));
//GPS_file.print(F("Location: ")); 
  if (gps.location.isValid())
  {
  /*Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  */GPS_file.print(gps.location.lat(), 6);
    GPS_file.print(F(","));
    GPS_file.print(gps.location.lng(), 6);
  }
  else
  {
    //Serial.print(F("INVALID"));
    GPS_file.print(F("INVALID"));
  }

  //Serial.print(F("  Date/Time: "));
  GPS_file.print(F(", "));
  if (gps.date.isValid())
  {
    /*Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  */GPS_file.print(gps.date.month());
    GPS_file.print(F("/"));
    GPS_file.print(gps.date.day());
    GPS_file.print(F("/"));
    GPS_file.print(gps.date.year());
  }
  else
  {
   // Serial.print(F("INVALID"));
    GPS_file.print(F("INVALID"));
  }

 // Serial.print(F(" "));
  GPS_file.print(F(" "));
  if (gps.time.isValid())
  {
    /*if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
    */ 
    if (gps.time.hour() < 10) Serial.print(F("0"));
    GPS_file.print(gps.time.hour());
    GPS_file.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    GPS_file.print(gps.time.minute());
    GPS_file.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    GPS_file.print(gps.time.second());
    GPS_file.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    GPS_file.print(gps.time.centisecond());
  }
  else
  {
    //Serial.print(F("INVALID"));
    GPS_file.print(F("INVALID"));
  }

  //Serial.println();
  GPS_file.println();
  GPS_file.close();
}
}

Понятное дело, что используя библиотеку TinyGps++ можно выводить какие хочешь данные. Скорсть, высоту над уровнем моря и еще кучу всего. Если есть желание то можно прикрутить датчик температуры, влажности, да и вообще что в голову взбредет.

Импорт данных

Скопируйте файл GPSLOG.csv с microSD на свой компьютер.

Зайдите на сервис Google My Maps и нажмите кнопку + создать новую карту в верхнем левом углу экрана.

Откроется карта со слоем, на который можно нанести собственные метки.

Нажмите кнопку импорт и выберите сохранённый файл GPSLOG.csv

Укажите колонку таблицы с координатами — это столбец с названием Lat, Long. Трекер пишет сначала широту, затем долготу.

Выберите данные, которые будут отображаться как названия маркеров. Вы можете выбрать дату и время создания метки, координаты метки.

Трек готов. Расшарьте свою карту и поделитесь маршрутами путешествий с друзьями.

Ну и вот расшаренная карта из Google Maps специально для вас.

Друзья. Если вам понравилась эта статья, поделитесь ей в социальных сетях. Обязательно напишите комментарий если у вас возникли вопросы. Мне важно ваше мнение. У нас есть групповой чат в Telegram, где вы можете оперативно задать вопрос и узнать о последних новостях.  И поддержите проект монеткой на страничке Donate.

 

2 КОММЕНТАРИИ

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.