- Простой GPS навигатор своими руками
- Схема самодельного навигатора
- Печатная плата навигатора
- Корпус для направлятора
- ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ
- П О П У Л Я Р Н О Е:
- УВЕЛИЧЕНИЕ КРЕПОСТИ СПИРТНЫХ НАПИТКОВ
- Как собрать навигатор своими руками
- GPS Tracker на ардуино своими руками
- GPS приемник
- GSM приемник/передатчик
- Сервер
- Полевые испытания
- Выводы
- Использованные устройства
- Литература
Простой GPS навигатор своими руками
Во многих современных телефонах есть GPS, но для работы навигатора необходима подгрузка карт через интернет, что в дали от GSM вышек является проблемой. Также большая проблем — это быстрый разряд аккумулятора смартфонов, особенно в холодное время года. За раз путешественник остаётся не только без навигации, но и без связи. Иметь с собой независимое навигационное устройство будет очень кстати. Подобное устройство и будет предлагаться в статье, ниже.
Цель данного устройства заключается в том, чтобы указать в каком направлении двигаться и показать оставшееся расстояние до точки, к которой нужно придти. Путешественнику нужно перед выходом сохранить контрольную точку, к которой хочет он вернуться. После этого стрелка будет указывать на место отправления и цифрами указываться расстояние. Конечно, необходимо чтобы спутники «ловились» и координаты текущего местоположения определялись.
Схема самодельного навигатора
Схема строится на микроконтроллере ATMega64 с тактированием от внешнего кварцевого резонатора на 11,0592 МГц. За работу с GPS отвечает NEO-6M от U-blox, это хоть и старенький, но очень распространенный и недорогой модуль с достаточно точным определением координат. Информация выводится на дисплей от Nokia 3310 (5110). Еще в схеме присутствуют магнитометр HMC5883L и акселерометр ADXL335.
- SCL — вход тактирования шины I2C
- VDD — вход для подключения питания (кормится эта козявка напряжением в диапазоне 2,16-3,6 вольт)
- не используется
- S1 — дополнительное питание для портов ввода/вывода. Подключается напрямую к выводу VDDIO
- не используется
- не используется
- не исползуется
- SETP — первый вход для подключения керамического конденсатора на 0,22uF
- GND — земля
- С1 — еще один вход для подключения конденсатора. Электролитичиского или танталового на 4,7uF (другой конец конденсатора подключается к земле)
- GND — земля
- SETC — второй вход для подключения керамического конденсатора на 0,22uF
- VDDIO — вход для подключения напряжения которое будет на портах ввода/вывода
- не используется
- Выход прерывания, когда данные готовы на этом выводе появляется логическая 1
- SDA — линия данных интерфейса I2C
Печатная плата навигатора
Схема и плата спроектированы в системе EasyEDA.
Перед прошивкой контроллера рекомендую отключить GPS приемник, так как ножка RXD совмещена c линией MOSI и модуль может начать отправлять данные во время прошивки, что вызовет ошибку в загружаемой программе.
Включение и выключение устройства происходит длинным нажатием на кнопку S5. После включения и поиска спутников (при холодном старте может уйти до 10 минут или даже больше) мы можем посмотреть текущие координаты, нажав на кнопку S2.
Координаты конечной точки можно посмотреть нажав на кнопку S3.
Нажав кнопку S4 попадаем в меню сохранения точки. Сохранить точку можно двумя способами:
- сохранить текущие координаты
2. забить координаты вручную
Вводим по очереди градусы, минуты и секунды. Выбранное значение для редактирования мигает.
Вернуться в режим следования к точке можно по короткому нажатию на кнопку S5
Теперь об использовании магнитометра и акселерометра. Для расчета азимута используются данные полученные с GPS приемника, поэтому в случае если рассчитать координаты не возможно (например если спутники не видны или их мало) пропадает возможность и рассчитать направление в котором нужно двигаться, чтобы придти к точке. И первоначально моя задумка была в том, чтобы использовать магнитометр как вспомогательное средство для указания курса. Но столкнулся с некоторыми трудностями.
Во-первых. Кто знакомился с работой цифровых магнитометров знают что, точность их данных зависит от того в каком положении они находятся. Поэтому для корректной работы в любом положении необходимо использовать акселерометр, который бы давал более точную картину проекции магнитного поля на все три оси магнитометра. Возможное решение этой задачи я подсмотрел в одном журнале. но пока не осилил перенести весь расчет в Bascom (может кто-то из энтузиастов возьмется?).
Во-вторых, заметно сказывается различие магнитного склонения в разных частях Земли. Например в Поволжье магнитное склонение составляет 13°, а на другом конце страны склонение уже 11° и в другую сторону. А ведь есть еще и магнитное наклонение — когда линии магнитного поля входят или выходят под углом к горизонту, и много других факторов влияющих на показания.
Конечно, для примерного указания направления можно использовать и такие не калиброванные данные с магнитометра, но пока решил оставить эту задумку и сделал простой компас, который тоже может быть полезен. Компас включается нажатием на кнопку S1. А для того чтобы он указывал более менее правильное направление на север (точнее на северный магнитный полюс), устройство необходимо держать горизонтально. Для помощи в этом по бокам экрана бегают две черточки, которые показывают наклон в ту или иную сторону.
Осталось распечатать на 3-D принтере под устройство корпус, а пока о результатах уличных испытаний. Девайс получился очень интересным и вполне очень даже помогающим выйти к сохраненной точке. Но нужно понимать, что миллиметровой точности ожидать не следует. Ошибка определения GPS координат всего в одну секунду даст неточность определения положения в 20 метров. Также погрешность неизбежно накапливается при округлении в математических расчетах. Но тем не менее устройство даже в городских условиях плотной застройки позволило вернутся к точке с точностью в несколько метров.
Это устройство станет незаменимым помощником тем, кто любит побродить по лесу, грибникам, лыжникам, туристам и другим любителям природы!
Используемые в устройстве компоненты (их можно заказать в интернет-магазине из Китая):
- GPS модуль NEO-6M
- ЖК дисплей
- Магнитометр HMC5883
- Акселерометр ADXL335
Корпус для направлятора
ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ
П О П У Л Я Р Н О Е:
Одним из приборов-помощников радиолюбителя должен быть частотомер. С его помощью легко обнаружить неисправность генератора, измерить и подстроить частоту. Генераторы очень часто встречаются в схемах. Это приемники и передатчики, часы и частотомеры, металлоискатели и различные автоматы световых эффектов…
УВЕЛИЧЕНИЕ КРЕПОСТИ СПИРТНЫХ НАПИТКОВ
Самый простой способ увеличения крепости — это газирование! Крепость самого напитка не возрастает, а вот СО2 (углекислый газ) увеличивает скорость усвоения алкоголя в организме в несколько раз.
Но есть другой вариант увеличения крепости напитка, с помощью простой электрической схемы.
Всем знакомая ситуация: вставляем диск в DVD проигрыватель, а диск «не читается».
Две возможные причины:
1. Испорченный диск.
2. Неисправность в приводе DVD. Подробнее…
Источник
Как собрать навигатор своими руками
Сообщение vks » 19 мар 2020, 23:50
Небольшой мануал по сборке навигатора на базе RaspberryPi
Набросал в качестве памятки для себя, возможно кому-то из самодельщиков пригодится материал по сборке кастомной навигации для вездехода.
Навигатор испытан на железе:
Raspberry Pi 3 A (Быстрая и компактная версия Распберри с одним USB. Недостаток — греется при работе). Стоит на фото выше.
Raspberry Pi 4 B (Очень быстрая, греется так же как и третья версия, но имеет бОльшие размеры)
Raspberry Pi Zero W (Медленная версия Распберри, но не греется и не жрет. Подходит для софта Navit)
HDMI TFT 7″ display с емкостным сенсором (можно взять с Алиэкспресса дисплей 10 или 12 дюймов, что удобнее)
GPS приемник. Cтавлю GNSS GG1802, питание 5 вольт.
Запитана от импульсного стаба 12/5 В типа DD4012SA. Стоит sd card на 8Гб.
GPS приемник запитан от отдельного стабилизатора L7805 для минимизации помех. Подключен по UART к serial0 RPi.
TX вывод приемника подключаем через резисторный делитель 5.1/10кОм (ВАЖНО!) подключен к выводу 10 RPi (RX, GPIO15).
Я не нашел коротких HDMI кабелей для подключения RPi к дисплею. Видимо дефицит. Поэтому взял магазинный, укоротил, удалил пластик с разъема и распаял. Там около 5 витых пар в индивидуальных экранах.
Стоит иметь ввиду, что у каждой версии распберри свой разъем HDMI:
RPi 3 обычный HDMI, подойдет простой кабель
RPi 4 micro HDMI, нужен переходник
RPi Zero W, mini HDMI нужен другой переходник
Емкостный тачскрин подключается проводами к RPi по USB.
Питание планируется от бортовой сети 12В. Распберри и экран запитаны с импульсного 5В стабилизатора. GPS приемник с отдельного L7805.
Из доступного софта имеется: отечественный софт 7 Дорог от Навиком (7ways) и буржуйский Navit (последний работает напрямую с картами Garmin и мне понравился больше).
Качаем навигационный софт для ARM — 7 дорог от Навикома (сборка 1308).
https://navikey.ru/files/7w/7ways-1308/ . pi-arm.zip
Ставим на флешку дистрибутив Linux NOOBS v2.9.0.
ВАЖНО! Более новые версии Raspbian Booster не идут с 7ways. Проблема с библиотекой libcurl4. (CURL_OPENSSL_3 not found). Кто знает, как профиксить проблему, дайте знать.
Подключаем клаву. Заходим в терминал (Alt+F2, выполняем команду lxterminal)
Заходим в Interfacing Options
Включаем SSH (Для Raspberry 3 c Wi-Fi)
Включаем Serial (Login Shell — NO, Enable Serial — YES)
Проверяем работу GPS приемника:
Данные с приемника должны приходить раз в 1 секунду и быть в подобном формате:
После того, как приемник нашел спутники, пустые поля должны заполниться актуальными данными
Подключаем WiFi к Raspberry.
Подключаемся удаленно по SSH к Raspberry (для RPi3 и RPi Zero W это очень удобно — по WiFi) с помощью программы PuTTY.
На удаленном компе расшариваем средствами Windows папку, к примеру, RaspberryPi.
В нее кидаем 7ways и карты в папке 7ways/maps.
Создаем пустую папку share
Монтируем на распберри нашу расшаренную папку с софтом
>sudo mount.cifs //192.168.178.xxx/RaspberryPi /home/pi/share/ -o user=
Проверяем что данные видно:
Далее копируем содержимое на флешку:
Далее заходим в папку с 7ways
Если работаем удаленно по SSH, то перед запуском делаем экспорт дисплея
> export DISPLAY=:0.0
После запуска программы с помощью сенсорного экрана (или мыши) заходим в Satellites
Ставим галку Use Port
Подключаем клаву к Raspberry. В поле PORT пишем /dev/ttyS0 (в ряде случаев может подойти /dev/ttyAMA0)
В поле SPEED 9600
Берем Гарминовские карты. Открываем в GPSMapEdit 2.1.
Заходим в Свойства Карты -> Уровни. Записываем себе таблицу уровней Level0-Level5.
Конвертируем карту в Польский формат .mp — Файл->Сохранить как
Ставим себе утилиту для конвертации карт в формат 7w — 7WaysConv
В папке с утилитой редактируем текстовый файл layers.dat согласно таблице уровней см. выше.
Выбираем карту в Польском формате .mp . Выбираем файл с конфигой config_with_layers.cfg
Конвертируем.
Копируем карту 7W в папку 7ways/maps
>cp share/gmapsup2.7w 7ways/maps/gmapsup2.7w
Перезапускаем 7ways. Проверяем отображение карты. Готово.
1. Отрисовка ландшафта 7ways не самая точная. Город и дороги рисует хорошо.
2. На RPi Zero W программа жутко тормозит. Поэтому только RPi 3, 4
3. Внутри корпуса качество приема GPS сигнала оставляет желать лучшего, попробую данную панель с внешней GPS антенной. К тому же стоять он будет под металлическим потолком.
Позже сдлаю схему подключения и мануал по программе Navit.
Источник
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.
Источник