Необходимые ресурсы
- Собственно, педали.
Тут сразу же возникли некоторые сложности из-за того, что я никак не мог придумать название для такой педали. Я знал лишь то, что подобные вещи используются в швейных машинках. В общем, по запросу
electric pedal
мне всё же удалось найти то, что нужно, на Aliexpress, и я, недолго думая, заказал 3 штуки. - Контроллер.
Педалборд должен эмулировать работу клавиатуры и, возможно, мыши для возможности подключения к ПК без лишних драйверов. Для этого отлично подойдёт плата Arduino Pro Micro, которая хоть и не имеет некоторых выводов, но зато сделана максимально компактно. Идём на тот же Aliexpress, и покупаем китайскую версию этого чуда. - Провода.
Чтобы поместить 3 педали под стол, нужен как минимум четырёхжильный провод длиной не меньше метра. Тут, думаю, проблем возникнуть не должно. - RGB-светодиод и кнопка.
Первый нужен для индикации режимов, а вторая — для их переключения. - Ну и, понятное дело, нам нужны Arduino IDE, паяльник и прямые руки.
Перетяжка руля в домашних условиях
Сделать перетяжку руля своими руками вполне возможно. При наличии терпения и времени. Сегодня в любом магазине можно купить специальный набор, состоящий из куска кожи, иглы и прочной нити. Такой набор для перетяжки руля стоит в пределах тысячи рублей и весьма прост в использовании.
Сшивание оплётки
- Для начала накладываем кусок кожи на рулевое колесо.
- Достаем иглу и продеваем в нее нить с узелком на конце.
- Кожа из такого набора уже имеет небольшие отверстия по краям ткани, поэтому иглой ничего протыкать не нужно. Просто «зашнуровываем» руль в оплетку из кожи. Наиболее простой способ «шнуровки»: крест-накрест. Но можно придумать и что-то более креативное («бабочка» «елочка» и пр. Здесь все зависит от вашей фантазии).
- Чтобы кожа для перетяжки была максимально эластичной и податливой, ее лучше прогреть.
Полный исходный код
Он вот тут
#include #include #include #define modeButton 6 struct pedal { unsigned char type; //0 — режим реального времени, 1 — режим триггера, 255 — педаль не назначена unsigned char act1[16]; unsigned char act2[16]; }; struct pedal pedals[7][4] = { { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} }, { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} }, { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} }, { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} }, { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} }, { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} }, { { 255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}}, {255, {255}, {255}} } }; char ports[4] = {8, 16, 15, 14}; char pos1[4] = {0, 0, 0, 0}; char pos2[4] = {0, 0, 0, 0}; char state[4] = {0, 0, 0, 0}; char oldState[4] = {0, 0, 0, 0}; char wait[4] = {0, 0, 0, 0}; void pedalAction(); char mode = 0; char curPedal; Thread pedalThreads[6] = {Thread(pedalAction, 10), Thread(pedalAction, 10), Thread(pedalAction, 10), Thread(pedalAction, 10), Thread(pedalAction, 10), Thread(pedalAction, 10)}; void setup() { pinMode(2, 1); pinMode(3, 1); pinMode(4, 1); pinMode(modeButton, 2); if (!digitalRead(modeButton)) { //Режим программирования Serial.begin(9600); while (!Serial) { PORTD = 0b00000000 + (PORTD & 0b11101100); delay(250); PORTD = 0b00010000 + (PORTD & 0b11101100); delay(250); } Serial.println(F(«***Programming mode***»)); Serial.println(F(«Write the command as «)); Serial.println(F(«m — number of mode, one digit»)); Serial.println(F(«p — number of pedal, one digit»)); Serial.println(F(«c — command, it can be:»)); Serial.println(F(«\tr — read pedal info»)); Serial.println(F(«\tw — enter to writing mode and change pedal programm»)); Serial.println(F(«\te — erase pedal programm and delete it»)); Serial.println(F(«There are up to 7 modes and 6 pedals per mode can be configured»)); Serial.println(F(«Mode will be incative if there is no pedal configured in it»)); while (1) { while (Serial.available()) { Serial.read(); delay(1); } PORTD = 0b00000001 + (PORTD & 0b11101100); Serial.println(«»); Serial.println(F(«Enter command»)); while (!Serial.available()); PORTD = 0b00000010 + (PORTD & 0b11101100); delay(3); if (Serial.available() == 3) { int curMode = Serial.read() — 48; int curPedal = Serial.read() — 48; char cmd = Serial.read(); if (curMode > 6 || curMode < 0) { Serial.print(F(«Mode must be in 0-6. You entered «)); Serial.println(curMode); continue; } if (curPedal > 3 || curPedal < 0) { Serial.print(F(«Pedal must be in 0-3. You entered «)); Serial.println(curPedal); continue; } Serial.println(); if (cmd == ‘r’) { int beginAddress = sizeof(struct pedal) * (curMode * 6 + curPedal); Serial.print(«type: «); int curAddress = beginAddress; Serial.println(EEPROM[curAddress++]); Serial.print(«act1: «); for (int i = curAddress ; i < curAddress + (sizeof(struct pedal) — 1) / 2; i++) { Serial.print(EEPROM); Serial.print(«\t»); } Serial.println(); curAddress = beginAddress + 1 + (sizeof(struct pedal) — 1) / 2; Serial.print(«act2: «); for (int i = curAddress ; i < curAddress + (sizeof(struct pedal) — 1) / 2; i++) { Serial.print(EEPROM
); Serial.print(«\t»); } Serial.println(); } else if (cmd == ‘w’) { Serial.println(F(«Enter type:»)); PORTD = 0b00000001 + (PORTD & 0b11101100); while (!Serial.available()); int beginAddress = sizeof(struct pedal) * (curMode * 6 + curPedal); int curAddress = beginAddress; PORTD = 0b00000010 + (PORTD & 0b11101100); EEPROM[curAddress++] = (char)Serial.parseInt(); PORTD = 0b00000001 + (PORTD & 0b11101100); Serial.println(F(«Enter act1 in DEC divided by space:»)); while (Serial.available()) { Serial.read(); delay(1); } while (!Serial.available()); PORTD = 0b00000010 + (PORTD & 0b11101100); while (Serial.available()) { EEPROM[curAddress++] = (char)Serial.parseInt(); delay(1); } PORTD = 0b00000001 + (PORTD & 0b11101100); curAddress = beginAddress + 1 + (sizeof(struct pedal) — 1) / 2; Serial.println(F(«Enter act2 in DEC divided by space:»)); while (Serial.available()) { Serial.read(); delay(1); } while (!Serial.available()); PORTD = 0b00000010 + (PORTD & 0b11101100); while (Serial.available()) { EEPROM[curAddress++] = (char)Serial.parseInt(); delay(1); } PORTD = 0b00000001 + (PORTD & 0b11101100); Serial.println(F(«Finished, don’t forget to verify written data!»)); } else if (cmd == ‘e’) { int beginAddress = sizeof(struct pedal) * (curMode * 6 + curPedal); Serial.println(F(«Disabling pedal…»)); PORTD = 0b00000010 + (PORTD & 0b11101100); EEPROM[beginAddress] = 255; PORTD = 0b00000001 + (PORTD & 0b11101100); Serial.println(F(«Pedal disabled»)); } } else { Serial.println(F(«Incorrect command, please read help above»)); } }; } for (int i : ports) pinMode(i, 2); pinMode(17, 1); for (int i = 0; i < 7; i++) { for (int j = 0; j < 4; j++) { struct pedal *p = &pedals
[j]; int beginAddress = sizeof(struct pedal) * (i * 6 + j); int curAddress = beginAddress; unsigned char type = EEPROM[curAddress++]; if (type == 0 || type == 1) { p->type = type; for (int k = 0 ; k < 16; k++) { p->act1[k] = EEPROM[curAddress++]; } for (int k = 0 ; k < 16; k++) { p->act2[k] = EEPROM[curAddress++]; } } } } Keyboard.begin(); } int last = 0; void loop() { int current; if ((current = digitalRead(modeButton)) != last) { if (!current) { if (++mode >= 7) mode = 0; while (pedals[mode][0].type == 255 && pedals[mode][1].type == 255 && pedals[mode][2].type == 255 && pedals[mode][3].type == 255) if (++mode >= 7) { mode = 0; break; } } last = current; digitalWrite(2, (mode + 1) & 0b001); digitalWrite(3, (mode + 1) & 0b010); digitalWrite(4, (mode + 1) & 0b100); for (int i = 0; i < 4; i++) { pos1
= 0; pos2
= 0; state
= 0; oldState
= 0; wait
= 0; } delay(50); } for (int i = 0; i < 4; i++) { if (pedalThreads
.shouldRun()) { curPedal = i; pedalThreads
.run(); } } } void pedalAction() { struct pedal *pedal1 = &pedals[mode][curPedal]; if (pedal1->type == 255) return; unsigned char *prg; char *pos; if (pedal1->type) { int current; if ((current = digitalRead(ports[curPedal])) != oldState[curPedal]) { if (!current) state[curPedal] = !state[curPedal]; oldState[curPedal] = current; } if (!state[curPedal]) { //act1 pos2[curPedal] = 0; pos = &(pos1[curPedal]); prg = pedal1->act1; } else { //act2 pos1[curPedal] = 0; pos = &(pos2[curPedal]); prg = pedal1->act2; } } else { if (!digitalRead(ports[curPedal])) { //act1 pos2[curPedal] = 0; pos = &(pos1[curPedal]); prg = pedal1->act1; } else { //act2 pos1[curPedal] = 0; pos = &(pos2[curPedal]); prg = pedal1->act2; } } while (1) { if (wait[curPedal]) { wait[curPedal]—; return; } else if (prg[*pos] == 250) { wait[curPedal] = prg[++*pos]; } else if (prg[*pos] == 254) { //Удерживать клавишу, следующую за *pos Keyboard.press(prg[++*pos]); } else if (prg[*pos] == 253) { //Отпустить клавишу, следующую за *pos Keyboard.release(prg[++*pos]); } else if (prg[*pos] == 252) { delay(10); //»Пропуск хода», ничего не делать ++*pos; return; } else if (prg[*pos] == 251) { //Переместиться в программе на позицию в ячейке *pos+1 *pos = prg[*pos + 1]; return; } else if (prg[*pos] == 255 || prg[*pos] == 0) { //Конец программы, просто заглушка return; } else { //Отправляем нажатие клавиши Keyboard.write(prg[*pos]); } //Циклически переходим на ячейку вперёд после тех команд, после которых это необходимо if (++*pos >= 16) pos = 0; } }
Отзывы пользователей
Проанализировав отзывы счастливых владельцев игровой атрибутики, можно прийти к однозначному выводу: установка оборудования в большинстве случаев не вызывает затруднения. Справляются с ней не только взрослые, но и дети. Важно лишь следовать приведенным инструкциям, установить подходящий драйвер. И, конечно, остановиться на проверенной моделей, собравшей немало положительных отзывов.
Вот мы и разобрались с подключением и настройкой игровых руля и педалей. Вы теперь знаете, что это несложная процедура: подсоединение устройств, установка драйверов, произведение настроек в меню игры, добавление атрибута в игровое оборудование, калибровка устройства.
Магнитный датчик
Принцип работы в следующем – берется диаметрально намагниченный магнит, который надежно устанавливается в подвижной части корпуса, в нашем случае это сама баранка.
В неподвижном корпусе крепят непосредственно сам датчик, который обрабатывает значения углов поворота магнита.
Благодаря тому, что вумная электроника способна работать с магнитом на некотором расстоянии от него, то механического износа нет как такового. Ломаться тоже нечему – мелкие хрупкие детали просто отсутствуют.
Второй бочкой меда в ложке дегтя является высочайшая точность, которая получается при таком подходе – электроника способна регистрировать повороты в сотые доли градуса! Ну и третий не менее приятный бонус – небольшие размеры магнита и датчика, что делает возможным их установку хоть в руль, хоть в педали. Собственно, так и делают.
Плюсы — Бесконтактная работа, отсутствует трение и механический износ; — Высокая точность и регистрация малейших отклонений руля или педалей; — Небольшие размеры.
Минусы — Дороже чем резисторы и оптические энкодеры.
Дописывая текст про третий вид датчиков, невольно возникает чувство гордости за «наших» — до недавнего времени никто, кроме отечественной компании Gametrix
эту технологию в доступных игровых устройствах вроде не применял.
У них датчики имеют имя MaRS
(Ma
gnetic
R
esistive
S
ensor,
Ма
гнитный
Р
езистивный
С
енсор).
Проводка
Немного о том, как работает потенциометр. Если снять с него крышку, то можно увидеть, что он состоит из изогнутой токопроводящей дорожки с контактами А и С на концах и бегунка, соединенного с центральным контактом В (рис 11). Когда вал вращается против часовой стрелки, то сопротивление между А и В увеличится на то же самое количество, на какое уменьшается между С и В.
Подключается вся система по схеме стандартного джойстика, имеющего 2 оси и две кнопки. Красный провод всегда идет на средний контакт сопротивления, а вот фиолетовый (3) может быть подключен на любой из боковых, в зависимости от того, как установлено сопротивление.
С педалями не так все просто. Поворот руля эквивалентен движению джойстика влево/вправо, а нажатие педалей газ/тормоз соответственно – вверх/вниз. И если сразу нажать на обе педали, то они взаимно исключат друг друга, и ни какого действия не последует. Это одно-осевая система подключения, которую поддерживает большинство игр. Но многие современные симуляторы, типа GP3, F1-2000, TOCA 2 и т.д., используют двух-осевую систему газ/тормоз, позволяя применять на практике методы управления, связанные с одновременным использованием газа и тормоза. Ниже показаны обе схемы.
Схема подключения одно-осевого устройства
Схема подключения двух-осевого устройства
Так как много игр не поддерживают двойную ось, то будет разумно собрать коммутатор (рис. снизу), который позволит переключаться между одно- и двух-осевой системой переключателем, установленным в педальном модуле или в «приборной панели».
Поделки и аппликации машин из бумаги
Аппликации это всегда актуально, а особенно актуально, когда в семье есть сын или же внук. В любой момент можно сесть и сделать с ребенком классную поделку, которая может заинтересовать его, сделать еще более любознательным. Существует огромное множество вариантов машинок во всевозможных техниках. Это может быть, как аппликация, так и поделка, соответственно аппликация будет являться не объёмной работой, а поделка станет объемной фигуркой и даже может послужить игрушкой малышу.
Особенностью такой поделки является то, что она станет призывом к увлечению ребёнка той деятельностью, которая ему обычно симпатизирует. Именно всевозможные модели машинок в разных техниках позволят заинтересовать ребенка. Ниже представлено несколько вариантов машин в разных техниках.
Выбор необходимых устройств
Превратить современный ПК сегодня в игровой центр проще простого. Но как подключить руль и педали к компьютеру? Начнем разбирать процедуру с самого старта. А именно с приобретения необходимого оборудования.
- Чтобы затем не ломать голову над подключением слишком «заумного» устройства, перед выбором конкретной модели обязательно прочтите на форумах независимые мнения о ней. Если большое число пользователей отмечают, что у них возникали проблемы с подключением устройства, то этого достаточно, чтобы изменить свой выбор на аналогичный по характеристикам.
- Как подключить руль и педали к компьютеру? На вашем ПК обязательно должны быть порты, к которым возможно подсоединить покупку. Чаще всего используются универсальные USB. Если же разновидность порта иная, то стоит вместе с игровым оборудованием приобрести подходящий переходник. Если же к компьютеру через USB подсоединены веб-камера, мышка, принтер и иные устройства, то нужно докупить USB-хаб (разветвитель иными словами). Это позволит увеличить число свободных портов, чтобы вам было комфортно играть.
- И еще одно важное условие — операционная система, характеристики вашего компьютера должны поддерживать приобретенные игровые атрибуты.
мастер класс с фото и видео уроки
В преддверии любого праздника каждая женщина задумывается о подарке любимому мужчине и хочет его порадовать. Особое внимание всегда уделяется подаркам, созданным своими руками. Руль из сладостей станет отличным вариантом в данный момент, поскольку это мужской подарок, который может сделать каждая женщина. А вкусные конфетки станут приятным сладким бонусом, поскольку именно из них будет создаваться этот прекрасный, красивый и очень вкусный шедевр.
Мастер-класс: руль из конфет своими руками
Этот мастер-класс достаточно прост и покажет, как сделать такой руль из конфет и других материалов за короткое время. Достаточно вооружиться всем необходимым и проявить терпение.
Материалы и инструменты
- Пеноплекс шириной 2 см и размером 35 см;
- Бумага черного цвета;
- Шоколадные конфеты 500 гр;
- Красивая тесьма шириной 2 см и длиной 2 м;
- Канцелярский нож;
- Ножницы;
- Ручка;
- Линейка;
- Горячий клей-пистолет;
- Картон;
- Двусторонний скотч;
- Наклейка логотипа Ауди;
- Тарелки.
Процесс изготовления руля из конфет своими руками
- Начинают работу с заготовки. Для этого нужно взять пеноплекс, приложить на него круглую большую широкую тарелку большого диаметра и обвести ее ручкой. Получилась окружность.
- Берут тарелку меньшего размера, прикладывают к центру круга и обводят ручкой. Ширина полоски отступа должна соответствовать размеру конфет, поэтому размер тарелок нужно выбирать тщательно. Зачастую в качестве шаблона используют не только тарелки, но и кастрюли и другие емкости, которые имеют круглую форму. Приблизительное расстояние между кругами будет составлять 2 см.
- Снова берут тарелку большего размера, прикладывают к заготовке таким образом, чтобы обвести фигуру, которая образует полумесяц. Он будет находиться посередине руля. Аналогичное действие производят с тарелкой, отступив 2 см вниз.
- От руки дочерчивают ручкой еще несколько деталей, чтобы заготовка была похожа на настоящий руль.
- С помощью канцелярского ножа вырезают заготовку из пеноплекса.
- Когда заготовка под руль полностью вырезана, ее нужно всю проклеить. Для этого берут бумагу, ножницы и клеевой пистолет.
- Всю поверхность заготовки покрывают горячим клеем, но работать следует поэтапно, потому что разогретый силиконовый клей быстро застывает. Наносить клей нужно жирным слоем.
- Бумагу наклеивают на заготовку таким образом, чтобы по краям оставался хотя бы 1 см, который будет использоваться для сгиба. Это делают для того, чтобы не было видно швов. Лишнюю бумагу отрезают ножницами.
- Переворачивают заготовку на обратную сторону и отрезают бумагу на 1 см больше размера руля.
- Ребра руля промазывают горячим клеем и поочередно проклеивают бумагой, которую оставляли при вырезании, размером 1 см.
- Ножницами вырезают отдельные детали бумаги в середине руля, оставляя 1 см на сгиб.
- После того, как вырезали все детали из бумаги, в середине руля, используя горячий клей, приклеивают оставленные отрезки бумаги для сгиба. Для этого промазывают внутренние ребра руля горячим силиконовым клеем, загибают бумагу и приклеивают. Все края нужно закрывать бумагой, чтобы пеноплекса не было видно. На этом этапе одна сторона руля уже готова.
- Переворачивают заготовку руля на противоположную сторону и проклеивают бумагой точно так же, как переднюю часть.
- Когда обе стороны заготовки будут проклеены, нужно обратить внимание на то, чтобы все швы и стыки были посередине, потому что сверху нужно наклеить тесемку. Благодаря этой тесемке, все швы после наклеивания будут закрыты. Приклеивать тесьму следует так же на клеевой пистолет.
- Аналогично проклеивают тесьмой и внутреннюю часть руля.
- Когда заготовка для руля будет полностью готова, переходят к этапу приклеивания конфет. Рекомендуется предварительно выложить все конфетки на заготовку руля, чтобы составить нужную композицию и визуально распределить все конфеты на руле.
- Перед тем, как приклеивать конфеты, стоит учитывать то, что сами конфеты от горячего клея тают. Поэтому перед тем, как приклеить конфетку на руль, нужно вырезать небольшую полоску двустороннего скотча и полоску картона. На каждую конфетку приклеивают кусочек двустороннего скотча, на который крепят кусочек картона. И только после этого конфетку можно приклеивать на горячий клей, капнув капельку клея на кусочек картонки, которая приклеена к конфете.
- Весь руль обклеивают конфетками, после чего в центре руля приклеивают наклейку с логотипом ауди.
- Получился прекрасный и вкусный руль из конфет.
Можно использовать различные фото, которые позволят воссоздать такой руль из конфет любой марки и модели. Такой сладкий подарок понравится любому мужчине и не останется незамеченным. Конфеты для такого подарка можно использовать любые, желательно те, которые предпочитает человек, для которого создают этот сладкий подарок.
Перетяжка руля кожей
Это оптимальный вариант тюнинга руля. Кожаный руль – это стильно, прочно, надежно и современно. Простор для творческой мысли тут небольшой: обычно выбирают черный, либо бежевый цвет материала, в последнее время все чаще предпочитают цветные нитки, которые придают классическому рулевому колесу вид спортивного, дизайнерского руля. При большом желании можно заказать и свой рисунок на руле, но влетит это уже в копеечку. Одна только перетяжка в автомобильном ателье обойдется в пять-шесть тысяч рублей, но можно произвести такую перетяжку и своими руками, существенно сэкономив при этом.