8 (800) 350-30-16

GPS-логгер на arduino

Дата: / Категория: Arduino / Автор: marsel

В этой статье расскажу о сборке так называемого GPS-логгер, работает оно так: arduino nano считывает данные с GPS-модуля (в нашем случае это NEO-6M) и записывает их на SD-карту в неизмененном виде. Итогом работы устройства будет один файл, в котором будет запись о местонахождении устройства через короткие промежутки, примерно в 1-2 секунды, что позволит наложить на интерактивную карту маршрут, данные о скорости, высоте и направлении движения устройства во время его работы.


GPS-модуль подключен к arduino посредством UART интерфейса, а модуль SD-карты по SPI, таким образом задействованы не все цифровые выводы arduino, что позволяет подключить к модулю дополнительные модули и датчики, например дисплей.
Для проверки стабильности устройства, оставил его включенным на несколько часов, погрешность за всё это время не превысила 15 метров, что говорит о высокой точности устройства.

#include <SoftwareSerial.h> 
#include <SD.h>
SoftwareSerial mySerial(2, 3); //сюда gps модуль
File GPS;
char buf[128];
byte bufSize;
bool waiting = true;
void setup() {
delay(800);
pinMode(4, OUTPUT);
while (!SD.begin()) {
digitalWrite(4,HIGH); delay(100);
digitalWrite(4,LOW); delay(100);
digitalWrite(4,HIGH); delay(100);
digitalWrite(4,LOW); delay(300);
}
GPS = SD.open("LOG.GPS", FILE_WRITE);
if (!GPS)
while (true) {
digitalWrite(4,HIGH); delay(100);
digitalWrite(4,LOW); delay(100);
digitalWrite(4,HIGH); delay(100);
digitalWrite(4,LOW); delay(300);
}
mySerial.begin(9600); // скорость GPS порта
Serial.begin(57600); //скорость порта
digitalWrite(4,HIGH);
}
void loop() {
digitalWrite(4,LOW);
while (mySerial.available()) {
bufSize = mySerial.readBytesUntil('\n', buf, 128);
if (waiting) {
if (bufSize > 70) {
waiting = false;
GPS.write(buf, bufSize);
Serial.println(buf);
}
} else if (bufSize > 0) {
GPS.write(buf, bufSize);
Serial.println(buf);
digitalWrite(4,HIGH);
}
GPS.flush();
}

Сервис для наложения трека на карты: http://www.gpsvisualizer.com

 Видео версия статьи:

Теги: #Arduino, #GPS, #SD

Ваша оценка:

Рейтинг: 6.8 (Оценок: 3)

Комментарии (7):

ELITE
2018-02-15 19:31
но при этом стандарт отдает до 82 символов - надо именно эту строку собирать
ELITE
2018-02-15 19:05
И да, нафига 128? если буфер порта 64....
ELITE
2018-02-15 19:02
мелки быстрый сборщик мусора это, а не логер

для адекватного логера надо парсить и писать на карту только полные и верные данные, а не всё из буфера порта!
вы хоть сами результат посмотрите - 20% битых строк валит, а если сигнал жпс плохой и то и 30-40% мусора и рваных строк
да и порт не всегда успевает не переполнится....
яв
2017-04-03 11:22
подскажите что за ошибка?
яв
2017-04-03 11:22
exit status 1
expected '}' at end of input
Андрей
2017-02-08 02:27
GPS = SD.open("LOG.GPS", FILE_WRITE);
Название переменной "GPS" в данном случае не очень удачное. Лучше назвать "LOG" или типа того.
GremLine
2017-04-02 23:24
@Андрей:или лучше даже лог+текущуюдату и время =)

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

Copyright © RobOM.ru 2020 г. Все права защищены