Подключение gps приемника eb500 к arduino uno

Используем с Arduino GPS модуль NEO-6m

В этом проекте мы покажем вам как связать Arduino Uno с GPS модулем, а получаемые данные по долготе и широте отобразим на ЖК-дисплее.

Основные комплектующие

Нам для проекта нужны:

  • Arduino Uno
  • Модуль GPS NEO-6m
  • ЖК-дисплей
  • 10K резистор

Глобальная система позиционирования (GPS) – это спутниковая навигационная система, состоящая по меньшей мере из 24 спутников. GPS работает в любых погодных условиях в любой точке мира 24 часа в сутки без абонентской платы или платы за установку.

Как работает GPS?

Спутники GPS обходят Землю два раза в день на точной орбите. Каждый спутник передает уникальный сигнал и параметры орбиты, которые позволяют устройствам GPS декодировать и вычислять точное местоположение спутника.

GPS-приемники используют эту информацию и трилатерацию для расчета точного местоположения пользователя. По сути, GPS-приемник измеряет расстояние до каждого спутника на количество времени, которое требуется для приема передаваемого сигнала.

При измерениях расстояния от нескольких спутников приемник может определить положение пользователя и отобразить его.

Чтобы вычислить ваше двумерное положение (широта и долгота) и направление движения, GPS-приемник должен быть зафиксирован на сигнал от не менее 3 спутников.

При наличии 4 или более спутников приемник может определить ваше трехмерное положение (широта, долгота и высота).

Как правило, приемник GPS будет отслеживать 8 или более спутников, но это зависит от времени суток и того, где вы находитесь на земле.

Как только ваша позиция будет определена, модуль GPS может рассчитать и другую информацию, такую ​​как:

  • скорость;
  • азимут, пеленг;
  • направление;
  • расстояние до отключения;
  • расстояние до пункта назначения.

Какой сигнал?

Спутники GPS передают по меньшей мере 2 маломощных радиосигнала. Сигналы движутся по прямой видимости, то есть они будут проходить сквозь облака, стекло и пластик, но не будут проходить через большинство твердых объектов, таких как здания и горы. Однако современные приемники более чувствительны и обычно могут отслеживать и сквозь дома.

Сигнал GPS содержит 3 различных типа информации:

  • Псевдослучайный код – это I.D. код, который идентифицирует, какой спутник передает информацию. Вы можете видеть, с какого спутника вы получаете сигналы на странице информации о спутниках на вашем устройстве.
  • Данные эфемерид необходимы для определения местоположения спутника и дают важную информацию о состоянии спутника, текущую дату и время.
  • Данные альманаха сообщают GPS-приемнику, где каждый спутник GPS должен быть в любое время в течение дня и отображать информацию о орбите для этого спутника и каждого другого спутника в системе.

Внешне GPS модуль выглядит так:

Плата Ардуино Уно вам, скорее всего, уже знакома:

Подключение модуля GPS и Arduino UNO

Подключите четыре контакта к Arduino следующим образом:

GND → GND TX → Цифровой вывод (D3) RX → цифровой вывод (D4)

Vcc → 5Vdc

Предлагаем использовать внешний источник питания для питания модуля GPS, потому что минимальная потребляемая мощность для работы модуля Arduino GPS составляет 3,3 В, а Arduino не способен обеспечить такое напряжение. Для обеспечения напряжения используйте USB TTL:

Profilic USB-TTL Win8_x64_x86

Еще одна вещь, которая была обнаружена при работе с антенной GPS – модуль не принимает сигнал внутри дома, поэтому нужно использовать антенну.

Подключение Arduino UNO и ЖК-дисплея JHD162a

Теперь нам необходимо соединить Ардуино и ЖК-дисплей, мы взяли LHD162a:

Перечень соединений ниже, это LCD → Arduino:

VSS → GND VCC → 5V VEE → 10K резистор RS → A0 (аналоговый пин) R/W → GND E → A1 D4 → A2 D5 → A3 D6 → A4 D7 → A5 LED+ → VCC

LED- → GND

Скетч и библиотеки

Дополнительно нам понадобятся некоторые библиотеки:

Больше различных библиотек вы можете найти на нашем сайте в разделе Библиотеки.

Скетч для Arduino GPS вы можете скачать или скопировать ниже:

Arduino GPS

123456789101112131415161718192021222324252627282930313233343536373839404142434445 #include<\p>#include<\p>#include<\p>float lat = 28.5458,lon = 77.1703; // создать переменную для объекта широты и долготы  SoftwareSerial gpsSerial(3,4);//rx,txLiquidCrystal lcd(A0,A1,A2,A3,A4,A5);TinyGPS gps; // создать gps объектvoid setup(){Serial.begin(9600); // соединяем serial//Serial.println(“Полученный сигнал GPS:”);gpsSerial.begin(9600); // подключаем gps датчикlcd.begin(16,2);}void loop(){  while(gpsSerial.available()){ // проверка gps данных  if(gps.encode(gpsSerial.read()))// шифровать gps данные  {    gps.f_get_position(&lat,&lon); // получить широту и долготу  // отобразить позицию  lcd.clear();  lcd.setCursor(1,0);  lcd.print(“GPS Signal”);  //Serial.print(“Position: “);  //Serial.print(“Latitude:”);  //Serial.print(lat,6);  //Serial.print(“;”);  //Serial.print(“Longitude:”);  //Serial.println(lon,6);    lcd.setCursor(1,0);  lcd.print(“LAT:”);  lcd.setCursor(5,0);  lcd.print(lat);  //Serial.print(lat);  //Serial.print(” “);  lcd.setCursor(0,1);  lcd.print(“,LON:”);  lcd.setCursor(5,1);  lcd.print(lon);}}String latitude = String(lat,6);  String longitude = String(lon,6);Serial.println(latitude+”;”+longitude);delay(1000);}

В Visual Studio мы создали приложение в котором можно найти текущее местоположение GPS. Оно работает только тогда, когда подключено последовательно к ПК или ноутбуку:

Если вы хотите внести некоторые изменения в приложение, вы можете сделать это открыв sln-файл в Visual Studio (2012 и выше), или вы можете напрямую установить и использовать его.

