GPS-трекер для машины. Как установить маячок для слежения за автомобилем без абонентской платы

Авто 21.06.2019
Авто

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

Для работы в сетях мобильной связи используются GSM модули, которые потребляют достаточно много энергии, если модуль будет постоянно включен, заряда батарей или аккумуляторов не хватит на продолжительную работу устройства. Поэтому я решил использовать режим работы по расписанию, в устройстве установлены часы реального времени, по заданному времени устройство просыпается и включается GSM модуль для ожидания звонка или SMS сообщения. После выполнения всех задач устройство “засыпает”. Таким образом, происходит существенная экономия энергии.

На следующей картинке приведена схема GPS-GSM трекера на микроконтроллере PIC16F690:

В устройстве используется . Микросхема DD1 (PCF8583) представляет собой , с функцией будильника. Пробуждение микроконтроллера DD2 из спящего режима в заданное время происходит по прерыванию, которое генерируется на линии INT микросхемы DD1. Меняя емкость конденсатора C2* можно подстраивать ход часов.

Для определения координат используется . Плата модуля была доработана, чтобы иметь возможность включать и выключать модуль по сигналу от микроконтроллера. Изначально модуль включался сразу после подачи питания, что не подходило для меня. На плате модуля установлен стабилизатор напряжения 3,3В в корпусе SOT-23, у которого имеется вывод управляющий стабилизатором, но он подключен напрямую к линии питания. Я разрезал дорожки и освободил вывод управления для микроконтроллера. На одном экземпляре мне не удалось сохранить стабилизатор напряжения (обломался вывод), поэтому поставил другой стабилизатор, на напряжение 3В, в таком же корпусе (DA1’ – LP2981-30DBVR). В Китае можно приобрести два вида модуля: с синей платой и большой антенной, а также с красной платой и маленькой антенной.

Микроконтроллер “общается” с обоими модулями по протоколу UART, причем для GSM модуля используется аппаратный UART встроенный в микроконтроллер, для GPS модуля реализован программный UART, скорость передачи данных составляет 9600 бит/сек, модули предварительно должны быть настроены на данную скорость.

Светодиоды HL1, HL2 индикационные, когда микроконтроллер находится в рабочем режиме, светодиод HL1 светится, при переходе микроконтроллера в “спящий” режим, светодиод гаснет. Светодиод HL2 загорается в случае появления ошибок во время работы устройства. Светодиод HL3 отображает состояние GSM модуля.

Имеется два основных режима работы: режим ожидания и режим маяка. В режиме ожидания устройство просыпается по заданному расписанию и ожидает входящего вызова, при обнаружении звонка устройство выполняет сброс вызова на второй по счету “гудок” и продолжает сбрасывать еще в течение 20 секунд, далее определяет координаты и высылает их в виде SMS сообщения абоненту, от которого поступил звонок. Время ожидания входящего вызова можно настраивать. В режиме маяка устройство периодически просыпается через заданный интервал времени, определяет координаты и высылает их абоненту.

После первого включения по умолчанию активен режим ожидания, для включения режима маяка, на устройство необходимо отправить SMS сообщение с текстом GPS-STARThhmm, где hh-часы, mm-минуты которые задают период отсылки координат. Например, если требуется получать координаты каждые полтора часа, то сообщение будет иметь вид: GPS-START0130. Координаты в этом режиме отправляются абоненту, от которого поступило сообщение. Для выключения маяка и переключения в режим ожидания необходимо отправить сообщение с текстом GPS-STOP, устройство продолжит работу по расписанию.

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

При отправке сообщений нужно учитывать некоторые нюансы, дело в том, что если отправить сообщение, когда устройство “спит” (GSM модуль выключен), то при последующем включении сообщение может не сразу поступить на модуль, задержка может составлять от нескольких минут до нескольких часов, в зависимости от особенностей мобильного оператора. Для этого в устройстве реализована пауза для ожидания SMS сообщений, отсчет паузы начинается после определения и отправки координат абоненту (длительность паузы можно настраивать). Таким образом, сообщения желательно отправлять на устройство во время паузы ожидания SMS или во время ожидания входящего звонка.

