Как сделать gps датчик своими руками

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


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







Модуль дисплея состоит из нескольких основных компонентов, которые можно заказать на Ибэе:

  • GPS модуль NEO6M от компании Ublox (на фото)
  • Магнитометр LSM303DLHC (на фото)
  • Графический дисплей LCD5110 (на фото)
  • Кастомная печатная плата Arduino
  • Литиевый аккумулятор (на фото)

Для питания я использовал 3,7 В литий-ионный аккумулятор. Такие обычно используют для некоторых смартфонов и планшетов, они бывают разных размеров и емкости. Я припаял разъем JST2.0 для подключения аккумулятора, но какой использовать пока не решил.

Вы можете также использовать аккумуляторы типоразмера 18650.
Я купил зарядное устройство на 1А для литий-ионных аккумуляторов с USB разъемом. К нему я прикрепил коннектор JST2.0 для заряда этих аккумуляторов.

Внимание! Стандартный USB порт на компьютере выдает только 0,5 А, поэтому процесс заряда от компьютера будет идти дольше. Заряд займет меньше времени, если использовать источник питания на 1 или 2А, например, USB-адаптер переменного тока.

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

Скетч для автотрекера: файл ArduinoCarTracker.zip

CALIBRATE (Калибровка): эта программа аналогична программе Serial Calibrate в Примерах, но вместо отображения последних считанных данных, она отображает на LCD5110 дисплее максимальные и минимальные считанные данные с каждой оси магнитометра. Эти значения можно использовать для калибровки указания курса и примера маршрута, проведя акселерометр LSM303 через все возможные координаты.

Я изменил программу так, чтобы максимумы и минимумы выводились на дисплей. Запустите программу на модуле трекера. Запустите программу, и медленно и аккуратно поворачивайте и наклоняйте модуль во всех направлениях. Запишите максимумы и минимумы, отображенные на дисплее, и вставьте их в программу, заменяя значения в следующих строках:
compass.m_min = (LSM303::vector)<-433, -600, -546>;
compass.m_max = (LSM303::vector)<+570, +488, +579>;
это должно повысить точность компаса.

Когда я качал обновления для Arduino, мне пришлось обновить также библиотеки Adafruit_GFX и Adafruit_PCD8544. Вот ссылки:
Adafruit_GFX
Adafruit_PCD8544
Резюме скетча автотрекера:

Кроме функций setup и loop, я прописал шесть функций:

void setSetPoint(); // установка SetPoint, сохранение координат широты и долготы в EEPROM
void getGPS(); // получение текущих данных GPS
void calculate(); // вычисление дистанции и направления
int getHeading(); // получение данных направления с компаса
byte getPostion(int); // вычисление позиции с помощью направления
void displayDirection(); // выводит данные на дисплей
Блок команд setup() — считывание в EEPROM заданных координат, запуск GPS, компаса, запуск дисплея.
Блок цикличных команд loop() – получение текущих координат с GPS, высчитывание расстояния и направления до заданной точки, вывод на дисплей значения расстояния и стрелки, показывающей направление.
Другие программы для Arduino:
Compass: простой компас, указывающий на север и показывающий направление на дисплее.
GPStoLCD: вывод GPS координат на дисплей.

Возможные варианты доработки:
Многие люди оставляют машины в многоуровневых паркингах. GPS может отображать на экране данные высоты.
Корпус для модуля джипиэс трекера.

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

Уровень сложности исполнения:
Не просто.

Модуль трекера машины: модуль GPS должен моргать/мигать, это значит, что он работает. При составлении программы я оставляю трекер подключенным к компьютеру, чтобы посылать на последовательный монитор сообщения, например, GPS координаты, чтобы убедиться, что они отображаются верно. Также нужно вывести на последовательный монитор расстояние и направление, также чтобы проверить правильность отображения. Если все отображается верно, выводите их на LCD5110-дисплей.

