Проекты на Arduino и Slot Shield
Собери простой GPS-трекер, чтобы записывать свои путешествия и выкладывать их на Google Maps. Твои координаты и скорость будут определяться приёмником спутниковой навигации и раз в пять секунд записываться на microSD с помощью картридера. Запись трека включается и выключается светодиодной кнопкой.
Данные сохраняются в электронную таблицу dataGPS.csv
, формат которой соответствует требованиям сервиса Google My Maps.
Полный сет компонентов проекта. В сет входят:
Установите Troyka Slot Shield на Iskra Neo
Переверните приёмник GPS/GLONASS на 180 градусов и вставьте в правый верхний слот.
Поверните светодиодную кнопку на 90 градусов против часовой стрелки и вставьте в правый нижний слот. Светодиод модуля будет загораться при включении записи.
Переверните картридер и вставьте его в нижний средний слот. Не забудьте отформатировать microSD карту в FAT32.
Скопируйте файл dataGPS.csv
с microSD на свой компьютер.
Зайдите на сервис Google My Maps и нажмите кнопку + создать новую карту
в верхнем левом углу экрана.
Откроется карта со слоем, на который можно нанести собственные метки.
Нажмите кнопку импорт
и выберите сохранённый файл dataGPS.csv
Укажите колонку таблицы с координатами — это столбец с названием Coordinates
. Трекер пишет сначала широту, затем долготу.
Выберите данные, которые будут отображаться как названия маркеров. Вы можете выбрать дату и время создания метки, координаты метки или текущую скорость.
Трек готов. Расшарьте свою карту и поделитесь маршрутами путешествий с друзьями.
Прошейте контроллер скетчем через Arduino IDE.
// библиотека для работы с устройствами по SPI #include <SPI.h> // библиотека для работы с SD-картой #include <SD.h> // библиотека для работы с GPS устройством #include <TroykaGPS.h> // создаём объект класса 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-розетки. Если хотите сделать его более автономным, используйте Power Shield или аккумулятор «крона».
Хотите собрать другой девайс? Выберите будущее устройство из списка проектов на Slot Shield.
Где скачать необходимые библиотеки и как их установить?