Есть два варианта включения режима маяка: во время очередного пробуждения устройства выполнить вызов, после получения сообщения с координатами (во время паузы ожидания SMS), отправить SMS сообщение GPS-STARThhmm. Далее устройство перейдет в режим маяка и в следующий раз проснется через промежуток времени указанный в сообщении. Второй вариант, не выполняя вызова отправить SMS сообщение GPS-STARThhmm (во время ожидания входящего звонка), прочитав сообщение, устройство определит координаты и отошлет их абоненту, после чего перейдет в режим маяка и заснет, пауза ожидания SMS сообщений в этом случае выполняться не будет.

В процессе определения координат выполняется обновление значения часов реального времени, для компенсации ухода часов из-за неточности хода. Точное значение времени извлекается из данных поступивших с GPS модуля. Кроме этого выполняется измерение напряжения питания устройства, значение которого передается в SMS сообщении с координатами. Текст сообщения с координатами выглядит следующим образом: “5511.21316,N,06117.54100,E 4,07V”. Если координаты не были получены за определенный промежуток времени, абоненту отправляется сообщение вида: “NO KOORD 4,10V”. Время ожидания координат от GPS модуля можно настраивать.

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

Рассмотрим первый способ задания параметров, ниже в таблице приведены основные настройки GPS-GSM трекера и соответствующие адреса в EEPROM памяти:

Адрес EEPROM памяти Параметр Описание Значение по умолчанию
0x00 Часы Значение времени, которое записывается в часы реального времени при первом включении устройства (tek_time) 00 ч.
0x01 Минуты 00 мин.
0x02 Tgsm Время ожидания входящего звонка,

2 мин ≤ Tgsm ≤ 30мин

10 минут
0x03 Tgps Время ожидания координат от GPS модуля, 2 мин ≤ Tgps ≤ 20мин 7 минут
0x04 Tsms Время ожидания SMS сообщения,

2 мин ≤ Tsms ≤ 20мин

5 минут
0x05 UTC Часовой пояс

00ч ≤ UTC ≤ 23ч

00ч
0x06 Часы Время пробуждения устройства, (Будильник 1) 00 ч.
0x07 Минуты
0x7E Часы Время пробуждения устройства, (Будильник 61)
0x7F Минуты
0x80 Код Информация об ошибке, (Ошибка 1)
0x81 Месяц
0x82 День
0x83 Часы
0x84 Минуты
0xF3-0xF7 Информация об ошибке, (Ошибка 24)
0xF8-0xFC Информация об ошибке, (Ошибка 25)

Время для будильников нужно задавать последовательно по возрастанию начиная с 00:00 ч (точка отсчета), значение первого будильника не обязательно должно быть равным 00:00ч, время последнего будильника в EEPROM памяти, не должно превышать 23:59 ч. Остальные неиспользуемые ячейки EEPROM памяти должны иметь значение больше 23, (24 и более), при программировании микроконтроллера значение ячеек обычно устанавливается равным 0xFF (255).

Период времени указанный в SMS сообщении для режима маяка не должен превышать значения 23:59 (1439 минут), и не должен быть меньше 00:05 (5 минут). В противном случае период по умолчанию составит 1 час.

GPS модуль получает время по Гринвичу, поэтому необходимо задать часовой пояс, в соответствии регионом.
Всего в EEPROM памяти можно задать 61 значений времени для будильника в интервале 00:00-23:59 часов. Если параметры заданы некорректно, или вовсе не заданы, а также в случае выхода за пределы указанные в таблице, то будут использоваться значения по умолчанию.

Рассмотрим второй способ задания параметров с помощью SMS сообщения. При первом включении устройство в течение 5-ти минут читает SMS сообщения на сим-карте, в этот период необходимо отправить нижеприведенное сообщение или предварительно записать его на сим-карту перед включением:

NAST– – – – –[Будильник 1] –[ Будильник 2]–…–[ Будильник 11]

