DIY-контроллер для F1-руля на базе Raspberry Pi

Я — преданный фанат «Формулы-1». В межсезонье, когда календарь гонок в Бахрейне и Саудовской Аравии казался бесконечно далеким, ожидание очередного этапа стало невыносимым. Чтобы скоротать время и добавить домашним трансляциям больше драйва, я решил спроектировать и собрать собственный игровой руль.

Сердцем устройства стала плата Raspberry Pi 5. Она отвечает за опрос периферии и вывод телеметрии на 5-дюймовый ЖК-дисплей. Для управления поворотами используется гироскоп и акселерометр MPU-6050, что обеспечивает интуитивное руление, а вибромотор добавляет тактильный отклик, погружая в атмосферу гонки.

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

Ниже представлено пошаговое руководство по созданию этого гаджета.

Список необходимых комплектующих и инструментов:

  • Raspberry Pi 5 (16 ГБ ОЗУ);

  • 5-дюймовый HDMI ЖК-дисплей (контроллер тачскрина XPT2046 от Waveshare);

  • Arduino Pro Micro;

  • Вибромотор Keystudio;

  • Ноутбук для отладки кода;

  • Паяльное оборудование с припоем и термоусадкой;

  • 3D-принтер (Creality K2 Pro) и пластик для печати;

  • Монтажные провода, сечение 0,25 мм;

  • Метизы (резьбовые вставки, гайки, шайбы);

  • Ручной инструмент (кусачки, отвертки).

Шаг 1: Проектирование и 3D-печать корпуса

За основу внешнего вида я взял руль болида Mercedes F1. Загрузив исходное фото в Autodesk Inventor, я отрисовал контуры корпуса, адаптировав размеры под габариты ЖК-экрана.

Конструкция продумана так, чтобы минимизировать использование поддерживающих структур при печати. Внутри предусмотрены каналы для аккуратной прокладки кабелей. Верхняя панель выполняет роль декоративной крышки, на которую через слайсер Creality был нанесен текст. Raspberry Pi монтируется прямо на тыльную сторону экрана с помощью стоек. Также были спроектированы крепления для трех потенциометров и кастомные колпачки для них. Для печати я использовал PLA: корпус имитирует углеволокно, а задняя панель — дерево.

Шаг 2: Монтаж кнопок и переключателей

Компоновка включает шесть тактовых кнопок и пару тумблеров. Все они подключены к портам GPIO Raspberry Pi. Использование тонкого монтажного провода (0,25 мм) позволило сделать сборку максимально опрятной.

Тактовые кнопки замыкаются только на время нажатия, тогда как тумблеры фиксируются в выбранном положении. Мы задействовали внутренние подтягивающие резисторы Pi, поэтому внешние компоненты не потребовались.

Шаг 3: Работа с потенциометрами

Потенциометры имитируют сложные переключатели настройки двигателя на руле F1. Поскольку у Raspberry Pi нет встроенных АЦП, я подключил три потенциометра (по 10 кОм каждый) к Arduino Pro Micro, которая по протоколу UART передает данные на «Малину».

Важный нюанс: Arduino работает с уровнями 5 В, а Pi — с 3,3 В. Я реализовал согласование уровней через простейший делитель напряжения на резисторах 2 кОм и 3,3 кОм.

Шаг 4: Инерциальный датчик MPU-6050

Этот датчик превращает руль в полноценный игровой контроллер: вместо кнопок вы физически поворачиваете устройство. MPU-6050 считывает углы наклона через интерфейс I2C (GPIO 2 и 3), обеспечивая высокую отзывчивость управления.

Шаг 5: Виброотдача

Вибромотор запитан от 5 В Raspberry Pi, а сигнальный вывод подключен к GPIO. Это добавляет «жизни» в игровой процесс, срабатывая в нужные моменты симуляции.

Шаг 6: Дисплей и эргономика

Сенсорный дисплей Waveshare делает устройство автономным — для управления системой не нужны ни клавиатура, ни мышь. Подключение реализовано через HDMI и гребенку GPIO. Для удаленной настройки системы я использовал VNC-клиент.

Шаг 7: Схемотехника

Все узлы сходятся на «Малине». Крайне важно объединить «землю» (GND) Arduino и Raspberry Pi, чтобы обеспечить стабильный обмен данными по UART.

Шаг 8: Программная реализация

Для обработки сигналов на Python использованы библиотеки gpiozero (кнопки), evdev (создание виртуальных устройств ввода) и mpu6050. Скрипт эмулирует джойстик, благодаря чему любая игра, например, SuperTuxKart, видит наш руль как стандартный контроллер.

Основные моменты кода:

  • Многопоточность: цикл чтения данных с гироскопа работает в отдельном потоке (threading), чтобы не блокировать опрос кнопок.

  • Виртуальное устройство: программа создает два устройства — джойстик (для езды) и клавиатуру (для навигации по меню).

  • Автоматизация: скрипт с помощью subprocess сам запускает игру при старте программы.

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

 

Источник

Читайте также