На этом пока всё. Хороших вам проектов.

Больше интересного ↓

Источник: https://ArduinoPlus.ru/arduino-gps/

Создаем GPS часы на Arduino

Вам необходим источник точного времени от GPS? Данная статья покажет вам, как использовать модуль GPS для получения времени, даты и координат, и как показать их на LCD индикаторе с помощью Arduino.

Что необходимо?

Введение

Создание системы глобального позиционирования, или GPS, началось в начале 1970-х годов. Каждая страна (Россия, США, Китай и т.д.) обладают своей собственной системой, но большинство средств спутниковой навигации в мире используют систему США.

Каждый спутник системы имеет атомные часы, которые непрерывно контролируются и корректируются NORAD (командованием воздушно-космической обороны Северной Америки) каждый день.

По сути, приемник по своим часам измеряет TOA (время получения сигнала, time of arrival) четырех спутниковых сигналов.

Исходя из TOA и TOT (времени отправки сигнала, time of transmission), приемник вычисляет четыре значения времени «пролета» сигнала (TOF, time of flight), которые отличаются друг от друга в зависимости от расстояния спутник-приемник.

Затем, исходя из четырех значений TOF, приемник вычисляет свое положение в трехмерном пространстве и отклонение своих часов.

Самые недорогие GPS приемники обладают точностью около 20 метров для большинства мест на Земле. Теперь посмотрим, как изготовить свои собственные часы GPS с помощью Arduino.

Аппаратная часть

Мой GPS модуль имеет 6 контактов: GND, Vin, Tx, Rx и снова GND. Шестой вывод никуда не подключен.

Контакт GND соединен с корпусом на Arduino, Vin подключаем к шине +5В на Arduino, Tx подключен к выводу 10 на Arduino, а вывод Rx никуда не подключаем, так как не будем посылать на GPS модуль никаких сообщений.

Мой модуль передает спутниковые данные, используя интерфейс RS-232, со скоростью 4800 бит/сек, которые принимаются Arduino на выводе 10.

Ниже показана фотография GPS модуля:

GPS модуль EM-411

Модуль отправляет то, что известно как NMEA сообщения. Здесь вы можете увидеть пример одного NMEA сообщения и его разъяснение (выдержка из технического описания):

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18

Формат данных GGAНазваниеПримерЕдиницыОписание
ID сообщения $GPGGA Заголовок протокола GGA
Время UTC 161229.487 hhmmss.sss (две цифры часы, две цифры минуты, затем секунды с точностью до тысячных)
Широта 3723.2475 ddmm.mmmm (первые две цифры градусы, затем минуты с точностью до десятитысячных)
Флаг N/S N N – север, S – юг
Долгота 12158.3416 ddmm.mmmm (первые две цифры градусы, затем минуты с точностью до десятитысячных)
Флаг E/W W E – восток, W – запад
Индикатор местоположения 1
  • 0 – местоположение недоступно или некорректно;
  • 1 – режим GPS SPS, местоположение корректно;
  • 2 – дифференциальный GPS, режим SPS, местоположение корректно;
  • 3 – режим GPS PPS, местоположение корректно.
Количество используемых спутников 07 В диапазоне от 0 до 12
HDOP 1.0 Ухудшение точности по горизонтали
Высота относительно уровня моря 9.0 метры
Единицы измерения M метры
Геоидальное различие Различие между земным эллипсоидом WGS-84 и уровнем моря (геноидом)
Единицы измерения M метры
Возраст дифференциальных данных GPS секунды Нулевые поля, когда DGPS не используется
ID станции, передающей дифференциальные поправки 0000
Контрольная сумма *18
Конец сообщения

Все эти данные принимаются Arduino через вывод 10. Библиотека TinyGPS читает сообщения GPGGA и GPRMC (для подробной информации о GPRMC смотрите техническое описание).

Arduino на схеме не показан. Подключите периферийные устройства согласно подписанным соединениям.

Схема GPS часов на arduino

Программное обеспечение

При подаче питания GPS модуль затрачивает некоторое время, чтобы получить правильное местоположения от спутников. Когда местоположение получено, модуль шлет NMEA сообщения на Arduino.

Библиотека TinyGPS содержит функцию для получения времени и даты из GPRMC сообщения.

Она называется crack_datetime() и принимает в качестве параметров семь указателей на переменные: год year, месяц month, день месяца day, часы hour, минуты minute, секунды second, и сотые доли секунды hundredths. Вызов функции выглядит так:

gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);

Вызов данной функции возвращает вам в переменных правильные значения до тех пор, пока с железом всё в порядке.

Чтобы получить ваше местоположение, можно вызвать функциюf_get_position(). Данная функция принимает в качестве параметров два указателя на переменные: широта latitudeи долгота longitude. Вызов данной функции выглядит так:

gps.f_get_position(&latitude, &longitude);

 Исходный текст программы:

#include #include #include #define RXPIN 10 #define TXPIN 9 #define GPSBAUD 4800 #define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 TinyGPS gps; SoftwareSerial uart_gps(RXPIN, TXPIN); LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Переменные int seconds; int timeoffset = 1; // Пользователь должен изменить единицу на соответствующий часовой пояс. В примере используем сдвиг на +1 час. // Объявление функций. void getgps(TinyGPS &gps); // Функция настройки – запускается только при включении void setup() { Serial.begin(115200); // Запуск последовательного интерфейса для отладки uart_gps.begin(GPSBAUD); // Запуск приемника UART для GPS lcd.begin(16,2); // Объявление LCD lcd.print(” GPS clock”); // Сообщение приветствия delay(1000); // Ждем одну секунду lcd.clear(); // Очистить LCD } // Цикл главной программы – запущен всегда void loop() { while(uart_gps.available()) { int c = uart_gps.read(); if(gps.encode(c)) { getgps(gps); } } } /* * Данная функция получает данные от GPS модуля * и отображает их на LCD */ void getgps(TinyGPS &gps) { int year; float latitude, longitude; byte month, day, hour, minute, second, hundredths; gps.f_get_position(&latitude, &longitude); gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths); hour = hour + timeoffset; lcd.clear();//lcd.setCursor(0, 0); lcd.print(“Time: “); if (hour

