Используем с 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 |
|
Количество используемых спутников | 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
Adblockdetector