Игровой руль своими руками на arduino

Простой руль для ПК своими руками

ОПИСАНИЕ

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

  • Энкодер в оси руля
  • Педали-потенциометры
  • Функция калибровки
  • Сброс позиции руля кнопкой

ВИДЕО

КОМПОНЕНТЫ

Каталоги ссылок на Алиэкспресс на этом сайте:

Стараюсь оставлять ссылки только на проверенные крупные магазины, из которых заказываю сам. Также по первые ссылки ведут по возможности на минимальное количество магазинов, чтобы минимально платить за доставку. Если какие-то ссылки не работают, можно поискать аналогичную железку в каталоге Ардуино модулей . Также проект можно попробовать собрать из компонентов моего набора GyverKIT .

СХЕМЫ

ПРОШИВКА

ОШИБКИ И FAQ

Отладка

  • Поставить DEBUG 1, прошить
  • Открыть монитор порта
  • Дёргать за дёргалки, тыкать тыкалки, смотреть на значения. Должны меняться
  • Если всё ок, поставить DEBUG 0 и прошить

Калибровка

  • Установить руль и педали в “минимальное” положение
  • Зажать кнопку на D3
  • Подключить питание
  • Подождать пару секунд
  • Отпустить кнопку на D3
  • Вжать педали в пол, держать
  • Повернуть руль вбок на свой угол, держать
  • Кликнуть по кнопке
  • Можно отпускать руль/педали

Сброс позиции руля

Во время работы клик по кнопке на D3 сбрасывает позицию руля в 0 (если вдруг он “уплыл”)

ПОДДЕРЖАТЬ

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

Источник

AlexGyver/GyverWheel

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Простой руль для ПК на Arduino

Руль для компьютера + педали + ручник на базе Arduino Pro Micro (ATmega 32U4) Страница проекта на сайте: https://alexgyver.ru/GyverWheel/

  • Энкодер в оси руля
  • Педали-потенциометры
  • Функция калибровки
  • Сброс позиции руля кнопкой

ВНИМАНИЕ! Если это твой первый опыт работы с Arduino, читай инструкцию

  • libraries — библиотеки проекта. Заменить имеющиеся версии
  • firmware — прошивки для Arduino
  • schemes — схемы подключения компонентов

Материалы и компоненты

Ссылки оставлены на магазины, с которых я закупаюсь уже не один год

Первые ссылки — в основном магазин Great Wall, вторые — WAVGAT. Покупая в одном магазине, вы экономите на доставке! Мосфеты и резисторы можно купить в любом магазине электронных компонентов (ChipDip итд)

Вам скорее всего пригодится

Как скачать и прошить

  • Первые шаги с Arduino — ультра подробная статья по началу работы с Ардуино, ознакомиться первым делом!
  • Скачать архив с проектом

На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP

  • Установить библиотеки в
    C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
    C:\Program Files\Arduino\libraries\ (Windows x86)
  • Подключить внешнее питание 5 Вольт
  • Подключить Ардуино к компьютеру
  • Запустить файл прошивки (который имеет расширение .ino)
  • Настроить IDE (COM порт, модель Arduino, как в статье выше)
  • Настроить что нужно по проекту
  • Нажать загрузить
  • Пользоваться

Настройки в коде

В: Как скачать с этого грёбаного сайта?
О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP

В: Скачался какой то файл .zip, куда его теперь?
О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.

В: Я совсем новичок! Что мне делать с Ардуиной, где взять все программы?
О: Читай и смотри видос http://alexgyver.ru/arduino-first/

В: Вылетает ошибка загрузки / компиляции! О: Читай тут: https://alexgyver.ru/arduino-first/#step-5

В: Сколько стоит?
О: Ничего не продаю.

Источник

Игровой руль на Arduino с напечатанной механикой

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

Данная история взяла свое начало с прочтения статьи ‘Классный игровой руль за копейки’ http://3dtoday.ru/blogs/mell2010/a-cool-gaming-steering-wheel-for-peanuts/ нашего коллеги MELL2000. Имея такой же, руль загорелся я идеей тоже его переделать. Списался с MELL2000 и оказалось что модели утрачены в виду гибели жесткого диска. Ну думаю, ладно, смоделирую сам, хотя стоп, а может сделать полностью с нуля?

