Glinco
Беспроводной хэдтрекер Тринити (Trinity)

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

Минусы очевидны:

  1. Провод все время попадает под руку, не дает просто снять шлем и положить отдельно от передатчика его без вытаскивания из разъема
  2. Разъем и сам кабель при попадании кабеля под руку постепенно повреждается
  3. Нельзя отдать шлем товарищу для втыкания в красоты полей/гор без необходимости его присутствия в полуметре
  4. Обнуление трекера делается на шлеме, что крайне неудобно! Приходится снимать руку с передатчика и в слепую искать эту кнопку.
  5. Если вы внимательно смотрели на поведение Тринити, то заметили, что угол отклонения камеры влево и вправо неравный. Исследование сигнала показало, что у Тринити нейтраль не на 1500 мс., а на 1520 мс. Отсюда и разный угол отклонения в стороны.
  6. И т.д, и т.п.

Решение тоже вроде бы очевидно – нужен радиоканал. Первая мысль – поставить обычный модуль передатчика и приемника 2.4 Ггц и решить вопрос.
Но есть нерешаемые задачи:

  1. Высокая мощность передатчика, расположенного прямо на голове.
  2. Нет возможности масштабирования поворота камеры на поворот головы (Тринити может усилить поворот камеры, а нужно ослабить).
  3. Нет контроля канала с сигналом
  4. Усложненная настройка
    Сложив все вместе, решил сделать полностью свой продукт на основе ардуины и радиомодулей nrf24l01.

Система
Итак, система состоит из двух модулей – модель шлема и модель передатчика.
Модуль шлема читаем ППМ Тринити, преобразует в цифровой код (по 2 байта на измерение Пан и Тилт) и отправляет по радиоканалу не реже 50 раз в секунду. В остальное время модуль ждет команд включения/отключения трекера и его обнуления от модуля передатчика. Если таковая поступает, модуль выполняет команду и начинает снова слать ППМ в цифре по радиоканалу.
Модуль передатчика получает пачку из четырех байт, преобразует в ППМ и отправляет на тренерский разъем передатчика. Так же модуль передатчика масштабирует угол поворота со шлема в угол поворота камеры по ПАН с коэффициентом от 10 до 100%. Кнопки на корпусе модуля позволяют менять четыре параметра:
• Включить/отключить пищалку при потере сигнала от шлема
• Масштаб по ПАН
• Центр ПАН
• Центр ТИЛТ

Комплектующие
Для реализации нужны

  1. Две ардуины
  2. Программатор к ним
  3. Ноут с Ардуино-средой
  4. Два радиомодуля nrf24l01
  5. Кусок монтажной платы
  6. Конверторы напряжения 14-5В.
  7. Конверторы напряжения 5-3.3 В.
  8. Опторазвязка минимального размера для управления трекером
  9. Провода, паяльник, руки, голова
  10. Для корпусов – свой или заемный 3d-принтер и филамент

Схемы
Модуль передатчика
Распиновка ардуины следующая:
• Радиомодуль соединяется по даташиту, сигнальные пины сидят на 9 и 10 пине ардуины
• Кнопка инициации/отключения и нейтрального положения трекера – 8 пин
• Пищалка – 7 пин
• Кнопка программирования – 6 пин
• Кнопка Больше – 3 пин
• Кнопка Меньше – 4 пин
• ППМ для передатчика – 5 пин.
Питание как положено. Радиомодуль питается отдельно от ардуины.

Модуль шлема
Распиновка ардуины следующая:
• Радиомодуль соединяется по даташиту, сигнальные пины сидят на 9 и 10 пине ардуины
• Прием ППМ-сигнала с трекера – 3 пин
• Подключение опторазвязки – 2 пин
Для реализации обнуления трекера с передатчика пришлось использовать опторазвязку, которая подпаяна параллельно с кнопкой обнуления. Долгое нажатие на кнопку обнуления на передатчике распознается модулем шлема как инициация или отключение трекера, после чего замыкается опторазвязка и трекер начинает/завершает генерить ненулевой ППМ.
Сам модуль шлема крепится в нижней части шлема с поворотом, так как дико бесила необходимость задирать голову вверх в очках Аттитьюд. Там Тринити внутри стоял горизонтально, а естественное положение головы человека – смотрящая чуть вниз.
Так как разработка экспериментальная, то модули не распихивались по передатчику/шлему, а крепились снаружи для перешивки при необходимости.

Прошивки, чертежи корпусов – дальше во вложении.
Фото плат, монтажа и конечного результата:




This site will not work without javascript!
This site will not work if cookies are completely disabled.
Site is offline
  • 26.46ms - Total
    • 0.05ms - http_prepare
    • 0.01ms - cookies_read
    • 0.01ms - tz_offset_read
    • 22.47ms - server_chain_exec
      • 0.03ms - session_load
      • 0.01ms - session_new
      • 0.04ms - csrf_token_set
      • 0.03ms - fill_session_from_AuthSession
      • 0.06ms - fetch_guest_user_info
      • 0.07ms - fill_user_info_locale
      • 0.01ms - layout_common_set
      • 0.16ms - show_announces
      • 18.16ms - server_method_exec
        • 0.13ms - offline_mode_check
        • 1.73ms - fetch_user_by_hid
          • 0.22ms - fetch_can_see_deleted_users
          • 1.47ms - fetch_user_by_hid
        • 0.20ms - bot_member_pages_forbid_access
        • 0.08ms - fetch_current_tag
        • 7.45ms - subcall_entry_list
          • 0.32ms - fetch_and_fill_permissions
          • 0.04ms - define_visible_statuses
          • 1.54ms - get_entry_ids
          • 1.81ms - fetch_and_sort_entries
          • 1.08ms - fetch_and_fill_bookmarks
          • 0.74ms - fetch_infractions
          • 0.05ms - collect_users
          • 1.12ms - check_ignores
          • 0.31ms - blog_entries_sanitize_and_fill
        • 1.48ms - fetch_tags
        • 1.19ms - fetch_categories
        • 0.04ms - fill_subscription
        • 2.16ms - fill_pagination
        • 0.06ms - fill_head
        • 0.06ms - fill_breadcrumbs
        • 3.39ms - fill_prev_next
      • 0.01ms - fill_runtime_locale
      • 0.17ms - inject_acp_access_state
      • 0.04ms - fill_runtime_user_info
      • 0.14ms - inject_dialog_permissions
      • 0.01ms - token_live_inject
      • 0.15ms - fetch_can_see_deleted_users
      • 1.25ms - users_join
      • 0.01ms - add_users_to_page_data
      • 0.01ms - session_ttl_increase
      • 0.11ms - assets_info_inject
      • 0.01ms - footer_common_inject
      • 0.00ms - navbar_common_inject
      • 0.01ms - recaptcha_pubkey_inject
      • 0.13ms - session_save
      • 0.00ms - session_delete
      • 0.00ms - last_active_update
      • 0.11ms - token_live_save
      • 0.21ms - response_to_plain_object
    • 0.01ms - not_modified_check
    • 0.02ms - http_loading_stub
    • 3.61ms - http_render
    • 0.02ms - inject_security_headers
    • 0.01ms - puncher_end