Простой GPS навигатор своими руками
Во многих современных телефонах есть GPS, но для работы навигатора необходима подгрузка карт через интернет, что в дали от GSM вышек является проблемой. Также большая проблем — это быстрый разряд аккумулятора смартфонов, особенно в холодное время года. За раз путешественник остаётся не только без навигации, но и без связи. Иметь с собой независимое навигационное устройство будет очень кстати. Подобное устройство и будет предлагаться в статье, ниже.
Цель данного устройства заключается в том, чтобы указать в каком направлении двигаться и показать оставшееся расстояние до точки, к которой нужно придти. Путешественнику нужно перед выходом сохранить контрольную точку, к которой хочет он вернуться. После этого стрелка будет указывать на место отправления и цифрами указываться расстояние. Конечно, необходимо чтобы спутники «ловились» и координаты текущего местоположения определялись.
Схема самодельного навигатора
Схема строится на микроконтроллере ATMega64 с тактированием от внешнего кварцевого резонатора на 11,0592 МГц. За работу с GPS отвечает NEO-6M от U-blox, это хоть и старенький, но очень распространенный и недорогой модуль с достаточно точным определением координат. Информация выводится на дисплей от Nokia 3310 (5110). Еще в схеме присутствуют
HMC5883L достаточно распространенный и недорогой датчик, для общения с микроконтроллером используется стандартный I2C интерфейс.
Чип выпускается в крошечном 16-и выводном корпусе LPCC размерами 3х3 мм.
Обозначение выводов:
- 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
Корпус для направлятора
>>Скачать: прошивки и архив с файлами модели (SolidWorks + STL)<<
P.S. По просьбам пользователей обновил прошивку (по ссылке выше две прошивки), исключив из схемы акселерометр и магнитометр. Теперь по нажатию на кнопку S1 будет выводится информация о напряжении на аккумуляторе, время и дата по UTC, а также азимут — тот же компас 🙂
Источник: avrproject
ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ
П О П У Л Я Р Н О Е:
- Поговорим о солнечной электростанции.
- Импульсный металлоискатель ВИНТИК своими руками!
- Как заменить сенсорную панель своими руками?
Солнечная электростанция — современный способ электроснабжения нашего дома. Вопрос использования альтернативных источников энергии возникает у многих. И это не удивительно, ведь постоянный рост цен на электричество заставляет задумываться об этом всё чаще и чаще. Вот и встаёт вопрос: почему бы не использовать бесплатные неиссякаемые природные ресурсы — ветер, солнце, воду? Давайте сегодня поговорим об солнечной энергии, а точнее о солнечной электростанции.
Подробнее…
Импульсный металлоискатель — «ВИНТИК»
Ранее мы рассматривали металлоискатель на одной микросхеме К561ЛА7 — он предназначен для поиска более крупных металлических предметов, находящихся на небольшой глубине. Сегодня, в статье рассмотрим импульсный металлоискатель «ВИНТИК» на трёх микросхемах, предназначенный для поиска мелких металлических предметов. Он сложнее предыдущего, особенно его настройка на максимальную чувствительность, но схема не содержит программируемых микросхем, а также в ней нет дорогих и дефицитных радиодеталей. Его чувствительность в несколько раз лучше, чем у предыдущего.
Подробнее…
Не работает или плохо работает сенсор в телефоне или планшете? Одна из частых неисправностей современных сенсорных устройств — повреждение сенсорного экрана. Его ещё называют «тачскрином», просто «тачем» или «сенсором». Не стоит отчаиваться — его можно заменить самому. Стоит такая панель не дорого, намного дешевле, чем покупать новый телефон.
Подробнее…
Популярность: 3 842 просм.
GPS Tracker на ардуино своими руками / Habr
После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой 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
Скетч
Самодельный GPS приёмник для NAZA — Паркфлаер
Итак. Что понадобится?1) APM GPS+compass combo. Другими словами ГПС приёмник с компасом. Такие используются в связке с APM, с MultiWii. Я брал такой. Сразу говорю — модуль ублох в нём фейковый. Но тем не менее, он очень хорошо ловит и держит спутники.
2) Arduino Pro Mini. Желательно, типа такого — с дополнительными отверсиями с торца — земля и питание. Удобнее подключать разъём.
3) Преобразователь уровней I2C 5v-3.3v В принципе, на худой конец, можно обойтись и без него — но это делать крайне не рекомендуется. Преобразователь можно купить готовый, можно собрать на двух полевых транзисторах (или на 4 биполярных). Я собрал самодельный и запихал его в корпус приёмника (см. ниже)
4) Для удобства подключения можно присобачить разъём к ГПС комбу. Обычно комбы идут с разъёмами Микро JST 1.25.
5) FTDI или какой-нибудь подобный адаптер USB-UART, для прошивки ардуины и настройки ГПС модуля.
6) Руки от плеч и соображающая башка крайне необходимы, без них ничего не выйдет. Это НЕ пошаговое руководство, где я покажу, как провода залуживать и куда какой проводок тыкать! Минимальные знания электроники и основы работы с компьютером необходимы. Если у вас с этим не очень — купите готовый модуль от DJI и не занимайтесь экспериментами.
ДИСКЛАЙМЕР!
Всё, что вы делаете, вы делаете на свой страх и риск. Если ГПС вам нужен для профессионального использования — купите оригинальный модуль!
Ну, со страшилками закончил, перехожу к вкусняшкам.
Первое — конструкция работает! В частности, сегодня она прошла тестовый облёт, где показала себя вполне работоспособной.
Второе — цена. Комбо стоит около 20 долларов, ардуина ещё 3, конвертер — 1. Итого 24 доллара, вместо оригинальных 100.
Начинаем изготовление.
Рис.2 Модуль GPS со встроенным I2C конвертером.
Начать стоит с настройки модуля U-blox, установленного в комбе. Настройка такая — скорость 57600, частота 5 Гц, протокол — только UBX, включены пакеты — NAV-SOL, NAV-DOP, NAV-POSLLH, NAV-VELNED, NAV-TIMEUTC. Всё остальное выключено. При этой настройке не будут отображаться сигналы со спутников (NAV-SVINFO) — это нормально, они не нужны. Но для тестов можно включить, главное выключить не забыть.
Далее. Определяемся с ориентацией компаса, установленного в комбе. Нормальная ориентация — точкой вперёд по ходу движения, торцом вперед (не под 45 градусов). Перевёрнут (стоит на обратной стороне платы, там же, где все остальные детали, кроме антенны). В частности, на картинке выше — «нормальная» ориентация компаса, «вперёд» — это влево. Если ориентация не такая — придётся править код, либо, в случае с прошивкой Павла — ставить перемычки (см. рис.6)
Соединяем все детали между собой.
Рис.3 Принципиальная схема.
Схема делалась для зарубежного сайта, поэтому все подписи — на английском. Если что непонятно — задавайте вопросы.
Если не хочется возиться с впиливанием конвертера в корпус приёмника — можно купить готовый модуль, типа как по ссылкам во введении. Там на плате уже установлен стабилизатор на 3 вольта, питать плату можно только со стороны 5 вольт. Удобно, без гемора. Схема такого модуля приведена на рис.3 во врезке. Это по схеме выше будет «вариант 2». Я не искал лёгких путей, плюс, платы конвертера у меня не было (не доехала). Поэтому я сделал конвертер самостоятельно:
Рис.4 Плата конвертера
Плата сделана из кусочка текстолита, дорожки сделаны путём прорезки ножом по жирным белым линиям. Все резисторы — 10К, 0805. Транзисторы — BSS138 или TN2501, корпус SOT-23. Не самые общеупотребимые транзисторы, но найти можно. В принципе, как я понимаю, подойдут любые с низким напряжением насыщения (1,5-2V). Схема приведена выше, на общей схеме, на врезке («Mosfet-based I2C level converter»). Подключена плата в разрыв проводов SDA и SCL, с учётом напряжения (Н-сторона — это 5-вольтовый I2C, L-сторона — соответственно, 3-вольтовый). Так как провода 3.3 вольта на разъёме не было — пришлось припаяться прямо к плате (см.рис.2).
В итоге — получилось так:
Рис.5 Готовый конвертер
Чтобы приёмник можно было подключать и отключать (например, для настройки) — к ардуине я припаял разъём (см.рис.1). В принципе, можно обойтись и без этого, но так удобнее. Чтобы ничего не замкнуть на плате ардуины, на плату был наклеен кусочек каптона, а к нему уже, в свою очередь, суперклеем приклеен разъём.
Pawelsky замастырил собственную мезонинную плату, к которой припаивается ардуина. Исходники лежат на OSH Park.
Выглядит платка так: (его конвертер уровней также сделан на BSS138)
Рисунок 6. Мезонинная плата переходника от pawelsky
С железом закончили, приступаем к софту.
В данный момент в свободный доступ выложена прошивка автора pawelsky. Это, на мой взгляд, самая стабильная и оттестированная прошивка из всех. Павел плохого не делает. Рекомендую заливать именно её!
Сказанное ниже относится к открытой прошивке (не от pawelsky):
Для компиляции прошивки конвертера (ардуины) нужны будут следующие компоненты:
1) Собственно Arduino IDE
2) Библиотека AltSoftSerial
3) Библиотека I2CDevLib, из которой нужны будут только модули HMC5883L и I2CDev.
Все эти библиотеки есть в приложении, необходимо их скопировать в каталог C:\Program Files (x86)\Arduino\libraries
Далее. Для проверки можно залить тестовые скетчи. Для проверки софтового последовательного порта, к которому прицеплен ГПС-приёмник, заливается скетч-пример из библиотеки AltSoftSerial, а для проверки компаса — пример из вложения.
Рабочая прошивка компилируется и заливается в ардуину штатным образом. Никаких настроек в прошивке нет.
После прошивки алгоритм работы примерно такой: когда ардуина получает пакет от U-blox-а, она мигает светодиодиком на плате и выплёвывает пакет с данными GPS в формате назы в «железный» последовательный порт. Плюс, каждые 30 мС ардуина опрашивает компас и посылает его данные. Ну и каждые 2 секунды посылается версия модуля.
Визуально работоспособность модуля проявляется в мигающем с частотой около 2.5 герц светодиоде.
При подключении ардуины к последовательному порту на скорости 115200 бод — должны валиться пакеты, начинающиеся с «55 АА», и дальше 10 — ГПС, 20 — компас, 30 — версия.
Видео:
Включение модуля на подоконнике:
Тестовый полёт. К сожалению, видео некачественное(зато моё) — я не догадался снять по-нормальному, как коптер висит. ГПС режим включен с 10 секунды.
Зато есть видео от разработчика, там со съёмкой висения порядок:
(хорошо в Италии…..)
Видео от Павла — разработчика закрытой и стабильной прошивки адаптера:
Ссылки.
Основная тема на rcgroups:
http://www.rcgroups.com/forums/showthread.php?t=2331009
Сообщение, в котором выкладываются обновления открытой прошивки и всё такое прочее:
http://www.rcgroups.com/forums/showpost.php?p=30567232&postcount=4
Тема, с которой всё началось:
http://www.rcgroups.com/forums/showthread.php?t=2290346
Сейчас в первом сообщении этой темы можно найти всю информацию, и файл прошивки, необходимый для повторения этого адаптера.
Тут надо отметить отдельно. Pawelsky — это чел, который, собственно, и сломал протокол назы, за что ему большой респект. Его библиотека NazaDecoder используется, в частности, в проекте MinnazaOSD.
Если у вас нет цели экспериментировать — однозначно рекомендую прошивку Павла!!!
Благодарности.
Хочу сказать большое спасибо разработчикам — Luketanti и pawelsky! Особенно второму =)
Свои мысли
Лично моё мнение — адаптер надо делать на процессоре с двумя аппаратными UART-ами. Типа ATMega16, хотя бы. Но дело осложняется, что поддержки таких камней нет в Arduino IDE, за исключением Mega128/256, которые очевидно избыточны, и в огромных корпусах. Если бы кто-нибудь подсказал, как организовать поддержку ATMega16 в ардуине, с аппаратными уартами — был бы благодарен. Интернет как-то не очень в этом плане определёнен. STM32 не предлагать — обвязка тупая, и я его не знаю.
Исходники
Всё, необходимое для повторения адаптера — схемы, плата, прошивки — в архиве в приложении.
(NazaEncoder.zip)
Апдейты
1) По-видимому, есть баг в частоте передачи показаний компаса. Задал вопрос автору. Нет, всё нормально. Просто очень странно в коде было сделано разделение передачи показаний компаса по времени — приходом пакетов с ГПС-приёмника.
2) Количество тестеров увеличивается, сейчас количество людей, протестировавших адаптер, приближается к десятку. Налётано приличное количество часов, багов не обнаружено. Иногда наза не видит адаптер при старте, такое бывает. Надо дождаться фикса и передёрнуть питание коптера. В полёте адаптер не отваливается.
3) Почему-то автор прошивки принял решение убрать её из открытого доступа. То ли автор нашёл критичный баг и никому не говорит, то ли хочет продавать свои платки с прошивкой. То ли админы rcgroups удалили, непонятно. Наиболее вероятно последнее, что косвенно подтверждается комментариями. Но по-итогу — на rcgroups теперь прошивки нет. А здесь — есть =)
3а) Прошивка снова появилась, но уже в виде скомпилированного hex-файла. Что позволит её залить, но не позволит ничего поменять простыми способами. Так что, я полагаю, версия, выложенная здесь, и есть последняя доступная версия адаптера на принципах open source.
4) Luketanti анонсировал выпуск прошивки 0.3 — но пока не выпустил.
5) Обновил Arduino IDE и обнаружил неприятную вещь — прошивка перестала компилироваться, ругаясь на неизвестный тип «prog_uchar«. Поддержку этого типа выпилили из ардуины, заменив название на «const unsigned char«. Соответственно, если вы собираете прошивку в ардуине старше 1.0.5 — замените первое на второе, и всё будет ок.
Как сделать GPS-навигатор своими руками?
Несмотря на то, что сегодня на рынке можно отыскать огромное множество GPS-устройств различной ценовой категории и функциональности, не все готовы сразу купить готовое навигационное устройство и предпочитают его сделать своими руками. Нужно ли это – сказать сложно, но, без сомнения, возможно.
Собственный навигатор можно сделать двумя различными способами. Для первого понадобится самое простой мобильное устройство, GPS-передатчик и аккумулятор. Сразу стоит предупредить, что подробно его рассматривать нет смысла, так как для сборки самодельного навигатора таким способом потребуется много хлопот и времени, а самое главное – необходимо хорошо разбираться в электронике и владеть азами системного программирования – такие навыки имеются не у всех. К тому же такой навигатор сложен в использовании, посылая на спутник сообщение, он будет получать в ответ координаты, которые придется накладывать на карту.
Второй способ более простой и под силу каждому – GPS-навигатор, сделанный при помощи ноутбука. Что для этого понадобится? Во-первых, сам ноутбук, во-вторых, GPS-приемник, например, встроенный в современный мобильный телефон.
GPS-приемник подключается по любому из интерфейсов (Wi-Fi, Bluetooth или USB) у переносного ПК. Последние сегодня имеются практически у каждого, к тому же, для навигатора будет достаточно даже самого простого нетбука или планшета.
Перед подключением модуля GPS нужно позаботиться, чтобы на ПК стояло соответствующее программное обеспечение, которое будет осуществлять его поддержку. Отыскать и скачать его из интернета не составит никакого труда, так как выбор тут невообразимо большой. Некоторые программы подойдут для загородных поездок на длинные дистанции, некоторые, наоборот, для поездок по городу. Если ПК имеет доступ в интернет, можно также установить программы, предоставляющие информацию о пробках.
Подключив к ПК навигатор, нужно дождаться, пока его определит система, если потребуются дополнительные драйвера, их необходимо установить. Поиском заниматься не требуется, можно просто задать автоматический поиск в интернете. Устройство определилось – можно запускать навигационную программу и удостовериться, что устройство видно ей. Если все в порядке, самодельный GPS навигатор готов, если возникают проблемы, нужно покопаться в настройках ПО.
Стоит ли сделать навигатор своими руками или лучше его купить – решать каждому на свое усмотрение. В любом случае, и в первом, и во втором случае придется немного приложить усилий и потратить времени.
GPS трекер для машины своими руками
Преимущества мониторинга:
- постоянно определяются координаты машины;
- отслеживается график перемещения транспорта;
- анализируется скорость и расход топлива;
- данные сохраняются в течение двенадцати месяцев;
- бесплатная возможность контролировать одновременно пять приборов,
Все текущие данные выводятся на монитор смартфона или планшета в режиме онлайн.
Трекер специальное устройство слежения за автомобилем, в персональном варианте и за человеком. Работа его зависит напрямую от спутниковой связи, так как без нее устройство не может определить местоположение автомобиля. Для контроля за большим количеством объектов целесообразно подключиться к системе мониторинга.
Изготовление прибора
Каждый человек в развитых странах знает, что такое gps навигация, зачем она нужна и как ей пользоваться. В магазинах продается множество приборов, для отслеживания людей, автомобилей и даже домашних животных. Однако не все знают, что можно сделать простой gps трекер для машины своими руками.
Все гаджеты в современном мире оснащены маяком. С его помощью можно моментально определить местоположение любого объекта с высокой точностью. Хорошие модели стоят дорого, но gps маяк для авто сделать самостоятельно совсем не сложно, рассмотрим несколько способов.
Программа. Если есть смартфон, со встроенным gps-модулем, задача становится совсем простой. Требуется скачать приложение Loki в GooglePlay для работы маяка, зарегистрироваться в личном кабинете, заполнить параметры отслеживаемого устройства. Обязательно проверьте настройки часового пояса. Все, после этого телефон может работать как gps-маяк.
Gps трекер для машины можно сделать своими руками не только из телефона, для этого подойдет любое устройство, имеющее gps-модуль: ноутбук, коммуникатор.
Принцип работы везде один и тот же – устанавливаете приложение, выполнить настройки.
GPS для самоделок — лучший по соотношению цена/качество
Приспичило для всяких электронных поделок использовать GPS. Пересмотрел кучу вариантов и в итоге сформулировал пожелания:— как можно более низкая цена
— пылевлагозащищённость — чтобы можно было вкрутить в автомобиль, например
— никаких нестандартных чипов — только та начинка, на которую есть много документации
— никакого USB — только хардкор последовательное подключение, чтобы можно было использовать в простых поделках.
И ведь получилось!
Когда вы только начинаете искать подходящую железку для Arduino или какого-то другого микроконтроллера, массово лезет на глаза что-то такое:
— плата долларов за тридцать-сорок-пятьдесят, GPS припаян — и если собираешься прятать поделку, например, под капот машины — будь добр купи ещё GPS-антенну и переходник к ней за дополнительные деньги. На этом месте земноводное отрицательно трясёт головой 🙁
Другой вариант — GPS-приёмники для компьютера с USB-кабелем, они дешевле. Если вы выбираете этот вариант, то придётся выложить $20 за USB shield и надеяться, что у вас получится найти на конкретное изделие китайпрома расшифровку протокола. Ну или же подключить через USB-shield старый ненужный Android-смартфон, но тогда прощай скорость включения и здравствуй море проблем — с АКБ, включением, тормозами и пр.
И тут я нахожу на DX вот это:
Девайс изготовлен даже не в Китае, а на Тайване специализирующейся на GPS фирмой US GlobalSat, а данная модель — разработана для применения на катерах, имеет влагозащиту и даже встроенный магнит для прикрепления на крышу и присоску для установки на стёкла. Внутри — де-факто стандарт — чип SiRF Star III. И ценник у этого чуда — чуть меньше $35!
У агрегата есть 2 вариации — с USB и с последовательным портом (модель BR-355), убеждаюсь, что беру именно второе и заказываю. Пока Почта России неспешно тащит посылку, углубляюсь в документацию.
У всей «последовательной» («serial») периферии есть 2 реализации — «RS-232» и «TTL». Первая использовалась десять с гаком лет назад для модемов и мышек — там используется ток от минус N вольт до +N. В современных микроконтроллерах, в т.ч. Ардуино, используется вторая — где при передаче данных «единички» обозначаются током +5 вольт (или 3,3 вольта), а «нолики» — отсутствием тока. Начитавшись воплей «ой, а я его воткнул в Arduino, а оно не пашет!» понял, что нужен ещё конвертер TTL/RS-232. Сначала искал обычно использующийся для этих целей чип «MAX3232», а потом на пару центов дороже нашёл его уже распаянным, с коннекторами:
Заодно прикупил трёхметровый кабель-удлинитель — решил, что лучше потрошить его, а кабель GPS-приёмника пусть остаётся целым.
DX шустро отправляет заказы, дожидаемся доставки, распаковываем симпатичную картонную коробочку, полностью соответствующую фото в магазине, начинаем собирать.
(Надо отметить очень «европейский» дизайн, качество сборки и материалов. Никаких вырвиглазных светодиодов — едва заметная красная точка — и ноль люфтов и заусенцев.)
Технические подробности
Чтобы убедиться, что всё работает, сначала пробуем подключить GPS-приёмник к компу. COM-порта у меня в ноутбуке нету, зато есть переходник USB-TTL. Его и возьмём.Поскольку кабель GPS-приёмника решили не трогать, берём удлинитель и отрезаем ему достоинство коннектор-«папу». Обнаруживаем там семь разноцветных проводов, из которых нам потребуются только четыре — TX, RX, «земля» и «+5 вольт». После прозвонки мультиметром убеждаемся, что это красный (№1), жёлтый (№3), зелёный (№6) и чёрный (№2) провода. [Здесь я использую стандартные обозначения номеров контактов кабеля PS/2 (хотя это никакой не PS/2 на самом деле)]
Зачищаю контакты и насаживаю на них дюпоновские иголки. Вооружаюсь справочником и разбираюсь, в какие именно дырки девятиконтактного последовательного разъёма их совать. С TX, RX и GND разбираюсь быстро, а вот с VCC 5v возникает сложность — до того момента, пока я опытным путём не определяю, что пять вольт надо брать со входа переходника. Фиксирую иголки в коннекторе термоклеем.
Соединяю переходник с модулем USB-TTL и по миганию светодиодов понимаю, что байтики побежали.
Конструкция в сборе:
Ещё крупнее
Открываем PuTTY, выбираем COM-порт переходника и скорость 4800 baud и видим, что нам раз в секунду выплёвывают месиво GPS-данных. Поскольку «невооружённым глазом» это не понять, лезем в Гугль за первой попавшейся freeware GPS-софтиной.
Запускаем, и видим, что агрегат на подоконнике словил 11 спутников и определил координаты с погрешностью в несколько метров:
Как вы можете убедиться, дополнительное питание не потребовалось — хватает силы тока от обычного, 0,5A USB-порта — т.е. и микроконтроллер справится. При этом всё работает через полтора метра кабеля собственно GPS-приёмника и три метра удлинителя. С лихвой хватит, чтобы запихнуть микроконтроллер в салоне машины, а GPS поставить, например, над верхней кромкой лобового стекла.
Скорости полностью соответствуют заявленным в datasheet — «холодный старт» — менее минуты, «горячий» — секунда.
Итого за примерно сорок баксов у меня появился комплект, превращающий любую Arduino-поделку в более интересную штуку. Лично я буду из неё делать GPS-трекер для машины с GSM, подключением к бортовому компьютеру по OBD-II и прочими мелкими радостями.
Дополнения по просьбам комментирующих:
— русскоязычная инструкция: www.gps-info.com.ua/wp-content/downloads/manuals/receiver_dataloger/globalsat/globalsat_BR_355_BU_353.pdf Половина страниц описывает подключение к КПК с Windows Mobile, впрочем.
— ссылка крупными буквами — DATASHEET ТУТ (pdf). Вес — 62 грамма, потребляемый ток — 80мА, протокол — NMEA 0183 или бинарный. Холодный старт — 42 сек., тёплый — 38 сек., горячий — 1 сек. Частота обновления с настройками «из коробки» — 1Гц, правда, в спецификации фигурирует «reacquisition — 0.1 sec».
Многофункциональный GPSLogger своими руками. Часть 1 / Habr
// This font consists only of digits and ':' to display current time.
// The font is very based on FreeSans18pt7b.h
//TODO: 25 pixel height is too much for displaying time. Create another 22px font
const uint8_t TimeFontBitmaps[] PROGMEM = {
/*
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0x20, 0x3F, 0xFC, 0xE3, 0xF1,
0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8E, 0x82, 0x41, 0x00, 0x01, 0xC3, 0x80,
...
0x03, 0x00, 0xC0, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x30, 0x18, 0x06,
0x01, 0x80, 0xC0, 0x30, 0x00, */0x07, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3C,
0x3C, 0x78, 0x1E, 0x70, 0x0E, 0x70, 0x0E, 0xE0, 0x07, 0xE0, 0x07, 0xE0,
0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0,
0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0E, 0x70, 0x0E, 0x78, 0x1E, 0x3C,
0x3C, 0x1F, 0xF8, 0x1F, 0xF0, 0x07, 0xE0, 0x03, 0x03, 0x07, 0x0F, 0x3F,
0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xE0, 0x1F, 0xF8,
0x3F, 0xFC, 0x7C, 0x3E, 0x70, 0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07,
0x00, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF8,
0x03, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00,
0x60, 0x00, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0,
0x07, 0xFE, 0x07, 0xFF, 0x87, 0x83, 0xC3, 0x80, 0xF3, 0x80, 0x39, 0xC0,
0x1C, 0xE0, 0x0E, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x7F, 0x00, 0x3F, 0x00,
0x1F, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, 0xF0, 0x01,
0xF8, 0x00, 0xFE, 0x00, 0x77, 0x00, 0x73, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F,
0xF8, 0x07, 0xF0, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x78, 0x00, 0xF8,
0x00, 0xF8, 0x01, 0xF8, 0x03, 0xB8, 0x03, 0x38, 0x07, 0x38, 0x0E, 0x38,
0x1C, 0x38, 0x18, 0x38, 0x38, 0x38, 0x70, 0x38, 0x60, 0x38, 0xE0, 0x38,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38,
0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x1F, 0xFF, 0x0F, 0xFF, 0x8F, 0xFF,
0xC7, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x39,
0xF0, 0x3F, 0xFE, 0x1F, 0xFF, 0x8F, 0x83, 0xE7, 0x00, 0xF0, 0x00, 0x3C,
0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xFC, 0x00,
0xEF, 0x00, 0x73, 0xC0, 0xF0, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xE0, 0x00,
0x03, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3C, 0x1E, 0x38, 0x0E, 0x70, 0x0E,
0x70, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC,
0xFC, 0x3E, 0xF0, 0x0E, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
0x60, 0x07, 0x70, 0x0F, 0x70, 0x0E, 0x3C, 0x3E, 0x3F, 0xFC, 0x1F, 0xF8,
0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x06, 0x00, 0x0E,
0x00, 0x1C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0,
0x00, 0xC0, 0x01, 0xC0, 0x01, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00,
0x07, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0C, 0x00,
0x1C, 0x00, 0x1C, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0x83,
0xC7, 0x80, 0xF3, 0x80, 0x39, 0xC0, 0x1C, 0xE0, 0x0E, 0x78, 0x0F, 0x1E,
0x0F, 0x07, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xE0, 0xF9, 0xC0, 0x1D,
0xC0, 0x0F, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0xF7, 0x00,
0x73, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xE0,
0x1F, 0xF8, 0x3F, 0xFC, 0x7C, 0x3C, 0x70, 0x0E, 0xF0, 0x0E, 0xE0, 0x06,
0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0F, 0x78, 0x3F,
0x3F, 0xFF, 0x1F, 0xF7, 0x07, 0xC7, 0x00, 0x07, 0x00, 0x06, 0x00, 0x0E,
0x70, 0x0E, 0x70, 0x1C, 0x78, 0x3C, 0x3F, 0xF8, 0x1F, 0xF0, 0x07, 0xC0,
0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80 /*, 0xFF, 0xF0, 0x00, 0x00,
0x00, 0x07, 0xFF, 0xB6, 0xD6, 0x00, 0x00, 0x80, 0x03, 0xC0, 0x07, 0xE0,
0x0F, 0xC0, 0x3F, 0x80, 0x7E, 0x00, 0xFC, 0x01, 0xF0, 0x00, 0xE0, 0x00,
...
0x38, 0x38, 0xF8, 0xF0, 0xE0, 0x38, 0x00, 0xFC, 0x03, 0xFC, 0x1F, 0x3E,
0x3C, 0x1F, 0xE0, 0x1F, 0x80, 0x1E, 0x00
*/
};
//TODO Recalc offset numbers
const GFXglyph TimeFontGlyphs[] PROGMEM =
{
{ 449-449, 16, 25, 19, 2, -24 }, // 0x30 '0'
{ 499-449, 8, 25, 19, 4, -24 }, // 0x31 '1'
{ 524-449, 16, 25, 19, 2, -24 }, // 0x32 '2'
{ 574-449, 17, 25, 19, 1, -24 }, // 0x33 '3'
{ 628-449, 16, 25, 19, 1, -24 }, // 0x34 '4'
{ 678-449, 17, 25, 19, 1, -24 }, // 0x35 '5'
{ 732-449, 16, 25, 19, 2, -24 }, // 0x36 '6'
{ 782-449, 16, 25, 19, 2, -24 }, // 0x37 '7'
{ 832-449, 17, 25, 19, 1, -24 }, // 0x38 '8'
{ 886-449, 16, 25, 19, 1, -24 }, // 0x39 '9'
{ 936-449, 3, 19, 7, 2, -20 }, // 0x3A ':'
};
const GFXfont TimeFont PROGMEM = {
(uint8_t *)TimeFontBitmaps,
(GFXglyph *)TimeFontGlyphs,
0x30, 0x3A, 20 };