Пример: NAST0850–10–07–05–05–0900–1200–1500–1800–2100–2300

В таком варианте можно задать максимум 11 будильников, последовательность которых должна начинаться с точки отсчета (00:00 ч), как было сказано выше. После считывания сообщения все параметры переписываются в EEPROM память микроконтроллера, если операция прошла успешно светодиоды HL1, HL2 мигают три раза, после чего устройство засыпает. В дальнейшем настройки трекера можно оперативно менять, отправив SMS сообщение с новыми параметрами при пробуждении устройства (во время паузы ожидания SMS или во время ожидания входящего звонка), параметр учитываться не будет (используется только при первом включении трекера), но пропускать его нельзя.

Первоначальный запуск трекера я выполняю следующим образом: для примера возьмем расписание (12.00–15.00–18.00–21.00), параметр я устанавливаю равным 11.50, таким образом, после успешного принятия параметров, трекер проснется через 10 минут. После этого я звоню на него и получаю координаты, время трекера при этом обновляется по данным GPS, далее трекер будет просыпаться по расписанию.

Все SMS сообщения на СИМ карте удаляются, после каждой операции чтения, в целях освобождения места для последующих сообщений.

Если при первом включении микроконтроллер не сможет инициализировать GSM модуль или часы реального времени не будут отвечать на команды, то выполнение программы прекратится (критическая ошибка), при этом будет постоянно мигать светодиод HL2 “Ошибка”.

В дальнейшем при появлении ошибок, программа будет выполнятся дальше пропуская проблемный участок, при этом загорается светодиод HL2 “Ошибка”, который остается включенным после засыпания устройства, и гаснет при последующем пробуждении. Кроме этого микроконтроллер отправляет в реальном времени код ошибки по линии UART. Чтобы отслеживать ошибки с помощью компьютера (а также команды, отправленные на GSM модуль), к устройству можно подключить USB-UART преобразователь в точке TX’ на схеме. Ошибки выдаются в терминал в виде сообщения ERRxx, где xx-код ошибки. В точке RX’ можно отслеживать сообщения, поступающие от модуля к микроконтроллеру.

Кроме индикации, информация об ошибках сохраняется в EEPROM память микроконтроллера. Каждая ошибка занимает в памяти 5 байт (смотрите таблицу выше): первый байт содержит код ошибки (номер), второй и третий байты – дату возникновения ошибки (месяц, день), четвертый и пятый байты – время ошибки (часы и минуты). Под ошибки в EEPROM памяти выделено 128 байт начиная с адреса 0x80 (128), таким образом, микроконтроллер может хранить последние 25 ошибок.

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

Устройство собрано на двухсторонней печатной плате размером 49 x 62 мм, в основном на плате установлены smd элементы. Для питания я использую три пальчиковые батарейки. Все части устройства размещены внутри водонепроницаемого корпуса с размерами 85x58x33 мм (который был приобретен в Китае). В спящем режиме устройство потребляет 90-104 мкА, в режиме ожидания звонка 5,5мА, во время определения координат 60 мА. Один из экземпляров трекера работает у меня около 2 месяцев, при этом по расписанию просыпается 5 раз в сутки, время ожидания входящего звонка составляет 10 минут. Напряжение питания за это время снизилось примерно на 0,3В.

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



После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой 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

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

Разработка

Мы из тех, кто делает все и сами. Пусть долго, пусть дорого, но в таких случаях все недочеты убираем до момента выпуска, да и винить в случае неудачи никого не нужно. Основные задачи, которые стояли при разработке нового устройства – надежность, наличие акселерометра, работа с любыми устройствами по rs-232, а также, удобство и простота инсталляции для конечного пользователя (купил – поставил – пользуешься). Никаких автоэлектриков и прочих установщиков.

GSM

