Как сделать кпк из автомобильного навигатора. Глонасс gps трекер своими руками – защита для авто Самодельный навигатор из сотового телефона

Согласно статистике, в России ежеминутно угоняют несколько транспортных средств. Учитывая это, автолюбители вынуждены заботиться о безопасности своих машин на высшем уровне. Лучшим решением здесь будет воспользоваться благами современных технологий, которые шагнули намного дальше простых сирен.

Сегодня одним из прогрессивных методов защиты признан трекер – следящее устройство, которое позволяет наблюдать в режиме реального времени за дислокацией машины. Разумеется, от угона он не спасет, но на случай, если тот все же произойдет, выследить и вернуть машину с ГЛОНАСС GPS трекером своими руками даже без участия полиции – дело нескольких минут. Без него, в свою очередь, шансы мизерны и стремятся к нулю.

Почему возникает идея сделать ГЛОНАСС GPS трекер своими руками

Возникает резонный вопрос – почему, если эта защита столь эффективна, ею не укомплектованы все до единого автомобили? Ответ, пожалуй, очевиден – все упирается исключительно в цену прибора. Впрочем, покупка – далеко не единственный минус таких устройств:

  • Кроме стартовой цены нужно ежемесячно выкладывать определенную сумму на содержание трекера в качестве абонплаты «провайдеру» (по совместительству – и продавцу). Эта сумма не настолько велика, чтобы можно было назвать ее «неподъемной», но все же ощутима.
  • Большинство моделей нужно подключать к аккумулятору, что делает в руках умелого вора беззащитным не только трекер, но и все, что находится внутри машины, не говоря о ней самой. Достаточно отключить источник питания в таких трекерах, и сигнал от них пропадет, открывая преступнику путь к бегству с добычей.
  • Поскольку трекеры не так хорошо распространены, большинство автолюбителей, привыкших полагаться на мнение друзей, смотрят на устройство без доверия. В то же время, зная ситуацию на рынке, некоторые производители подделывают качественные бренды, о которых в итоге создается негативное впечатление у тех, кто пытался сэкономить.

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

Преимущества ГЛОНАСС GPS трекера, сделанного своими руками

Как говорится, хочешь хорошего – делай сам. И действительно, перечень преимуществ самодельного трекера достаточно внушителен, чтобы как минимум вызвать недоумение у тех, кто купил себе это устройство в магазине:

  • Прежде всего, стоимость прибора оказывается на порядок ниже рыночной. В отдельных случаях он может выйти и вовсе бесплатным – например, если в мастерской списывают в утиль пригодные для трекера запчасти.
  • ГЛОНАСС GPS трекер своими руками будет точно соответствовать потребностям пользователя, а также может быть легко модифицирован при смене обстоятельств.
  • Самоделка наверняка не будет содержать скрытых дефектов заводского брака, которые проявляются в самый неподходящий момент.

Недостатки ГЛОНАСС GPS трекеров, изготовленных своими руками

Увы, как и у всего, у этого метода есть свои недостатки:

  • Качество устройства напрямую зависит от уровня мастера-пайщика; если тот не работал непосредственно на производстве трекеров, он может не знать некоторых тонкостей, и тем самым «завалить» работу, независимо от того, сколько труда и умений в нее вложено.
  • Гарантии на самоделки по понятным причинам не существует. Но важен не сам этот факт, а то, что в случае каких-либо неполадок или даже «осечке» в работе предъявить претензии можно будет лишь собственному паяльному набору.
  • Наконец, лишь самые опытные профессионалы могут понять, как изготовить ГЛОНАСС GPS трекер своими руками без готовой схемы. Готовых решений, к сожалению, не найти в открытом доступе, а если вдруг принципиальные устройства встретятся – без навыков базового программирования там не обойтись.

Решение, избавляющее от необходимости делать ГЛОНАСС GPS трекер своими руками