По принятию решения сделать руль собственной конструкции встали два основных вопроса:

Методом научного гугления достаточно быстро нашел простую схему изготовления механической части, которая при наличии 3D-принтера упрощается до предела. А вот мозги для проекта с ходу найти не удалось. Изначально я понимал, что надо искать проект на Arduino, а точнее даже на Arduino Leonardo так как она определяется как HID устройство (вроде клавиатуры или мыши), пришлось прочитать несколько десятков страниц разных форумов пока я не нашел то что нужно. Проект MMJoy Виталия “mega_mozg” Найденцева. Это бесплатное ПО для не коммерческого использования. https://sites.google.com/site/mmjoyproject/ работает как раз на чипах компании ATMEL at90usb646, at90usb1286, atmega32u4 (в развязке 5 вольт питания и 16 МГц кварц) к которым как раз и относятся Arduino Leonardo и pro-micro. Поддерживается до 8 осей и до 128 кнопок. Не буду углубляться в возможности прошивки MMJoy, кому интересно тот сам все прочитает, скажу лишь что поддерживается куча всякой всячины. Единственный минус проекта – это скудная информация на его страничке. Вся информация раскрыта на страницах форумов и там мне пришлось провести не мало времени, прежде чем найти требуемые мне схемы подключения.

Прошу прощения за длинную преамбулу, далее постараюсь более кратко и по делу.

Что было приобретено:

— плата Arduino pro-micro 350 руб.

— Датчик Холла 5в 1150 руб. Вместо него можно использовать потенциометр на 10 кОм, но у него ограниченный срок службы и малая точность позиционирования. Или можно купить датчик Холла без корпуса и магнит, но я решил не заморачиваться и сделать максимально быстро пока есть запал.

— Б/У «спортивный» руль от Жигулей на Avito за 400 руб.

— Шпилька М12 х 1000, плюс куча болтиков, гаечек и шайб в общей сложности на 150-200 руб.

— 2 Подшипника с внутренним диаметром 12мм по 50 руб. за штуку

— 2 подшипника 626z 6 мм x 19 мм x 6 мм, были в загашнике, а так стоят рублей по 10.

— Б/У левый подрулевой переключатель от приоры на Avito за 200 руб.

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

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

Крепление pro-micro и соединительная муфта напечатано из черного ABS от FD-plast, все остальные детали печатались белым PET-G от АБС Мейкер. Все детали распечатаны соплом 0,4 слоем от 0,1 (шестерни) до 0,3 (крепления подшипников) со 100% заполнением на скорости 65мм/сек, слайсер Simplify 3D.

К столу вся конструкция крепится обычными струбцинами через распечатанные подкладки.

Сборка механической части.

Во время изготовления фотографий я не делал, но тут в общем-то все открыто, все и так видно.

1. В качестве основы я взял обрезок 18мм мебельного щита размерами 11х22 см. Посередине него закрепил 2 крепления для подшипников.

2. Собрал и установил рулевую ось с ведущей шестерней на место.

3. Собрал приемную шестерню и датчик Холла на креплении, установил ограничители поворота. Ось крепления ведомой шестерни вращается на подшипниках и соединена с валом датчика муфтой.

4. Плотно прижал крепление приемной шестерни к шестерне рулевого вала, разметил отверстия, просверлил и закрепил.

5. Выставил ведомою шестерню в ноль (ограничитель поворота вверх) и прикрутил руль также выставив его ровно.

Сборка электронной части.

На данной схеме (взято с сайта MMJoy) показано какие ноги для каких целей могут использоваться.

Для подключения 8 кнопок мы использовали 9 контактов

Во втором варианте мы подключим те же 8 кнопок, но уже в 4 столбца и 2 строки.

Здесь для подключения 8 кнопок мы использовали не 9, а всего 6 контактов.

Если подключить 4 оси для подключения руля и трех педалей, то у нас останется 14 контактов для подключения кнопочной матрицы, а это ТА-ДАМ 7х7 целых 49 кнопок. Но пока в моем проекте только руль и подрулевой переключатель с четырьмя «кнопками», поэтому подключаю его в 4 столбца и 1 строку.