Из-за перебоев с поставкой Telita в Украину, выбор был сделан в пользу модуля компании Quectel M12. Модуль довольно известный и пришел на смену модулю М10. Он имеет такой же форм фактор как и Телит (SMT), удобен в диагностике неисправностей, т.к. все его выхода выведены по бокам (никакого BGA). В большинстве своем, модуль имеет абсолютно такие же (или очень близкие) характеристики к Телиту. Тут стоит отметить, что на рынке Украины практически все модули имеют одинаковые функциональные возможности с основными различиями только в среде разработке, и тут уже каждый выбирает, что он лучше знает и в чем удобней «писать». Хочется отметить про фишку М12 в виде OpenCPU , который весьма сокращает весь процесс разработки готового девайса, и крайне удобен в освоении.

GPS

Ну, тут вообще интересная история. Изначально все разрабатывалось под чип, который использовали Uranus 625r. Но в момент заказа китайцы заявили, что этот чип снят с производства, и они на все 100% уверены, что новый чип (их же производства) нас удовлетворит чуть менее чем полностью. В процессе переговоров были согласованы pin-to-pin совместимость (а это rx,tx,reset (тут особое внимание, об этом будет написано ниже), земля), этот момент был несколько раз поднят в переписке и устных переговорах. Крайне обрадовало наличие нового Sirf IV и поддержки загрузки эфемерид для работы режима a-gps. Забегая вперед, могу сказать, что если убрать довольно большое количество брака (около 10%, который слава Богу, можно отсеить на этапе сборке устройств) качество самого приемника вполне отличное.

Сборка номер ноль

Т.к. травить плату под такое устройство не очень удобно, было принято решение использовать макетную плату для первоначальной ревизии

Вот такая вот «идеальная» трассировка:

Небольшой конфуз при разработке:

Ну и основные работники крупным планом:

После отладки всех основных моментов перешли к человеческой разводке и подготовке к производству. Результат ниже (обе стороны для сравнения):

После согласования всех спецификаций плата была отдана в производство и 8 недель для изготовления первой партии были потрачены на поиск\закупку всех запчастей. Примерно через два месяца было получено первые 10 устройств:

Как обычно

После получения первых образцов, обычно, начинается самое интересное – это когда все вроде и правильно, и вроде бы тестировалось долго, а ничего не работает. Или работает, но не так. Просто не работает и уже вроде ничего и нельзя изменить.
Так и случилось. Пришедшие «волшебные» GPS модули просто «молчали». Ставим старые – все работает, прозваниваем новые – должно работать, но «лыжи не едут». Виной тому – использование reseta при первом старте, когда модуль обращается в первый раз к стеку. Китайцы с присущим им удивлением сказали, что «нужно было предупредить» и выслали мануал как вернуть все на место. После поднятия всей переписки и отсылки им, просто пообещали, что такое больше не повториться. Занавес.

ТТХ готового устройства

- старт за 2 секунды, AGPS
- sirf IV (возможность замены на glonass для РФ вариантов)
- память на 250000 точек
- адаптивный режим
- датчик удара\вибрации (акселерометр)
- режим маяка
- удаленный контроль и управление тарифными планами посредством прямых USSD команд
- работа без сервера посредством СМС
- и еще много,

Бонусы

Розничная стоимость устройства на данный момент составляет 180 у.е. Дилерские цены при определенных объемах падают до 110 у.е. На нашем сервисе абонентская плата до конца 2013 года полностью отсутствует при подключении любого количества устройств.
Как обычно, гарантия на 512 месяцев со дня покупки устройства (на АКБ не распространяется).

Я думаю каждый уважающий себя пилот понимает, что крутить головой в кабине с помощью мышки или джойстика - это как минимум неудобно, а как максимум медленно и неэффективно. Чтобы упростить эту задачу умные люди придумали такие устройства, как head tracker, которые следят за движением головы и повторяют эти движения в игре.

Ярким представителем таких устройств является TrackIR. Устройство несомненно хорошее, но дорогое... его цена составляет порядка 6-9 тыс. рублей (в зависимости от версии). Я же сегодня начну серию статей и покажу на своем примере, как собрать устройство не хуже за скромные деньги. Предварительные расходы на устройство составляют до 1.5 тыс. рублей (в моем случае вышло 900 рублей).