Существует выход, который позволяет избежать всех вышеописанных неприятностей – приобрести прибор инновационной модели, в которой были устранены недостатки предшественников.

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

  • ГЛОНАСС GPS трекеры, сделанные своими руками, обычно довольно громоздки и неуклюжи на вид. Но наше устройство помещено в изящный миниатюрный корпус размером немногим больше пластиковой банковской карточки.
  • Как и в случае с самодельными приборами, никакой абонплаты прибору не потребуется – содержать нужно только СИМ-карту, которую перед началом работы следует вставить в устройство. При выгодно подобранном тарифе траты могут становиться совсем символическими, вплоть до совершенно бесплатного обеспечения.
  • Аккумуляторы – важный фактор любой модели следящего устройства; энергоемкий ГЛОНАСС GPS трекер своими руками сделать не удастся никому хотя бы по той причине, что для коммутации с подходящими аккумуляторами нужно лабораторное оборудование. Но и подключать, как устаревшие платные модели, к автомобильному аккумулятору этот прибор не нужно. Встроенная батарея работает рекордно долгое время – до девяти месяцев на одной зарядке.

Возможности, которых не даст ГЛОНАСС GPS трекер, изготовленный своими руками

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

  • Прежде всего, мобильность и малые габариты дают возможность следить за машиной совершенно незаметно и без предварительных монтажных работ. Этим охотно пользуются различные транспортные компании для того, чтобы отслеживать маршруты подведомственных юнитов, а заодно проверять водителей в вопросах расходов ГСМ.
  • ГЛОНАСС GPS трекер своими руками – это хобби, но когда дело доходит до профессиональных вопросов вроде промышленного шпионажа, эксперименты неуместны. Между тем, тайная слежка за кем бы то ни было – от частных лиц до целых корпораций – это один из самых распространенных способов применения маяка. Достаточно спрятать его в машине, одежде или сумке исследуемого субъекта, и вы получите исчерпывающую информацию обо всех его перемещениях.
  • С помощью трекеров можно наблюдать также и за близкими. В данной модели представлена функция, которую практически невозможно реализовать собственноручно, а именно – «тревожная кнопка», расположенная прямо на корпусе прибора. Всего одно нажатие, и на ваш телефон придет «SOS-уведомление» с привязанными гео-координатами.
  • Наконец, с помощью маяка можно отслеживать даже перемещение вещей – например, посылок в почтовых компаниях или багажа в аэропортах. В последнем случае, к слову, может возникнуть немало вопросов к тому, что представляет собой произведенный ГЛОНАСС GPS трекер своими руками. Чтобы не попасть впросак, лучше пользоваться фирменными устройствами.

Закажите ГЛОНАСС GPS трекер вместо пайки своими руками прямо сейчас

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

Если вы планируете спаять ГЛОНАСС GPS трекер своими руками ради развлечения – попытайтесь, но когда речь заходит о безопасности – не стоит рисковать. Поступайте мудро и выбирайте для себя только самое лучшее.

ГЛОНАСС GPS трекер своими руками – лайфхак для избранных

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

Сделано это простым, но радикальным методом – подменой родной графической оболочки Windows CE, на оболочку от производителя устройства, которая запускается при старте Windows. С одной стороны это хорошо – удобное меню, основные функции запускаются в 1-2 клика, лепота одним словом. Но с другой стороны пользователь ограничен лишь тем функционалом, что решил предоставить производитель, возможности установить свои программы не предусмотрено. Однако, установить торжество справедливости очень просто, от вас потребуются лишь GPS-навигатор, дата-кабель, компьютер который умеет работать с Win CE устройствами в режиме Active Sync и пара минут свободного времени.

Внимание! Данная инструкция не является универсальной, но помогает в большинстве случаев. Отклонение от шагов и творческое экспериментирование могут привести ваш навигатор в неработоспособное состояние, которое можно будет вылечить только перепрошивкой. Если вы понятия не имеете зачем вам это делать – не делайте, ибо нефиг!

Итак, как говорил Гагарин: “Поехали!”:

Если, что-то не понятно, то вот картинка где все необходимое выделено:

Главное ничего больше не трогайте, в противном случае шанс получить полудохлый кусок железа весьма велик.

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

З.Ы. Ни в коем случае! Слышите? Ни при каких обстоятельствах! Даже будучи в хлам пьяными, обкуренными, уколотыми (нужное подчеркнуть), не устанавливайте пароль на Windows. В том числе и в целях посмотреть, что получится!

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

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой 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
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 based GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

Приемник выдает следующие данные:

  1. Координаты – широту, долготу и высоту точки, в которой находится
  2. Время по гринвичу – часы, минуты, секунды
  3. Общее число спутников, обнаруженных приемником
  4. Число спутников, с которых принимается сигнал.

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

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

Модуль ЕВ-500 прекрасно подходит для мобильных приложений, так как имеет небольшие габариты и малое потребление тока.