Не буду останавливаться на прошивке pro-micro поскольку подробная инструкция есть на сайте проекта, а вот на настройке подключенных кнопок и датчика остановлюсь подробнее.

Запускаем MMJoySetup. В списке контроллеров выбираем MMJoy и считываем настройки из контроллера. Выбираем настройку осей. В качестве источника выбираем внутренний датчик, порт МК в моем случае будет F4 (см. по схеме подключения и маркировке MMJoy), так как это руль выбираем в качестве назначения ось X. Точность в битах выбираем эмпирически исходя из чувствительности датчика, в моем случае более 12 бит выставлять оказалось бессмысленно. Автокалибровку поставил сохранять с центром. Остальное не трогал.

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

C этим рулем я уже намотал не один десяток тысяч виртуальных километров в Euro Truck Simulator 2, руль работает на отлично. Педали пока от старого руля, скоро их тоже переключу на MMjoy.

Если хватит душевного порыва хотелось бы все это дело окультурить и еще реализовать педальный блок на 3 педали и КПП 8+1 с переключателем демультипликатора и прочие плюшки, но а пока наслаждаюсь тем что уже есть.

Если кому-то будет интересно, модели выложу или скину на почту.

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

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

Источник

Игровой руль своими руками на arduino

Старик Похабыч

Mocmegas

s60team

А я вообще код запорол (ну или с питанием проблемы). Хотел все модули заставить работать, но.
Вобщем я пробовал подключать ещё потенциометры на оси rX и rY. Оказалось, что в коде они -32768—32767, как и оси X и Y.

Добавлено позже:
Всё-таки дешёвый модуль энкодера — это плохая идея.
TLE5010 (Кстати, мне помогли найти код для работы TLE5010) — Нужно паять схему и добавлять в код (по-ходу на Леонардо будет нормально работать только один такой).
Заказал себе AS5600 (модуль датчик угла поворота (магнитный, I2C)). Как приедет — попробую совместить с GyverWheel.

PS: Перешёл на библиотеку в которой функций побольше, чем от NicoHood: ArduinoJoystickLibrary.
Там можно добавить Ещё оси: Управление рулём (Steering), Руль Высоты (Rudder) и Ускорение (Throttle), 128 кнопок, 4 крестовины.

Glich

s60team

besstrahnuy

Danissmo

Pon4ik

Привет, можете проверить код? Пришлось не много допилить его и добавить сцепление.
А вот сам код:
/*
Скетч к проекту «Простой руль для ПК»
Страница проекта (схемы, описания): https://alexgyver.ru/GyverWheel/
Исходники на GitHub: https://github.com/AlexGyver/GyverWheel/
Нравится, как написан код? Поддержи автора! https://alexgyver.ru/support_alex/
Автор: AlexGyver, AlexGyver Technologies, 2019
https://AlexGyver.ru/
*/

// стандартный тестер геймпада в Win10: поиск/joy.cpl

// =========== НАСТРОЙКИ ===========
#define DEBUG 0 // режим отладки
#define ENC_TYPE 1 // тип энкодера, 0 или 1
#define INV_WHEEL 1 // инверсия руля

// пины
#define ENC_A 5 // пин энкодера
#define ENC_B 6 // пин энкодера
#define POT_THR A0 // педаль газа
#define POT_BR A1 // педаль тормоза
#define POT_CL A2 // педаль сцепления
#define BUTT_BR 4 // кнопка ручника
#define BUTT_CAL 3 // кнопка калибровки

volatile int encCounter = 0;
volatile boolean state0, lastState, turnFlag;
int throttleMin, throttleMax, brakeMin, brakeMax, clutchMin, clutchMax, wheelMax;
uint32_t timer;

void setup() <
pinMode(BUTT_BR, INPUT_PULLUP);
pinMode(BUTT_CAL, INPUT_PULLUP);
setupTmr();
debug();
calibration();
EEPROM.get(0, throttleMin);
EEPROM.get(2, brakeMin);
EEPROM.get(4, clutchMin);
EEPROM.get(6, throttleMax);
EEPROM.get(8, brakeMax);
EEPROM.get(10, clutchMax);
EEPROM.get(12, wheelMax);
Gamepad.begin();
//Serial.begin(9600);
>