Источник: https://radioprog.ru/post/125

Записки программиста

Существует немало GPS-модулей и шилдов для Arduino, но многие из них довольно недешевы. Если вам в вашем проекте по каким-то причинам нужен GPS, самым дешевым (не в ущерб качеству!) из известных мне вариантов будет модуль на базе чипа NEO-6M. На AliExpress такие модули продаются за 230 рублей (4 $) с учетом доставки в Россию.

Давайте же попробуем разобраться, как с ними работать.<\p>

Примечание: Как правило, GPS не работает в доме. Чтобы поймать сигнал от спутников, с модулем нужно выйти на улицу или на балкон, или хотя бы положить его рядом с окном. Кроме того, GPS может плохо ловить в облачную погоду.

Учтите также, что даже на открытом воздухе и в хорошую погоду при первом включении модулю может потребоваться несколько минут на инициализацию.

К Arduino модуль подключается не сложно, так как питается он от 5 В, а данные передает по UART на скорости 9600 бод. Когда модуль находит достаточное количество спутников для определения своего местоположения, он начинает мигать синим светодиодом и передавать по UART раз в секунду что-то вроде:

$GPRMC,160709.00,A,5546.7229,N,03749.47557,E,2.578,228.26,170617,,,A*69 $GPVTG,228.26,T,,M,2.578,N,4.774,K,A*39 $GPGGA,160709.00,5546.792,N,03749.475,E,1,07,4.00,172.3,M,13.3,M,,*5C

$GPGSA,A,3,13,20,18,30,21,15,,,,,,,6.45,3.95,5.11*02

Тут на глаз несложно найти текущие координаты (5546.79229,N и 03749.47557,E), а также дату (170617) и время в UTC (160709). Цифры в конце строк после звездочки — это контрольные суммы.

Стоит отметить, что если модуль еще не определил свои GPS-координаты, он передает по UART немного другие данные.

Подробное описание того, как декодировать все эти данные можно найти в документе под названием U-blox 6 Receiver Description Including Protocol Specification [PDF].

Несмотря на то, что написать свой парсер достаточно просто, их написано и отлажено уже достаточно, чтобы не тратить на это свое время. Лично я воспользовался библиотекой TinyGPSPlus. Код прошивки:

#include
#include
#include “LiquidCrystal_I2C.h”
#include “TinyGPS++.h”

const int DELAY = 100;

const int SWITCH_TIME = 5000;

LiquidCrystal_I2C lcd(0x3F, 16, 2);

SoftwareSerial gps_serial(A3, A2); /* RX, TX */
TinyGPSPlus gps_parser;

void setup()

{
    Serial.begin(9600);
    gps_serial.begin(9600);
    lcd.begin();
}

String twoDigits(int x) {

  if(x 0) {
        char temp = gps_serial.read();
        Serial.write(temp);
        gps_parser.encode(temp);
    }

    String lat  = “Unknown         “;

    String lng  = “location        “;
    if(gps_parser.location.isValid()) {
        lat = “Lat: ” + String(gps_parser.location.lat(), 6);
        lng = “Lng: ” + String(gps_parser.location.lng(), 6);
    }

    String date = “Unknown date    “;

    if(gps_parser.date.isValid()) {
        date = twoDigits(gps_parser.date.day()) + “/” +
               twoDigits(gps_parser.date.month()) + “/” +
               String(gps_parser.date.year()) + ”      “;
    }

    String time = “Unknown time    “;

    if(gps_parser.time.isValid()) {
        time = twoDigits(gps_parser.time.hour()) + “:” +
               twoDigits(gps_parser.time.minute()) + “:” +
               twoDigits(gps_parser.time.second()) + ” UTC    “;
    }

    if(showLocation) {

        lcd.setCursor(0, 0);
        lcd.print(lat);
        lcd.setCursor(0, 1);
        lcd.print(lng);
    } else { // show date and time
        lcd.setCursor(0, 0);
        lcd.print(date);
        lcd.setCursor(0, 1);
        lcd.print(time);
    }

    delay(DELAY);

    currentModeTime += DELAY;
    if(currentModeTime >= SWITCH_TIME) {
        lcd.clear();
        showLocation = !showLocation;
        currentModeTime = 0;
    }
}

Соответствующее устройство в действии:

Работа с использованным здесь экранчиком ранее была подробно описана в заметке Об использовании экранчиков 1602 с I2C-адаптером.

В общем, к обычно, ничего супер сложного. Полную версию исходников к этой заметке ищите на GitHub. А с какими GPS-модулями вам доводилось работать?

Источник: https://eax.me/arduino-gps/

GPS модуль EB-500

Давно хотел пообщаться с космосом и наконец решил прикупить соответствующее железо. После вдумчивого поиска выбрал EB-500. Почему именно его? Большое число каналов (66), дешевый (500р), можно легко купить, практически не нужна внешняя обвязка и вполне паябельный корпус.

Всю статью разделю на 2 части: железную, с описанием самого модуля и платы и софтовую, с описанием зачем нам этот модуль вообще нужен.
Есть 2 типа модуля EB-500 и EB-500L.

Отличаются они тем, что в EB-500L отсутствует LNA (Low Noise Amplifiers) в результате чего этот модуль может работать только с активными антеннами. Схема модуля взятая из его даташита:Как видно для работы девайса достаточно всего 5 конденсаторов.На вход VIN_3V3 (13) подается напряжение питания от 3.0 до 4.2В.

Светодиод служит для индикации фиксации положения. При поиске он горит, а после получения координат начинает мигать раз в секунду. Последовательные порты 0 и 1 равнозначны, можно использовать любой. На выходе PPS (3), после фиксации положения, появляются положительные импульсы с F=1Гц.

На вход V_RTC_3V3 (12) подается резервное питание для ускорения теплого старта. Можно соединить его с ногой питания.

Внимание! Без подачи напряжения на этот вывод модуль не запустится!

Из этой схемы получилась такая плата:
Для тестирования сей агрегат был подключен к компу через max232n, по самой типовой и стандартнейшей схеме.В качестве антенны использовалась активная антенна ANT-380. Тут я ступил и взял антенну с разъемом MCX-M, для которого задолбался искать ответный разъем. Да и качество фиксации разъемов осталось довольно посредственным.

