Как сделать сцепление для игрового руля
Как сделать сцепление для игрового руля
Euro Truck Simulator 2
В качестве основы будущей педали сцепления используется бюджетный/недорогой джойстик USB. В данном случае – это Defender COBRA R4.
Основание конструкции представляет собой платформу. В данном случае – это обычная полка от шкафа 90х50 см. К ней крепятся двухпедальный блок (винтами, согласно конструкции самого педального блока) и джойстик (саморезами, как представлено на фото).
В качестве упора используется обычный мебельный винт М8 с отрезанной шляпкой, котороый, в свою очередь, прикреплен к уголку (см. фото). Механизм работы предполагает, что амплитуда движения джойстика/педали сцепления будет упираться в прикрепленный винт. Сделано это для того, чтобы при нажатии на джойстик ногой до упора, он не выломался.
Как видно по фото, винт так же не дает джойстику отклониться в стороны во время нажатия.
Чтобы не задевать ногой кнопки на джойстике, к его рукоятке саморезами прикреплена пластина, имитирующая «реалистичную» педаль.
Перед джойстиком к деревянной платформе прикреплена своего рода ступень под пятку, для более удобного нажатия на педаль.
В целом, модернизированный педальный блок выглядит следующим образом:
Так как джойстик/педаль сцепления в неподвижном состоянии перпендикулярен(а) платформе, то рекомендуется под задние лапки основания джойстика подложить и прикрепить порожек в виде дер. бруска например. А уже в него саморезами прикрепить основание джойстика. Это необходимо для того, чтобы у всех трех педалей угол первоначального положения был примерно одинаковым. Иначе, при нажатии на педаль сцепления, Вам придется сильно выгибать ступню, что крайне неудобно. Выглядит это примерно так:
Джойстик = 1100 руб.
Фурнитура = 200 руб.
Итого: 1300 руб. + старая полка от комода.
Достаточно дешево. Особенно если сравнивать с трехпедальным блоком ThrustMaster T3PA, который подходит к применяемому рулю, и, который на данный момент стоит около 10 000 рублей.
P.S.: данное руководство носит исключительно рекомендательный характер, как и сама конструкция. Размеры и материалы могут варьироваться в зависимости от ситуации и предпочтений. Прошерстив множество сайтов касательно данной проблемы, могу сказать, что это один из самых незамороченных и недорогих вариантов создания самодельной аналоговой педали.
Надеюсь, что данная идея кому-нибудь пригодится.
Спасибо.
Педаль в пол: создаём очередной ножной манипулятор для ПК
Буквально месяц назад я натолкнулся на эту статью, где повествуется о педалировании Vim. Чуть позже, после своего длительного трёхминутного исследования, я выяснил, что что тема эта уже не новая и довольно популярная. Сам я Vim использую только в случае крайней необходимости (если уж и приходится работать в консоли, то предпочитаю Nano), но ведь можно сделать подобное и под другие приложения.
Изначально я хотел сделать небольшую статейку, однако у меня получился целый туториал по созданию данного девайса с пошаговым написанием кода и пояснением что да как. Дабы не раздувать статью, под спойлерами будет различная информация, которая показалась мне интересной и достойной внимания новичков в Arduino, продвинутые и особо торопливые же пользователи могут не тратить на то время. Полный исходный код также представлен в конце статьи.
А зачем оно мне?
Если у вас нет сомнений в необходимости и полезности этого устройства, то можете пропустить этот пункт. Для остальных сначала хотелось бы рассказать о предпосылках создания данного устройства.
Во все времена программисты и дизайнеры старались сделать удобный и дружественный интерфейс, чтобы пользователь мог без лишних заморочек работать с приложением используя мышь и клавиатуру, так зачем же нам ещё один манипулятор? Что же, заглянем немного в историю, а точнее, в начало XVIII века, когда был изобретён такой музыкальный инструмент, как фортепиано. Как известно, это слово буквально переводится как «громко-тихо», но мало кто задумывается, что такой инструмент умный итальянский мастер получил, фактически «запедалировав» существовавший тогда клавесин, что и позволило в какой-то степени управлять громкостью звука, при этом не отнимая руки от клавиш.
Примеров можно приводить много. Педали есть у автомобиля, чтобы не бросать руль, если надо добавить газ. Барабанная установка тоже имеет педали, чтобы стучать в бас-бочку и тарелки. А что могут дать педали при использовании компьютера? Ну, например, можно задать какую-нибудь горячую комбинацию клавиш, или вообще добавить клавишу, которой нет, вроде включения и выключения звука. Педали могут помочь, если заняты руки: сам я играю на гитаре, при этом иногда под аккомпанемент, я было бы очень удобно проматывать подложку, не пытаясь постоянно дотянуться до клавиатуры. Ну и, наконец, контроллеры могут давать и совершенно нечеловеческие возможности в играх: было бы круто одним кликом построить себе всю базу в стратегии или крушить врагов со скоростью десятка ударов в секунду в шутерах, не так ли?
В общем, надеюсь, я вас убедил, а значит, пора приступать непосредственно к самой разработке.
Необходимые ресурсы
Схема устройства
Ещё до того, как мне пришли посылки, я приступил к созданию схемы устройства. Хотя это сильно сказано, так как мне надо было всего лишь подключить педали, диод и кнопку. Получилось как-то так:
Для педалей я решил выделить сразу 4 порта PB1-PB4, то есть две для левой, и две для правой ноги, хотя пока педали у меня только 3. К тому же, они все находятся в одной группе и расположены в одном месте. Под светодиод я отвёл выводы PD0, PD1 и PD4, под кнопку — PD7.
При этом нам не понадобятся никакие подтягивающие резисторы, если использовать те, что встроены в контроллер. Правда, тогда, при нажатии кнопки или педали, на входе будет низкий уровень, а при отпускании — высокий, то есть, нажатия будут инвертироваться, и об этом не стоит забывать.
Написание кода
Этот этап был самым трудным: из-за пары ошибок в указателях я несколько раз стёр загрузчик и в итоге чуть не завалил плату на программном уровне. Ниже подробно расписаны все этапы создания прошивки, для тех же, кто просто хочет получить работающий код, он будет в конце статьи.
Подготовка
Для начала нам нужно понять, что вообще такое педаль с точки зрения программы. Я решил сделать возможность задания педали одного из двух режимов — реального времени и триггера. Каждая педаль при этом имеет две программы: первая выполняется при удержании педали в режиме реального времени или при нечётных нажатиях в режиме триггера, вторая — при отпускании педали в режиме реального времени или при чётных нажатиях в режиме триггера. Так же у педали есть порт, состояние, и две переменные — текущие позиции в программах 1 и 2. У меня получилась вот такая структура:
Arduino имеет довольно мало памяти и к тому же 8-разрядная, так что лучше стараться использовать char нежели int там, где это возможно.
Так же нам понадобится стандартная библиотека Keyboard для работы в качестве клавиатуры.
Обработка нажатий
Сейчас нам нужно сделать интерпретатор, который будет читать данные из массива и отправлять их в виде нажатий клавиш на машину, а так же выделить несколько значений под различные внутренние команды. Открываем страницу с кодами клавиш, и смотрим что и как мы можем нажать. Я не стал глубоко копать и изучать всякие стандарты клавиатур, так как информации здесь мне показалось вполне достаточно для такого проекта. Первая половина отведена под стандартные ASCII-символы (хотя некоторые из них и непечатаемы или не используются), вторая же — под различные клавиши-модификаторы. Есть даже отдельные коды для левых и правых клавиш, что очень порадовало, а вот специальных кодов для цифр с нампада я не увидел, хотя, насколько я знаю, они немного по-особому воспринимаются в системе, нежели обычные цифры. Возможно, их коды находятся где-то в «дырах», между диапазонами, но сейчас не об этом. Итак, самый большой код имеет клавиша «вверх» — 218, а значит, диапазон 219-255 можно считать свободным, ну или по крайней мере там нет каких-то важных клавиш.
Думаю, даже у человека с не самым высоким уровнем знания Си не возникнет вопросов о том, что тут происходит. Сначала функция выбирает нужную педаль и определяет в зависимости от режима и состояния педали, какую программу стоит выполнять. При чтении каждого элемента массива, если он не является управляющим символом, вызывается функция Keyboard.write(), которая эмулирует нажатие и отпускание клавиши. Управляющие же символы обрабатывются отдельно и нужны для зажатия комбинаций клавиш и навигации по программе.
Итак, у нас есть интерпретатор и примерное понимание того, как наш педалборд взаимодействует с компьютером. Теперь надо всё это довести до состояния полноценной прошивки и проверить работоспособность на одной педали. Если создать экземпляр педали и циклично вызывать pedalAction(), то по идее у нас будет выполняться заданная в структуре программа.
Кстати, никогда не забывайте про нуль-терминаторы в данных «программах», если их длина меньше размера массива и если они не цикличны, потому что Arduino будет не только пытаться интерпретировать не заданные данные, но и будет отправлять их в машину с огромной скоростью, а это всё равно, что дать клавиатуру обезьяне.
Одна педаль хорошо, а две — лучше
Теперь пришло время разобраться с обработкой сигналов с нескольких педалей, а также добавить переключение режимов. В начале статьи было выделено 4 порта под педали, каждой из которых надо позволить работать в семи режимах. Почему 7? Потому что без использования ШИМ наш светодиод может давать всего 7 цветов, и восьмой — выключенный. Такого количества вполне хватит обычному пользователю, ну а в крайнем случае его легко можно увеличить. Значит педали будем хранить двумерном в массиве 7 х 4. Чтобы не засорять память, общие для нескольких структур значения, такие, как номер порта можно вынести в отдельные массивы. В итоге мы получаем что-то такое:
Для нас важно знать только тип педали и две программы, поэтому только их мы оставим непосредственно в структуре, остальными же вещами пусть занимается автоматика. Методы prepare и loop теперь будет выглядеть следующим образом:
Контроллер буде считать режим неиспользуемым, если в нём не объявлено ни одной педали (mode=255), а значит при попадании на него сразу перейдёт к следующему, но при этом первый режим всегда будет существовать. При переключении режима все значения в массивах зануляются, так как сохранять их для каждого режима нам не требуется (верно?), а затем цикл обходит все педали и вызывает pedalAction для них.
Также в начале метода pedalAction() нужно добавить следующую строчку, чтобы он понимал, с какой из структур надо иметь дело:
Уже существующую структуру pedal1 можно удалить за ненадобностью.
Всё это так же вполне работает, однако я столкнулся с одной проблемой: некоторые программы не успевают принимать нажатия с такой скоростью, с которой их отправляет Arduino. Самое очевидное решение — добавить возможность устанавливать задержки между действиями там, где это необходимо. Вот только когда мы садимся писать программы под микроконтроллеры, все фишки, вроде аппаратной многопоточности, остались где-то там, в высокоуровневых ЭВМ, у нас же при добавлении задержки останавливается вся программа, пока контроллер не отсчитает нужное количество циклов. Раз многопоточности у нас нет, то придётся её создать.
Тяжело сказать, да легко сделать
Я не стал изобретать велосипед, а взял готовую библиотеку ArduinoThread. Здесь можно немного почитать о том как она работает и скачать её. Загрузить библиотеку можно и из самой Arduino IDE. Кратко говоря, она позволяет периодически выполнять функцию с определённым интервалом, при этом не позволяя уйти в бесконечный цикл в случае, если выполнение займёт больше времени, чем интервал. То, что нужно. Создадим ещё один массив с потоками для каждой педали:
Теперь у нас есть 6 одинаковых виртуальных потоков, но при этом являющихся разными объектами.
Немного перепишем цикл обхода педалей для работы с новым функционалом:
Теперь значение 252 в массиве программы, которое соответствует «ничегонеделанию», будет давать задержку в 10 миллисекунд (хотя на самом деле чуть больше, так как выполнение кода тоже занимает время). Добавив несколько строк в интерпретатор, получится сделать возможным установку задержки в несколько таких «квантов», потратив всего 2 байта массива:
Теперь, при возможности установки задержки до 2.55 секунд проблем с определением клавиш программами возникать не должно.
Программирование «на ходу»
В принципе, тут можно было бы закончить с кодом и приступить к сборке устройства, но в этом случае, если кто-то вдруг захочет перепрограммировать педали, то ему придётся открывать Arduino IDE, править код, и заново загружать прошивку. Естественно, такой вариант не самый лучший, поэтому я решил добавить возможность менять программу с последовательного порта Arduino, а сами программы хранить в EEPROM. Для работы с энергонезависимой памятью необходимо подключить стандартную библиотеку EEPROM.h. Код режима программирования выглядит следующим образом:
Что делает этот код поясняет содержащаяся в нём справка: через пробел вводится номер режима, номер педали, и команда, которых существует 3 — чтение, запись и выполнение удаление программы. Все данные о педалях хранятся друг за другом в виде последовательности из 33-х байт, то есть тип педали, и две программы, и того мы занимаем 7*4*33=924 из 1024 байт EEPROM. Вариант использования динамического размера педалей в памяти я отбросил, так как в этом случае при перепрограммировании одной педали придётся перезаписать почти все ячейки, а циклов перезаписи эта память имеет конечное количество, поэтому рекомендуют делать это как можно реже.
Ещё хотелось бы обратить внимание на строки вида:
Благодаря данной библиотеке, с точки зрения программиста, энергонезависимая память является обычным массивом char, но, как «ардуинщикам», нам нужно понимать, что запись в ПЗУ — очень тяжёлая операция, которая занимает у контроллера целых
3 секунды, и желательно не прерывать этот процесс. Данная конструкция заставляет диод светить красным во время таких операций, а затем возвращает обратно «безопасный» зелёный цвет.
В режиме записи программы ввод производится непосредственно значениями байтов в десятичной системе счисления через пробел. Получается довольно сурово, но зато не приходится писать сложный парсер. Тем более, перепрограммирование происходит не так часто, и в этих случаях вполне можно заглянуть в ASCII таблицу.
С сохранением структур разобрались, теперь надо наши данные как-то оттуда вытащить и преобразовать к «педальному» виду:
Здесь так же не происходит ничего сверхъестественного: контроллер считывает данные из памяти и заполняет ими уже существующие структуры.
Преимущество программирования через UART заключается в том, что нам опять же не требуется никаких специальных драйверов, поэтому задавать поведение манипулятора можно даже с телефона.
Демонстрация
Полный исходный код
Послесловие
Хотя изначально я и делал педалборд для возможности проматывания записи во время игры на гитаре, однако лично мне показалось удобным испольщование педалей и в обычных задачах, главное немного привыкнуть к такому необычному манипулятору. А вот тут кроется ещё одна проблема: уже без любимых педалей работать становится наоборот сложнее, так как приходится вспоминать, что, куда и для чего нажимать. Если в офис педали ещё можно носить и подключать, то в институте бегать с ними по кабинетам уже сложнее. Так что использовать этот девайс для чего-то, кроме его изначального предназначения стоит на свой страх и риск.
Сообщества › Сделай Сам › Блог › 6-МКПП для ПК своими руками за бесценок.
Всем привет! Люблю в свободное время покатать в автосимуляторы типа Euro Truck Simulator 2 или Spintires, но играть с обычным рулём и педалями стало уже скучно)) Наткнулся недавно на видео в ютубе, как кто-то делал коробку передач из г*вна и палок) Подглядел как делают разные люди, что то взял у каждого помаленьку, что то добавил сам и понеслась. Больше конечно мне была интересна сама суть собрать из «подножного мусора» что-то стоящее. Сразу скажу, что результат превзошел все ожидания в десятки раз.
Было несколько вариантов конструкции, походив по магазину, поглядев на цены на «сырье» решено было думать, как удешевить конструкцию, в итоге вот какой конфиг:
1. Кочерга!
Основание для рукоятки я сделал из старой шаровой опоры от классики, которую мне отдал друг (нужна именно старая, чем больше болтается — тем легче будет ходить рычаг!)
На работе разломал деревянный поддон, взял из него бакулочку и часть доски, собрал, отпилил на глаз, в бакулке подручными инструментами вырубил посадочное отверстие для шаровой, прикрутил ее на саморезы через шайбы.
Дальше отпилил от старой снеговой лопаты железную ручку, которая плотно села на палец опоры, постучав молотком, запресовал трубу намертво, получилось вот так:
Бюджет на данный момент — 0р
2. Корпус!
Долго думал из чего сделать корпус, и нашел дома старую колонку от музыкального мини-центра, выпилил одну стенку и туда погрузил рычаг, прикрутил все саморезами и из дсп сделал подставку, для того, что бы при переключении моя коробка стояла устойчиво на полу. Дсп так же нашел дома.
Самое наверное сложное и долгое было сделать крышку коробки с прорезями под ход рычага. Как много было загублено судеб и испорчено нервов, но вроде я справился)) Сначала вырезал на картоне, потом уже перенес на фанеру и выпилил лобзиком, фанеру 6мм нашел в гараже, инструмент там же.
Бюджет на данный момент — 0р
3. Электрическая часть!
Тут начинается самая интересная и затратная часть.
Так, как по сути коробка передач, это те же кнопки, только разбросаны по своему, значит проще всего сделать из старого игрового джойстика, который валяется уже несколько лет без дела (покупался года 4 назад за 250р в М-видео).
Разбираем его, выкидываем корпус и оставялем плату, где все уже для нас подготовили. На пятачки, где раньше были кнопки, мы припаиваем провода с двух сторон, замыкая которые мы имитируем нажатие кнопки. Мне нужно было использовать 8 кнопок ( 6передач + задняя + делитель/демультипликатор ), запаял и т.к джойстик был китайский и хлипкий — залил термоклеем сверху все провода с платой замотав изолентой (фото пайки к сожалению нет)
Дальше были приобретены переключатели MSW с лапкой с колёсиком по 32р за штуку * 7шт.
(Подойдут и любые другие кнопки без фиксации, но мне эти показались удобней всего, лапкой можно подогнать момент включения передачи. Переключатели подключаем взамен кнопок джойстика на припаяные к плате провода через клеммы мама 3р*14шт. Так же взял небольшую круглую кнопку с фиксацией для делителя — 30р
Бюджет на данный момент — 296р
Подключаем USB к компу и в диспетчере устройств проверяем работоспособность всех кнопок. Все работает! Электрическая часть готова!
Дальше нужно внедрить эту часть в наш корпус и распихать кнопки, здесь уже начинается полная ипровизация. Я расположил кнопки на строительных навесах и все это дело закрепил внутри коробки.
Все собрал, закрыл крышкой, повключал передачи — все работает, но не хватает наболдажника на палке.
Поехал в ближайший автомагазин, купил рукоятку от жиги — 80р, просверлил в ней дырку, вставил кнопку делителя, вывел провода и опять же каким то чудным образом пригорбатил ее на трубу.
Вот по сути и всё!
Бюджет проекта составил — 346р, это в дясятки раз дешевле, чем покупать готовые шифтеры или руль с коробкой, которые я бы никогда не купил. Да и плюс ко всему рычаг коробки получился длинный и удобный, сидя на стуле рычаг находится на уровне чуть выше колена.
Осталось только как-то оформить колхозный вид данной конструкции)