void loop() <
gamepadTick();

// при нажатии кнопки калибровки скидываем позицию руля в 0
if (!digitalRead(BUTT_CAL)) <
encCounter = 0;
>
>

void encTick() <
state0 = digitalRead(ENC_A);
if (state0 != lastState) <
#if (ENC_TYPE == 1)
turnFlag = !turnFlag;
if (turnFlag)
encCounter += (digitalRead(ENC_B) != lastState) ? -1 : 1;
#else
encCounter += (digitalRead(ENC_B) != lastState) ? -1 : 1;
#endif
lastState = state0;
>
>

void gamepadTick() <
if (millis() — timer > 10) <
timer = millis();
int wheel;
if (INV_WHEEL) wheel = constrain(-encCounter, -wheelMax, wheelMax);
else wheel = constrain(encCounter, -wheelMax, wheelMax);

wheel = map(wheel, -wheelMax, wheelMax, -32768, 32767);
Gamepad.xAxis(wheel);

int thr, br, cl;
thr = map(analogRead(POT_THR), throttleMin, throttleMax, -128, 127);
thr = constrain(thr, -128, 127);
Gamepad.zAxis(thr);

br = map(analogRead(POT_BR), brakeMin, brakeMax, -128, 127);
br = constrain(br, -128, 127);
Gamepad.rzAxis(br);

cl= map(analogRead(POT_CL), clutchMin, clutchMax, -128, 127);
cl = constrain(cl, -128, 127);
Gamepad.rzAxis(cl);

if (!digitalRead(BUTT_BR)) Gamepad.press(1);
else Gamepad.release(1);
Gamepad.write();
>
>

// калибровка
void calibration() <
if (!digitalRead(BUTT_CAL)) < // нажата кнопка
while (!digitalRead(BUTT_CAL)); // пока кнопка удерживается
Serial.begin(9600);
delay(100);
Serial.print(F(«Calibration start»));
encCounter = 0;
int zeroTHR = analogRead(POT_THR);
int zeroBR = analogRead(POT_BR);
int zeroCL = analogRead(POT_CL);
int maxTHR, maxBR, maxCL, maxWHEEL;

EEPROM.put(0, zeroTHR);
EEPROM.put(2, zeroBR);
EEPROM.put(4, zeroCL);
delay(100); // дебаунс
while (true) < // крутимся
if (!digitalRead(BUTT_CAL)) break;
maxTHR = analogRead(POT_THR);
maxBR = analogRead(POT_BR);
maxCL = analogRead(POT_CL);
Serial.println(encCounter);
>
EEPROM.put(4, maxTHR);
EEPROM.put(6, maxBR);
EEPROM.put(8, maxCL);
EEPROM.put(10, abs(encCounter));

Serial.println(F(«Calibration end»));
Serial.print(F(«Wheel: «));
Serial.println(abs(encCounter));
Serial.print(F(«Throat: «));
Serial.print(zeroTHR);
Serial.print(» — «);
Serial.println(maxTHR);
Serial.print(F(«Brake: «));
Serial.print(zeroBR);
Serial.print(» — «);
Serial.println(maxBR);
Serial.print(F(«clutch: «));
Serial.print(zeroCL);
Serial.print(» — «);
Serial.println(maxCL);
Serial.println();
>
Serial.end();
delay(3000); // задержка чтобы кнопку отпустить
>

// дебаг
void debug() <
#if (DEBUG == 1)
Serial.begin(9600);
uint32_t timer;
while (true) <
encTick();
if (millis() — timer > 100) <
timer = millis();
Serial.print(encCounter);
Serial.print(«\t»);
Serial.print(analogRead(POT_THR));
Serial.print(«\t»);
Serial.print(analogRead(POT_BR));
Serial.print(«\t»);
Serial.print(analogRead(POT_CL));
Serial.print(«\t»);
Serial.print(!digitalRead(BUTT_BR));
Serial.print(«\t»);
Serial.println(!digitalRead(BUTT_CAL));
>
>
Serial.end();
#endif
>

// опрос энкодера в прерывании
ISR(TIMER3_COMPA_vect) <
encTick();
>

Источник

Adblock
detector