Лучше было брать с разъемом SMA, с закручивающимся креплением. После выкидывания антенны на подоконник первого этажа и первого включения, поиск спутников занял минут 20. При последующих запусках спутники находились не более минуты. Так что не экономим на батарейках, тем более потребление от нее всего 1.5uA.

Тут лежит файл проекта платы для diptrace 2.0. Размер 16.92кБ.

В архиве схема, плата и компонент EB-500.

Дополнение №1

В комментариях часто появляются вопросы о антенне. И так, активная антенна содержит в себе пассивную антенну + усилитель с низким уровнем шума для предварительного усиления, и все это запихнуто в небольшой корпус. С креплением или на железо (на магнитной основе) или на стекло и прочие ровные поверхности (на липучке). Сигнал выведен кабелем длиной 2-5м. Для нее соответственно требуется питание. Все модули питание подают самостоятельно, не требуя дополнительных телодвижений. При желании питание можно завести и отдельно, но для стандартных антенн смысла делать за микросхему ее работу особого нет. Бывают и бескорпусные активные антенны с коротким выходным проводком для размещения ее непосредственно в устройстве. Пассивная антенна это такая бескорпусная хрень небольшого размера (длина стороны 10-50мм) для монтажа непосредственно на плату или с куском провода длиной сантиметров 5-15. Не имеет усилителя и очень не любит длинных проводов. В общем, если устройство больших размеров или не желательно что бы оно мозолило глаза окружающим, то лучше использовать выносную активную антенну. Если делать небольшой законченный модуль, выдающий уже обработанные данные, то можно использовать и встроенную. Так же не забываем, что EB-500L может работать только с активной антенной. В интернете проскакивали сообщения что пассивная антенна более чувствительна к наводкам и бывало пропадание сигнала при ее не удачном расположении или при расположении рядом с gsm/gprs модулями. Для подключения антенны любого типа нужна линия с волновым сопротивлением 50ом. В 500 модулях специального согласования не требуется, но длина дорожки желательна как можно меньше. У меня в плате длина дорожки от ножки м/с до разъема 11мм. И с активной антенной, лежащей на подоконнике первого этажа, приемник использует 8 спутников из 13 найденных. Для сравнения приемник в HTC Desire ловит только 4-5 спутников.

Внимание! Закорачивание входа микросхемы может привести к выходу ее из строя.

Пассивная антенна:Активная антенна:Теперь расскажу что же мы можем поиметь от спутников. А поиметь мы может весьма много. Особенно лишнего и не нужного:) И так спутники поймали, к компу подключили.

Запускаем терминалку и выбираем нужный СОМ порт, выставляем скорость 9600, 1 стоп бит, без четности.

Внимание! По даташиту дефолтная скорость порта 9600, и у меня он заработал как раз с такой скоростью.

Но в интернете есть много сообщений, что дефолтная скорость у модуля 115000. Так что если что-то не так, то меняйте скорость.

Сразу после подключения повалит огромное количество сообщений по протоколу NMEA-0183. Все сообщения начинаются с символов $GP, затем идет 3 символа идентификатора формата сообщения. Данные в сообщении разделяются запятыми, нули не опускаются. В конце может стоять контрольная сумма после символа '*'.

Контрольная сумма 8 битная (исключающее ИЛИ, XOR) всех символов сообщения, включая пробелы, расположенных между разделителями $ и *, не включая последних. И так какие сообщения нам выдаст модуль и что в них есть интересного.

1. RMC самое полезное сообщение, содержит всю самую необходимую информацию. Содержит данные о времени, местоположении, курсе и скорости.

Контрольная сумма обязательна для этого сообщения, интервалы передачи не должны превышать 2 секунды.

$GPRMC,181057.000,A,5542.2389,N,03741.6063,E,0.47,74.50,190311,,,A*51

  • 181057.000 — время 18.10.57.
  • A — данные достоверны, V — недостоверны..
  • 5542.2389,N — широта («N» для северной или «S» для южной широты).
  • 03741.60637,E — долгота («E» для восточной или «W» для западной долготы).
  • 0.47 — скорость (узлов в час).
  • 74.50 — путевой угол (направление скорости) в градусах. Число с плавающей точкой. Целая и дробная части переменной длины. Значение равное 0 соответствует движению на север, 90 — восток, 180 — юг, 270 — запад.

Источник: http://we.easyelectronics.ru/part/gps-modul-eb-500.html

GPS-логгер на Ардуино

Катаюсь на велике: иногда на работу, иногда за компанию, иногда просто так: бегать суставы «уже не те». В процессе работы механизмы изнашиваются и для своевременного обслуживания желательно как-то журналировать свои покатушки, а, т.к.

велокомпьютера у меня не было, я либо записывал трек на телефон, либо после покатушки строил маршрут по памяти на ЯндексКартах (спасибо разработчиком за удобный инструмент «Линейка») и записывал пройденное расстояние в Эксель-таблиицу:
Дата | Название | Дистанция
Потом суммировал Дистанцию и принимал решение, когда надо цепь помыть (или по кругу поменять), когда на техосмотр отдать и т.п. Оказалось, иметь базу данных своих покатушек довольно-таки полезно: самому посмотреть, сколько за прошлый месяц проехал, чтобы в текущем проехать не меньше; друзьям показать, где был; скоростью на отрезке похвастаться… Или, если задержат, как подозрительного типа без документов, хотя бы показать, откуда приехал =)

Телефон мой (Samsung Galaxy Gio) строил нормальные GPS-графики, но всё больше заставляло понервничать время старта, а однажды он стартовал аж через 12 км. Покупать новый чё-то как-то не сложилось: сразу не купил ZenFone4, а потом не охота стало: старый пока пашет, а новые или недостаточно производительны, или чрезмерно громоздки.

И закралась у меня тогда идея найти специализированное устройство (с антеннкой!) для записи GPS-треков: чтобы и стоило немного, и стартовало быстрее, и определяло позицию более точно. Но, опять же, особого желания что-то мудрить не было… Особенно вымораживает, выйдя из подъезда, стоять и ждать старта GPS!