Точность координат зависит от числа спутников, сигнал с которых поступает на модуль, их должно быть не менее 3.

Для обнаружения спутников модуль использует 66 каналов, при этом, если антенна пассивная, потребляет 28 мА. После обнаружения спутников число каналов и, следовательно, потребляемый ток уменьшаются.

Напряжение питания от 3 до 4.2 вольт.

Связь с модулем – по двум равноценным UART.

Выводы UART - TX0,RX0 и TX1,RX1.

На вывод GPS status подключен через резистор светодиод. Пока связь со спутниками не установлена на выходе логическая 1-светодиод горит постоянно, при обнаружении спутников мигает с частотой 1 Гц. После отладки схемы его можно снять.

Вывод V_RTC_3V3 – на этот вывод необходимо подать питание, без этого модуль не запустится. Можно соединить с питанием модуля, но лучше подключить стандартную литиевую батарейку типа CR на 3 вольта, тогда все настройки сохранятся в памяти модуля и после отключения приемника. Потребление RTC всего 1 мкА, так что батарейки хватит надолго.

Питание подается на вывод VIN_3V3.

Антенна подключается на вывод RF_INPUT. Дорожка, соединяющая вывод модуля с фидером антенны должна быть как можно короче с земляным полигоном по бокам. У меня антенна пассивная

35*35 с полигоном под ней 70*70. Запустилась без проблем даже в тумане на лесной поляне. И точность весьма приличная.

Хорошая активная антенна дорого стоит, хороший МШУ вещь не из дешевых. Дешевая китайская антенна, в условиях сильных помех показала себя хуже пассивной, как видно там усилитель не совсем малошумящий. Кроме того питается она от 3,3 вольт минимум, а с модуля подается в линию

2,8 В. Поэтому надо отсекать конденсатором постоянное напряжение на выводе RF_INPUT, вскрывать антенну, заводить внешнее питание - много мороки.

Антенну не стоит размещать рядом с модулем, чтобы шумы от модуля не мешали.

Это на карту GOOGLE нанесены координаты измеренной точки. Расстояние от стенки дома до воды метров 10. Мы с приемником стояли метрах в трех от воды.

После того, как модуль будет распаян на плате, подключено питание VIN_3V3 и V_RTC_3V3, антенна и по свечению светодиода вы убедились, что все у вас работает - надо проверить скорость обмена UART. Это необходимо для программирования USAR(синхронно асинхронный приемопередатчик) микроконтроллера.

Соедините RX1,TX1 или RX0,TX0 через MAX3232(работает от 3 вольт) с COM портом компьютера. Для USB можно спаять переход на FT232RL -недорогая надежная микросхема с драйверами для всех ОС. У меня заработала сразу без проблем.

Проверьте скорость, на которой отзовется модуль, по даташиту это 9600 у меня заработал на 115200. Если не отзовется – перебирайте скорости. Сигнал для этого не обязателен – светодиод может и не мигать. Я пользуюсь терминалом в CVAVR или программой Terminal v1.9b бесплатная и очень удобная.

Обмен происходит по протоколу NMEA 0183.

Обвязка ATMEGA 16 стандартная. Вывод REZET подтянут к питанию резистором 10 кОм. Тактовая частота задается кварцевым резонатором 7.3728 мГц. Питание на АЦП микроконтроллера подается через LC фильтр - дроссель 10 мкГн, конденсатор 1 мкФ. Вывод источника опорного напряжения АЦП AREF соединен с выводом питания АЦП. Разъем для программатора на схеме не показан. К порту B подключен LCD дисплей WH1604B - 4 строки по 16 символов. Подстроечным резистором R2 20 кОм регулируется контрастность. Кнопка на подсветке тактовая с целью экономии заряда аккумулятора.

Между UART модуля и USART микроконтроллера в качестве гальванической развязки установлена микросхема ADUM1201. Максимальная амплитуда импульсов от модуля, если смотреть осциллографом не больше 2,8 В. Микроконтроллер воспринимает импульс, как единицу от 2.5 В. Микросхема поднимет амплитуду импульса до 5 вольт - величины напряжения питания микроконтроллера. Во избежание сбоев ADUM лучше поставить.

