Геодезический приемник своими руками

Простой GPS навигатор своими руками

Во многих современных телефонах есть GPS, но для работы навигатора необходима подгрузка карт через интернет, что в дали от GSM вышек является проблемой. Также большая проблем — это быстрый разряд аккумулятора смартфонов, особенно в холодное время года. За раз путешественник остаётся не только без навигации, но и без связи. Иметь с собой независимое навигационное устройство будет очень кстати. Подобное устройство и будет предлагаться в статье, ниже.

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

Схема самодельного навигатора

Схема строится на микроконтроллере ATMega64 с тактированием от внешнего кварцевого резонатора на 11,0592 МГц. За работу с GPS отвечает NEO-6M от U-blox, это хоть и старенький, но очень распространенный и недорогой модуль с достаточно точным определением координат. Информация выводится на дисплей от Nokia 3310 (5110). Еще в схеме присутствуют магнитометр HMC5883L и акселерометр ADXL335.

  1. SCL — вход тактирования шины I2C
  2. VDD — вход для подключения питания (кормится эта козявка напряжением в диапазоне 2,16-3,6 вольт)
  3. не используется
  4. S1 — дополнительное питание для портов ввода/вывода. Подключается напрямую к выводу VDDIO
  5. не используется
  6. не используется
  7. не исползуется
  8. SETP — первый вход для подключения керамического конденсатора на 0,22uF
  9. GND — земля
  10. С1 — еще один вход для подключения конденсатора. Электролитичиского или танталового на 4,7uF (другой конец конденсатора подключается к земле)
  11. GND — земля
  12. SETC — второй вход для подключения керамического конденсатора на 0,22uF
  13. VDDIO — вход для подключения напряжения которое будет на портах ввода/вывода
  14. не используется
  15. Выход прерывания, когда данные готовы на этом выводе появляется логическая 1
  16. SDA — линия данных интерфейса I2C

Печатная плата навигатора

Схема и плата спроектированы в системе EasyEDA.

Перед прошивкой контроллера рекомендую отключить GPS приемник, так как ножка RXD совмещена c линией MOSI и модуль может начать отправлять данные во время прошивки, что вызовет ошибку в загружаемой программе.

Включение и выключение устройства происходит длинным нажатием на кнопку S5. После включения и поиска спутников (при холодном старте может уйти до 10 минут или даже больше) мы можем посмотреть текущие координаты, нажав на кнопку S2.

Координаты конечной точки можно посмотреть нажав на кнопку S3.

Нажав кнопку S4 попадаем в меню сохранения точки. Сохранить точку можно двумя способами:

  1. сохранить текущие координаты

2. забить координаты вручную

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

Вернуться в режим следования к точке можно по короткому нажатию на кнопку S5

Теперь об использовании магнитометра и акселерометра. Для расчета азимута используются данные полученные с GPS приемника, поэтому в случае если рассчитать координаты не возможно (например если спутники не видны или их мало) пропадает возможность и рассчитать направление в котором нужно двигаться, чтобы придти к точке. И первоначально моя задумка была в том, чтобы использовать магнитометр как вспомогательное средство для указания курса. Но столкнулся с некоторыми трудностями.

Во-первых. Кто знакомился с работой цифровых магнитометров знают что, точность их данных зависит от того в каком положении они находятся. Поэтому для корректной работы в любом положении необходимо использовать акселерометр, который бы давал более точную картину проекции магнитного поля на все три оси магнитометра. Возможное решение этой задачи я подсмотрел в одном журнале. но пока не осилил перенести весь расчет в Bascom (может кто-то из энтузиастов возьмется?).

Во-вторых, заметно сказывается различие магнитного склонения в разных частях Земли. Например в Поволжье магнитное склонение составляет 13°, а на другом конце страны склонение уже 11° и в другую сторону. А ведь есть еще и магнитное наклонение — когда линии магнитного поля входят или выходят под углом к горизонту, и много других факторов влияющих на показания.

Конечно, для примерного указания направления можно использовать и такие не калиброванные данные с магнитометра, но пока решил оставить эту задумку и сделал простой компас, который тоже может быть полезен. Компас включается нажатием на кнопку S1. А для того чтобы он указывал более менее правильное направление на север (точнее на северный магнитный полюс), устройство необходимо держать горизонтально. Для помощи в этом по бокам экрана бегают две черточки, которые показывают наклон в ту или иную сторону.

Читайте также:  Как сделать бант своими руками мастер класс

Осталось распечатать на 3-D принтере под устройство корпус, а пока о результатах уличных испытаний. Девайс получился очень интересным и вполне очень даже помогающим выйти к сохраненной точке. Но нужно понимать, что миллиметровой точности ожидать не следует. Ошибка определения GPS координат всего в одну секунду даст неточность определения положения в 20 метров. Также погрешность неизбежно накапливается при округлении в математических расчетах. Но тем не менее устройство даже в городских условиях плотной застройки позволило вернутся к точке с точностью в несколько метров.

Это устройство станет незаменимым помощником тем, кто любит побродить по лесу, грибникам, лыжникам, туристам и другим любителям природы!