Прошлой осенью появилась тема — Orange Pi PC! Самая дешевая плата для создания самоделок и изучения робототехники(?!) и еще чего-то, по чему мы в университете сдали лабы и успешно забыли.

Кстати, в институте мне преподавали счетчики, компараторы, триггеры, учили проектировать системы с их применением, а также принципы построения микроконтроллеров, их работы и применения, но вероятно, после сессии полученные знания форматировались и воспроизвести я их смогу, разве что, под гипнозом, хоть и закончил с Красным дипломом и сам сдавал все сессии =)

В надежде, что если на Orange Pi PC помигать светодиодами и все-таки реализовать заветный GPS-логгер не удастся, то я смогу хотя бы поднять сервер, ночью качать на него торренты и днём писать какие-нибуть проекты, Чтоб работало постоянно и потребляло немного… Потребляло оно, действительно, не много — порядка 500 мА на 5В с воткнутой USB-флешкой. К Orange Pi PC я смог даже подключить монитор разрешением 1024×1280 без искажения пропорции, но у него была масса мелких недостатков: — после второго «отключения на горячую» HDMI-интерфейс начал глючить, после двадцатого перестал работать (позже я обнаружил наличие на других моделях (Orange Pi One, к примеру) шинных формирователей, которых на Pi PC нет — дефект, заложенный на этапе проектирования, ИМХО); — под Linux плохо работали драйвера (хотя монитор я уже не смог подключить, фиг с ними)

— отсутствие аналоговых портов ввода — очень хотел я не покупаь тестер аккумуляторов, а сделать свой, но выяснилось, что на Pi PC это неврзможно — там нет AnalogRead().

— (по сравнению с Ардуино) высокое энергопотребление, большой размер;

— нехватка поддержки и информации по наработкам и совместимости: две недели пытался подключить один WIFI-USB-адаптер, потом успешно подключил другой, наименование которого отличалось парой символов.

В общем, Orange Pi — штука неплохая, но не как микроконтроллер, а как недокомпьютер: питается от зарядки для планшета, поддерживает HDMI и видео выход, много USB-портов, можно настроить так, чтоб не грелся, занмает меньше места, чем стационарник. Итак, к сути, волею судьбы…

Источник: https://mysku.ru/blog/aliexpress/39653.html

GPS модуль EB-500

Источник: http://AVRproject.ru/publ/kak_podkljuchit/gps_modul_eb_500/2-1-0-127

Подключение инфракрасного приемника к Arduino

2015-12-08T15:04:44+0300

08.12.2015

 Иногда требуется управлять Arduino по беспроводной связи, самым простым способом станет управление через инфракрасный канал при помощи любого пульта с инфракрасным передатчиком. Пульт можно использовать абсолютно любой, от телевизора или проигрывателя тут не имеет значения.

 Вся наша задача сводится к нескольким операциям, принять сигналы и использовать коды нажатых кнопки для выполнения каких либо действий при помощи Arduino.

 Начнем с аппаратной части, нам потребуется ИК-приемник который и будет принимать наши сигналы с отправленные с пульта (если на картинке нет вашего приемника то гуглим, иначе можем сжечь его неправильным подключением). GND это минус, Vs это +5 вольт и Vo это выход нашего приемника.

 Подключаем ИК-приемник к Arduino как показано на картинке (можно подключать без конденсаторов и на прямую без токоограничивающего сопротивления но для длительной работы нужно подключать именно так, конденсатор на 0.1 нужен для подавления помех по питанию), начальную аппаратную часть мы сделали и можно приступать к программной.

 Для работы ИК-приемником и возможно в будущем ИК-передатчиком нам потребуется библиотека IRremote и небольшой тестовый скетч при помощи котрого мы будем принимать коды нажатых кнопок.

 Устанавливаем библиотеку и загружаем в Arduino тестовый скетч, открываем монитор порта (Ctrl+Shift+M в программе Arduino), далее при нажатии кнопок на нашем ИК-пульте мы увидим коды кнопок которые принимает Arduino через ИК-приемник.

 Мы видим что наш ИК-пульт посылает сигналы в кодировке NEC и коды нажатых кнопок, а так же видим иногда текст “Received NEC: repeat; ignoring. ” это говорит о том что срабатывает защита от залипания кнопок (защита от дребезга кнопки или повторного нажатия в очень узкий промежуток времени).

 Итак коды кнопок у нас есть теперь можно приступать к простейшему коду, для начала попробуем включать и выключать светодиод при нажатии нужных нам кнопок на ИК-пульте.

 *Следует учесть что мои коды кнопок выглядят так FF40BF, а в коде мы будем писать так 0xFF40BF, то есть добаляем к нашему коду кнопки 0x перед самим кодом.

#include // библиотека для ИК int RECV_PIN = 6; // pin ИК приемника IRrecv irrecv(RECV_PIN); // создаем объект получения сигнала с заданного порта decode_results results; // переменная хранящая результат int LED = 8; // pin нашего светодиода void setup() { irrecv.enableIRIn(); // включаем ИК-приемник pinMode(LED, OUTPUT); // устанавливает режим работы – выход } void loop() { if (irrecv.decode(&results)) { // если есть сигнал if (results.value == 0xFF40BF) { // код моей кнопки “FF40BF”. У Вас он будет дугой! digitalWrite(LED, HIGH); // зажигаем светодиод } if (results.value == 0xFF32CD) { // код моей кнопки “FF32CD”. У Вас он будет дугой! digitalWrite(LED, LOW); // тушим светодиод } irrecv.resume(); // получаем следующее значение } }

 Теперь можно управлять с ИК-пульта чем вам вздумается

Источник: http://webstrannik.ru/podklyuchenie-infrakrasnogo-priemnika-k-Arduino.html

Arduino Playground – GPS

