====== GPS-трекер ====== ** [[slot-box:start#хочу_собрать|Проекты на Arduino и Slot Shield]] ** Собери простой GPS-трекер, чтобы записывать свои путешествия и выкладывать их на Google Maps. Твои координаты и скорость будут определяться [[amp>product/troyka-gps-glonass?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|приёмником спутниковой навигации]] и раз в пять секунд записываться на [[amp>product/microsd-8gb?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|microSD]] с помощью [[amp>product/troyka-sd?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|картридера]]. Запись трека включается и выключается [[amp>product/troyka-led-button?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|светодиодной кнопкой]]. {{ :slot-box:gps-tracker:gps-tracker.jpg |}} Данные сохраняются в электронную таблицу ''dataGPS.csv'', формат которой соответствует требованиям сервиса [[https://www.google.com/maps/d/u/0/|Google My Maps]]. * Платформы:[[amp>product/arduino-leonardo?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|Arduino Leonardo]] и [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|Iskra Neo]] * Язык программирования: Arduino (C++) ===== Видеоинструкция ===== {{youtube>rrOzbZYZY8g?large}} ===== Что потребуется ===== [[amp>collection/gps-glonass-tracker?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki | Полный сет]] компонентов проекта. В сет входят: * [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|Iskra Neo]] * [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-7&utm_medium=wiki|Troyka Slot Shield]] * [[amp>product/structor-slot-box?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|#Slot Box]] * [[amp>product/troyka-gps-glonass?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|GPS/GLONASS приёмник]] * [[amp>product/troyka-sd?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|SD картридер]] * [[amp>product/microsd-16gb?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|карта microSD]] * [[amp>product/troyka-led-button?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|светодиодная кнопка]] ===== Как собрать ===== Установите [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|Troyka Slot Shield]] на [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|Iskra Neo]] {{ :slot-box:gps-tracker:step1.png |}} Переверните [[amp>product/troyka-gps-glonass?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|приёмник GPS/GLONASS]] на 180 градусов и вставьте в правый верхний слот. {{ :slot-box:gps-tracker:step2.png |}} Поверните [[amp>product/troyka-led-button?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|светодиодную кнопку]] на 90 градусов против часовой стрелки и вставьте в правый нижний слот. Светодиод модуля будет загораться при включении записи. {{ :slot-box:gps-tracker:step3.png |}} Переверните [[amp>product/troyka-sd?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|картридер]] и вставьте его в нижний средний слот. Не забудьте отформатировать [[amp>product/microsd-8gb?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|microSD]] карту в FAT32. {{ :slot-box:gps-tracker:step4.png |}} ===== Импорт данных ===== Скопируйте файл ''dataGPS.csv'' с microSD на свой компьютер. Зайдите на сервис [[https://www.google.com/mymaps/|Google My Maps]] и нажмите кнопку ''+ создать новую карту'' в верхнем левом углу экрана. {{ :slot-box:gps-tracker:google-my-maps-01.jpg |}} Откроется карта со слоем, на который можно нанести собственные метки. {{ :slot-box:gps-tracker:google-my-maps-03.jpg |}} Нажмите кнопку ''импорт'' и выберите сохранённый файл ''dataGPS.csv'' {{ :slot-box:gps-tracker:google-my-maps-04.jpg |}} Укажите колонку таблицы с координатами — это столбец с названием ''Coordinates''. Трекер пишет сначала широту, затем долготу. {{ :slot-box:gps-tracker:google-my-maps-05.jpg |}} Выберите данные, которые будут отображаться как названия маркеров. Вы можете выбрать дату и время создания метки, координаты метки или текущую скорость. {{ :slot-box:gps-tracker:google-my-maps-06.jpg |}} Трек готов. Расшарьте свою карту и поделитесь маршрутами путешествий с друзьями. {{ :slot-box:gps-tracker:gps-tracker.jpg |}} ===== Скетч ===== Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]]. // библиотека для работы с устройствами по SPI #include // библиотека для работы с SD-картой #include // библиотека для работы с GPS устройством #include // создаём объект класса GPS и передаём в него объект Serial1 GPS gps(Serial1); // пин светодиода #define LED_PIN A0 // пин кнопки #define BUTTON_PIN 13 // пин CS micro-sd карты #define CHIP_SELECT_PIN 9 // интервал времени записи данных на карту #define INTERVAL 5000 // задаём размер массива для времени, даты, широты и долготы #define MAX_SIZE_MASS 16 // массив для хранения текущего времени char time[MAX_SIZE_MASS]; // состояние записи bool stateRec = false; // запоминает текущее время long startMillis = millis(); void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(115200); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе // while (!Serial) { // } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPS-модулем Serial1.begin(115200); // устанавливаем светодиод в режим выхода pinMode(LED_PIN, OUTPUT); // устанавливаем кнопку в режим входа pinMode(BUTTON_PIN, INPUT_PULLUP); // выводим информацию об инициализации в Serial-порт Serial.println("Initializing SD card..."); // инициализируем SD-карту while (!SD.begin(CHIP_SELECT_PIN)) { Serial.println("Card failed, or not present"); delay(1000); } // выводим информацию в Serial-порт Serial.println("Card initialized"); // создаём объект dataFile класса File для работы с файлами File dataFile = SD.open("dataGPS.csv", FILE_WRITE); // если файл существует if (dataFile) { // записываем название будущих данных на карту памяти dataFile.println("Time, Coordinates, Speed"); // закрываем файл dataFile.close(); Serial.println("Save OK"); } else { Serial.println("Error opening test.csv"); } } void loop() { // Фиксируем нажатие кнопки if (!digitalRead(BUTTON_PIN)) { // меняем состояние «запись» / «не запись» на карту памяти stateRec = !stateRec; // меняем состояние светодиода индикации digitalWrite(LED_PIN, stateRec); } // если пришли данные с gps-модуля if (gps.available()) { // считываем данные и парсим gps.readParsing(); // проверяем состояние GPS-модуля switch(gps.getState()) { // всё OK case GPS_OK: Serial.println("GPS is OK"); // если прошёл заданный интервал времени if (millis() - startMillis > INTERVAL && stateRec) { // сохраняем данные на карту памяти saveSD(); // запоминаем текущее время startMillis = millis(); } break; // ошибка данных case GPS_ERROR_DATA: Serial.println("GPS error data"); break; // нет соединение со спутниками case GPS_ERROR_SAT: Serial.println("GPS no connect to satellites"); break; } } } // функция сохарение данных на карту памяти void saveSD() { File dataFile = SD.open("dataGPS.csv", FILE_WRITE); // если файл существует и открылся if (dataFile) { // считывает текущее время gps.getTime(time, MAX_SIZE_MASS); // записываем время на карту памяти dataFile.print("\""); dataFile.print(time); dataFile.print("\""); dataFile.print(","); dataFile.print("\""); // считываем и записывае координаты широты и долготы на карту памяти dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print(","); dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print("\""); dataFile.print(","); dataFile.print(gps.getSpeedKm()); dataFile.println("km/h"); dataFile.close(); Serial.println("Save OK"); } else { Serial.println("Error opening test.csv"); } } ===== Что дальше? ===== В машине трекер работает от встроеной USB-розетки. Если хотите сделать его более автономным, используйте [[amp>product/arduino-power-shield-li-ion?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|Power Shield]] или аккумулятор «[[amp>product/nimh-krona-battery?utm_source=proj&utm_campaign=slot-proj-12&utm_medium=wiki|крона]]». Хотите собрать другой девайс? Выберите будущее устройство из [[slot-box:start#хочу_собрать|списка проектов на Slot Shield]]. ====== Часто задаваемые вопросы ====== > Где скачать необходимые библиотеки и как их установить? * [[https://github.com/amperka/TroykaGPS|Библиотека для работы с приёмником GPS/GLONASS]] * [[программирование:библиотеки|Как установить библиотеку]]