Время работы аккумулятора: время работы можно увеличить, если убрать диод с модуля GPS.
Заключение: трекер работает нормально. Я редко использую его, потому что он достаточно объемистый и я забываю нажать кнопку выходя из машины.

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

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой GPS-tracker с отправкой координат по GPRS на сервер.
Используется Arduino Mega 2560 (Arduino Uno), SIM900 — GSM/GPRS модуль (для отправки информации на сервер), GPS приёмник SKM53 GPS.

Всё закуплено на ebay.com, в сумме около 1500 р (примерно 500р ардуина, немного меньше — GSM модуль, немного больше — 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 модуль — SIM900. Он поддерживает GSM и GPRS. Ни EDGE, ни уж тем более 3G, не поддерживаются. Для передачи данных о координатах это, вероятно, хорошо — не будет задержек и проблем при переключении между режимами, плюс GPRS сейчас есть почти везде. Однако, для каких-то более сложных приложений этого уже может не хватить.

Модуль управляется также по последовательному порту, с тем же уровнем — 5V. И здесь нам уже понадобятся и RX, и TX. Модуль — shield, то есть, он устанавливается на ардуину. Причем совместим как с mega, так и с uno. Скорость по умолчанию — 115200.

Собираем на Mega, и тут нас ждет первый неприятный сюрприз: TX пин модуля попадает на 7й пин меги. На 7м пину меги недоступны прерывания, а значит, придется соединить 7й пин, скажем, с 6м, на котором прерывания возможны. Таким образом, потратим один пин ардуины впустую. Ну, для меги это не очень страшно — всё-таки пинов хватает. А вот для Uno это уже сложнее (напоминаю, там всего 2 пина, поддерживающих прерывания — 2 и 3). В качестве решения этой проблемы можно предложить не устанавливать модуль на ардуину, а соединить его проводами. Тогда можно использовать Serial1.

Итак, пишем примитивный код для проброса данных между последовательными портами, отправляем atz, в ответ тишина. Что такое? А, case sensitive. ATZ, получаем OK. Ура, модуль нас слышит. А не позвонить ли нам ради интереса? ATD +7499… Звонит городской телефон, из ардуины идет дымок, ноутбук вырубается. Сгорел преобразователь Arduino. Было плохой идеей кормить его 19 вольтами, хотя и написано, что он может работать от 6 до 20V, рекомендуют 7-12V. В даташите на GSM модуль нигде не сказано о потребляемой мощности под нагрузкой. Ну что ж, Mega отправляется в склад запчастей. С замиранием сердца включаю ноутбук, получивший +19V по +5V линии от USB. Работает, и даже USB не выгорели. Спасибо Lenovo за защиту.

После выгорания преобразователя я поискал потребляемый ток. Так вот, пиковый — 2А, типичный — 0.5А. Такое явно не под силу преобразователю ардуины. Нужно отдельное питание.

Для получения страницы по определенному 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.

Экспресс среди ивентов: TechTrain прибывает на IT-платформу


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

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

Второй способ более простой и под силу каждому – GPS-навигатор, сделанный при помощи ноутбука. Что для этого понадобится? Во-первых, сам ноутбук, во-вторых, GPS-приемник, например, встроенный в современный мобильный телефон.

GPS-приемник подключается по любому из интерфейсов (Wi-Fi, Bluetooth или USB) у переносного ПК. Последние сегодня имеются практически у каждого, к тому же, для навигатора будет достаточно даже самого простого нетбука или планшета.

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

Подключив к ПК навигатор, нужно дождаться, пока его определит система, если потребуются дополнительные драйвера, их необходимо установить. Поиском заниматься не требуется, можно просто задать автоматический поиск в интернете. Устройство определилось – можно запускать навигационную программу и удостовериться, что устройство видно ей. Если все в порядке, самодельный GPS навигатор готов, если возникают проблемы, нужно покопаться в настройках ПО.

Стоит ли сделать навигатор своими руками или лучше его купить – решать каждому на свое усмотрение. В любом случае, и в первом, и во втором случае придется немного приложить усилий и потратить времени.

Читайте также:
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Adblock
detector