(Adapted from Igor Gonzalez Martin's Spanish language tutorial here.)

This tutorial shows how to connect a Parallax GPS module to the Arduino, and how to use Arduino code to read information like date, time, location and satellites in view from the standard NMEA data streams that the module produces.

Hardware Connections:

The module connects to the Arduino through a 4800 bps TTL-level interface (8 data bits, no parity, 1 stop bit, non-inverted). Only four wires are needed to read the module's GPS data.

Note: if you are using an Andruino Uno, keep in mind that you can't use the GPS module at the same time as your computer is connected on the USB port.

(photo and drawing by Igor Gonzalez Martin)

Understanding NMEA GPS strings

GPS modules typically put out a series of standard strings of information, under something called the National Marine Electronics Association (NMEA) protocol. More information on NMEA standard data strings can be found at this site

The tutorial code at the bottom of this page demonstrates how to decode and display the most common string, called $GPRMC. If all you need is date, time and position, you can to skip reading this, and just run the code below.

While you can write software to serially request other strings from the Parallax module, the following strings are automatically transmitted when the “/RAW” pin is pulled low.

  • $GPGGA: Global Positioning System Fix Data
  • $GPGSV: GPS satellites in view
  • $GPGSA: GPS DOP and active satellites
  • $GPRMC: Recommended minimum specific GPS/Transit data

Each of these sentences contains a wealth of data. For example, here are a few instances of the $GPRMC string, aka the “Recommended minimum specific GPS/Transit data” string:

eg1. $GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62 eg2. $GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68
225446 Time of fix 22:54:46 UTC A Navigation receiver warning A = Valid position, V = Warning 4916.45,N Latitude 49 deg. 16.45 min. North 12311.12,W Longitude 123 deg. 11.12 min. West 000.5 Speed over ground, Knots 054.7 Course Made Good, degrees true 191194 UTC Date of fix, 19 November 1994 020.3,E Magnetic variation, 20.3 deg. East *68 mandatory checksum
eg3. $GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70 1 2 3 4 5 6 7 8 9 10 11 12
1 220516 Time Stamp 2 A validity – A-ok, V-invalid 3 5133.82 current Latitude 4 N North/South 5 00042.24 current Longitude 6 W East/West 7 173.8 Speed in knots 8 231.8 True course 9 130694 Date Stamp 10 004.2 Variation 11 W East/West 12 *70 checksum
eg4. for NMEA 0183 version 3.00 active the Mode indicator field is added $GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a,m*hh Field # 1 = UTC time of fix 2 = Data status (A=Valid position, V=navigation receiver warning) 3 = Latitude of fix 4 = N or S of longitude 5 = Longitude of fix 6 = E or W of longitude 7 = Speed over ground in knots 8 = Track made good in degrees True 9 = UTC date of fix 10 = Magnetic variation degrees (Easterly var. subtracts from true course) 11 = E or W of magnetic variation 12 = Mode indicator, (A=Autonomous, D=Differential, E=Estimated, N=Data not valid) 13 = Checksum

The Arduino Code

Источник: http://playground.arduino.cc/Tutorials/GPS

How to Interface GPS Module (NEO-6m) with Arduino

What is GPS

The Global Positioning System (GPS) is a satellite-based navigation system made up of at least 24 satellites. GPS works in any weather conditions, anywhere in the world, 24 hours a day, with no subscription fees or setup charges.

How GPS works

GPS satellites circle the Earth twice a day in a precise orbit. Each satellite transmits a unique signal and orbital parameters that allow GPS devices to decode and compute the precise location of the satellite.

GPS receivers use this information and trilateration to calculate a user's exact location. Essentially, the GPS receiver measures the distance to each satellite by the amount of time it takes to receive a transmitted signal.

With distance measurements from a few more satellites, the receiver can determine a user's position and display it.

To calculate your 2-D position (latitude and longitude) and track movement, a GPS receiver must be locked on to the signal of at least 3 satellites. With 4 or more satellites in view, the receiver can determine your 3-D position (latitude, longitude and altitude). Generally, a GPS receiver will track 8 or more satellites, but that depends on the time of day and where you are on the earth.

Once your position has been determined, the GPS unit can calculate other information, such as:

What's the signal?

GPS satellites transmit at least 2 low-power radio signals. The signals travel by line of sight, meaning they will pass through clouds, glass and plastic but will not go through most solid objects, such as buildings and mountains. However, modern receivers are more sensitive and can usually track through houses.

A GPS signal contains 3 different types of information:

  • Pseudorandom code is an I.D. code that identifies which satellite is transmitting information. You can see which satellites you are getting signals from on your device's satellite page.
  • Ephemeris data is needed to determine a satellite's position and gives important information about the health of a satellite, current date and time.
  • Almanac data tells the GPS receiver where each GPS satellite should be at any time throughout the day and shows the orbital information for that satellite and every other satellite in the system.

2. Download and install required libraries for GPS to work in Arduino IDE

3. NEO-6M GPS module and Arduino UNO

4. Connection of Arduino UNO and GPS module

Connect the four pins from UBLOX to an Arduino as follows:

Here, I suggest you to use external power supply to power the GPS module because minimum power requirement for GPS module to work is 3.3 V and Arduino is not capable of providing that much voltage.

To provide voltage use prolific USB TTL.

One more thing I have found while working with GPS antenna comes with module is its not receiving signal inside the house so I used this antenna – it's much better.

For connecting this antenna, you have to use connector:

5. Connection of Arduino UNO and JHD162a LCD

LCD ======= Arduino

  • RS ======= A0 (Analog pin)

Programming

Arduino IDE

#include #include #include float lat = 28.5458,lon = 77.1703; // create variable for latitude and longitude object SoftwareSerial gpsSerial(3,4);//rx,tx LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); TinyGPS gps; // create gps object void setup(){ Serial.begin(9600); // connect serial //Serial.println(“The GPS Received Signal:”); gpsSerial.begin(9600); // connect gps sensor lcd.begin(16,2); } void loop(){ while(gpsSerial.available()){ // check for gps data if(gps.encode(gpsSerial.read()))// encode gps data { gps.f_get_position(&lat,&lon); // get latitude and longitude // display position lcd.clear(); lcd.setCursor(1,0); lcd.print(“GPS Signal”); //Serial.print(“Position: “); //Serial.print(“Latitude:”); //Serial.print(lat,6); //Serial.print(“;”); //Serial.print(“Longitude:”); //Serial.println(lon,6); lcd.setCursor(1,0); lcd.print(“LAT:”); lcd.setCursor(5,0); lcd.print(lat); //Serial.print(lat); //Serial.print(” “); lcd.setCursor(0,1); lcd.print(“,LON:”); lcd.setCursor(5,1); lcd.print(lon); } } String latitude = String(lat,6); String longitude = String(lon,6); Serial.println(latitude+”;”+longitude); delay(1000); }

In Visual Studio, I have made an application in which current GPS location can be find.Its only work when it is connected serially with PC or laptop.

If you want to make some changes in application, you can do it by opening sln file in Visual Studio (2012 and above) or you can directly install setup and use it.

Result

If anyone wants the code for GSM as well, message me.

Источник: https://www.hackster.io/ruchir1674/how-to-interface-gps-module-neo-6m-with-arduino-8f90ad

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

 Использование космических технологий уже давно доступно рядовому радиолюбителю, а именно использование спутников GPS в своих целях. Для этого достаточно приобрести (а если повезет, выдрать из ненужного КПК/смартфона и т.д.) модуль GPS-приемника. Из всего многочисленного разнообразия готовых модулей я сделал выбор в пользу GPS-модуля EB-500

 Это чуть ли не самый дешевый и распространенный модуль, описание и опыт использования в рунете встречается очень часто. И на этот раз я не стал заказывать интересную детальку издалека: покупать на Еbay перед новым годом нервов не хватит пока дождешься 🙂 а в chip-nn.ru этот модуль дешевле не намного. Поэтому поехал в местный вольтмастер и купил эту железку за 600 рублей. 600? Дайте два!

 Общее описание

 Модуль предназначен для встраивания в мобильные устройства поэтому имеет весьма небольшие габариты 13 x 15 x 2.2 mm. У EB-500 есть еще несколько модификаций. Первая EB500L, ничем не отличающаяся от основной за той лишь разницей что не умеет работать с пассивными антеннами.

 Поэтому если стоит выбор между ЕВ-500 и ЕВ-500L, выбирайте первый. Он умеет работать как с пассивными так и с активными антеннами.

Вторая модификация EB-500A, имеет те же характеристики что и EB-500 но в нем есть аппаратный USB, поэтому если надо собрать устройство подключаемое к компьютеру, лучше взять его и тогда не придется делать дополнительный преобразователь USB-UART.

 Для того чтобы с большой точностью определять координаты, приемник должен принять сигнал как минимум с трех спутников. При увеличении числа спутников, с которых ловится сигнал, увеличивается и точность вычисления координат приемника. У EB-500  в этом плане все очень даже хорошо, он имеет 66 каналов, для обнаружения спутников, их слежения и сохранения положения в пространстве.

Благодаря этому время горячего старта – Hot start (когда спутники уже найдены и сохранены  в памяти модуля) согласно документации составляет всего 1,5 секунды. Тогда как время холодного старта от 35 секунд. Все это конечно, при ясном небе без видимых помех и с хорошей антенной, посмотрим как будет обстоять на деле. Что касается антенны, то я взял пассивную керамическую.

О ней чуть позже.

 Так как модуль предназначен для мобильных устройств питающихся от батарей, то диапазон питающих напряжений стандартный – от 4,2 до 3,0 вольт. Самое то будет использовать какой-нибудь Li-Ion аккумулятор. Потребление модуля во время работы менее 28мА. 

 Подключение

Схема подключения модуля простейшая и взята из даташита на приемник (кликабельно)

 Из необходимых внешних компонентов обвязки потребуется всего 4 фильтрующих конденсатора (можно сократить до 2-х)

 

 Обозначение выводов:

 1,2Tx1, Rx1 – ноги стандартного UART для ввода/вывода данных

 3: PPS – на этом выводе после определения координат появляются импульсы с частотой 1 Гц. 

4,5Tx0, Rx0 – дублирующий UART. Выполняет абсолютно те же функции что и первый. Удобно использовать для отладки, можно ткнутся сниффером и посмотреть в терминале как происходит общение с модулем. Или на лету менять настройки не вмешиваясь в работу микроконтроллера.

 7,9,14,15,16GPIO – выводы общего назначения, они не используются в стандартной прошивке модуля. 

 8: GPS status – еще один вывод индикации. Пока идет поиск спутников и определение координат на этом выводе логическая единица. Как только координаты будут определены на этом выводе появятся импульсы с частотой 1 Гц.

 10,19: V28D/V28A – выходы для подключения внешних фильтрующих конденсаторов.

 12: V_RTC_3V3 – вывод для подключения батарейки (2-4,3 вольта). Необходима для сохранения всех настроек и найденных спутников в памяти модуля, благодаря чему удается уменьшить время на определение координат при последующих включениях. Подключать питание к этому выводу обязательно, без этого модуль не запустится.

 13: VIN_3V3 – на этот вывод подается напряжение основного питания в диапазоне от 3 до 4,2 В.

21: RF_input – вывод для подключения антенны

 И еще одна важная рекомендация:  все выводы GND обязательно пропаиваются с землей. Даже те два пада под брюхом модуля хоть они и не выведены наружу – для высокочастотных схем чем больше земли, тем лучше и меньше вероятности искажений сигнала. 

 Антенна

 Как я уже сказал, антенну я взял пассивную A25-4102920-AMT02.  Размеры антенны 25 х 25 мм. Были еще и другие размеры: 18 х 18 мм. и 35 х 35 мм. Если размеры не важны, то советуют брать больше – в этом деле чем больше антенна тем лучше ловится сигнал. 

 Антенна представляет собой керамическую пластину, с двух сторон нанесенной металлизацией.  К верхней металлизации припаян штырек, который проходит через керамическое основание и выходит снизу. 

 Снизу нанесена липучка, с помощью которой антенна приклеивается к плате.

 На плате, куда приклеивается антенна, под всей её площадью настоятельно рекомендуется оставлять земляной полигон – чем больше земли под антенной тем лучше. Еще рекомендуется делать дорожку соединяющую модуль и антенну как можно короче, не более 15 мм.

При этом волновое сопротивление дорожки должно составлять 50 Ом. К тому же в плотную к модулю антенну ставить нельзя – наводки от самого модуля заглушат весь сигнал.

И тут надо поймать золотую середину: и расстояние выдержать, и антенну убрать подальше и землей все залить под ней. Жуть 🙂

 Раз уж в каждом официальном документе пишут о необходимости соединять антенны только пятидесяти-омными дорожками, немного отойду от темы и остановлюсь на том, как рассчитать проводник на необходимое волновое сопротивление.

А то опыт коллег, осваивавших этот модуль, нагоняет ужас от того, что у некоторых прекрасно ловит спутники даже в комнате, а у некоторых не ловит даже под открытым небом, причем топология плат была вроде одинакова.

Итак, немного науки.

 Для расчета волнового сопротивления есть специальная формула, по которой можно определить интересующий нас параметр. Этим параметром является ширина дорожки, идущей до антенны, играя ее шириной мы можем добиться нужного волнового сопротивления. Это в простейшем случае, когда проводник не окружен по бокам земляным полигоном.

   

где Z0 — волновое сопротивление,

Еr — диэлектрическая проницаемость материала (для FR4 примерно 4.4), 

B — ширина проводника (то что нам необходимо найти),

C — толщина меди (обычно 18 мкм)

H — толщина диэлектрика (толщина текстолита у меня 1 мм).

 Или воспользоваться удобной программкой CITS25 (скачать), результат у меня получился одинаковый что при расчете вручную по формуле выше, что по этой программе. Так что рекомендую. Тем более, что она уже может считать и более сложные расположения проводников между собой.

     

 Ширина проводника до антенны на текстолите толщиной 1 мм. получается примерно 1,8 мм. 

 Печатную плату разводил с учетом имеющегося корпуса, антенну разместил с обратной стороны  от приемника и прочей электроники, поэтому вышло так:

    

 А вот как это выглядит в живую. Устройство будет располагаться в таком вот гробике 🙂 

  

 Землю с обоих сторон платы обильно соединил переходными отверстиями. Не знаю как это сильно повлияло на качество приема, но холодный старт возле окна показал около 2 минут, горячий около 5 секунд.

Хотя бывало что модуль и при горячем старте тупил несколько минут пока определял координаты.

Но это все от того, что все происходило под крышей, думается мне если его вынести под открытое небо результат будет еще лучше.

 Полную схему будущего девайса приводить не буду, как укомплектую устройство целиком сделаю отдельное описание, а пока продолжим.

 Общение 

 Как и положено модуль отдает полученные данные по протоколу NMEA0183 через стандартный UART  интерфейс. Естественно что при подключении приемника к микроконтроллеру или преобразователю UART-USB(COM) уровень напряжения на линиях связи не должен превышать допустимого предела 4,2В. У себя для подключения к компьютеру я использовал преобразователь на FT232RL с логическими уровнями 3,3В.

 Скорость подключения по умолчанию составляет 115200 бод, хотя в сети встречаются сообщения о том, что по умолчанию модуль работает на скорости 9600 бод да и в даташите на модуль обозначена эта скорость.  Не знаю в чем тут дело, может ревизии разные. Но у меня заработал именно на 115200. Поэтому если вдруг не срастается общение с модулем просто попробуйте поменять скорость. 

 После того как на приемник подано основное питание он начнет отсылать в терминал кучу информации. Но полезной ее можно считать после фиксирования координат (когда замигал светодиод Status).

 К примеру, в моем случае приходит следующее.

$GPRMC,190813.000,A,5312.7581,N,05009.1820,E,0.30,256.15,231212,,,A*62

$GPVTG,256.15,T,,M,0.30,N,0.56,K,A*38

$GPZDA,190813.000,23,12,2012,,*57

$GPGGA,190814.000,5312.7580,N,05009.1820,E,1,6,1.01,82.6,M,-5.9,M,,*7A

$GPGLL,5312.7580,N,05009.1820,E,190814.000,A,A*54

$GPGSA,A,3,13,28,03,05,19,26,,,,,,,1.40,1.01,0.97*0B

$GPGSV,4,1,13,07,81,063,,08,60,268,,13,38,136,29,05,32,295,21*78

$GPGSV,4,2,13,10,31,226,,03,30,068,18,19,25,094,18,28,22,205,31*7B

$GPGSV,4,3,13,06,22,048,,26,16,305,18,16,13,044,,23,07,135,*7E

$GPGSV,4,4,13,21,02,004,*4E

 Из всего этого нас могут заинтересовать координаты (собственно ради чего все это и делается), точное время, дата, скорость и направление движения.  Всю эту информацию можно взять с первой строчки, которая имеет идентификатор $GPRMC. 

190813 – время 19 часов, 08 минут, 13 секунд (время по UTC поэтому надо прибавлять часы в зависимости от часового пояса)

5312.7581,N – широта (N-северная, S-южная)

05009.1820,E – долгота (E-восточная, W-западная)

0.30 – скорость движения (измеряемая в узлах) 1 узел = 1.852 км/ч = 0.5144 м/сек

Если лень пересчитывать скорость в км/ч можно достать из следующей строки с идентификатором $GPVTG. Помечена как 0.56,K

256.15 – угол движения относительно севера (90 – движемся на восток, 180 – на юг, 270 – на запад, а 0 – соответственно на север.) Для определения азимута, как нетрудно догадаться, используется расчет координат. Поэтому точное определение может быть только в движении.

231212 – здесь находится текущая дата в формате ДДММГГ

для наглядности сделал скрин с терминала

 Остальные строки в основном дублируют информацию с первой строчки, за исключением строк с идентификатором $GPGSA и $GPGSV. В них находится информация о пойманных спутниках. Практической пользы от этого никакой, но зато с помощью специальной программы EB View можно глянуть где находятся в данный момент каждый из спутников. 

 У меня модель лежа на столе возле окна поймал 5 спутников, правда просвет на чистое небо там мизерный. Сверху закрывает балкон соседа, а напротив многоэтажный дом.

Поэтому думается мне что точность получилась хреновая, потому как сигнал легко отражаться от препятствий и уже отраженный улавливаться модулем. А это влечет за собой неточность измерений.

Да и расчетная скорость 2,29 км/час настораживает 🙂

 С помощью этой программы также можно настроить сам модуль. К примеру, изменить частоту обновления координат или изменить скорость соединения по UART. Но надо помнить что если уменьшить скорость соединения, модуль может не успеть передать всю информацию за отведенное время.