GPS Tracker на ардуино своими руками / Хабр
После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой GPS-tracker с отправкой координат по GPRS на сервер.
Используется Arduino Mega 2560 (Arduino Uno), SIM900 — GSM/GPRS модуль (для отправки информации на сервер), GPS приёмник SKM53 GPS.
Всё закуплено на ebay.com, в сумме около 1500 р (примерно 500р ардуина, немного меньше — GSM модуль, немного больше — GPS).
GPS приемник
Для начала нужно разобраться с работой с GPS. Выбранный модуль — один из самых дешевых и простых. Тем не менее, производитель обещает наличие батарейки для сохранения данных о спутниках. По даташиту, холодный старт должен занимать 36 секунд, однако, в моих условиях (10 этаж с подоконника, вплотную зданий нет) это заняло аж 20 минут. Следующий старт, однако, уже 2 минуты.
Важный параметр устройств, подключаемых к ардуине — энергопотребление. Если перегрузить преобразователь ардуины, она может сгореть. Для используемого приемника максимальное энергопотребление — 45mA @ 3.3v. Зачем в спецификации указывать силу тока на напряжении, отличном от требуемого (5V), для меня загадка. Тем не менее, 45 mA преобразователь ардуины выдержит.
Подключение
GPS не управляемый, хотя и имеет RX пин. Для чего — неизвестно. Основное, что можно делать с этим приемником — читать данные по протоколу NMEA с TX пина. Уровни — 5V, как раз для ардуины, скорость — 9600 бод. Подключаю VIN в VCC ардуины, GND в GND, TX в RX соответствующего serial. Читаю данные сначала вручную, затем с использованием библиотеки TinyGPS. На удивление, всё читается. После перехода на Uno пришлось использовать SoftwareSerial, и тут начались проблемы — теряется часть символов сообщения. Это не очень критично, так как TinyGPS отсекает невалидные сообщения, но довольно неприятно: о частоте в 1Гц можно забыть.
Небольшое замечание относительно SoftwareSerial: на Uno нет хардверных портов (кроме соединённого с USB Serial), поэтому приходится использовать программный. Так вот, он может принимать данные только на пине, на котором плата поддерживает прерывания. В случае Uno это 2 и 3. Мало того, данные одновременно может получать только один такой порт.
Вот так выглядит «тестовый стенд».
GSM приемник/передатчик
Теперь начинается более интересная часть. GSM модуль — SIM900. Он поддерживает GSM и GPRS. Ни EDGE, ни уж тем более 3G, не поддерживаются. Для передачи данных о координатах это, вероятно, хорошо — не будет задержек и проблем при переключении между режимами, плюс GPRS сейчас есть почти везде. Однако, для каких-то более сложных приложений этого уже может не хватить.
Подключение
Модуль управляется также по последовательному порту, с тем же уровнем — 5V. И здесь нам уже понадобятся и RX, и TX. Модуль — shield, то есть, он устанавливается на ардуину. Причем совместим как с mega, так и с uno. Скорость по умолчанию — 115200.
Собираем на Mega, и тут нас ждет первый неприятный сюрприз: TX пин модуля попадает на 7й пин меги. На 7м пину меги недоступны прерывания, а значит, придется соединить 7й пин, скажем, с 6м, на котором прерывания возможны. Таким образом, потратим один пин ардуины впустую. Ну, для меги это не очень страшно — всё-таки пинов хватает. А вот для Uno это уже сложнее (напоминаю, там всего 2 пина, поддерживающих прерывания — 2 и 3). В качестве решения этой проблемы можно предложить не устанавливать модуль на ардуину, а соединить его проводами. Тогда можно использовать Serial1.
После подключения пытаемся «поговорить» с модулем (не забываем его включить). Выбираем скорость порта — 115200, при этом хорошо, если все встроенные последовательные порты (4 на меге, 1 на uno) и все программные работают на одной скорости. Так можно добиться более устойчивой передачи данных. Почему — не знаю, хотя и догадываюсь.
Итак, пишем примитивный код для проброса данных между последовательными портами, отправляем atz, в ответ тишина. Что такое? А, case sensitive. ATZ, получаем OK. Ура, модуль нас слышит. А не позвонить ли нам ради интереса? ATD +7499… Звонит городской телефон, из ардуины идет дымок, ноутбук вырубается. Сгорел преобразователь Arduino. Было плохой идеей кормить его 19 вольтами, хотя и написано, что он может работать от 6 до 20V, рекомендуют 7-12V. В даташите на GSM модуль нигде не сказано о потребляемой мощности под нагрузкой. Ну что ж, Mega отправляется в склад запчастей. С замиранием сердца включаю ноутбук, получивший +19V по +5V линии от USB. Работает, и даже USB не выгорели. Спасибо Lenovo за защиту.
После выгорания преобразователя я поискал потребляемый ток. Так вот, пиковый — 2А, типичный — 0.5А. Такое явно не под силу преобразователю ардуины. Нужно отдельное питание.
Программирование
Модуль предоставляет широкие возможности передачи данных. Начиная от голосовых вызовов и SMS и заканчивая, собственно, GPRS. Причем для последнего есть возможность выполнить HTTP запрос при помощи AT команд. Придется отправить несколько, но это того стоит: формировать запрос вручную не очень-то хочется. Есть пара нюансов с открытием канала передачи данных по GPRS — помните классические AT+CGDCONT=1,«IP»,«apn»? Так вот, тут то же самое нужно, но слегка хитрее.
Для получения страницы по определенному URL нужно послать следующие команды:
AT+SAPBR=1,1 //Открыть несущую (Carrier)
AT+SAPBR=3,1,"CONTYPE","GPRS" //тип подключения - GPRS
AT+SAPBR=3,1,"APN","internet" //APN, для Мегафона - internet
AT+HTTPINIT //Инициализировать HTTP
AT+HTTPPARA="CID",1 //Carrier ID для использования.
AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Собственно URL, после sprintf с координатами
AT+HTTPACTION=0 //Запросить данные методом GET
//дождаться ответа
AT+HTTPTERM //остановить HTTP
В результате, при наличии соединения, получим ответ от сервера. То есть, фактически, мы уже умеем отправлять данные о координатах, если сервер принимает их по GET.
Питание
Поскольку питать GSM модуль от преобразователя Arduino, как я выяснил, плохая идея, было решено купить преобразователь 12v->5v, 3A, на том же ebay. Однако, модулю не нравится питание в 5V. Идем на хак: подключаем 5V в пин, с которого приходит 5V от ардуины. Тогда встроенный преобразователь модуля (существенно мощнее преобразователя ардуины, MIC 29302WU) сделает из 5V то, что нужно модулю.
Сервер
Сервер написал примитивный — хранение координат и рисование на Яндекс.картах. В дальнейшем возможно добавление разных фич, включая поддержку многих пользователей, статус «на охране/не на охране», состояние систем автомобиля (зажигание, фары и пр.), возможно даже управление системами автомобиля. Конечно, с соответствующей поддержкой трекера, плавно превращающегося в полновесную сигнализацию.
Полевые испытания
Вот так выглядит собранный девайс, без корпуса:
После установки преобразователя питания и укладывания в корпус от дохлого DSL модема система выглядит так:
Припаивал провода, вынул несколько контактов из колодок ардуины. Выглядят так:
Подключил 12V в машине, проехался по Москве, получил трек:
Точки трека достаточно далеко друг от друга. Причина в том, что отправка данных по GPRS занимает относительно много времени, и в это время координаты не считываются. Это явная ошибка программирования. Лечится во-первых, отправкой сразу пачки координат со временем, во-вторых, асинхронной работой с GPRS модулем.
Время поиска спутников на пассажирском сидении автомобиля — пара минут.
Выводы
Создание GPS трекера на ардуино своими руками возможно, хотя и не является тривиальной задачей. Главный вопрос сейчас — как спрятать устройство в машине так, чтобы оно не подвергалось воздействиям вредных факторов (вода, температура), не было закрыто металлом (GPS и GPRS будут экранироваться) и не было особенно заметно. Пока просто лежит в салоне и подключается к гнезду прикуривателя.
Ну и ещё нужно поправить код для более плавного трека, хотя основную задачу трекер и так выполняет.
Использованные устройства
- Arduino Mega 2560 [compatible]
- Arduino Uno [compatible]
GPS SkyLab SKM53- SIM900 based GSM/GPRS Shield
- DC-DC 12v->5v 3A converter
Литература
- Оф. сайт Arduino (содержит подробную информацию и о платах, и об их программировании)
- TinyGPS (ссылка на скачивание в середине страницы)
- GPS SKM53 Datasheet
- Описание GSM/GPRS Shield на SIM900
- SIM900 AT Commands
- Документация по Яндекс.Картам
Код
Публикующийся код может быть использован в любых разрешенных законом целях любыми лицами. Качество кода ужасно, поскольку это, всё же, тестовый вариант. Когда допишу до чего-то более красивого, обновлю.
Для компиляции кода для ардуино нужно импортировать библиотеку tinygps.
UPD Код: GDrive
Скетч
DS-GPM.S — Designer Systems — Arduino UNO Shield, GPS система и GLONASS Shield со встроенной антенной для Arduino и Raspberry Pi
Arduino UNO Shield, GPS система и GLONASS Shield со встроенной антенной для Arduino и Raspberry Pi
Обзор продукта
DS-GPM. S является 99-канальной GPS и GLONASS платой с внутренней антенной для Arduino Arduino и Raspberry-Pi. Модуль является высокоинтегрированной GPS системой с роботизированным определением местоположения. Специально нацелен на пользователей платы Arduino UNO (так же поддерживаются платы MEGA и NANO) DS-GPM. S оснащена I2C связью освобождения последовательного порта для других функций. GPS/GLONASS данные с платы GPS shield хранятся во внутренних регистрах, которые обновляются каждую секунду с включают в себя широту, долготу, высоту, время и дату (UTC), курс (истинный и магнитный), скорость и информацию о спутниках. В дополнение к DS-GPM. S обладает 4 программируемыми I/O и аналоговым входом с автоматическими измерениями.
- Стандартный форм-фактор Arduino UNO shield для удобной интеграции в любой проект Arduino
- 99 каналов сбора информации с резервным питанием
- Встроенная антенна малой мощности
- Встроенные 4 линии IO и 8-битный АЦП вход для местных датчиков
Области применения
Связь и Сеть, Беспроводное, Робототехника, Охрана, Время и Расчет Времени
Информация об изделиях
Техническая документация (1)
???PF_PDP_COMPARE_MAX_ITEMS_MESG???
Пример 38. GPS модуль Ublox NEO-6M [База знаний]
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
TinyGPSPlus gps;
#define S_RX 4 // Вывод RX
#define S_TX 3 // Вывод TX
SoftwareSerial SoftSerial(S_RX, S_TX);
void setup(void) {
Serial.begin(9600);
SoftSerial.begin(9600);
}
void loop() {
while (SoftSerial.available() > 0) {
if (gps.encode(SoftSerial.read())) {
if (gps.location.isValid()) {
Serial.print(«Latitude = «);
Serial.println(gps.location.lat(), 6);
Serial.print(«Longitude = «);
Serial.println(gps.location.lng(), 6);
}
else
Serial.println(«Location Invalid»);
if (gps.altitude.isValid()) {
Serial.print(«Altitude = «);
Serial.print(gps.altitude.meters());
Serial.println(» meters»);
}
else
Serial.println(«Altitude Invalid»);
if (gps.speed.isValid()) {
Serial.print(«Speed = «);
Serial.print(gps.speed.kmph());
Serial.println(» kmph»);
}
else
Serial.println(«Speed Invalid»);
if (gps.time.isValid()) {
Serial.print(«Time (GMT) : «);
if(gps.time.hour() < 10) Serial.print(«0»);
Serial.print(gps.time.hour());
Serial.print(«:»);
if(gps.time.minute() < 10) Serial.print(«0»);
Serial.print(gps.time.minute());
Serial.print(«:»);
if(gps.time.second() < 10) Serial.print(«0»);
Serial.println(gps.time.second());
}
else
Serial.println(«Time Invalid»);
if (gps.date.isValid()) {
Serial.print(«Date : «);
if(gps.date.day() < 10) Serial.print(«0»);
Serial.print(gps.date.day());
Serial.print(«/»);
if(gps.date.month() < 10) Serial.print(«0»);
Serial.print(gps.date.month());
Serial.print(«/»);
Serial.println(gps.date.year());
}
else
Serial.println(«Date Invalid»);
if (gps.satellites.isValid()) {
Serial.print(«Satellites = «);
Serial.println(gps.satellites.value());
}
else
Serial.println(«Satellites Invalid»);
}
}
}
GPS ТРЕКЕР, СПИДОМЕТР, ОДОМЕТР И СПУТНИКОВЫЕ ЧАСЫ. ПРОЕКТ НА АРДУИНО. — voltNik
Страница проекта: https://github.com/voltnik/GPS-speed-tracker
Обзор на 3Д принтер: https://www.youtube.com/watch?v=l0Fw1vF3B60
Схема проекта:
Привет друзья, у нас с вами над головой летает большое количество разных космических аппаратов. Среди них есть примерно 90 крайне полезных навигационных спутников американской системы GPS, российской ГЛОНАСС, европейской Галилео и китайской БэйДоу. И сегодня мы будем ловить с них сигнал.
Для начала немного теории: Спутниковая система навигации представляет из себя сеть космических аппаратов, которые летают по заранее известным маршрутам точно соблюдая свою орбиту и траекторию или находятся в известной стационарной точке на геостационарной или геосинхронной орбите. Спутники в среднем летают на высоте около 20 тысяч километров, и каждый представляет из себя сверхточные атомные часы, которые непрерывно вещают на всю планету свое текущее время.
Радиосигнал распространяясь со скоростью света доходит до Земли с задержкой от 60 до 90 миллисекунд, это зависит от удаления спутника. Зная точное расположение источника радиосигнала по задержке времени его распространения можно узнать точное расстояние до спутника. И далее по триангуляции расстояний до нескольких известных объектов можно узнать где вы находитесь в пространстве.
Представьте, что этот голубой шарик наша планета. Над ним на высоте 20 тысяч километров летит три спутника. При измерении расстояния до первого вы получите информацию о том, что находитесь где-то на этом круге – пока что это малоинформативно. Сигнал от второго спутника уточнит ваше местоположение до двух точек пересечения без привязки к высоте. Сигнал от третьего навигационного спутника укажет высоту этих точек над поверхностью и формально решит навигационное уравнение, сведя ваше местоположение к двум возможным точкам нахождения. В реальности же одна из этих координат имеет невероятных характеристики и ее отбрасывают, полностью решая задачу. Тоже самое делает сигнал от четвертого спутника – он уже однозначно точно решает навигационное уравнение.
Замер расстояний до каждого последующего спутника повышает точность позиционирования и сегодня она составляет от 1 до 3 метров при стандартной видимости около 10 навигационных спутников.
С теорией разобрались, перейдем к практике. Сейчас отдельно продаются разные навигационные модули. Самые простые и древние поддерживают только сигналы от американской GPS системы наблюдая, в среднем 5-7 спутников. Более продвинутые модули могут принимать сигнал еще и от российской группировки ГЛОНАСС, повышая общее количество наблюдаемых спутников в среднем в два раза. Также в продаже есть модули, совмещенные с компасом, они используются для точной навигации и поддержания курса.
На экране моего телефона видны спутники разных навигационных систем. Кружки это GPS, треугольники — ГЛОНАСС, а звездочки это китайская БэйДоу. Таким образом мой телефон поддерживает три разные навигационные системы и совмещая сигналы от них, повышает точность определения местоположения. Сейчас над моей головой находится 28 спутников, а доступен сигнал только от 7. Т.е. мой телефон уже заранее знает где находится каждый спутник. А отсутствующий сигнал от 21 спутника значит, что они находятся вне зоны прямой видимости. Навигационный сигнал очень слабый, от слова ВАЩЕ, он почти не отражается, его блокирует рельеф местности, здания, крыша автомобиля – любой металл у вас над головой или сбоку. Даже идущий за окном снег мешает хорошему приему.
Для реализации проекта понадобится ряд электронных модулей: программируемая платформа Arduino Nano, OLED экран 128 на 32 точки (он подключается по шине I2C), GPS модуль для подключения по UART, любой литиевый аккумулятор емкостью выше 200 миллиампер, защитно-зарядный модуль для лития и повышающий преобразователь для того чтобы получить 5 вольт. У меня тут три разных типа, подойдет любой. Еще планировал использовать цветной RGB светодиод для индикации состояния, но по ходу проекта отказался от этого.
Подключаем экран к Ардуино и сталкиваемся с первой трудностью. Стандартная библиотека OLED экрана занимает 20 кБ, это 70% памяти микроконтроллера и практически не оставляет места для программы. Ранее я собирал высотомер и столкнулся с тем что любая новая строчка кода приводит к переполнению памяти и зависанию микроконтроллера при работе. Поэтому буду использовать значительно более легкую библиотеку. В ней нет работы с графикой и доступен только вывод текста на OLED экран, а занимает она всего 1 кБ памяти.
Отдельно подключаю GPS модуль к макетной плате и вижу первые навигационные данные – сигнал из космоса пойман и обработан. Теперь делаю вывод информации на экран. Класс! Видит 4 спутника, теперь 3, и снова 4, уже 5! Для лучшего приема GPS модуль висит за окном на проводе.
Во время разработки проекта я использовал GPS модули разных типов. Простые GPS и совмещенные GPS c Глонасс. Пришлось провести ряд многочасовых экспериментов для проверки на стабильность работы. Модули оказались рабочими, а вот с программными библиотеками пришлось повозится. Пробовал несколько разных библиотек, и TinyGPS+ оказалась единственной, которая работала сразу со всеми модулями GPS.
Вообще библиотека занимается разбором протокола NMEA, по-простому парсит данные, которые выплевывает GPS модуль два раза в секунду. Вот так выглядит не обработанный поток данных.
В итоге моя прошивка позволяет подключать практически любой GPS модуль по UART с протоколом передачи данных NMEA. По сути это большинство модулей, у которых есть пины RX и TX. Рекомендую брать именно модуль GPS с Глонасс, он видит больше спутников, поэтому точность у него выше. Ссылки на все комплектующие и модули есть в описании к этому видео.
Макетка показала полную работоспособность системы, теперь можно собирать все в железе. В качестве питания я буду использовать литиевый аккумулятор, он подключатся к защитной плате с зарядкой. На этой плате нижний резистор R3 задает ток зарядки аккумулятора, по умолчанию установлен 1 ампер, это много для маленьких аккумуляторов, поэтому резистор нужно заменить. На экране вы видите табличку с номиналом резисторов под разные токи зарядки. Если ваш аккумулятор имеет емкость 500 миллиампер часов, то нужно выставлять ток заряда не выше этого значения. Т.е. можно поставить 200 или 300 миллиампер, и не превышать 500.
Далее напряжение нужно повысить, экран и GPS модуль питаются от 5 вольт. Это будем делать с помощью повышающего преобразователя напряжения. Такие обычно устанавливаются в повербанки для того чтобы поднять напряжения с 3.7 до 5 вольт. Я буду использовать маленький зеленый модуль, он может выдавать ток до 300 мА и его более чем достаточно для этого проекта.
Доработал прошивку, теперь при загрузке на основном экране отображается текущее точное время со спутников, количество видимых спутников и текущая скорость движения трекера, она скачет потому что есть погрешность определения местоположения. При нажатии на кнопку происходит смена экрана. Тут выводится текущее значение скорости и максимальное значение за период наблюдения. На еще одном экране есть текущее расстояние до нулевой точки, максимально зафиксированное удаление от нее и одометр.
Измеряю размеры всех модулей и пытаюсь расположить их максимально компактно. Но как я не старался, тонкий экран никак не увязывался с широким GPS приемником. Поэтому решил заменил экран на другой OLED 128х64 точки. Так получается эргономичнее и кнопочку можно большую поставить. OLED экраны полностью совместимы и требуют минимальной коррекции кода, поэтому прошивки будут доступны на обе версии устройства с маленьким экраном и с большим.
Схема сборки простая. Нужно подключить экран к шине I2C это пины А4 и А5, gps модуль подключается к программному serial порту на пинах D3 и D4. Кнопка на пин D7. Питание от аккумулятора через защитный модуль тащим на выключатель, далее на повышающий преобразователь, и подключаем на 5 вольт Ардуино.
Для удобного размещения компонент буду использовать зеленую макетную плату 7 на 3 сантиметра. Чтобы экран не висел на разъеме устанавливаю его на пластиковые стойки спейсеры на 5 миллиметров. Между экраном и кнопкой будет находится GPS приемник. С обратной стороны платы будет установлен контроллер Ардуино, аккумулятор и защитная плата. Аккумулятор буду использовать тонкий литий на 350 миллиампер, если не ошибаюсь такие используются в электронных сигаретах, но как я уже сказал можно использовать любой литиевый аккумулятор.
Заново все замеряю, промеряю и готовлю проект корпуса для печати на 3Д принтере. Буквально 15 минут на сайте TinkerCAD и проект готов к печати. Переношу файл на флешке, запускаю и погнали. Время печати составляет около 40 минут, это первый пристрелочный корпус для примерки размещения модулей.
Плата и кнопка влезли на свои места, а вот экрану не хватило буквально миллиметра, мешалась внутренняя стойка. А так все подходит и устанавливается на свои места. Отлично, правлю проект и печатаю финальную версию корпуса в оранжевом цвете. После окончания печати нужно обязательно дать время столу остыть и лишь потом отрывать деталь, тогда лицевая сторона будет ровной и ее не поведет.
Если вы еще не видели, то рекомендую посмотреть мой подробный видео обзор на 3Д принтер и нюансы 3Д печати, ссылка на видео тоже будет в описании.
Отламываю и зачищаю фиксирующий край пластика. Так как я использовал ABS пластик, он подвержен постобработке ацетоном. Наношу его кисточкой, слои дополнительно склеиваются, а корпус становится прочнее и приобретает глянец.
Плата идеально устанавливается внутрь корпуса, крепления сошлись, кнопка не заедает. С одного торца есть отверстие под разъем Ардуино Нано, а с другой стороны для зарядки аккумулятора. Оно оказалось, немного уже, поэтому расширяю его скальпелем.
У зарядной платы по краям есть выступы, они мешают углубить разъем, стачиваю их надфилем. Теперь плата хорошо занимает свое место.
В общем виде устройство будет иметь следующий вид. Сверху располагается корпус. Под ним будет находится микро выключатель, макетная плата с экраном, GPS модулем и кнопкой. Тут же сбоку находится повышающий преобразователь питания.
Далее снизу расположится контроллер Ардуино, зарядка лития и сам аккумулятор.
Отдельно для выключателя вырезал скальпелем отверстие в корпусе, сверху над кнопкой. Он утоплен в корпус и не будет мешать.
Пора паять. Запаиваю первый контакт экрана на плату, примерка – все правильно и можно запаять остальные три контакта. Теперь кнопка. И обязательно счищаем флюс щеткой. Запаиваю провода на модуль защиты аккумулятора.
При подключении обязательно обращайте внимание на цветность проводов. Из Китая изредка приходят неверная цветность. В данном случае я решил выпаять разъем и запаять провода напрямую для лучшего контакта. Процедура сложная, требует точность и аккуратность при пайке. Дополнительно заливаю контакты термоклеем, это обезопасит дорожки и провод от случайного выдергивания. И сразу запихиваем весь GPS модуль в термоусадку, делать это не обязательно, но дополнительно защитит от механических повреждений и замыкания при монтаже на макетную плату.
Повышающий преобразователь тоже кутаем в термоусадку. Для закрепления модулей использую двухсторонний скотч. При установке платы оказалось, что для проводов не хватает места, поэтому рассверлил отверстия в центре, туда и продену провода питания.
Кстати, рекомендую классную аккумуляторную дрель. Она работает от одного аккумулятора 18650 и позволяет быстро рассверливать подобные отверстия на платах и в корпусах, раньше для такой работы мне приходилось доставать дремель из кейса и подключать его в розетку, а сейчас под рукой всегда есть эта дрель.
Верхняя часть платы собрана, провода продеты и теперь нужно установить выключатель. Для этого откусываем на нем лишние ноги, нужны только две для подачи и прерывания питания. Запаиваем на них провод и как обычно все в термоусадку. Далее можно установить выключатель на свое место и залить термоклеем. Теперь будет удобно включать и выключать трекер.
Устанавливаю плату в корпус и закрепляю на четыре маленьких самореза. Ответные отверстия уже предусмотрены на подставках корпуса. Когда снимал защитную пленку с экрана, обратил внимание на большой зазор между дисплеем и корпусом. Поэтому взял кусок прозрачной упаковки от какой-то электроники, вырезал из нее стекло под размер окошка. И приклеил его на ацетон к пластику корпуса.
Сборку производим по схеме, сложностей и нюансов тут нет. Просто внимательно, плюс к плюсу, минус к минусу. Выключатель подключаем сразу на выход с зарядного модуля. Это позволит отключать всю цепь питания и предотвращать разряд аккумулятора.
После пайки всех проводов на модули, закрываем нижнюю плату синей изолентой. Сверху будет лежать контроллер Ардуино с зарядкой, и без изоляции появляется вероятность что-нибудь замкнуть.
Запаиваю защитный модуль и закрепляю его на своем месте термоклеем.
Лужу контакты аккумулятора и быстро запаиваю на них провод чтобы не перегреть аккумулятор. С одной и, с другой стороны. После этого нужно подключить микро USB кабель и подать питание на защитный модуль, это активирует его работу.
Далее запаиваю все торчащие провода согласно схеме, на контроллер Arduino Nano.
Готово, теперь нужно залить прошивку. Подключаем Ардуино к компьютеру, заходим на страницу проекта, ссылка на него есть в описании видео. Качаем архив, распаковываем файлы, устанавливаем библиотеки, открываем нужную версию прошивки для экрана на 32 или на 64 точки и загружаем ее в контроллер. Все, заработало с первого раза! Данные с GPS прут. Круто!
Устанавливаю контроллер на свое место, включаю автономное питание… иииииииииии.. нифига. Светодиод питания на Ардуино горит, а экран не включился. И вот так случился трындец, причину которого я не знаю до сих пор. У меня ушло несколько часов работы чтобы заставить трекер работать автономно от встроенного аккумулятора.
Сначала я думал, что виноват маленький повышающий преобразователь питания. Но проверка мультиметром показала наличие стабильных 5 вольт. Далее я подключил автономный модуль питания, который у меня остался от другого проекта, он построен на большом повышающем преобразователе – и о чудо, трекер завелся, но завис спустя несколько секунд.
Зарядил на нем аккумулятор и поставил трекер на окно ловить спутники. Через три минуты он словил сигнал от 4 спутников и определил местоположение. Ну что, значит работает и наверно можно собрать? Меняем повышающий преобразователь, видимо мелкий сильно шумит по питанию.
Для этого пришлось полностью разобрать трекер, выпаять все провода и пересобрать его заново. Новый модуль питания будет располагаться в том же месте где и старый, только пришлось убрать одну стойку, чтобы он влез под экран.
Все, провода скрутил в косички чтобы избежать наводок. Иии… эта гадина опять не включилась. Точнее включилась и сразу зависла с артефактами на экране. Столько часов работы и все в пустую. Замена преобразователя не помогла.
Пробовал устанавливать конденсаторы на питание – ничего не помогало. Трекер отказывался работать автономно, и от повышающих преобразователей, и от лабораторного блока питания – зависал или вообще не включался. Но при этом он отлично пахал от USB разъема Arduino.
Методом последовательного отключения удалось выяснить, что виноват в этом OLED экран – но почему, я так и не понял. Решение нашлось внезапно. Во время очередной проверки автономного питания я случайно подал на пин VIN 5 вольт. Замечу что этот пин !не! предназначен для подачи питания 5 вольт и требует напряжение от 7 до 12 вольт.
Но тем не менее трекер сразу завелся и начал стабильно работать. Т.е. получается маленький стабилизатор не был источником проблемы, она в чем-то другом.
Заодно решил проверить ток потребления. От 5 вольт трекер кушал около 70 миллиампер. А от 4 вольт через повышающий преобразователь получилось около 110 миллиампер. Таким образом моего маленького аккумулятора на 350 миллиампер хватит на три часа автономной работы. И это я еще питание не оптимизировал, можно срезать вечно горящие светодиоды и еще сэкономить батарею.
Трекер стал полностью стабильно работать, оставил его на окне и спустя несколько минут он словил 4 спутника. Отлично
Если вам интересно помочь мне разобраться в причине странного поведения Ардуино, то вот вам вводная:
1 – Трекер работает если его запитать через USB разъем Ардуино.
2 – Трекер зависает и не включается если запитать его через пин Ардуино 5V подав на него напряжение 5 вольт от любого источника питания.
3 – Трекер зависает и не включается если подать на него 7 вольт и более через пин Ардуино VIN.
4 – Трекер работает если его запитать не стандартными 5 вольтами через тот же самый пин VIN.
Готовое устройство представляет из себя универсальный автономный спидометр, дальномер, одометр и спутниковые часы точного времени в одном корпусе.
На главном экране после загрузки сверху отображается текущее время и дата по Гринвичу, вторая строка — это текущая скорость 0.3 километра в час и максимальное значение скорости которое было зафиксировано со времени включения — 26 километров в час. На третьей строке текущее расстояние до нулевой точки 530 метров и максимальное удаление которое было достигнуто с момента включения — 580 метров. На четвертой строке одометр, показывает 923 метра и используемое количество спутников.
Нижняя строка chars – это количество данных принятых с GPS модуля.
При коротком нажатии на кнопку происходит смена отображения экрана, а при длительном удержании трекер запоминает текущее местоположение как нулевую точку отсчета для измерений расстояния. На втором экране отображается текущая и максимальная скорость. Третий экран содержит информацию по расстоянию до нулевой точки. Четвертый экран одометр. Пятый широта и долгота.
Сбросить одометр и максимальные значения можно длительным удержанием кнопки на экране с этими параметрами. Т.е. переходите на одометр и удерживая кнопку нажатой сбрасываете его.
Перейдем к тестированию. Сейчас трекер видит 12 спутников. Выставляю текущую нулевую точку и сбрасываю одометр в ноль. Тоже самое делаю на автомобильном одометре. Проехав 1.2 километра по спидометру автомобиля, я увидел на GPS трекере те же самые 1205 метров. Текущее расстояние до нулевой точки по прямой составляет 0.93 километра. И вот по карте те самые 930 метров, пока все точно.
Решил замерить более длинную дистанцию. Опять сбрасываю показания в нули на трекере и автомобиле. Проехав 8.4 километра, я обнаружил на трекере дистанцию пути меньше – всего 7974 метра. При этом текущее расстояние до нулевой точки составляет 4.930 метров. Проверим по карте, получается очень точно, те же самые 4.930 метров. Непонятно, только почему тогда одометр врет на 400 метров и какой именно одометр врет, на машине или GPS.
Ладно, пора уже напечатать заднюю крышку и будем снова тестировать. Закрываю. Вес законченного устройства получился 55 грамм, много, но не критично – в конце покажу как можно уменьшить.
Приехал на каток и решил замерить скорость хоккеиста. Блин, чехлы ему еще для скорости нужно снять. Получилась лютая скорость, прямо «русская ракета» — 5 километров в час. Пешком ходил, а все потому что потолок на катке фольгой отражающей утеплен для удержания холода. Сигнал от спутников есть, но он не точный.
Давайте проведем последний тест с помощью мобильного телефона. Телефон видит 7 спутников, а трекер 9. Запускаю логгирование и сбрасываю одометр на трекере. Ну.. погнали. Проехав три километра телефон и трекер показывали идентичные значения на одометре. 3017 против 3021 метра – это супер результат, я не ожидал такой точности.
И далее показания скорости во время всей поездки тоже были идентичны. Максимальная скорость тоже совпала и там, и там 84 километра в час.
А вот одометр глюканул, аж на целых 12 тысяч километров. Некисло так. Ранее у меня при отладке программы уже проскакивал такой глюк и трекер разом перемещало на 7 тысяч километров. Придя домой я создал в Google точку с нулевой широтой и долготой. Оказалось, она находится в Атлантическом океане, недалеко от побережья Ганы. Замерив расстояние от нее до своего местоположения я и получил те самые 7 тысяч километров. Получается от GPS модуля иногда проскакивают нули по координатам. Это легко можно исправить, добавив всего одно условие в код программы. И более этого глюка при тестах не наблюдалось.
Считаю, что трекер получился афигенный, это мой первый опыт прямой работы с GPS модулями. Зачем он нужен? Такой трекер может выполнять роль автономного спидометра или независимого одометра. Его можно разместить на велосипед, автомобиль, игрушку или квадрокоптер. Также он позволяет измерять расстояние по прямой до заданной точки, значения нулевой хранятся в энергонезависимой памяти. Запоминает максимально достигнутые значения скорости и удаления. Делает это все автономно и не зависит ни от кого кроме спутников. Ну и конечно же это часы точного времени. Мне же он нужен для измерения максимальной скорости и максимального удаления от объектов. Точно, надо еще высоту на экран добавить, чтобы замерять как высоко поднялся!
Поговорим о том, как можно уменьшить вес, проще всего это сделать, собирая трекер на платформе Arduino Pro Mini на 3.3 вольта. Тогда вам не понадобится повышающий преобразователь, вместо него будет маленький линейный стаб на 3.3 вольта, GPS модуль без проблем работает от этого напряжения, а на экране нужно будет обойти стабилизатор питания.
Ну и сразу отвечу на вопрос можно ли добавить GSM модуль и управлять трекером по SMS? Да, можно. Для этого помимо самого модуля еще потребуется добавить в код программы обработку SMS команд и это должен быть отдельный проект.
На этом сегодня, если вам понравилось это видео, то я уверен вы оцените его лайком и поделитесь ссылкой на видос со своими друзьями.
Также рекомендую заглянуть на мой сайт в раздел самоделок, там уже накопилось немного интересных проектов.
Спасибо за просмотр, всем удачи и до встречи в новых видео! Пока-пока!
Cписок сравнения: Каталог
Pihole, або як заблокувати всю рекламу в мережіЧесно кажучи мені просто обридла реклама на інтернет-ресурсах (великі надокучливі банери, які рекламують казино), а особливо на Youtube: чому я маю дивитися дві реклами по 30 секунд!? Будемо вирішувати проблему ефективно, а найголовніше те, що в такий →Шукаємо нуль в акселерометріВ реальних проєктах акселерометри часто використовують для визначення просторового положення різних технічних об’єктів. Дуже часто вони міряють кути нахилу, такі пристрої навіть отримали спеціальну назву — інклінометри, від латинських слів inclio — →Фільтруємо сигнал акселерометруВеличезною технічною проблемою є те, що сигнал, який надходить з будь-якого датчика, є завжди випадковою величиною, яка коливається навколо реального →Метеостанція XINO ESP8266 IOTВідмінний контструктор для тих, хто прокинувшись вранці, хоче знати погоду не виглядаючи у вікно. Набір так само сподобається тим, хто хоче вивчити мікроконтролер ESP8266 і його взаємодію з іншими микроконтроллерами в невеликій домашній мережі. Дана →Реализация маршрутизатора на одноплатном компьютере Orange Pi R1 — Дополнение: настройка DNS адресовВ статье «Реализация маршрутизатора на одноплатном компьютере Orange Pi R1» в качестве операционной системы, была использована Armbian 21.02.3 (Debian-Buster) с ядром Linux 5.10.21-sunxi. Описанная конфигурация в вышеупомянутой статье, основывается на → |
Знайдено 10 товар(ів) Сортувати: Найменування від А до ЯНайменування від Я до Авід дешевих до дорогихвід дорогих до дешевихРейтинг — зростанняРейтинг — спадання
|
«Умные часы» с поддержкой Arduino, WiFi и Bluetooth, добавляют GPS и слот MicroSD, но теряют усилитель звука .
В прошлом году компания LilyGO представила «умные часы» T-Watch-2020 на базе ESP32 с тонким форм-фактором, 1,54-дюймовым емкостным сенсорным ЖК-экраном, возможностью подключения по Wi-Fi и Bluetooth и поддержкой Arduino.
В феврале мы рассматривали TTGO T-Watch-2020 V3 со встроенным микрофоном для голосового управления, но, на днях, компания разместила TTGO T-Watch-2020 V2 с GPS и слотом для карт MicroSD в своем магазине Aliexpress примерно за 33 доллара.
Технические характеристики TTGO T-Watch-2020 V2:
- SoC — двухъядерный беспроводной процессор Espressif ESP32 с 520 КБ SRAM
- Системная память — 8 МБ PSRAM
- Хранилище — флэш-память QSPI 16 МБ, слот для карт MicroSD
- Дисплей — 1,54-дюймовый емкостный сенсорный ЖК-экран
Аудио — усилитель Max98357 класса D, зуммер/динамик- Связь
- 802.11b/g/n WiFi 4 и Bluetooth 4.x/5.1 через ESP32
- Модуль Quectel L76L для GNSS (GPS, Beidou, ГЛОНАСС, QZSS)
- Датчики — трехосевой акселерометр BMA423 со встроенным алгоритмом подсчета шагов, распознаванием/отслеживанием активности, расширенным распознаванием жестов.
- Расширение — 13-контактный разъем расширения FPC с шагом 0,3 мм (совместно со слотом для карт MicroSD)
- Разное — кнопка питания (круглая), часы PCF8563 RTC,
вибромоторDRV2605L тактильное управление двигателем, ИК-передатчик - Программирование — через порт Micro USB (микросхема CP2104 USB to TTL)
- Аккумулятор
- Литиевый аккумулятор 380 мАч/3,7 В
- Зарядка — 5В/1А через порт Micro USB; AXP202 PMIC
- Габариты — 40 х 47,45 х 13 мм; Длина с браслетом: 272 мм
- Вес — около 60 грамм
Разъем для карты microSD также можно использовать в качестве разъема расширения ввода/вывода, что поначалу выглядит не очень удобным, но, поскольку интерфейс SD-карты ESP32 можно использовать для отладки JTAG, в продаже есть несколько дополнительных плат. Вибромотор был заменен на контроллер DRV2605L, который допускает большее количество режимов вибрации.
Вы найдете библиотеку Arduino на Github. Он используется во всех версиях TTGO T-Watch, но конкретный демонстрационный код V2 можно найти в папке «tree / master / examples / BasicUnit / TwatcV2Special» с примерами для карты Baidu, отображением информации GPS и тремя образцами для драйвера DRV2605L.
Часы поставляются с 30-сантиметровым USB-кабелем для зарядки аккумулятора, а T-Watch-2020 V2 должен работать менее суток на одной зарядке, особенно при простом использовании функции GPS.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.
Модули GPSArduino — какой из них использовать? Сравнение и Arduino Tutorial
Введение в GPS и модули GPSВы, вероятно, знакомы с GPS как с системой, которая дает вам информацию о направлении через ваш телефон, машину или в предпочитаемом вами приложении для карт. Однако задумывались ли вы, что в него входит и как эти модули дают вам точное положение в любое время и в любом месте?
Когда были запущены спутники GPS?
GPS восходит к концу 70-х годов.
Как работают модули GPS?
Спутниковые технологии.
Модули GPSсодержат крошечные процессоры и антенны, которые напрямую принимают данные, отправленные со спутников, через выделенные радиочастотные частоты. Оттуда он будет получать отметки времени от каждого видимого спутника вместе с другими данными. Если антенна модуля может определять 4 или более спутников, она может точно рассчитать свое положение и время.
Модули Arduino GPS?
Сегодня я представлю и сравню три модуля GPS; NEO-6M, Grove — GPS-модуль и Grove — GPS (Air530).Эти модули GPS совместимы с Arduino и Raspberry Pi, что упрощает вам тестирование.
Сегодняшнее руководство охватывает:
- На что следует обратить внимание перед покупкой модуля GPS
- Особенности: NEO-6M, Grove — GPS-модуль и Grove — GPS (Air530)
- Ublox NEO-6M GPS-модуль против Grove — GPS-модуль против Grove — GPS (Air530)
- Проекты Arduino GPS
На что следует обратить внимание перед покупкой модуля GPS
На что следует обратить внимание | Обоснование |
---|---|
Размер | Размер имеет значение, поскольку он может повлиять на такие вещи, как время блокировки и точность, если антенна не подходит Если ваш проект требует, чтобы она была карманного размера, размер также имеет значение |
Частота обновления | Частота обновления относится к тому, как часто модуль GPS пересчитывает и сообщает свое положение. 1 Гц достаточно, и норма для большинства модулей GPS |
Скорость передачи | Относится к тому, насколько быстро данные передаются по последовательной линии Более высокая скорость передачи позволяет быстрее отправлять данные GPS |
Чувствительность навигации | Цифра дБм показывает, насколько модуль GPS способен захватывать частоту. Более высокий дБм указывает на то, что модуль может делать ставки. r прием сигналов саталита |
Требования к питанию | Модули GPS могут потреблять значительное количество энергии Среднее значение составляет 30 мА при 3.3V |
Количество каналов | Количество каналов, которые запускает модуль, повлияет на время первого исправления Больше частот, которые вы можете проверить сразу, чтобы сократить время исправления 12-14 каналов работают нормально для отслеживание, если вы не против подождать немного дольше |
Антенны | Каждая антенна предназначена для приема сигнала GPS L1 с частотой 1,5752 ГГц Положение и конструкция антенны имеют решающее значение для оптимальной работы GPS |
Точность | Меньшее расстояние, на которое он может снизиться = Более высокая точность Обычно вы можете определить ваше местоположение в течение 30 секунд, вплоть до +/- 10 м Большинство модулей могут снизить его до +/- 3 м |
Итак, теперь, когда мы знаем, что мы ищем в модуле GPS, давайте взглянем на несколько модулей GPS, представленных сейчас на рынке:
GPS-модули Arduino
Ublox GPS: модуль GPS NEO-6MСчитающийся одним из наиболее популярных модулей GPS на рынке, модуль NEO-6M представляет собой семейство автономных приемников GPS из серии модулей NEO-6.
На основании списка соображений:
Размер: 23 мм x 30 мм
Частота обновления: 1 Гц, 5 Гц максимум
Требования к питанию:
- Напряжение источника питания: 3 В — 5 В
Скорость передачи: 9600
Чувствительность: -161 дБм
Количество каналов : 50
Время до первого запуска:
- Холодный старт: 27 с
- Теплый старт: 27 с
- Горячий старт: 1 с
- Вспомогательные пуски: <3 с
Антенны: Включает внешнюю патч-антенну
Точность:
- 2.Точность горизонтального положения GPS на 5 м
Применения продукта:
- Мобильные устройства с батарейным питанием
- GPS-трекер
- GPS-навигатор
The Grove — GPS-модуль — это версия Seeed-приемника GPS, который является экономичным и программируемым в полевых условиях. Он оснащен SIM28 и конфигурацией последовательной связи.
Размер: 40 мм x 20 мм x 13 мм
Частота обновления: 1 Гц, макс.10 Гц
Требования к питанию: 3.3 / 5В
Скорость передачи: 9600 — 115 200
Чувствительность: -160 дБм
Количество каналов: 22 отслеживания // 66 каналов сбора данных
Время до первого запуска:
- Холодный запуск с EASY: 13 с
- Теплый запуск с EASY: 1-2 с
- Горячий запуск: <1 с
* Easy — это самовоспроизводящаяся защита орбиты
Антенны: Антенна в комплекте
Точность: 2.Точность горизонтального положения GPS на 5 м
Приложения продукта:
- GPS-трекер
- GPS-навигация
- Измерение расстояния
Другие характеристики продукта:
- Низкое энергопотребление
- Настраиваемая скорость передачи
- Интерфейс, совместимый с Grove
Далее у нас есть Grove — GPS (Air530). Это высокопроизводительный многорежимный модуль спутникового позиционирования и навигации с высокой степенью интеграции.Он поддерживает GPS / Beidou / Glonass / Galileo / QZSS / SBAS, что делает его подходящим для приложений позиционирования GNSS, таких как автомобильная навигация, умная одежда и дрон.
Если ваш GPS плохо работает в городских условиях или на открытом воздухе при наличии только одного или нескольких спутниковых модулей, вам обязательно стоит проверить этот модуль GPS. Между тем, этот модуль может принимать более 6 спутников одновременно и отлично работать даже при очень плохом сигнале.
Этот GPS использует интегрированную конструкцию RF baseband, которая объединяет DC / DC, LDO, LNA, RF front-end, обработку основной полосы, 32-битный чип на основе RISC, RAM, FLASH-память, RTC и функции управления питанием.
Размер: 40 мм x 20 мм x 13 мм
Частота обновления:
Требования к питанию: 3,3 / 5 В
Скорость передачи: —
Чувствительность: —
Количество каналов:
Время до первого запуска:
- Холодный старт: 30 секунд
- Теплый старт: 4 секунды
Антенны: Антенна в комплекте
Точность: 2.5 м Точность горизонтального позиционирования
Приложения продукта:
- GPS-трекер
- GPS-навигация
- Измерение расстояния
Другие характеристики продукта:
- Высокоинтегрированный многомодовый спутниковый позиционер и навигация
- Интерфейс, совместимый с Grove
GPS-модуль Ublox NEO-6M против Grove — GPS-модуль против Grove — GPS (Air530)
При сравнении рядом:
На что следует обратить внимание | NEO-6M | Grove — модуль GPS | Grove — GPS (Air530) |
---|---|---|---|
Размер | 23 мм x 30 мм | 40 мм x 20 мм x 13 мм | 40 мм x 20 мм x 13 мм |
Частота обновления | 1 Гц, макс. 5 Гц | 1 Гц, макс. 10 Гц | — |
Скорость передачи | По умолчанию 9600, макс. 230400 | 9,600 — 115,200 | — |
Чувствительность навигации | -161 дБм | -160 дБм | — |
Требования к питанию | 3 В — 5 В | 3.3 / 5В | 3,3 / 5В |
Количество каналов | 22 слежения, 50 каналов | 22 слежения, 66 каналов | — |
Время до первого запуска | Холодный старт: 27 с Теплый старт: 27 с Горячий старт: 1 с | Холодный старт: 13 с Теплый старт: 1-2 с Горячий старт: <1 с | Холодный старт: 30 секунд Теплый старт: 4 секунды |
Антенны | Внешняя патч-антенна | Антенна в комплекте | Антенна в комплекте |
Точность | 2.5 м Точность горизонтального позиционирования GPS | 2,5 м Точность горизонтального позиционирования GPS | 2,5 м Точность горизонтального позиционирования |
Лучшее энергопотребление:
Grove — GPS (Air530) имеет сверхнизкое энергопотребление — всего 31 мкА, режим низкого энергопотребления — 0,85 мА, что делает Air530 лучшим GPS с меньшим энергопотреблением.
Масштабируемость:
Благодаря более высокой максимальной частоте обновления, модуль Grove GPS может использоваться для проектов, в которых задействованы объекты, перемещающиеся с большей скоростью.Кроме того, открываются дополнительные каналы и для других приложений.
Grove-GPS (Air 530) имеет многорежимное спутниковое позиционирование и навигацию и поддерживает более 6 спутников одновременно.
Точность :
Обладая точностью горизонтального позиционирования 2,5 м, высокой точностью позиционирования 3,5 м, точностью скорости 0,1 м / с и точностью передачи времени 30 нс, Grove -GPS (Air530) может быстро и точно позиционировать даже под состояние плохого сигнала.
Сопряжение ваших модулей GPS с: Seeeduino, Собственная плата Arduino Seeed:
Seeduino V4.2 — это Seeed-версия Arduino, которую можно использовать для сопряжения с вашими модулями GPS.
Базовый экран предназначен для облегчения подключения модуля Grove GPS.
Конфигурация оборудования :
- Подключите Grove-GPS к порту D2 Grove Base Shield
- Подключите Grove — Base Shield к Seeeduino
- Подключите Seeeduino к ПК через USB-кабель
Для программного обеспечения и других конфигураций вы можете перейти здесь
Raspberry Pi
Если у вас еще нет raspberry pi, вы можете подумать о приобретении недорогого RPI Zero вместе с Grove Base Hat для сопряжения с модулем Grove GPS.
Если у вас уже есть Raspberry Pi 2 / 3B / 3B + / 4 / Zero, вы можете просто соединить его с Grove Base Hat.
Здесь можно найти конфигурацию аппаратного и программного обеспечения
Проекты Arduino GPS
Теперь, когда вы только что выбрали свой модуль GPS, вот несколько проектов, которые вы можете выполнить с помощью модуля Arduino и GPS.
Система слежения за транспортными средствами
С помощью модуля GPS вместе с Arduino вы можете легко установить систему слежения за транспортными средствами в своем автомобиле.В случае угона вашей машины или если вы забыли, где ее припарковали, вы можете легко отследить свой автомобиль с помощью мобильного телефона с помощью этого проекта.
Что вам нужно?
Заинтересованы? Вы можете ознакомиться с полным руководством Muchika на Arduino Project Hub.
Светодиодный велосипедный спидометр
Ссылка: JeremyCook
Хотите узнать, насколько быстро вы едете? С помощью этого самодельного велосипедного спидометра, использующего технологию GPS для определения скорости, вы можете определить, насколько быстро вы едете! Он также оснащен светодиодным индикатором RGB, который указывает гонщику скорость.
Что вам нужно?
Заинтересованы? Вы можете ознакомиться с полным руководством Джереми С. Кука на Arduino Project Hub.
Персональный помощник по GPS
Ссылка: Мохамед Фадига
Этот проект представляет собой устройство, которое позволяет вам контролировать людей и предметы и постоянно сообщать вам их местонахождение и значения датчиков, прикрепленных к нему.
Одна из функций позволяет вам устанавливать предельные значения для датчиков, и когда они превышаются, вам отправляется SMS-уведомление.Вы также можете установить ограничения из некоторых мест, где вам будут выдаваться предупреждения, когда устройство покидает зону.
Также можно связаться с устройством с помощью SMS, чтобы получить информацию о нем.
Что вам нужно?
Заинтересованы? Вы можете ознакомиться с полным руководством Мохамеда Фадиги на Arduino Project Hub.
Следите за нами и ставьте лайки:
Теги: модули arduino gps, GPS, руководство модуля gps, модули gps, GROVE, Grove Base Hat, щит базы Grove, модуль gps Grove, руководство Grove, neo-6, seeeduino, seeeduino v4.2, ублокс, ублокс нео-6мПродолжить чтение
Учебное пособие поArduino GPS: Как использовать модуль GPS с Arduino | Arrow.com
До появления спутников связи люди перемещались, используя звезды, карты и даже наземные средства навигации LORAN (не путать с LoRaWAN ). Когда Sputnik начал путешествовать по земному шару и излучать радиосигналы, инженеры поняли, что они могут использовать несколько спутниковых сигналов для триангуляции положения человека на Земле.На основе этого осознания и после огромного объема работы Соединенные Штаты разработали систему спутникового позиционирования, которую мы теперь знаем как глобальную систему позиционирования или GPS.
Эта система, наряду с ее более поздними международными аналогами, превратилась из экзотической в повсеместную и недорогую технологию, доступную в обычном сотовом телефоне. Для тех, кто хочет использовать эту технологию в своих проектах, модули GPS доступны сами по себе, без экрана или программного обеспечения для картографии.
Вы можете настроить модуль GPS для передачи данных о местоположении и времени на плату Arduino через последовательное соединение, и эти устройства легко настроить. Доступно несколько библиотек, которые помогут вам превратить эти необработанные данные в полезную информацию, и в этой статье будут описаны несколько экспериментов, которые помогут вам начать работу с этой технологией.
Материалы проекта Arduino Uno GPS:— Плата Arduino (мы использовали Uno )
— GPS модуль и антенна u-blox NEO-6
— последовательный кабель USB-TTL
— WS2812B Светодиод «NeoPixel» RGB и перемычки
— Программное обеспечение, как указано в этой статье
Начало работы: как проверить, работает ли модуль GPSПодпись: Программное обеспечение U-blox.Обратите внимание на зеленый значок подключения в верхнем левом углу экрана
Мы сосредоточились на использовании модуля GPS с Arduino, но вам следует начать с проверки правильности работы GPS.
1. Подключите антенну к GPS-прибору.
2. Припаяйте контакты заголовка к модулю GPS по мере необходимости.
3. Подключите кабель USB-TTL к компьютеру.
4. Подключите питание и заземление кабеля к источнику питания и заземлению USB-модуля.
5.Подключите кабель TTL Rx к GPS Tx, а TTL Tx к GPS Rx.
Чтобы убедиться, что вы получаете какой-то сигнал, откройте com-порт с помощью Arduino IDE (установите его, если у вас его нет) и установите для него скорость передачи данных GPS (мы использовали 9600). Вы, вероятно, не поймете вывод данных, но если GPS принимает или выдает последовательный сигнал, вы увидите своего рода индикацию «доказательства жизни». Чтобы дополнительно проверить работоспособность вашего GPS, выполните следующие действия:
1. Загрузите программу u-blox .
2. Подключитесь через TTL и выберите соответствующий com-порт, как в Arduino IDE.
3. Подключитесь с помощью значка штекера в верхнем левом углу интерфейса.
Теперь вы можете четко просматривать данные о местоположении, информацию о спутниках и приблизительную позицию на карте.
Если вы хотите проверить точность, введите данные в строку поиска Google Maps в числовом формате: широта, долгота. Вы получите показания в нескольких футах от вашего текущего местоположения, возможно, даже в помещении.
GPS-модуль для подключения к Arduino
Затем выполните следующие действия, чтобы подключить модуль GPS к плате Arduino:
1. Загрузите библиотеку TinyGPSPlus с GitHub, затем добавьте ее в виде библиотеки .zip в свою среду разработки Arduino.
2. Откройте «DeviceExample» под примерами и измените скорость GPSBaud на подходящую для вашего устройства (протестированное устройство — 9600).
3. Отправьте этот код на плату Arduino.
4. Подключите контакт VCC GPS к контакту GPS + 5V от Arduino, а GND к GND.
5. Подключите Rx к контакту 3 Arduino, а Tx — к контакту 4 Arduino.
6. Откройте последовательный порт на скорости 115200 бод, и вы должны увидеть координаты широты и долготы, а затем дату и всемирное координированное время (UTC), которое вам нужно будет скорректировать в соответствии с вашим местоположением.
7. Чтобы подтвердить настройку, подтвердите свое местоположение с помощью карт Google.
Использование Arduino GPS в качестве спидометра
Подпись: Arduino GPS остановился на столе.
С платой Arduino вы можете использовать свой GPS-модуль для выхода за рамки считывания координат; вы даже можете настроить свое устройство на его реакцию. Библиотека TinyGPS делает доступными различных значений времени и положения .
Для этого эксперимента мы будем использовать его способность выводить скорость в километрах в час, чтобы изменить цвет светодиода WS2812D RGB в зависимости от скорости его движения.
— Красный означает остановку движения (значение скорости 0)
— желтый указывает на скорость до 5 километров в час.
— Зеленый предназначен для любой скорости, превышающей 5 километров в час.
Вы можете изменять или расширять эти значения по мере необходимости, но, как написано, они соответствуют значениям, которые вы можете легко достичь пешком. Выполните следующие действия, чтобы настроить демонстрацию скоростного света:
1. Установите библиотеку Adafruit NeoPixel .
2. Загрузите и установите Speed-RGB.ino из этого каталога.
3. Подключите цифровой вход одиночной лампы RGB к контакту 5 Arduino, земля к земле, а контакт + 5V к + 5V на плате Arduino.Если это мешает подаче 5 В на ваш модуль GPS, вы можете вместо этого запитать его от источника 3,3 В на Arduino.
Подпись: Остановка, медленная ходьба, более быстрая ходьба / бег. Обратите внимание на размытость, которая увеличивается со скоростью
Установите эскиз на плату Arduino, затем переместите его, чтобы увидеть, получаете ли вы слабую обратную связь. Код также включает последовательные выходы, поэтому, если он не работает должным образом, вы можете открыть монитор последовательного порта, чтобы помочь определить проблему.Если вы не хотите возиться с RGB-светодиодом, одна альтернативная программа называется «GPS-Builtin-Blink.ino», и она доступна в том же репозитории, что и процедура RGB. Он использует светодиод, встроенный в большинство плат Arduino, но он показывает, только если вы остановились или двигаетесь.
Несмотря на то, что первый шаг — интересный, демонстрация скоростного фонаря дает только представление о том, что платы Arduino могут делать в паре с модулем GPS. Примечательно, что хотя TinyGPSPlus кажется очень функциональной библиотекой, у вас есть множество других доступных программных опций, а также различное оборудование в соответствии с вашими потребностями.
Границы | Синхронизация времени для беспроводных датчиков с использованием недорогого модуля GPS и Arduino
1. Введение
Беспроводные датчики крайне необходимы для полевых измерений в гражданской инфраструктуре, чтобы избежать дорогостоящей, трудоемкой и трудоемкой установки проводных датчиков. Можно найти обширный обзор истории развития беспроводных датчиков (Lynch and Loh, 2006). Хотя беспроводные датчики имеют свои преимущества, они создают техническую проблему при переходе от проводного к беспроводному, т.е.е., временная синхронизация между датчиками. Синхронизация времени для беспроводных датчиков важна, особенно при использовании датчиков с высокой частотой дискретизации, таких как датчики ускорения или датчики динамической деформации, для правильного получения форм колебаний или форм колебаний (Krishnamurthy et al., 2008; Abdaoui et al., 2017).
Возможные методы временной синхронизации, о которых известно, что доступны (не ограничиваясь ими): (1) методы на основе пакетов временной синхронизации, (2) метод на основе радиовещания наземного времени и (3) метод на основе модулей GPS.
Первый подход был одной из важных тем исследований в сообществе исследователей информатики (Sundararaman et al., 2005; Sadler and Swami, 2006; Lasassmeh and Conrad, 2010). Известными алгоритмами синхронизации времени являются эталонная синхронизация широковещательной передачи (RBS) (Elson et al., 2002; Sim et al., 2010), протокол синхронизации времени для сенсорных сетей (TPSN) (Kumar and Srivastava, 2003) и протокол синхронизации времени наводнения. (FTSP) (Maróti et al., 2004).
Сообщалось, что ошибки синхронизации времени RBS, FTSP и TPSN находятся в пределах 20 мкс.Однако при топологии на основе корня или дерева их совокупные ошибки могут составлять до 5 мс за период 6 с (Krishnamurthy et al., 2008). Чтобы преодолеть такое накопление, были введены протоколы синхронизации времени на основе консенсуса (Olfati-Saber et al., 2007; Maggs et al., 2012). По сравнению с синхронизацией времени на основе корня или дерева, синхронизация времени на основе консенсуса не требует единой временной привязки.
В сообществе исследователей гражданского строительства заметной разработкой с проверенной способностью синхронизации времени является система HW / SW на основе imote2, разработанная в рамках проекта SHM в штате Иллинойс (http: // www.shm.cs.illinois.edu), который реализовал FTSP для синхронизации часов с точностью до 80 мкс и разработал метод передискретизации для синхронизации данных (Nagayama and Spencer, 2007; Nagayama et al., 2007). В результате их исследования были сформированы Embedor Technologies (http://embedortech.com) и разработаны интеллектуальные датчики Xnode с операционной системой реального времени (FreeRTOS) на микроконтроллере NXP LPC4357 (Spencer et al., 2017). Спецификация производительности временной синхронизации пока недоступна, но разумно ожидать такой же точности 80 мкс или выше, поскольку ОС реального времени снижает неопределенность таймингов выполнения задач.
Второй подход использует радиосигналы, посылаемые радиостанциями временного вещания, разбросанными по всему миру (Ikram et al., 2010). Этот подход потребляет меньше энергии, чем модули GPS, и не ограничивается диапазоном прямой видимости, но точность составляет около нескольких десятков миллисекунд, что может быть недостаточно для узлов датчиков ускорения.
Третий подход заключается в использовании источника точного времени модуля GPS, который является побочным продуктом технологии GPS. Известно, что модули GPS могут выполнять синхронизацию времени с разрешением 100 нс и менее (Сазонов и др., 2010). Модули GPS обычно используются для синхронизации времени в проводных сетях Ethernet с использованием протокола сетевого времени (NTP) или протокола точного времени (PTP) (Volgyesi et al., 2017). В проекте SHM в штате Иллинойс модуль GPS использовался на узле шлюза для синхронизации времени листовых узлов в подсети (Kim et al., 2016). Это исследование аналогично содержанию этого документа с точки зрения использования модуля GPS и его сигналов PPS, но только на узлах шлюза, а не на каждом узле. В этой статье используется кварцевый осциллятор, управляемый печью (OCXO), чтобы избежать проблем, связанных с колебаниями тактовой частоты, и достичь исключительной точности отметки времени.Прямое использование модуля GPS на каждом листовом узле в значительной степени игнорировалось исследовательскими сообществами из-за относительно высокого энергопотребления и стоимости. Однако для краткосрочной кампании по измерению вибрации в гражданской инфраструктуре этот подход может быть разумным вариантом, поскольку с энергопотреблением можно справиться с помощью аккумуляторной батареи большой емкости и недорогого модуля GPS, розничная цена которого составляет около 40 долларов США. (по состоянию на 2018 год), в который стоит инвестировать, а не в дорогие и трудоемкие проводные сенсорные системы.Однако метод, основанный на модуле GPS, имеет явное ограничение, заключающееся в том, что для приема сигналов GPS требуется беспрепятственный обзор неба. Однако это требование часто выполняется для многих полевых измерений гражданской инфраструктуры.
Синхронизация времени с использованием модуля GPS на каждом узле дает возможность очень эффективной по времени кампании полевых измерений на рабочем мосту в условиях ограниченного времени доступа и площади. Поскольку предлагаемая синхронизация времени происходит независимо, без отправки / получения пакетов синхронизации времени между узлами, этот подход не требует формирования и проверки беспроводной сети перед началом измерения.Для протяженных мостов создание и проверка беспроводной сети может быть сложной задачей и потребовать много времени из-за больших расстояний или стальных препятствий. Этот подход обеспечивает стратегию определения места и измерения, при которой узел датчика запускается для измерения сразу после размещения в указанном месте. Правильность работы сенсорного узла может быть подтверждена графиками в реальном времени на экране узла. Повторяя стратегию размещения и измерения для всех узлов датчиков, процесс установки может быть очень эффективным по времени.
В этом исследовании был предложен новый автономный метод синхронизации времени с использованием недорогого модуля GPS на каждом узле. Был проведен анализ ошибок предложенного метода временной отметки, после чего были проведены четыре эксперимента для проверки предложенного метода временной синхронизации.
2. Теория
2.1. GPS: источник точного времени
Приемник GPS, по-видимому, оценивает текущее положение приемника по широте, долготе и высоте на Земле. Однако на заднем плане приемник GPS фактически пытается оценить не только три переменных положения, но также переменную для временного сдвига между внутренним источником часов приемника и атомными часами спутников GPS.После успешной оценки приемник GPS имеет чрезвычайно точные внутренние часы, синхронизированные с атомными часами спутников GPS. Этот источник точного времени можно использовать для синхронизации времени беспроводных датчиков, установленных в любом месте с хорошим обзором неба.
Каждый спутник GPS имеет атомные часы, и все атомные часы в спутниках GPS периодически синхронизируются контрольным сегментом GPS, который отслеживает ошибки часов и обновляет их для поддержания точности системы GPS.Каждый спутник GPS передает свое собственное уникальное PRN (псевдослучайное число), которое идентифицирует сам спутник в точном начале каждой миллисекунды. Приемнику GPS на поверхности Земли требуется не менее четырех PRN для определения своего местоположения. Более подробную информацию о теории и работе GPS можно найти (Guochang, 2003; Kaplan and Hegarty, 2005).
На рисунке 1 показаны контакты ввода / вывода модуля Adafruit Ultimate GPS v3. Вывод RX — это то место, где модуль получает команды конфигурации от микропроцессорного блока (MPU): в данном исследовании Arduino Mega 2560.Вывод TX предназначен для вывода предложений NMEA (Национальная ассоциация морской электроники) из модуля в MPU. Предложения NMEA являются стандартным форматом для GPS для вывода результатов о местоположении приемника и точном времени, как показано на рисунке 2. Вывод PPS (Pulse Per Second) — это квадратная волна, выходящая в точном начале каждой секунды, как показано на рисунке 3. Прямоугольная волна имеет высокий сигнал в течение первых 100 мс после точного начала каждой секунды и повторяется каждую секунду. Предложения NMEA принимаются примерно в середине двух соседних сигналов PPS, которые предоставляют информацию об абсолютном времени, показывающую год, месяц, день, час, минуту и секунду текущего времени.Комбинируя информацию об абсолютном времени из предложений NMEA и точную относительную синхронизацию сигналов PPS, можно получить очень точный источник времени для отметок времени.
Рисунок 1 . Недорогой модуль GPS: Adafruit Ultimate GPS v3.
Рисунок 2 . Примеры предложений NMEA.
Рисунок 3 . Форма сигнала импульса в секунду (PPS).
2.2. Arduino: платформа электронного прототипирования с открытым исходным кодом
Arduino (http: // www.arduino.cc) — это платформа для прототипирования электроники с открытым исходным кодом, предоставляющая несколько вариантов плат от простейшей Arduino UNO до улучшенной Arduino Mega 2560 и Интернета вещей YUN. Arduino Mega 2560 показана на рисунке 4. Arduino имеет преимущества перед другими платформами с точки зрения простоты использования для новичков. Arduino не требует специального оборудования для программирования, а просто USB-порт на ПК. Arduino стоит дешево (плата Arduino Mega 2560 на 2018 год стоит около 43 долларов США). Arduino доступен с простыми в использовании инструкциями, похожими на рецепты, о том, что покупать, что подключать к Arduino и как программировать Arduino для огромных деталей и устройств, включая датчики и исполнительные механизмы, а также компьютерные устройства ввода-вывода, такие как Ethernet, Wi-Fi, и SD-память.Arduino имеет большое сообщество пользователей, в котором люди свободно делятся своими разработками, что способствует широкому использованию и быстрому росту Arduino. Недорогой модуль GPS, используемый в этом исследовании (40 долларов США по состоянию на 2018 год), также имеет инструкцию, похожую на рецепт. Arudino позволяет инженерам, не занимающимся электроникой, создавать собственные сенсорные системы путем сборки сенсоров, сбора данных и беспроводной связи для удовлетворения своих особых потребностей.
Рисунок 4 . Arduino Mega2560: макетная плата для электроники в семействе продуктов Arduino.
В основеArduino Mega 2560 лежит микропроцессорный блок (MPU) Atmel ATmega2560. MPU концептуально представляет собой небольшой компьютер на одной микросхеме с небольшим пространством для программирования, объемом памяти и специальными аппаратными компонентами, позволяющими подключаться к другим микросхемам интегральных схем (IC) для различных задач. ATmega2560 имеет 256 КБ флэш-памяти для программирования, 8 КБ SRAM для ОЗУ, 16 аналоговых входных контактов, 54 цифровых входа / выхода с тактовой частотой 16 МГц. Микропроцессор ATmega2560 имеет ограниченные вычислительные возможности по сравнению с современными ПК, но достаточно эффективен во многих электронных приложениях, таких как синхронизированные по времени датчики ускорения, используемые в этом исследовании.
Три полезных аппаратных компонента ATmega2560 для этого исследования: выводы RX / TX UART (универсальный асинхронный приемник-передатчик), четыре 16-битных таймера / счетчика и их входные блоки захвата. Контакты UART RX / TX используются для связи с модулем GPS. MPU ATmega2560 отправляет команды управления модулю GPS через вывод TX и принимает предложения NMEA через вывод RX.
16-битный таймер / счетчик — это внутренняя память ATmega2560 для хранения значения, которое начинается с нуля и увеличивается на единицу за одно колебание кварцевого генератора (XO), подключенного к ATmega2560.Поскольку Arduino Mega 2560 имеет кварцевый генератор с частотой 16 МГц, теоретически значение увеличивается на 16 × 10 6 в секунду. Однако существует максимальное значение, которое нужно сохранить для таймера / счетчика 2 16 — 1, что является типичным значением для 16-битного таймера. Когда он достигает максимума, он сбрасывается и снова начинается с нуля. При считывании значения таймера / счетчика в разное время становится доступной относительная временная информация.
Каждый 16-битный таймер / счетчик имеет блок ввода ввода, который имеет собственную внутреннюю память для хранения значения таймера / счетчика, когда импульсный сигнал поступает на вывод ввода ввода.При подключении выходного контакта PPS модуля GPS к входному контакту захвата таймера / счетчика становится доступным измерение относительной синхронизации сигнала PPS.
3. Предлагаемый метод временной отметки
На рис. 5 в упрощенном виде показан предлагаемый метод установки временных меток. t P I ( k ) и t P I ( k PS + l сигналов) обозначают два идеальных времени P прибытие на k -й и ( k + l ) -й секунды соответственно.Здесь т P I ( к + л ) — т P I ( k л Как обсуждалось в предыдущем разделе, т P I ( k ) и т P I ( k + л) идентифицированы из предложений NMEA, которые поступили непосредственно перед прибытием сигналов PPS.Кроме того, C P A ( k ) и C P A ( k + l значения счетчика) захватывается по прибытии двух сигналов PPS через входной блок захвата, подключенный к выходному контакту PPS модуля GPS. C D A ( м ) обозначает значение таймера / счетчика, считываемое во время м -го измерения.(м) оценивается линейной интерполяцией по двум точкам ( t P I ( k ), C P A (25 )) и ( т P I ( k + l ), C P A ( 908) k для C D A ( м ), как показано в уравнении (1).(m) = tPI (k) + CDA (m) −CPA (k) CPA (k + l) −CPA (k) × l (с) (1)
Рисунок 5 . Предлагаемый метод отметки времени.
Процедура предлагаемого метода отметки времени резюмируется следующим образом.
1. Считайте значение таймера / счетчика входного блока захвата, захваченное при поступлении k -го сигнала PPS, и сохраните его в C P A ( k ).
2. Определите время t P I ( k ) на 1 секунду позже времени, указанного в предложении NMEA, полученном непосредственно перед k -ым PPS.(м) линейной интерполяцией по двум точкам ( t P I ( k ), C P A () k и ( t P I (k + l), C P A (k + l)) для C D D A ( м ), как показано в уравнении (1).
4. Анализ ошибок предлагаемого метода отметки времени
Ошибка предложенного метода временной отметки по уравнению (1) исследована аналитически. Идеальный GPS-приемник выдает сигнал PPS точно в начале каждой секунды. Однако фактическое время сигнала PPS на k -й секунде t P A ( k ) может отличаться от идеального времени t P I ( k ) по временной ошибке ε t P ( k ), как показано на рисунке 6 и в уравнении (2).ε t P ( k ) предполагается случайной величиной, имеющей среднее значение μ t P = 0 и стандартное отклонение σ t П . Согласно таблице данных модуля GPS, использованного в исследовании, известно, что σ t P обычно составляет 10 нс (GlobalTop Technology Inc, 2012).
tPA (k) = tPI (k) + εtP (k) (2)Значение таймера / счетчика Arduino — это целое число и прерывистая ступенчатая функция времени, как показано на рисунке 6.Точное значение таймера / счетчика, соответствующее t P A ( k ), должно быть представлено в реальном значении C P I ( k ) в идеале, но в виде целого числа C P A ( k ), что приводит к ошибке таймера / счетчика ε C P ( k ) как показано на Рисунке 6 и в уравнении (3).
CPA (k) = CPI (k) + εCP (k) (3), где ε C P ( k ) предполагается случайной величиной, имеющей равномерное распределение на [0, 1).
Рисунок 6 . Анализ ошибок по предлагаемому методу временных меток.
Для ( k + l ) -го временного шага идеальное и фактическое время PPS, а также значения таймера / счетчика имеют следующие отношения.
tPA (k + l) = tPI (k + l) + εtP (k + l) (4) CPA (k + l) = CPI (k + l) + εCP (k + l) (5)где т P I ( k + л ) — т P A ( 826 л)ε C P ( k ) и ε C P ( k + l ) считаются независимыми и одинаково распределенными .25 iid. ) случайные величины, и поэтому ε t P ( k ) и ε t P ( k + l ).
Значение таймера / счетчика м -го сбора данных в идеале должно быть представлено в реальном значении C D I ( м ), но в целом числе C D A ( м ), что приводит к ошибке таймера / счетчика ε C D ( м ) следующим образом.(m) = εtP (k) (1 − A) + εtP (k + l) A + εCP (k) (1 − A) + εCP (k + l) A − εCD (m) Fclk
, где A — константа в диапазоне (0, 1), как определено в Приложении.
Одно из предположений анализа состоит в том, что тактовая частота F clk MPU является постоянной. Хорошо известно, что тактовая частота колеблется при изменении температуры окружающей среды, что требует постобработки для уменьшения ошибки синхронизации времени (Li et al., 2016). Однако в этом исследовании эта проблема была решена с помощью кварцевого генератора, управляемого печью (OCXO), который представляет собой XO в миниатюрной печи с регулируемой температурой.в сочетании с двумя неопределенностями прогнозировалось 42,0 нс. Это значение сравнивалось с экспериментальной оценкой в разделе 6.3.
5. Методика и реализация повторной выборки
В беспроводных сенсорных узлах сложно запускать и повторять выборку данных в точное время одновременно между всеми сенсорными узлами из-за отклонений тактовых частот XO при изменении температуры окружающей среды. В качестве альтернативы, может быть проще разрешить узлам беспроводных датчиков иметь разное время запуска с отклонениями в интервалах выборки, но повторно дискретизировать данные в регулярные моменты времени из данных с точной меткой времени.Техника повторной выборки была предложена Нагаямой и Спенсером (2007), а на рисунке 7 показан иллюстративный пример до и после повторной выборки. На рисунке 7A выборка данных начинается в разное время между узлами датчиков, и интервалы выборки данных могут иметь отклонения из-за интервалов XO. Но повторная выборка может быть выполнена, чтобы иметь точки данных в регулярные моменты времени, начиная с точного начала секунды, повторяющиеся с точным исходным интервалом времени выборки. Более подробную информацию о технике передискретизации можно найти у Нагаямы и Спенсера (2007).
Рисунок 7 . Повторная выборка для данных с отметкой времени: (A) перед повторной выборкой с нерегулярным временем начала и (B) после повторной выборки.
Реализация предложенного метода отметки времени связана с проблемами ограниченного ресурса микропроцессора ATmega2560, а также с высокой сложностью программирования. Первой задачей было одновременное выполнение синтаксического анализа предложений NMEA и считывания данных с акселерометра MEMS. Если ATmega2560 не считывает измеренное значение ускорения с датчика вовремя, оно будет перезаписано следующим измеренным значением на датчике.Однако оказалось, что синтаксический анализ предложений NMEA занимает много времени, вызывая такую перезапись данных. Эта проблема была решена путем синтаксического анализа предложений NMEA только один раз во время загрузки ATmega2560 и увеличения T P I ( k ) на 1 секунду при каждом поступлении PPS. Вторая проблема заключалась в том, что считывание данных с акселерометра вместе с измерениями с метками времени выполнялось в режиме многозадачности по уравнению (1). В предлагаемом методе временной отметки отметка времени t ^ (m) может быть выполнена только после поступления т P I ( k + l ).Это означает, что все измерения между т P I ( k ) и т P I ( k + л) необходимо л сохраняется и имеет отметку времени после прибытия t P I ( k + l ) как блок данных за последние l секунд. Это включает относительно сложные операции по управлению данными, а также длительное время работы.Чтобы упростить это, термин l / ( C P A ( k + l ) — C P A )) в уравнении (1), которое имеет значение, обратное тактовой частоте, эквивалентно оценивается как p / ( C P A ( k ) — C P A ( k — p )), где C P A ( k — p значение счетчика) — это значение счетчика при поступлении ППС на т р я ( к — р ).(m) для м = 0, 1, 2, · · ·, а выходными данными были данные с передискретизацией y sync ( q ) на обычных временных метках t sync ( q ) для q = 0, 1, 2, · · ·. Эффективная стратегия повторной выборки использовалась путем линейной интерполяции только для двух последних измерений.
Алгоритм 1 : Псевдокод реализованной передискретизации.
В этом исследовании ATmega2560 был запрограммирован на передачу t P I (0), C P A ( k 826) D A ( м ) и y ( м ) для к, м = 0, 1, 2, · · ·, через порт UART TX, подключенный к Raspberry Pi и код Python в Raspberry Pi, получающем данные UART, использовались для выполнения меток времени и повторной выборки.
Эта реализация предполагает, что узлы датчиков имеют разное время запуска. После завершения кампании измерений идентифицируются повторно выбранные временные метки, общие для всех узлов датчиков. Затем данные, соответствующие общим отметкам времени в каждом узле, копируются в один файл данных для завершения сбора данных с синхронизацией по времени. Этот процесс можно выполнить по беспроводной сети, если таковая имеется.
6. Эксперименты
Проведено четыре эксперимента.Первые два эксперимента должны были подтвердить два основных предположения предлагаемого метода, что (1) модули GPS успешно работают стабильно для вывода предложений NMEA и сигналов PPS во время работы беспроводных датчиков, и (2) сигналы PPS имеют высокую точность. Третий эксперимент проводился как попытка измерить ошибку отметки времени. Последний эксперимент проводился для модального анализа только на выходе с четырьмя датчиками ускорения, в котором предложенный метод временной отметки и их модальные параметры сравнивались с проводным аналогом.
6.1. Эксперимент №1: Долговременная стабильность GPS-модуля
За работой модуля GPS наблюдали в течение недели с использованием Arduino Mega 2560, подключенного к модулю GPS, как показано на рисунке 8. Контакты UART TX / RX модулей GPS были подключены к контактам RX / TX Arduino. Mega 2560, а выходной контакт PPS был подключен к входному блоку захвата Arduino. Антенна модуля GPS была установлена таким образом, что он видел только южную половину неба, чтобы создать ограниченную видимость, которая может возникнуть при полевых измерениях.Arduino был подключен к ПК через USB-кабель, и предложения NMEA от модуля GPS были записаны на ПК.
Рисунок 8 . Экспериментальная установка для долгосрочной стабильности работы модуля GPS.
На рис. 9 показаны различные выходные данные, содержащиеся в предложениях NMEA. Количество спутников, видимых модулю GPS, варьировалось в основном от 4 до 13. Было пять случаев, когда количество спутников упало до 0, что могло произойти из-за ограниченной видимости.Снижение точности по горизонтали (HDOP) указывает на величину неопределенности в отношении фиксации положения и времени. Большой HDOP указывает на большие ошибки в оценках местоположения и времени, когда количество видимых в данный момент спутников уменьшается или спутники плотно расположены в определенной области неба, а не рассредоточены по всему небу. Было ясно показано, что измеренное HDOP обратно пропорционально количеству спутников. В случаях, когда не было видимых спутников, GPS не мог определить местоположение и время, что приводило к перезагрузке модуля.Затем модуль GPS возобновил правильную работу примерно через 40–60 с, как показано на Δ T и ΔCPA1,1. Это наблюдение указывает на важность наличия прямой видимости на небе для успешной работы отметки времени с помощью GPS. Однако с данной половинной видимостью в небе модуль GPS работал успешно всю неделю, либо работал, либо возобновлял работу после нескольких простоев. Таким образом, модуль GPS показал относительно устойчивую и надежную работу в течение периода испытаний даже в условиях ограниченной видимости.
Рисунок 9 . Долговременная эксплуатационная надежность GPS-модуля.
6.2. Эксперимент № 2: Точность сигналов PPS
На рисунке 10 показаны определения временных ошибок в сигналах PPS, поступающих от нескольких модулей GPS. εtPi (k) обозначает временную ошибку сигнала PPS от i -го модуля GPS на k -й секунде. Для прямого измерения εtPi (k) требуется точный источник часов, например атомные часы. Однако в этом исследовании косвенный способ измерения его точности был выполнен путем измерения относительной разницы таймер / счетчик сигналов PPS, поступающих от одного модуля GPS или нескольких модулей GPS, как показано в уравнениях (8) — (9).
ΔCPAi, i (k) = CPAi (k + 1) −CPAi (k) (8) ΔCPAi, j (k) = CPAi (k) −CPAj (k), i ≠ j (9), где CPAi (k + 1) и CPAi (k) — значения таймера / счетчика i -го модуля GPS на ( k + 1) -м и k -м шагах времени, соответственно. . CPAj (k) — значение таймера / счетчика GPS-модуля j на временном шаге k . Для идеальных безошибочных модулей GPS ΔCPAi, i (k) и ΔCPAi, j (k), i ≠ j , близки к F clk и нулю соответственно.
Рисунок 10 . Ошибки сигналов PPS в нескольких модулях GPS.
На рисунке 11 показана экспериментальная установка. Четыре модуля GPS были подключены к модифицированному Arduino Mega 2560, где кварцевый генератор был заменен на 10 МГц OCXO, стоимость которого по состоянию на 2018 год составляла 37 долларов США. Это было сделано для минимизации неточности измерений из-за колебаний тактовой частоты XO при температуре окружающей среды. изменять.
Рисунок 11 . Экспериментальная установка для измерения точности сигналов PPS.
Четыре сигнальных контакта PPS были подключены к четырем 16-битным таймерам / счетчикам Arduino для захвата значения таймера / счетчика всякий раз, когда приходит сигнал PPS. На рисунке 12 показаны ΔCPA1,1 (k), ΔCPA2,2 (k) и их распределения. Среднее значение было 9 999 927. Это было очень близко к номинальной частоте OCXO 10 МГц. Как показано на рисунке 12, максимальное отклонение составило 2 тактовых отсчета, что соответствует 200 нс (1 тактовый отсчет соответствует 100 нс = 1/10 МГц). На рисунке 13 показаны ΔCPA1,2 (k), ΔCPA1,3 (k) и их распределения.Было обнаружено, что максимальные различия варьировались от -4 до 2 тактов, что соответствует от -400 до +200 нс. Эти наблюдения показали многообещающую точность сигналов PPS.
Рисунок 12 . Точность сигналов PPS от одного модуля GPS: (вверху) ΔCPA1,1, (посередине) ΔCPA2,2 и (внизу) распределение ΔCPAi, i отклонение для i = 1, 2, 3 , 4.
Рисунок 13 . Точность сигналов PPS между двумя модулями GPS: (вверху) ΔCPA1,2, (посередине) ΔCPA1,3 и (внизу) распределение отклонения ΔCPA1, j для j = 2, 3, 4.
6.3. Эксперимент № 3: точность предлагаемого метода для триггерных сигналов
Этот эксперимент был попыткой косвенным образом измерить точность предложенного метода отметки времени. Были построены два идентичных Arduino с временными метками, каждый из которых использовал модуль GPS и OCXO, и общие триггерные сигналы, генерируемые функциональным генератором, подавались на два Arduinos, как показано на рисунке 14. Функциональный генератор генерировал триггерный сигнал каждую секунду в течение 30 часов. Отметки времени, сделанные для общего сигнала запуска, сравнивались, чтобы оценить ошибку предложенного метода отметок времени.оказалось равным 40,8 нс. Стоит отметить, что это значение хорошо согласуется с прогнозируемым максимумом 42,0 нс по уравнению (7) с ошибкой 3%.
Рисунок 15 . Распределение разницы отметок времени для общих сигналов запуска.
6.4. Эксперимент №4: модальный анализ только для вывода
Модальный анализ только на выходе был проведен на конструкции пола лаборатории (рис. 16) с использованием четырех беспроводных датчиков ускорения, построенных с использованием предложенного метода временной отметки и метода повторной выборки.
Рисунок 16 . Конструкция пола лаборатории.
В каждом беспроводном датчике ускорения используется акселерометр ADXL362 MEMS, как показано на рисунке 17. Плата, совместимая с Arduino Mega 2560, была разработана для интеграции датчика ADXL362, модуля GPS и MPU ATmega2560 на одной печатной плате. Датчик ADXL362 был подключен к MPU Atmel ATmega2560 через SPI (последовательный периферийный интерфейс). Плата, совместимая с Arduino Mega 2560, находилась на вершине Raspberry Pi 3 Model B (RPI), питаемой и передаваемой через контакты GPIO (General Purpose Input / Output) RPI.Антенна GPS была подключена к модулю GPS, а аккумуляторная батарея USB была подключена для питания RPI. Аккумуляторная батарея на 20 Ач с напряжением 3,85 В была способна поддерживать более 10 часов работы системы, потребляя примерно 700 мА. Для проводного аналога использовались четыре акселерометра серво-типа QA700 с системой сбора данных Data-Physics Signal Mobilizer.
Рисунок 17 . Беспроводной и проводной датчик: (вверху справа) проводной акселерометр QA700 и (внизу посередине) беспроводной датчик ADXL362 MEMS.
Реакция ускорения при вибрации окружающей среды при ходьбе человека была измерена в течение 10 минут с использованием частоты дискретизации 100 Гц для беспроводных и проводных датчиков, как показано на рисунке 18. Управляемая ковариацией SSI (стохастическая подпространственная идентификация) (Peeters and De Roeck, 2001) использовался для модального анализа только для вывода. Результаты показаны в Таблице 1 и на Рисунке 19. Таблица 1 показывает, что обе частоты очень близки друг к другу. Максимальная погрешность по частоте составила -0,09%. На рисунке 19 показано, что первые четыре формы колебаний хорошо согласуются друг с другом, подтверждая успешную работу предложенного метода временной отметки и методики повторной дискретизации.
Рисунок 18 . Положения датчиков.
Таблица 1 . Собственные частоты беспроводных и проводных систем.
Рисунок 19 . Формы колебаний от беспроводных датчиков и проводных датчиков: (A) Mode B11, (B) Mode B12, (C) Mode B21 и (D) Mode B22.
Фазовый угол перекрестной спектральной плотности двух сигналов ускорения может использоваться для оценки ошибки временной синхронизации в сигналах.Наклон фазового угла пропорционален ошибке временной синхронизации и может быть преобразован в оценку ошибки временной синхронизации в секундах (Nagayama and Spencer, 2007). Этот подход требует, чтобы два сигнала измерялись от общих опорных часов. Однако в этом исследовании проводная и беспроводная системы были полностью независимыми измерительными системами без общих опорных часов. Вместо этого на рисунке 20 была показана кросс-спектральная плотность двух беспроводных ускорений из позиции №2 и №3.Как показано на рисунке 20, линейного тренда не наблюдалось, что указывает на отсутствие явной ошибки синхронизации времени между узлами. Датчики в положениях №2 и №3 были выбраны, поскольку они имели умеренные амплитуды формы колебаний, отличные от нуля. Колебания фазового угла ниже 3 Гц и выше 18 Гц могут быть связаны с небольшой величиной сигналов, вызывающей низкое отношение сигнал / шум.
Рисунок 20 . Перекрестная спектральная плотность с использованием датчиков №2 и №3.
7. Заключение
Метод временной синхронизации для беспроводных датчиков ускорения, очень оптимальный для полевых измерений, был предложен с использованием точной временной отметки, основанной на технологии GPS, и метода повторной выборки, работающего независимо на каждом узле.Аналитические и экспериментальные исследования показали следующее.
• Было обнаружено, что модуль GPS работает надежно или возобновляет работу в течение всех семи дней периода испытаний, хотя видимость в небе была только наполовину. Однако, чтобы свести к минимуму время простоя, рекомендуется обеспечить как можно более четкую видимость неба.
• Сигналы PPS оказались точными с максимальными относительными временными ошибками 300 нс для двух соседних сигналов PPS от одного модуля и 400 нс для двух сигналов PPS от двух разных модулей GPS.
• Аналитическое исследование предложенного метода отметки времени позволило получить выражение стандартного отклонения ошибки отметки времени. Выражение выявило два источника неопределенностей: один связан с ошибками сигнала PPS, а другой — с величиной тактового сигнала. Выражение предсказало максимальное стандартное отклонение ошибки отметки времени равным 42,0 нс.
• Ошибка отметки времени была измерена путем сравнения двух отметок времени, сделанных двумя одинаковыми отметками времени Arduinos для общих сигналов запуска.Стандартное отклонение предложенного метода временной отметки было оценено в 40,2 нс, что хорошо согласуется с аналитическим прогнозом 42,0 нс с ошибкой 3%.
• Модальный анализ только на выходе был проведен на конструкции пола лаборатории с использованием беспроводных датчиков ускорения, оснащенных предложенным методом временной отметки и методом повторной выборки. Выявленные собственные частоты и формы колебаний хорошо согласуются с таковыми от проводных датчиков ускорения.
• Фазовый угол двух беспроводных ускорений показал, что явной ошибки синхронизации времени не наблюдалось, что указывает на успешную синхронизацию времени с помощью предложенного метода.
Заявление о доступе к данным
Данные исследования, подтверждающие эту публикацию, находятся в открытом доступе в институциональном репозитории Университета Эксетера по адресу https://dio.org/10.24378/exe.1063
Авторские взносы
KK: разработка алгоритмов, разработка HW, экспериментальная проверка; DH: разработка алгоритма; С.К .: Разработка HW.
Финансирование
Эта работа была поддержана грантом Национального исследовательского фонда Кореи, финансируемым правительством Кореи NRF-2009-352-D00291.
Заявление о конфликте интересов
Авторы заявляют, что исследование проводилось при отсутствии каких-либо коммерческих или финансовых отношений, которые могут быть истолкованы как потенциальный конфликт интересов.
Список литературы
Абдауи, А., Эль Фули, Т. М., и Ахмед, М. Х. (2017). Влияние ошибки синхронизации времени на определение формы колебаний и обнаружение / локализацию повреждений в WSN для мониторинга состояния конструкций. J. Netw. Comput. Прил. 83, 181–189. DOI: 10.1016 / j.jnca.2017.01.004
CrossRef Полный текст | Google Scholar
Элсон, Дж., Гирод, Л., и Эстрин, Д. (2002). «Детализированная сетевая синхронизация времени с использованием эталонных широковещательных рассылок», в Пятый симпозиум по проектированию и внедрению операционных систем (OSDI) (Нью-Йорк, Нью-Йорк), 147–163.
Google Scholar
GlobalTop Technology Inc (2012 г.). FGPMMOPA6H Лист данных автономного модуля GPS .
Guochang, X.(2003). Теория, алгоритмы и приложения GPS . Берлин; Гейдельберг: Springer.
Google Scholar
Икрам, В., Стоянов, И., и Торнхилл, Н. Ф. (2010). «На пути к радиоуправляемой синхронизированной по времени беспроводной сети Ensor: работа в стадии разработки», в материалах Труды 15-й Международной конференции IEEE по новым технологиям и автоматизации производства, ETFA 2010 (Бильбао).
Google Scholar
Каплан Э. и Хегарти К.(2005). Понимание GPS: принципы и приложения . Артек Хаус.
Ким Р. Э., Ли Дж., Спенсер Б. Ф. Дж., Нагаяма Т. и Мечитов К. А. (2016). Синхронизированное зондирование для беспроводного мониторинга больших конструкций. Smart Struct. Syst. 18, 885–909. DOI: 10.12989 / sss.2016.18.5.88
CrossRef Полный текст | Google Scholar
Кришнамурти В., Фаулер К. и Сазонов Е. (2008). Влияние временной синхронизации беспроводных датчиков на модальный анализ конструкций. Smart Mater. Struct. 17, 55018–55113. DOI: 10.1088 / 0964-1726 / 17/5/055018
CrossRef Полный текст | Google Scholar
Кумар Р. и Шривастава М. Б. (2003). Протокол синхронизации по времени для категорий сенсорных сетей и дескрипторов субъектов. Работа .
Google Scholar
Ласассме, С. М., Конрад, Дж. М. (2010). «Синхронизация времени в беспроводных сенсорных сетях: обзор», в Proceedings of the IEEE SoutheastCon 2010 (SoutheastCon) (Concord, NC), 242–245.
Google Scholar
Ли Дж., Мечитов К. А., Ким Р. Э. и Спенсер Б. Ф. (2016). Эффективная синхронизация времени для мониторинга состояния конструкций с помощью беспроводных интеллектуальных сенсорных сетей. Struct. Контроль за состоянием здоровья. 23, 470–486. DOI: 10.1002 / stc.1782
CrossRef Полный текст | Google Scholar
Линч, Дж. П., и Ло, К. Дж. (2006). Сводный обзор беспроводных датчиков и сенсорных сетей для мониторинга состояния конструкций. Ударный вибратор.Дайджест 38, 91–128. DOI: 10.1177 / 0583102406061499
CrossRef Полный текст | Google Scholar
Мэггс, М. К., О’Киф, С. Г., и Тиль, Д. В. (2012). Синхронизация согласованных часов для беспроводных сенсорных сетей. IEEE Sens. J. 12, 2269–2277. DOI: 10.1109 / JSEN.2011.2182045
CrossRef Полный текст | Google Scholar
Мароти, М., Куси, Б., Саймон, Г., и Ледеци, К. (2004). «Протокол синхронизации времени лавинной рассылки», Труды 2-й Международной конференции по встроенным сетевым сенсорным системам — SenSys ’04 (Балтимор, Мэриленд), 39–49.
Google Scholar
Нагаяма Т., Сим С., Миямори Ю. и Спенсер Б. Дж. (2007). Проблемы мониторинга состояния конструкций с использованием интеллектуальных датчиков. Smart Struct. Syst. 3, 299–320. DOI: 10.12989 / sss.2007.3.3.299
CrossRef Полный текст | Google Scholar
Нагаяма Т. и Спенсер Б. Ф. (2007). Мониторинг структурного состояния с использованием интеллектуальных датчиков , Отчет № Урбана-Шампейн: NSEL.
Олфати-Сабер, Р., Факс, Дж. А.и Мюррей Р. М. (2007). Консенсус и сотрудничество в сетевых многоагентных системах. Proc. IEEE 95, 215–233. DOI: 10.1109 / JPROC.2006.887293
CrossRef Полный текст | Google Scholar
Петерс Б. и Де Рок Г. (2001). Стохастическая системная идентификация для оперативного модального анализа: обзор. J. Dyn. Syst. Измер. Контроль 123: 659. DOI: 10.1115 / 1.1410370
CrossRef Полный текст | Google Scholar
Сэдлер Б. и Свами А.(2006). «Синхронизация в сенсорных сетях: обзор», в Milcom 2006 (Вашингтон, округ Колумбия: IEEE), 1–6. DOI: 10.1109 / MILCOM.2006.302459
CrossRef Полный текст | Google Scholar
Сазонов Э., Кришнамурти В., Шиллинг Р. (2010). Беспроводная интеллектуальная сеть датчиков и исполнительных механизмов — масштабируемая платформа для синхронизированных по времени приложений мониторинга состояния конструкций. Struct. Мониторинг здоровья. 9, 465–476. DOI: 10.1177 / 14750370003
CrossRef Полный текст | Google Scholar
Сим, С.Х., Спенсер Б. Ф., Чжан М. и Се Х. (2010). Автоматический децентрализованный модальный анализ с использованием интеллектуальных датчиков. Struct. Контроль за состоянием здоровья. 17, 872–894. DOI: 10.1002 / stc.348
CrossRef Полный текст | Google Scholar
Спенсер Б. Ф., Парк Дж. У., Мечитов К. А., Джо Х. и Ага Г. (2017). Беспроводные интеллектуальные датчики нового поколения для создания устойчивой гражданской инфраструктуры. Proc. Англ. 171, 5–13. DOI: 10.1016 / j.proeng.2017.01.304
CrossRef Полный текст | Google Scholar
Сундарараман, Б., Буй У., Кшемкаляни А. Д. (2005). Синхронизация часов для беспроводных сенсорных сетей: обзор. Ad Hoc Netw. 3, 281–323. DOI: 10.1016 / j.adhoc.2005.01.002
CrossRef Полный текст | Google Scholar
Volgyesi, P., Dubey, A., Krentz, T., Madari, I., Metelko, M., and Karsai, G. (2017). «Услуги синхронизации времени для недорогих приложений туманных вычислений», в Труды 28-го Международного симпозиума по быстрому созданию прототипов систем: сокращение пути от спецификации к прототипу (Сеул), 57–63.
Google Scholar
A. Приложение: Выражение ошибки отметки времени предлагаемого метода
Разница во времени между t P A ( k + l ) и t P A ( k) выражается как tPA (k + l) −tPA (k) = {tPI (k + l) + εtP (k + l)} — {tPI (k) + εtP (k)} = {tPI (k + l) −tPI ( k)} + {εtP (k + l) −εtP (k)} = l + εtP (k + l) −εtP (k) (A1)
Разница между значениями таймера / счетчика C P I ( k + l ) и C P I 8 ( выражается через тактовую частоту F clk MPU следующим образом.
CPI (k + l) −CPI (k) = Fclk (tPA (k + l) −tPA (k)) = Fclk (l + εtP (k + l) −εtP (k)) ≜Fclk ′ × l (A2 )Истинная отметка времени м -го сбора данных C D I ( м )
ttrue (m) = tPA (k) + CDI (m) −CPI (k) CPI (k + l) −CPI (k) × (tPA (k + l) −tPA (k)) = tPA (k) + CDI (m) −CPI (k) CPI (k + l) −CPI (k) ︸≜A × (l + εtP (k + l) −εtP (k)) (A3)Обратите внимание, что член A выше является константой в диапазоне [0, 1) (см. Рисунок 6).(m) = tPI (k) + CDA (m) −CPA (k) CPA (k + l) −CPA (k) ︸≜B × l (A4)
Член B в приведенном выше уравнении выражается как
B = (CDI (m) + εCD (m)) — (CPI (k) + εCP (k)) (CPI (k + l) + εCP (k + l)) — (CPI (k) + εCP (k )) = (CDI (m) −CPI (k)) + (εCD (m) −εCP (k)) (CPI (k + l) −CPI (k)) (1 + εCP (k + l) −εCP (k) CPI (k + l) — CPI (k))Используя определения A и Fclk ′ и приближение 11 + x≃1-x для малых x ,
B≃ (A + εCD (m) −εCP (k) F ′ clkl) × (1 − εCP (k + l) −εCP (k) F ′ clkl)Расширяя приведенное выше уравнение и игнорируя член 2-го порядка (1F′clkl) 2, можно пренебречь w. (m) = εtP (k) (1 − A) + εtP (k + 1) A + εCP (k) (1 − A) + εCP (k + 1) A − εCD (m) Fclk (A6)
Как впервые использовать Arduino GPS Shield для начинающих
Плата Arduino GPS Shield
Dexter Industries Arduino GPS Shield можно приобрести здесь.Легко добавляйте навигацию в свои проекты Arduino с помощью Dexter Industries Arduino GPS Shield! Dexter Industries GPS Shield для Arduino надвигается на Arduino UNO, Leonardo, Mega и многие новые модели Arduino. Щит Arduino передает последовательные данные на Arduino. Наденьте его и выйдите на улицу!
Начало работы
- Загрузите код с Github. Вы можете скачать zip-файл с кодом для Arduino GPS Shield здесь.
- Подключите GPS Shield к Arduino, как показано на рисунках ниже.В нашем примере мы используем Arduino UNO.
- Установите перемычку Pin на щите Arduino на контакт 10. Во всех трех файлах примеров предполагается, что контакт установлен на контакт 10.
- Откройте программу Arduino.
- Выберите правильное расположение COM в разделе «Инструменты -> Порт».
- Скомпилируйте и загрузите код.
- Откройте Serial Monitor.
- Вы должны увидеть ответ от Arduino.
Обработка конфликтующих выводов на Arduino GPS Shield
Вы можете изменить контакты, которые вы используете с щитом Arduino.В стандартных примерах используется контакт 10 (см. Схему выше), но вы можете изменить контакт на плате Arduino GPS, чтобы использовать контакты 3, 10, 11 и 12, в зависимости от вашей платы и в зависимости от других экранов, которые вы можете складывать, что может конфликтовать. с штифтом 10.
Загрузки, пример кода- Драйверы для Arduino GPS Shield.
- Пример 1: Расчет времени в Токио, Риме, Буэнос-Айресе, Вашингтоне, Лондоне и Мумбаи. (Github)
- Пример 2: Расчет расстояния по GPS до пункта назначения, азимута (угла движения) до пункта назначения.(Github)
- Пример 3: Расчет широты, долготы, времени, скорости, курса, даты, спутников в обзоре и HDOP с помощью датчика GPS. (Github)
- Рисунок и схема Arduino GPS Shield
Технические документы
Совет: получение сигнала
- Ваши начальные заводские координаты будут 120000, 60000, а время будет увеличиваться с 12:00.
- Если вы видите приращение времени в Примере 1, даже если оно неверно, ваш Shield и Arduino работают правильно.
- Датчик GPS при первом подключении к спутнику загружает альманах, что помогает ему быстро подключаться к спутникам в будущем. Альманах хранится в SRAM, пока подключена батарея.
- Отключение аккумулятора (или разряд аккумулятора) приведет к сбросу альманаха и любой предыдущей информации о подключении. Часы снова начнут с нуля, а координаты GPS будут 0,00, 0,00. Датчику GPS при первом подключении к спутнику снова потребуется больше времени для подключения после замены батареи.
- После первого подключения к спутнику GPS подключится гораздо быстрее (в некоторых случаях <1 с).
- Время поиска спутников зависит от того, какая часть горизонта видна. Например, в открытом поле GPS будет подключаться намного быстрее, чем в городском каньоне.
- Время на спутнике может зависеть от времени суток, вашего местоположения, вида на горизонт и погоды.
Устранение неполадок: работает ли мой GPS Shield?
- Если время увеличивается (увеличивается), экран GPS работает правильно.
- Батареи на щите GPS хватает на два года; в некоторых случаях меньше. Если вы не можете заставить работать увеличивающиеся часы, попробуйте заменить батарею.
Как создать Gps_Location_Finder с Arduino
О проектеВ этом руководстве по проекту я покажу вам, как создать Gps Location Finder с Arduino nano, модулем ublox neo 6 м, ЖК-дисплеем 16 * 2. После завершения этого проекта вы можете легко определить широту и долготу любого места без подключения к Интернету.
Об устройствеУ этого устройства есть много других преимуществ. С помощью этого устройства вы можете узнать GPS-координаты любого места, где захотите, и использовать эти необработанные данные gGPSps в другой работе.
В моем будущем проекте я покажу вам, как сохранить данные о местоположении GPS на SD-карте.
Некоторая информация о компонентах- Arduino Nano — это плата микроконтроллера, разработанная Arduino.cc и основанная на Atmega328p / Atmega168.Платы Arduino широко используются в робототехнике, встроенных системах и электронных проектах, где автоматизация является важной частью системы. Эти доски предназначены для студентов и людей, не имеющих технической подготовки. На Arduino.cc легко доступны любые виды поддержки и помощи, которые слишком просты для доступа и освобождают вас от зависимости от других, что может стоить вам кучу долларов.
Arduino Nano Pinouts
- GPS-модуль NEO-6M — это полноценный GPS-приемник со встроенной керамической антенной размером 25 x 25 x 4 мм, обеспечивающий надежный поиск спутников.С помощью индикаторов питания и сигналов вы можете контролировать состояние модуля. Благодаря резервной батарее данных модуль может сохранять данные при случайном отключении основного питания. Его монтажные отверстия 3 мм могут обеспечить легкую сборку на вашем летательном аппарате, который, таким образом, может устойчиво летать в фиксированном положении, автоматически возвращаться в исходное положение, автоматически летать по путевой точке и т. Д. Или вы можете применить его на своем интеллектуальном автомобиле-роботе для автоматического возврата или направления определенное направление, что делает его настоящим «умным» ботом!
Neo 6m модуль Gps Распиновка
Когда GPS соединяется со спутником, его красный светодиод на модуле GPS мигает каждую секунду.Если он не мигает, поместите устройство на открытое небо на 15-20 мин.
Демо-видеоПожалуйста, посмотрите полное видео, чтобы узнать, как это работает ……
И лайкайте, делитесь, комментируйте это видео, если вы новичок, подпишитесь на наш канал
YouTube и следите за Arduino Projecthub.
Надеюсь, вам понравился этот проект.
Спасибо!
GPS-гиды Роботизированный автомобиль — Circuit Cellar
Arduino UNO в действии
В этой проектной статье Рауль строит роботизированный автомобиль, который перемещается по ряду путевых точек GPS.Конструкция с использованием Arduino UNO в качестве контроллера предназначена для новичков в области робототехники, которые хотят сделать шаг вперед на ступеньку выше. В статье Рауль обсуждает математические, программные и электронные аппаратные средства, которые использовались при разработке этого проекта.
В этой статье я излагаю базовый роботизированный автомобиль с дифференциальным приводом для автономной навигации по путевым точкам с использованием глобальной системы позиционирования (GPS). Роботизированная машина получает список GPS-координат и перемещается к путевым точкам в заданном порядке.Чтобы понять, как это работает, я расскажу о концепции GPS, простом подходе к реализации автономной навигации с использованием GPS, аппаратном обеспечении, необходимом для этой задачи, о том, как рассчитывать векторы навигации с помощью «формулы Хаверсинуса» и «формулы прямого азимута», а также простая реализация фильтра скользящего среднего для фильтрации показаний GPS-координат. Я также обсуждаю простой подход к управлению навигацией, сводящий к минимуму расстояние от роботизированной машины и ошибку направления относительно цели.
Этот проект нацелен на новичков, имеющих базовый опыт работы с роботизированными автомобилями, то есть следователей по линиям, ультразвуковых обходчиков препятствий и других, кто теперь хочет попробовать что-то более сложное, или всех, кто интересуется этой темой.
На рисунке 1 показаны основные компоненты системы. Приемник GPS помогает рассчитать расстояние от машины-робота до цели. С помощью цифрового компаса GPS также помогает определить, в каком направлении находится цель.Эти два параметра — расстояние и направление — дают нам вектор навигации, необходимый для управления роботизированной машиной по направлению к цели. Я использовал для автомобиля конфигурацию с полноприводным дифференциалом, который ведет себя почти так же, как полноприводный дифференциал. Код, поставляемый с проектом, должен хорошо работать с обеими конфигурациями.
РИСУНОК 1Блок-схема роботизированной машины с GPS
Для расчета расстояния до цели я использовал формулу Хаверсина, которая дает расстояние по дуге большого круга между двумя точками на сфере, исходя из их долготы и широты.Формула прямого азимута использовалась для расчета направления или курса. Эта формула предназначена для начального пеленга, который, если следовать по прямой по дуге большого круга, приведет вас от начальной точки к конечной. Оба параметра могут быть рассчитаны с использованием следующих известных данных: координаты цели по GPS, координаты автомобиля-робота, полученные от приемника GPS, и направление автомобиля по отношению к северу, полученное с цифрового компаса.
Роботизированная машина постоянно пересчитывает вектор навигации и использует полученные расстояние и курс для управления двигателями, чтобы приблизиться к цели.Я также установил зуммер в роботизированную машину, чтобы дать звуковую обратную связь, когда роботизированная машина достигнет путевых точек.
HARDWARE
Как показано на рисунке 1, я использовал плату Arduino UNO в качестве основного контроллера. Я выбрал Arduino, потому что он невероятно интуитивно понятен для начинающих и имеет огромное количество библиотек. Библиотеки позволяют легко реализовывать достаточно сложные проекты без излишних подробностей об аппаратных и программных драйверах для датчиков и исполнительных механизмов.
В качестве GPS-приемника я выбрал модуль HiLetgo GY-GPS6MV2 на базе микросхемы U-blox NEO-6M. Цифровой компас — это модуль GY-271 на базе микросхемы Honeywell HMC5883L. Оба являются недорогими и повсеместными с легкодоступными библиотеками Arduino. U-blox NEO-6M имеет интерфейс последовательной связи UART, а HMC5883L работает с последовательным протоколом I 2 C. Во избежание помех компас следует размещать не менее чем на 15 см над остальной электроникой.
Двигатели постоянного тока приводятся в действие с помощью очень популярного модуля L298N, основанного на двойном полномостовом драйвере STMicroelectronics L298N. Он может управлять двумя двигателями постоянного тока с максимальным током 2 А на канал. Он также может управлять двумя двигателями постоянного тока в каждом канале, если не превышен максимальный ток, — что я и делаю с полноприводным шасси, которое я использовал для своего прототипа. Шасси оснащено алюминиевой платформой 30 см × 20 см, четырьмя стандартными двигателями 12 В постоянного тока, 85 об / мин, и колесами диаметром 13 см.Но можно использовать практически любое универсальное двух- или полноприводное шасси.
Для питания роботизированной машины я использовал литий-полимерный аккумулятор 11,1 В, 2200 мАч (LiPo) со скоростью разряда 25 ° C. Для моего типа шасси аккумулятор вдвое меньшего размера также должен работать нормально. Рисунок 2 показывает принципиальную схему для этого проекта, а Рисунок 3 показывает готовую машину.
РИСУНОК 2Принципиальная схема для проекта роботизированной машины РИСУНОК 3
Завершенная роботизированная машина с GPS
СИСТЕМА ГЛОБАЛЬНОГО ПОЗИЦИОНИРОВАНИЯ
Глобальная система позиционирования (GPS) — это глобальная навигационная спутниковая система, принадлежащая правительству Соединенных Штатов.Он предоставляет информацию о геолокации и времени любому приемнику GPS на поверхности Земли, когда он имеет беспрепятственную прямую видимость как минимум с четырьмя спутниками GPS — чем больше, тем лучше [1]. Приемники GPS обычно могут обеспечивать координаты широты и долготы с точностью от 2,5 до 5 м в идеальных условиях, таких как хорошая видимость неба и большое количество видимых спутников. Моя роботизированная машина запрограммирована с одной или несколькими путевыми точками, заданными координатами широты и долготы, а GPS-приемник автомобиля определяет его фактическое положение в том же типе координат.
Рисунок 4 — это блок-схема алгоритма, работающего в роботизированной машине. Я думаю, что большая часть из них не требует пояснений, поэтому я сосредоточусь на вычислении вектора навигации и элементе управления навигацией, которые, возможно, являются наиболее сложной его частью. Как я сказал ранее, я использую формулу Хаверсина для вычисления расстояния до цели и формулу прямого азимута для вычисления ориентации цели относительно магнитного севера. Если расстояние до цели больше заданной погрешности допуска по расстоянию, которую я установил на 1 м, алгоритм продолжит движение автомобиля вперед.Более того, если угол курса роботизированной машины относительно текущей цели выходит за пределы заданной погрешности допуска по курсу — которую я установил на ± 5 градусов — алгоритм также будет вращать роботизированную машину, пока нос не будет указывать на цель. Алгоритм будет управлять роботом до тех пор, пока не будет достигнута текущая цель, а затем повторить те же шаги, если доступна другая путевая точка. В противном случае машина остановится.
РИСУНОК 4Блок-схема алгоритма, работающего в роботизированной машине
Автомобиль должен постоянно повторять этот цикл вычисления вектора навигации и управления его движением, потому что с каждым движением вносятся дополнительные ошибки расстояния и направления.Более того, и приемник GPS, и цифровой компас имеют собственные допуски к ошибкам, которые также увеличивают основные величины ошибок, не говоря уже о допусках ошибок исполнительных механизмов и внешних помехах.
РАСЧЕТ НАВИГАЦИОННОГО ВЕКТОРА
На рис. 5 графически показано, как определяется навигационный вектор — расстояние и курс. Эти два компонента вычисляются на основе трех известных параметров: координаты цели, координаты роботизированной машины и направление машины относительно магнитного севера.Расстояние и направление — это ошибки, которые мы постараемся минимизировать с помощью нашего алгоритма управления. Погрешность расстояния можно уменьшить, задав автомобилю линейную скорость, а угловую погрешность — задав соответствующую угловую скорость. «Формула Хаверсина» позволяет нам вычислить ошибку расстояния «d», а «Формула прямого азимута» позволяет нам вычислить азимут (waypoint_angle), с помощью которого мы можем вычислить ошибку направления «α».
Расчет вектора навигации
Формула Хаверсинуса — это общая формула сферической тригонометрии, используемая для расчета расстояния между двумя точками на поверхности Земли или любой сфере.Чтобы вычислить расстояние между двумя точками на поверхности Земли, мы должны иметь координаты — широту и долготу — этих двух точек. Уравнения (1) и (2) дают нам, соответственно, общую формулу Хаверсина и тригонометрическое тождество Хаверсина [2]. Однако уравнения (3), (4) и (5) я реализовал в коде. Они представляют собой просто расшифровку уравнений (1) и (2), которые более удобно выражают вычисления [3].
(1) (2) (3) (4) (5)Где:
Азимут определяется как «горизонтальный» угол, измеренный по часовой стрелке от северной базовой линии или меридиана до направляющей линии, определяемой двумя точками над поверхность Земли.Если мы возьмем за точку отсчета истинный север, мы получим «истинный азимут». А если мы возьмем магнитный север, мы получим соответствующий «магнитный азимут».
Таким образом, формула прямого азимута — или просто азимута — позволяет нам вычислить угол между этими двумя линиями: линией между положением роботизированной машины и севером и линией между положением роботизированной машины и целью (рис. 5). Уравнение (6) показывает эту формулу [3]. Для расчета азимута нам понадобятся только координаты цели и машины-робота.
(6)Где:
Когда у нас есть азимут или угол путевой точки, мы должны вычислить ошибку направления, которая представляет собой просто разницу между азимутом и курсом роботизированной машины относительно севера, полученным из цифрового компас:
heading_error = waypoint_angle — robot_car_heading.
УПРАВЛЕНИЕ НАВИГАЦИЕЙ
Алгоритм управления навигацией прост. Во-первых, мы пытаемся уменьшить ошибку направления, поворачивая роботизированную машину вправо, если ошибка угла положительная, и влево, если ошибка отрицательная.Поскольку трудно уменьшить ошибку точно до нуля и поддерживать ее на нуле, я определяю диапазон допуска ± 5 градусов. Так что в принципе будет нормально, если мы уменьшим ошибку до любой величины в этом диапазоне. В то же время мы пытаемся уменьшить ошибку расстояния, дав команду роботизированной машине вперед в приблизительном направлении к цели. Но при этом обычно угловая ошибка имеет тенденцию увеличиваться по величине в положительную или отрицательную сторону. Это происходит из-за ошибок допуска не только в датчиках (GPS-приемнике и цифровом компасе), но и в исполнительных механизмах, а также из-за внешних помех.Имея это в виду, мы должны постоянно перебирать вычисления нового вектора навигации и минимизировать обе ошибки, пока, наконец, не достигнем цели.
Если абсолютное значение ошибки направления составляет от 5 до 45 градусов (25% от 180 градусов), автомобиль будет медленно поворачивать вправо или влево в зависимости от знака ошибки (как указано ранее). Если погрешность составляет от 45 до 180 градусов, автомобиль будет разворачиваться быстрее, чтобы быстрее минимизировать ошибку. Я эмпирически выбрал предел в 45 градусов.Он хорошо работал в тестах, но может быть изменен в коде Arduino.
Эта стратегия управления, насколько я понимаю, является своего рода «ступенчатым пропорциональным контроллером», потому что она делит пространство ошибок на пять шагов: от -180 до -45, от -45 до -5, от -5 до +5, +5 до +45, от +45 до +180. Алгоритм использует управляющий сигнал пропорциональной коррекции, «жестко закодированный» в скоростях пяти соответствующих маневров, доступных роботизированной машине, для исправления ошибки и достижения цели. Вот эти маневры: быстро повернуть направо , повернуть направо медленно , вперед , повернуть налево медленно и быстро повернуть налево .
GPS И ТОЧНОСТЬ КОМПАСА
Точность и точность — два понятия, которые не всегда правильно понимают даже технически подкованные люди, включая меня. В инженерном мире обе концепции обычно связаны с измерениями с использованием датчиков и иногда ошибочно используются как взаимозаменяемые. Проще говоря, точность — это насколько близко измеренное значение к фактическому истинному значению, а точность относится к повторяемости измерения, другими словами, насколько близки два или более измерения друг к другу. Рисунок 6 показывает разницу между точностью и точностью. Чтобы легче понять разницу, мы можем использовать следующую иллюстрацию: если при броске баскетбольного мяча вы всегда попадаете в левую сторону щита и почти никогда не получаете корзину, вы точны, но не точны. Таблица данных U-blox NEO-6M дает точность положения по горизонтали 2,5 м, CEP (вероятность круговой ошибки) 50%, что означает, что только 50% всех измерений, выполненных за определенный период времени, будут иметь точность 2.5-метровая точность. Причем это в идеальных условиях. В большинстве обычных условий точность (CEP 50%) может быть снижена до 10 м, 20 м или более.
Разница между точностью и точностью
Итак, точность GPS-навигации в целом не так высока. В нашем случае роботизированная машина достигнет путевых точек более или менее с таким же уровнем точности. Поначалу это не кажется действительно впечатляющим, но видеть, как роботизированный автомобиль автоматически перемещается по всем путевым точкам — в пределах диапазона ошибок — все еще очень весело! Вообще говоря, мы получаем более надежное и повторяемое поведение от роботизированной машины на больших открытых пространствах, с небольшим количеством зданий и других препятствий вокруг.В таких местах я видел, как машина достигала цели в радиусе от 1 до 3 метров.
Как вы, возможно, уже знаете, есть несколько способов повысить точность навигации. Например, вы можете использовать гораздо более сложный и дорогой GPS, такой как дифференциальный GPS, или другой тип датчика, такой как одометрия или инерциальный измерительный блок (IMU), который может быть добавлен к автомобилю. В более сложных приложениях можно также использовать камеру или датчик LIDAR.
Что касается цифрового компаса, точность не составляет особого труда.В таблице данных Honeywell HMC5883L указана точность 1-2 градуса. Этого более чем достаточно для достижения цели, поэтому более низкая точность GPS-приемника всегда будет доминирующим фактором. Однако цифровые компасы подвержены магнитным помехам со стороны электронных схем, магнитных материалов и близлежащих металлических предметов, включая металлические конструкции, металлические ограждения и металлические сетки.
ФИЛЬТР ДВИЖЕНИЯ СРЕДНЕГО
Чтобы каким-то образом уменьшить обильный шум, присутствующий в данных GPS, то есть шум из-за присущей им низкой точности и точности приемников GPS, я применил фильтр скользящего среднего, который технически представляет собой конечную импульсную характеристику (FIR). ) фильтр нижних частот.Фильтр скользящего среднего — это, в принципе, просто вычислитель среднего, который принимает N показаний от In 0 до In N-1 и предоставляет отфильтрованный выходной сигнал Out 0 как среднее значение N входов. На следующей итерации он принимает входы от In 1 до In N и обеспечивает отфильтрованный выходной сигнал Out 1 и так далее. Уравнения (7) и (8) ниже дают математическое описание этого фильтра [4].
В коде я реализовал фильтр в виде двух массивов из N чисел с плавающей запятой, один для хранения широты, а другой для хранения долготы.Два массива работают как буферы в порядке очереди (FIFO). Другими словами, каждый раз, когда необходимо сохранить новое показание, самое старое показание сначала выскакивает в хвосте буфера, если буфер уже заполнен, а затем все оставшиеся значения перемещаются в конец. Наконец, новое значение вставляется в заголовок буфера. Таким образом, каждый раз, когда становится доступным новое показание GPS, значения широты и долготы сохраняются в массивах, а затем могут быть получены отфильтрованные значения широты и долготы. Они, в свою очередь, используются для вычисления нового вектора навигации.
Код Arduino, доступный для проекта, по умолчанию распечатывает последовательные данные исходных и отфильтрованных показаний широты. Так, например, вы можете открыть последовательный плоттер в среде Arduino IDE, чтобы графически увидеть влияние фильтра скользящего среднего на данные широты. В функции Print_Data () вы можете комментировать / раскомментировать другие типы данных, которые будут отправлены на последовательный плоттер. Чтобы это работало, к вашему компьютеру должна быть подключена плата Arduino роботизированной машины. Рисунок 7 показывает снимок экрана последовательного плоттера с фильтром скользящего среднего, примененным к широте.Синяя кривая (рис. 7) показывает нефильтрованные измерения широты, а красная — измерения после прохождения через фильтр нижних частот. Фильтр сглаживает измерения, уменьшая высокочастотные составляющие (небольшие всплески вверх / вниз на синей кривой), обычно связанные с шумом, но он также добавляет некоторую задержку к сигналу (отфильтрованная красная кривая отображается «впереди» синей кривой. один; это означает, что он фактически задерживается во времени).
РИСУНОК 7Снимок экрана последовательного плоттера с фильтром скользящего среднего, примененным к данным широты
РЕАЛИЗАЦИЯ КОДА
Путевые точки хранятся в коде статически в массиве типа struct t_waypoint.Этот тип структуры хранит значения широты и долготы для данной путевой точки. Вначале первая путевая точка в массиве устанавливается как текущая цель. Как только она будет достигнута, вторая путевая точка устанавливается как текущая цель, и так далее, до последней. Есть функция Get_Waypoint_With_Index (int index), которая возвращает путевую точку из массива для заданного индекса.
В функции loop (), которая является «основной» функцией в Arduino, сначала считывается значение датчика компаса с помощью функции Get_Compass_Heading () для получения курса роботизированной машины.Затем запускается функция Query_Gps (), чтобы узнать, доступны ли данные от приемника GPS. В этом случае вызывается функция Gps_Dump (gps), чтобы получить текущие координаты широты и долготы роботизированного автомобиля. Затем запускается функция Store_Gps_Reading (), чтобы сохранить эти координаты в буферах фильтра. Затем вызывается функция Compute_Filtered_Gps () для получения отфильтрованных значений широты и долготы. Когда у нас есть эти отфильтрованные значения, запускается функция Compute_Navigation_Vector (), чтобы получить параметры расстояния и направления для вектора навигации.
Затем вызывается функция Control_Navigation (), чтобы подвигать машину к цели. Эта же функция проверяет, достигнута ли текущая цель. Если это так, переменная waypoint_index, указывающая на текущую цель, будет увеличена, чтобы установить следующую путевую точку в качестве новой цели. Если все путевые точки достигнуты, роботизированная машина остановится.
В коде показания цифрового компаса компенсируются магнитным склонением. Это относится к углу в горизонтальной плоскости между магнитным севером — направлением севера, возвращаемым цифровым компасом, соответствующим направлению линий магнитного поля Земли, — и истинным севером, который является направлением вдоль меридиана к географическому Северному полюсу. .Этот угол, называемый «склонением», меняется не только в зависимости от положения на поверхности Земли, но также меняется со временем. В Интернете есть карты склонения, где вы можете найти соответствующее значение для вашего местоположения и изменить его в коде. В качестве альтернативы вы можете полностью игнорировать его и установить на ноль. В этом случае алгоритм должен работать, хотя, возможно, немного менее эффективно. Зуммер издает два звуковых сигнала при достижении промежуточной путевой точки и трижды при достижении последней точки.
GPS всегда лучше работает на открытых пространствах, поэтому предпочтительно тестировать роботизированный автомобиль на открытой местности, например, в парке, футбольном поле, открытой парковке или даже на баскетбольной площадке. Убедитесь, что поблизости не слишком много деревьев, зданий и других построек, которые могут помешать приему GPS. Металлические конструкции, такие как сетчатые заборы, также могут в некоторой степени мешать работе цифрового компаса.
Я использовал Google Maps, чтобы определить координаты путевой точки для моих тестовых маршрутов.Вы можете отметить некоторые путевые точки на Google Maps, а затем скопировать их координаты в массив путевых точек в коде, и все готово. Не забудьте изменить путевые точки в коде на свои собственные, иначе ваша роботизированная машина будет пытаться достичь путевых точек в парке в моем родном городе!
ВЫВОДЫ
На рисунке 8 показан роботизированный автомобиль в действии. Я пробовал несколько разных карт в разных местах, и машина-робот всегда проходила маршруты, достигая всех путевых точек.Но я заметил, что он немного блуждает при переходе между некоторыми путевыми точками, иногда описывая параболу. Когда машина подъезжает к зоне в непосредственной близости от цели, она немного кружит вокруг, прежде чем достичь цели. Особенно это было заметно, когда рядом находились металлические конструкции.
Автомобиль-робот с GPS в действии. Он был протестирован с использованием нескольких разных карт в разных местах, и машина-робот всегда проходила маршруты, достигая всех путевых точек.
Фильтр скользящего среднего для показаний GPS действительно имел значение.Я запустил фильтр с 15 точками — в среднем 15 показаний — и сравнил производительность без фильтра. С включенным фильтром я заметил, что роботизированная машина ехала немного меньше, чем без фильтра, и в целом достигала точки маршрута немного быстрее.
Стратегия «ступенчатого пропорционального» управления показала хорошие результаты. Но иногда роботизированная машина имела тенденцию колебаться при попытке исправить ошибку курса или при попытке следовать по прямому пути. Чаще всего это происходило, когда ошибка находилась рядом с пределом шага ошибки, то есть при переходе из одного диапазона ошибок в другой.Помните, что пространство ошибок разделено на пять этапов ошибок.
Я мог бы добавить следующие улучшения. Во-первых, я хотел бы реализовать полноценный ПИД-регулятор для навигации. Я думаю, это может сделать навигацию более плавной и эффективной. Во-вторых, я бы добавил энкодеры к колесам для одометрии, а затем реализовал фильтр Калмана, чтобы объединить одометрию с показаниями GPS. В-третьих, я бы написал приложение Python для приема данных телеметрии на свой компьютер через беспроводной приемопередатчик и визуализации путевых точек, показаний датчиков, ошибок, фильтрации, траекторий и тому подобного.И, наконец, было бы интересно построить роботизированную лодку с GPS для автономной навигации над водой, начав с некоторых аппаратных средств и кода из этого проекта.
Подробные ссылки на статьи и дополнительные ресурсы можно найти по адресу:
www.circuitcellar.com/article-materials
Ссылки с [1] по [4], отмеченные в статье, можно найти там
РЕСУРСЫ
Arduino | www.arduino.cc
HiLetgo | www.hiletgo.com
Honeywell | www.honeywell.com
STMicroelectronics | www.st.com
U-blox | www.u-blox.com
ОПУБЛИКОВАНО В ЖУРНАЛЕ CIRCUIT CELLAR • ИЮНЬ 2019 № 347 — Получить номер выпуска в формате PDF
Рауль Альварес Торрико получил степень бакалавра искусств. в области электроники и является основателем TecBolivia, компании, предлагающей услуги в области физических вычислений и образовательной робототехники в Боливии. В свободное время он любит экспериментировать с беспроводными сенсорными сетями, робототехникой и искусственным интеллектом. Он также публикует статьи и видеоуроки по встроенным системам и программированию на своем родном языке (испанском) на веб-сайте своей компании www.TecBolivia.com. Вы можете связаться с ним по [email protected]
Спонсировать эту статьюArduino MKR GPS Shield ASX00017 — Shield for Botland
Описание: Arduino MKR GPS Shield ASX00017 — крышка для Arduino MKR
Overlay для серии Arduino MKR, позволяет создавать проекты, требующие определения местоположения по GPS. На плате интегрирован GNSS u-blox SAM-M8Q. Модуль предназначен для одновременной работы с разными сервисами позиционирования.Он позволяет принимать и отправлять сигналы от GPS, ГЛОНАСС и Galileo. Устройство можно разместить непосредственно на выводах MKR или подключить к любому устройству, имеющему такой разъем, с помощью прилагаемого кабеля ESLOV . Он обменивается данными через интерфейс I2C в случае подключения через разъем ESLOV или UART, когда он накладывается на контакты Arduino MKR.
Содержимое набора наложения GPS для Arduino MKR.
Настройка наложения GPS для MKR.
Модуль GPS можно настроить с помощью специальных команд .Слот для батареи был размещен на плате, чтобы сохранить сделанные конфигурации. Это может быть удобно, например, при изменении режима GPS на 1g, который обычно используется в экспериментах на больших высотах. Другой пример — использование местоположения Galileo, которое по умолчанию отключено, но может быть включено путем отправки сообщения конфигурации (UBXCFG-GNSS) на приемник. Подробное описание всех команд доступно здесь.
Arduino MKR GPS Shield.
GPS щит
Плата имеет дополнительный разъем ESLOV в дополнение к контактам, совместимым с Arduino MKR.Это 5-контактный разъем с сеткой 1 мм. Используя этот разъем, подключите модуль к материнской плате через интерфейс I2C.
Разъем ESLOV в наложении GPS на Arduino MKR.
Спецификация наложения GPS
- Приемник GNSS: u-blox SAM-M8Q
- Разъемы: MKR / ESLOV
- Входное напряжение: 3,3 В
- Рабочее напряжение: 3,3 В
- Слот для батареи: CR1216 (не входит в комплект)
- Интерфейс: последовательный / I2C / DCC
- Размеры: 45 x 23 мм
- Вес: 14 г