Используемые в устройстве компоненты (их можно заказать в интернет-магазине из Китая):

  • GPS модуль NEO-6M
  • ЖК дисплей
  • Магнитометр HMC5883
  • Акселерометр ADXL335

Корпус для направлятора

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ

П О П У Л Я Р Н О Е:

Что делать, если наседка ко времени не подоспела? Да и количество получаемого молодняка не всегда устраивает, а серийные инкубаторы дороговаты.

Выход один: попытаться смонтировать самому.

Камерой для упрощенной модели инкубатора могут по­служить обыкновенные картонные коробки, оклеенные внут­ри и снаружи слоями плотной бумаги, деревянные каркасы, обшитые с обеих сторон фанерой или пластиком, заполнен­ные внутри и между стенками стекловатой, сухими опилка­ми, пенопластом. Подробнее…

Управление скоростью вращения двигателя на LM3578

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

Парогенератор для душевой кабины своими руками

У кого нет возможности построить свою баню, а попариться очень хочется, то можно установить в душевую кабину или ванную комнату парогенератор. Купить парогенератор довольно дорогое удовольствие (стоит дороже кабинки :), а вот как сделать парогенератор своими руками я вам расскажу в этой статье. Подробнее…

Источник

RTKLib – Сантиметровая точность GPS/ГЛОНАСС в пост-обработке

К сожалению, я не нашел на Хабре упоминаний о замечательной библиотеке для обработки сырых измерений – RTKLib. В связи с этим рискнул написать немного о том, как с её помощью можно получить сантиметры в относительной навигации.
Цель простая – обратить внимание общественности.

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

Итак, процесс в общем виде выглядит следующим образом:

Допустим, у нас есть два ГЛОНАСС/GPS приемника, с которых мы умеем получать сырые измерения (raw data). Сырыми они называются потому, что являются первичным материалом для обработки – псевдодальности, доплер, фазовые измерения…
С помощью утилиты STRSVR из состава библиотеки RTKLib нам необходимо записать два потока данных – один от базовой станции, которая будет неподвижно стоять, и второй – от ровера, который планируем перемещать. Запись от базы желательно стартовать заранее, минут за 10-15 до записи ровера.

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

1) Настраиваем Input – Serial обоих ноутах, это поток от GNSS приемника.

2) Output – File, это будет у нас файл сырых измерений.

3) Пускаем базу на запись – Start и неторопливо идем на открытую местность.

Для небольшой демонстрации распечатал лист А4 с буквой H, которую хотел обвести антенной, точнее основанием под установку на штатив. Антенна TW3440 производства Канадской компании Tallysman с заказной подстилающей поверхностью 30х30 см.

4) Располагаемся на мостовой, ставим ровер на запись и пытаемся медленно обвести буковку. Хоть на ровере стоит частота выдачи 5Гц, лучше уж все сделать тщательно.

5) По окончанию обводки сворачиваемся и идем смотреть что получилось.

6) Скидываем оба файла на один компьютер и приступаем к обработке.

7) Первое – надо из сырых данных получить стандартные RINEX файлы. В этом нам поможет RTKCONV:

8) Указываем путь к файлу с сырыми данными, а так же папку, куда программа поместит RINEX, формат сырых данных, в моем случае это NVS BINR и в настройках ставим галочки GPS и GLO, остальное можно не трогать.

Читайте также:  Как сделать снегозадержатель для крыши своими руками

9) Жмем Convert и получаем файлы для ровера и потом для базы, лучше их расположить в соответствующих папках Base и Rover.

10) Далее самое интересное – пост-обработка. Открываем утилиту RTKPOST.

11) Жмем Options, вкладка Settings 1, в настройке режима указываем Kinematic для обработки относительных измерений. Ставим галочки GPS и GLO, можно потом поиграться с настройками.

12) Вкладка Output – можно выставить формат выходных данных, например NMEA.

13) Важный момент – вкладка Positions, тут надо указать координаты базовой станции, либо взять их из заголовка, либо путем усреднения за период записи. Чем точнее знаем координаты базы тем точнее будут абсолютные координаты ровера.
Для примера укажем RINEX Header Position – взять из заголовка файла.

14) Нажимаем ОК и переходим в основное окно, там в поле Rover указываем путь к RINEX файлу ровера, ну и для базы путь к соответствующему файлу. Нажимаем Execute и ждем результат. После обработки можем посмотреть результат, нажав на Plot.

15) Внизу из рисунка видно, что решений с сантиметровой точностью получено 97.3%, остальное — это плавающее решение, точность которого значительно хуже.

На этом пока все.

Если кому будет интересно, могу написать как реализовать RTK режим.

Так же неплохо бы узнать ваше мнение: в каких не очевидных приложениях можно использовать решения с сантиметровой навигацией?

Источник

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 нужно послать следующие команды:

В результате, при наличии соединения, получим ответ от сервера. То есть, фактически, мы уже умеем отправлять данные о координатах, если сервер принимает их по 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

Литература

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

Для компиляции кода для ардуино нужно импортировать библиотеку tinygps.

Источник

Оцените статью