Что нам для этого понадобится?

1. web-камера без ИК(IR-инфракрасный) фильтра (если он есть, то будем вынимать)

2. Светодиоды инфракрасные от 1 до 4 штуки (я использую 3)

Если у Вас нету web-камеры (которую придется "сломать" в случае наличия ИК фильтра), то рекомендую приобрести камеру Playstation 3 Eye. Цена этой камеры составляет около 1300 рублей, но купить ее можно дешевле. При этом камера обладает довольно широким углом обзора, что удобно, если вы не хотите случайно выпасть из "кадра" во время боя, а так же имеет высокий показатель быстродействия (до 120 кадров/сек), что так же делает трекинг более точным.

Как купить дешевле?

Способ №1:

Купить игру EyePet для PS3 в наборе с которой идет эта камера, сейчас на яндекс.маркете (СПб) я вижу ее в продаже за 890 рублей, что в 1.5 дешевле, чем покупать ее отдельно.

Способ №2:

Купить ее б/у. Я лично так и сделал, в итоге потратив смешные 400 рублей.

Как это работает?

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

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

Пример работы (пока не мой):

Практическая часть - удаляем ИК фильтр

Удалять ИК фильтр я буду на примере камеры Playstation 3 Eye. Процедура довольно сложная, причем не из-за того, что нужны навыки особые, а тупо тяжело выковырять линзу

1. Вытаскиваем сзади затычки с помощью ножа и откручиваем 4 болтика

2. Открываем верхнюю часть корпуса. Тут ждет засада, корпус открывается очень тяжело. Если Вас беспокоит наружный вид камеры, то клипсы, которые держат корпус расположены по одной по бокам и две сверху (еще есть снизу, но они не ломаются при грубом открытии). Если же Вам, как и мне на внешность плевать, и несколько зазубринок на корпусе не пугают, то берем плоскую отвертку и грубо начинаем отжимать корпус по бокам и сверху, и только в конце снизу. При этом боковые и верхние клипсы скорее всего будут сломаны (но это не важно, камера крепко свинчивается теми четырьмя болтами, что Вы недавно открутили).

3. Откручиваем два болта снизу, чтобы снять ножку (подставку) камеры

4. Откручиваем 3 болта сверху платы и по одному с боков (нижние не трогаем)

5. Снимаем остатки корпуса

6. Аккуратно придерживая объектив, откручиваем его сзади (два последних винтика)

7. Снимаем аккуратно объектив, не задевая матрицу... не дай бог поцарапаете - может выйти из строя!

8. И тут начинается самый геморрой. Надо ножом выковырять верхнюю линзу. Место где она стояла отмечено красным заштрихованным кружком. Я для этого очень долго и нудно проковыривал канавку вокруг линзы, втыкая туда кончик ножа (лучше использовать широкий нож), после чего только смог ее вытащить, при этом повредив саму линзу... но с учетом, что мне она больше не нужна, я ее все равно выкинул).

9. После того, как линзу вытащили, собираем все это назад

10. Для того, чтобы лишний свет не мешал четко видеть ИК диоды, надо сделать фильтр. Делается например негатива (фотопленка) или магнитной части (блина) старой дискетки 3.5 дюйма. Я использовал дискету. Вырезается кружок 1.5 см в диаметре и кладется в байонет (корпус объектива) до установки объектива в корпус, либо сверху как-то приделывается.

Полученная камера будет показывать черную картинку, но если Вы возьмете пульт от телевизора, направите на камеру и нажмете какую-либо из кнопок, то Вы увидите яркую точку от ИК излучателя. Если это произошло, то все сделано отлично.

Диоды я заказал SFH485P (их не надо стачивать, они уже имеют хороший угол свечения и хорошую длину волны 880) с ebay, т.к. найти у нас их в наличии оказалось проблемой. А точнее надо ездить искать, что меня не устраивает. В итоге получу я их недели через 2-3, и тогда смогу продолжить статью с показом живых примеров...



Рекомендуем почитать

Наверх