Сегодня у меня праздник. Удалось запустить GPS модуль Skylab SKM53 на моей Arduino Mega 2560.
Пару месяцев я с ним провозился и все безрезультатно. На Arduino UNO работает, а на моей Arduino Mega 2560 не хотел. За это время я перебрал кучу сторонних скетчей, написал не меньшую кучу своих,но результат был нулевым.
К сожалению причину неполадки мне выяснить так и не удалось, но вот заставить работать SKM53 с Arduino Mega получилось.
Сегодня я просто начал перебирать дискретные порты по порядку и на портах 50-51 и 52-53 этот GPS модуль заработал и показал мне долгожданные координаты. Ну вот закон подлости – заработало на последних контактах.
Теперь займемся подключением. Как и в прошлый раз, вначале будем использовать схему подключения экрана к Adruino.
Теперь займемся подключением самого GPS модуля Skylab SKM53.
- RXD – цифровой пин 50 Arduino Mega (можно не подключать)
- TXD – цифровой пин 51 Arduino Mega
- RST
- NC
- GND – GND Arduino Mega
- VCC - +5 В Arduino Mega
Для работы с GPS нам понадобится установить дополнительную библиотеку TinyGPS.
tinygps.rar (10,6 КиБ, 1 548 hits)
Скачайте архив и распакуйте его содержимое в \arduino-1.0\libraries\
Загрузим проверочный скетч, который нам покажет координаты (широта и долгота), скорость (км/ч), количество спутников, высоту над уровнем моря, дату и время (по Гринвичу) – последние параметры будут заменять друг друга в нижних строках экрана каждую секунду:
#include <LiquidCrystal.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
TinyGPS gps;
// Дискретные пины, к которым подключен GPS SKM53
SoftwareSerial skm53(51, 50);bool line=false; // переменная для смены информации в 3 и 4 строках экрана
void setup()
{
/* Инициализируем дисплей: 4 строки по 16 символов */
lcd.begin(16, 4);
// Скорость работы с GPS модулем (для SKM53 9600)
skm53.begin(9600);
//Serial.begin(115200);// Выводим на экран текст о том, что идет поиск спутников
lcd.setCursor(0, 0);
lcd.print("Find satellites");
lcd.setCursor(0, 1);
lcd.print(" Please Wait ");
}void loop()
{
bool newData = false;// Каждую секунду парсим GPS данные
for (unsigned long start = millis(); millis() - start < 1000;) /* между millis() – start стоит минус, просто WordPress заменяет его на черточку.*/
{
while (skm53.available())
{
char c = skm53.read();
if (gps.encode(c)) newData = true;
}
}if (newData)
{
float lat, lon;
unsigned long age;int year;
byte month, day, hour, minutes, second, hundredths;// Получаем координаты
gps.f_get_position(&lat, &lon, &age);
// Получаем дату и время
gps.crack_datetime(&year, &month, &day, &hour, &minutes, &second, &hundredths, &age);lcd.clear();
// Строка 1 - широта
lcd.setCursor(0, 0);
lcd.print("Lat: ");
lcd.print(lat,6);// стока 2 - долгота
lcd.setCursor(0, 1);
lcd.print("Lon: ");
lcd.print(lon,6);if (line==true) {
// Строка 3 - скорость км/ч
lcd.setCursor(-4, 2);
lcd.print("Speed: ");
lcd.print(gps.f_speed_kmph());
lcd.print(" ");// Строка 4 - количество спутников и высота в метрах
lcd.setCursor(-4, 3);
lcd.print("Sat:");
lcd.print(gps.satellites());
lcd.print(" Alt:");
lcd.print(gps.f_altitude());
lcd.print(" ");
}if (line==false) {
// Строка 3 ' - дата
lcd.setCursor(-4, 2);
lcd.print("Date:");
lcd.print(year);
lcd.print("-");
lcd.print(month);
lcd.print("-");
lcd.print(day);
lcd.print(" ");// Строка 4 ' - время
lcd.setCursor(-4, 3);
lcd.print("Time:");
lcd.print(hour);
lcd.print(":");
lcd.print(minutes);
lcd.print(":");
lcd.print(second);
lcd.print(" ");
}line=!line;
}
}
А расскажи пожалуйста как ты завел этот модуль на UNO?
У меня он отказывается определять координаты =(
используй 2 и 3 цифровые пины
Спасибо, завелось. Точнее и заводилось, только нужно было подождать пока спутники появятся =)
А нет ли там такого, что у Ардуино Мега на ногах 50-53 стоят выводы MISO, MOSI и т.п. Может быть это как-то с этим связано? Например, читалка SD карточек только через эти входы запустилась, причем обнаружил это тоже не сразу. Везде писали подключать к ногам 10-12, а потом накопал что на Меге надо именно на 50-53, иначе не работает.
именно так
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
Подключил модуль GT-1613-skr , загрузил библиотеку, но в резудьтате на монитор выдает билеберду! Вместо букв какие то символы! Как это обЪяснить?
Во-первых проверьте скорость передачи данных на/через COM(USB) порт. Посмотрите какое число написано в Serial.begin(), такое же надо и на компьютере в терминале выставить. Сам пару раз так натыкался.
Получилось!! А всего то Serial.begin(115200); поменял на Serial.begin(9600); Пошел нормальный текст!
Здравствуйте.
Если можно хотелось бы посмотреть скетч.
И схему подключения.
За ранее спасибо.
а с кетч в архиве не рабочий!