AT24C128 микросхема электрически стираемого и программируемого постоянного запоминающего устройства (ЭСППЗУ) с интерфейсом шины I2C – память приемника, где и будут храниться данные всех 200 точек, но об этом позже. Выводы CDL –синхронизации последовательной связи и CDA -последовательной передачи данных и адреса должны быть подтянуты к питанию резистором 4.7-5.1кОм. Вывод WP- защита от записи соединен с GND. Выводы A0,A1- выводы адресации используются, если на шину подключены несколько микросхем, возможны 4 комбинации. У нас одна микросхема, поэтому выводы A0,A1 соединены с GND – адрес равен нулю.

На операционном усилителе собран делитель. Напряжение от аккумулятора делится пополам и подается на вход АЦП микроконтроллера - бит 0 порта A, для контроля величины напряжения литиевого аккумулятора.

Клавиатура для общения с приемником собрана на тактовых кнопках. Кнопки ЧТЕНИЕ и ЗАПИСЬ – тактовые. Кнопка НАВЕДЕНИЕ – с фиксацией. Резисторы 300 Ом нужны для ограничения тока, чтобы случайно не спалить порт микроконтроллера.

Теперь о питании приемника. У меня стоит литиевый аккумулятор на 3.7 вольта, при полной зарядке примерно 4.15 В. Для питания микроконтроллера с кварцем 7.3728 мГц и дисплея WH1604 надо 5 вольт. Хотя в даташите на дисплей и стоит Vdd от 3 до 5 вольт, но при стандартной схеме регулирования контрастности и напряжении питания 3.3 вольта не видно ничего.

На модуль EB-500 желательно подавать 3.3 вольта. На микросхеме LM2623 собран повышающий импульсный стабилизатор на 5 вольт. Микросхема LM2623 разработана специально для цифровой аппаратуры, у нее низкий уровень шумов и минимум обвязки. Конденсаторы C4 и C5 установлены дополнительно для уменьшения шумов.

Питание для модуля EB-500 получаем с выхода линейного стабилизатора LP2980-3.3. Микросхема с очень низким собственным потреблением, потери на ней максимально 50 мВт, очень мало греется, а получаем стабилизированные 3.3 вольта практически без шумов.

Теперь о программе. Использован компилятор .

Протокол NMEA 0183 содержит много всякой полезной информации, но нас интересуют только координаты, время, высота над уровнем моря, число видимых и используемых спутников. Поэтому выбираем только 3 сообщения (нужная информация выделена красным):

1.$GPRMC,181057.000,A ,5542.2389,N,03741.6063,E,0.47,74.50,190311,A*51

Здесь нас интересует символ под номером 18 (отсчет начинаем с 0) это если это A то данные достоверны (есть сигнал), если V - недостоверны.

2.$GPGGA,181058 .000,5542.2389 ,N,03741.6063 ,E,1,8 ,1.34,115.0 ,M,14.6,M,*54

Отсюда берем почти всю информацию.

181058 .000 - время

5542.2389 ,N - широта

03741.6063 ,E - долгота

1 - GPS fix (0 = Данные не верны, 1 = Позиция зафиксирована, 2 = DGPS (повышенная точность))

8 - количество использованных спутников

1.34 - HDOP, горизонтальная точность

115.0 ,M - высота над уровнем моря

14.6,M - Геоидальное различие - различие между земным эллипсоидом WGS-84 и уровнем моря(геоидом)

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

3.$GPGSV,4,1, 13 ,28,65,075,17,26,53,202,37,15,50,278,17,27,39,290,24*7D

Здесь нас интересует символы номер 11 и 12.

13 - Полное число видимых спутников.

Сразу после включения приемника запускается АЦП (установкой единицы в 6 бит регистра ADCSRA АЦП микроконтроллера) для проверки уровня заряда литиевого аккумулятора. В подпрограмме прерывания по завершению преобразования АЦП забираются и суммируются 100 значений из регистра данных, а затем вычисляется среднее значение напряжения аккумулятора. Если напряжение на аккумуляторе ниже или равно 3.2 вольта на экран дисплея выводится сообщение “Аккумулятор разряжен ”. Предельное напряжение, до которого может разрядиться аккумулятор 2.7 вольта. Лучше покупать аккумулятор с контроллером заряда.

Регистр USART микроконтроллера UCSRB=0x90 это означает, что разрешено прерывание по завершению приема и включен приемник. Функция обработки прерывания по завершению приема состоит в следующем:

Данные забираются из буферного регистра UDR при условии, что (UCSRA&=0x18)==0 ,то есть в регистре UCSRA не стоит флаг ошибки кадрирования и флаг переполнения. Если приемник находится в режиме записи или чтения (переменная flag=1), то данные просто забираются из буфера приемника USART , чтобы не было переполнения буфера. Попытки отключать на это время приемник USART приводили к потере связи с модулем. Если flag=0, принятые из буфера данные анализируются. Если найдено начало строки - символ $ по коду ASCII это 36, вся строка до конца - код 13(возврат каретки) помещается в массив gps. Затем проверяем символы из gps, gps и gps, ищем сочетание RMC, GGA или GSV все остальные сообщения игнорируются. Если сообщение RMC, переменную a приравниваем к элементу массива gps, если GSV – вычисляем из символов, находящихся в gpsи gps число видимых спутников. Если это GGA переходим из функции обработки прерывания в основную программу. В программе сначала проверяем переменную а , если она равна 86 это символ V по коду ASCII - отсутствие сигнала, на дисплей выводится сообщение “Нет сигнала

Если переменная a = 65 - символ A это значит, что появился сигнал. Извлекаем из массива gps, куда помещено все сообщение GGA все интересующие нас данные. Вычисляем время, координаты, число спутников с которыми установлена связь, высоту над уровнем моря. Все эти данные плюс число видимых спутников, вычисленных в подпрограмме прерывания, помещаем в буферы для вывода на LCD, и выводим на экран дисплея. Получается вот такая картинка:

В первую строку выводится широта точки и число спутников, с которыми установлена связь, их семь. Вторая строка – долгота и число видимых спутников - 11. Третья строка – время по гринвичу и высота над уровнем моря или океана.

Для записи данных нажимаем кнопку “Запись”. Все данные сохраняются во внешней памяти микросхеме ЭСППЗУ EEPROM AT24C128 с интерфейсом шины I2C. Память микросхемы организована как 16384 слов по 8 бит в каждом. Внутренне 16384 байта памяти разделены на 256 страниц по 64 байта в каждой. Запись может производиться как побайтно, так и страницами. Для упрощения жизни выбрана постраничная запись. Адрес микросхемы один байт: три старших бита адрес AT24C он всегда 101, последний бит обозначает запись или чтение. Если ноль – запись, единица – чтение. Адресация памяти - два байта, старшие биты номер страницы младшие – номер слова в этой странице. Получается: номера страниц от 0 до 255 это 8 бит плюс номера слов в странице от 0 до 63 еще 6 бит, так что для адресации памяти надо 14 бит. Чтобы получить старший байт берем номер страницы и сдвигаем его вправо на две позиции - два старших бита обнулятся, а в шесть младших переместятся 6 старших бита адреса страницы. Затем тот же номер страницы сдвигаем влево на шесть позиций и получаем младший байт адреса, где два старших бита это два младших бита адреса страницы остальные шесть – нули. Теперь надо запомнить номер адреса внешней памяти для записываемой точки. Для этого используем энергонезависимую память микроконтроллера - EEPROM. Для ATMEGA16 EEPROM составляет 512 байт. Размещаем в EEPROM два массива eeprom unsigned char ad и eeprom unsigned char opred. Массив ad указывает на свободную страницу памяти АТ24С128, единица означает, что страница занята, ноль - свободна. Например: ad=0 означает, что страница 20 памяти АТ24С128 свободна, а если ad=1 , тогда занята. Перед тем, как записать данные во внешнюю память перебираем все элементы массива ad, инкременируя номер элемента g от 0, пока не будет найдено условие ad[g]=0. Адрес страницы внешней памяти будет равен g. Теперь запоминаем соответствие адреса страницы памяти АТ24С128 номеру запоминаемой точки. opred[номер точки]=g (адресу страницы памяти АТ24С128). Если надо стереть данные точки, то в ad[номер стираемой точки] записываем ноль, а в массиве opred перемещаем номера элементов, так чтобы, начиная от номера точки на единицу больше стираемой: opred[номер точки]= opred[номер точки-1], а номер общего числа записанных точек уменьшаем на единицу. Если же надо стереть все данные из памяти, то число записанных точек и массив ad обнуляем. При записи новых данных в память АТ24С128 старые данные стираются. Переменная nomer указывающая на общее число записанных точек так же размещается в EEPROM микроконтроллера.

Запись происходит так:

Нажимаем и удерживаем 50 мс (задержка в 50 мс – защита от дребезга контактов установлена на всех кнопках) кнопку “ЗАПИСЬ”. На экран дисплея в первую строку выводится: “ T очка:(№точки)” номер точки, записанной в EEPROM микроконтроллера при этом инкременируется . Если номер точки больше 200, появляется сообщение “ Память занята ” и приемник выходит из режима запись. Во вторую строку надо ввести с клавиатуры название точки до 16 символов из цифр и строчных букв русского алфавита. Принцип ввода такой же, как в мобильном телефоне: нажимать на кнопку клавиатуры, пока не появится нужный символ. При ошибке набора стирается символ решеткой. Выводы клавиатуры подключены к битам 3,4 , 5 порта D и к битам 2,3,4,5 порта C. Биты порта D сконфигурированы как выходы, биты порта C как входы с подтяжкой. На биты порта D с частотой 5мс подается низкий уровень и при этом считывается значение битов порта С. Например если на PIND.3 подан ноль и логический ноль появился на PINС.2 значит, активна кнопка К4 – 3дежз. Кнопка активна 2.2 секунды - 16 битный таймер T1 запускается с частотой 28800 Гц при появлении нуля на соответствующем бите порта C. При переходе таймера через значение 65535 генерируется прерывание и программа переходит в функцию обработки прерывания по переполнения таймера. Если до истечения 2.2 секунды стала активна другая кнопка, то, как и в случае переполнения таймера - таймер останавливается, а все значения, набранные на ранее активной кнопке, обнуляются. После набора названия точки - нажимаем *. В третью строку выводиться сообщение “Текущая точка? ” Если надо запомнить точку, определяемую приемником в данный момент времени нажимаем *, на дисплей выводится сообщение “Точка записана ” и приемник выходит из режима запись. Если вводятся координаты с карты, тогда нажимаем #, на экране выводится запрос “Широта? ” Вводим координаты широты восемь цифр без точек - 49˚52"16.54" вводятся, как 49521654 затем нажимаем *, выводится запрос “Долгота? ” так же вводится и долгота, вместо 36˚18"51.57" - 36185157 и затем *.

На дисплей выводится сообщение “ Точка записана ” и приемник выходит из режима запись. При записи координат с карты значение высоты не записывается и при чтении координат этой точки высота равна нулю. Запись в EEPROM AT24C128 постранично происходит так:

  1. Формируется условие старта – переход из высокого в низкое состояние на выводе SDA при высоком уровне на выводе SCL.
  2. Передается байт с адресом микросхемы 10100000 последний бит 0 – запись.
  3. Предается первый байт адреса памяти, затем второй байт адреса памяти.
  4. Передаются байты данных, адреса слов в странице при этом инкременируются. Изменения на выводе SDA происходят, когда на выводе SCL низкий уровень.
  5. Формируется условие останова – переход из низкого в высокое состояние на выводе SDA при высоком уровне на выводе SCL.

Для чтения данных из памяти приемника надо нажать кнопку “Чтение” (при этом с 7 бита порта C считывается логический ноль) и на дисплей выводится: “ Точка: ”. Набираем номер точки координаты, которой хотим прочитать, и жмем *. На экран выводятся координаты нашей точки. При вводе номера точки в режиме чтения, на клавиатуре доступны только цифры. Если вводится число номер, которого превышает число записанных точек - выводится сообщение “Нет данных ”, затем возвращается сообщение: “ Точка: ”. Если в памяти прибора нет сохраненных данных, то при нажатии на кнопку “Чтение” выводится сообщение “Нет данных ” и прибор выходит из режима чтения. Читаем из EEPROM AT24C128 так: стартовые, стоповые условия и адресация такие же, как при записи. Адрес, по которому записаны координаты считываемой точки (в программе номер этой точки обозначен переменной nomer_1) находим в массиве opred EEPROM микроконтроллера. Старший байт адреса будет opred>>2, младший opred<<6. Только после передачи второго байта с адресом памяти посылается байт с адресом микросхемы 10100001, где последний бит 1 – чтение. В программе чтение идет побайтно, сначала считываются байты с названием точки. Считывается байт, по номеру кода в считанном байте определяется строка, содержащая код знакогенератора LCD модуля и символ соответствующий этому коду выводится на экран, затем младший байт адреса памяти инкременируется. Так выводятся 16 символов названия точки. Затем считываются байты с данными широты, долготы и высоты точки. После считывания очередного байта младший байт адреса памяти инкременируется. Все считанные параметры помещаются в буферы для вывода на LCD и выводятся на экран дисплея:

Листать данные можно по возрастанию номеров точек цифрой 2 на клавиатуре, по убыванию нулем. Выход из режима чтения #. В режиме чтения данные можно стереть по одной точке или все разом. Выводим на экран точку, данные которой надо стереть и нажимаем *. В конце первой строки появляется “ Стр? ” Для подтверждения *, если нет - #. Если надо стереть все данные, тогда последовательно нажимаем *, появляется “ Стр? ” , жмем на 1, вместо “ Стр? ” появляется “ Все? ” если подтверждение - *, нет - жмем на #. При стирании в массив EEPROM микроконтроллера - ad, указывающим на свободный адрес страницы в памяти AT24C128 записывается ноль в элемент, с номером равным адресу страницы в AT24C128 стираемой точки. Данные из этой страницы стираются при записи в нее других данных, поэтому не стоит отключать приемник в режиме запись, пока не появится сообщение “ Точка записана ”.

В приемнике предусмотрен режим наведения. В этом режиме определяется расстояние и истинный азимут от точки, в которой находится приемник до любой точки, выбранной из памяти приемника. Для перевода приемника в режим наведения нажмем кнопку “Наведение” при этом со второго бита порта D считывается логический ноль. На экран дисплея выводится запрос “Точка: ” необходимо ввести номер точки расстояние и азимут, до которой будет вычисляться, и нажать *. Координаты этой точки помещаются в массив kr размещенный в EEPROM микроконтроллера. На экран дисплея выводится номер и название точки, затем выводится сообщение “Наведение ” и экран дисплея приобретает следующий вид:

В начало четвертной строки выводится азимут (287˚1"48"), за ним расстояние до интересующей нас точки(3284 метра). Так что можно ходить по азимуту, если конечно, компас есть. Магнитное склонение – разница между магнитным и истинным азимутом указано на многих картах. Формулы, по которым вычисляются азимут и расстояние взяты из учебника по геодезии и переработанны для работы с переменной типа float. Координаты точки наведения хранятся в энергонезависимой памяти микроконтроллера, поэтому, если оставить кнопку “Наведение” нажатой и выключить прибор, то после включения прибора продолжится наведение на ту же точку. Для того, чтобы изменить точку наведения надо отжать кнопку, дождаться появления сигнала и набрать номер новой точки.

Дизайн прибора, конечно оставляет желать лучшего но что вышло, то вышло.

Что касается фьюзов, у меня запрограммированы только BODEN – включена схема сброса при снижении напряжения питания и SUT1 – управляет режим запуска тактового генератора при включенной схеме сброса. Остальные не запрограммированы, то есть равны единице.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Схема 1.
U1 ИС RS-232 интерфейса

MAX3232

1 В блокнот
EB1 GPS-модуль EB-500 1 В блокнот
D1 Светодиод 1 В блокнот
С1-С5, С12 Конденсатор 0.1 мкФ 6 В блокнот
С8 Конденсатор 100 пФ 1 В блокнот
С9, С10 Конденсатор 4.7 мкФ 2 В блокнот
С11 Конденсатор 0.01 мкФ 1 В блокнот
R7 Резистор 1 В блокнот
J1 Разьем RS-232 1 В блокнот
Antenna1 Антенный разьем 1 В блокнот
L1 Катушка индуктивности 1 В блокнот
В1 Батарея питания 3 В 1 В блокнот
Схема 2.
U2 Микроконтроллер 1 В блокнот
AD1 Микросхема ADUM1201 1 В блокнот
ОУ1 Операционный усилитель 1 В блокнот
AT1 Микросхема AT24C128 1 В блокнот
С6, С7 Конденсатор 0.15 мкФ 2 В блокнот
С13, С17 Конденсатор 0.1 мкФ 2 В блокнот
С14, С16 Конденсатор 22 пФ 2 В блокнот
С15 Конденсатор 1 мкФ 1 В блокнот
R1, R3 Резистор

20 кОм

2 В блокнот
R2 Подстроечный резистор 20 кОм 1 В блокнот
R4 Резистор

10 Ом

1 В блокнот
R5, R6 Резистор

4.7 кОм

2 В блокнот
R8 Резистор

10 кОм

1 В блокнот
Y1 Кварцевый резонатор 7.3728 мГц 1 В блокнот
L2 Катушка индуктивности 10 мкГн 1 В блокнот
DS1 LCD-дисплей WH1604B 1 В блокнот
К1 Тактовая кнопка 1