Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
Onderdelen en Benodigdheden
| Draaipotentiometer | × | 1 |
| Arduino UNO | × | 1 |
| Breadboard | × | 1 |
Benodigde Tools en Machines
- Lasercutter
- Arduino Materia 101
- 3D Printer
Apps en Online Diensten
- Arduino IDE
Over dit Project
Arduino Joystick + Vliegende Creatie
In dit project bouwen we een stuurwiel dat een joystick simuleert met behulp van Arduino. Het werkt als een controller op Steam. Als gepassioneerde racegamer was ik het zat om met toetsenbord of joystick te rijden, en professionele simulators waren te duur.
Arduino omzetten tot Controller
We flashen de communicatiechip van de Arduino (ATmega16U2) met UnoJoy firmware zodat deze herkend wordt als USB-gamepad. De procedure is veilig en reversibel.
- Download UnoJoy bibliotheek en installeer drivers via InstallUnoJoyDrivers.bat
- Installeer ATmel FLIP tool voor firmware flashen
- Zet Arduino in DFU-modus (kortsluit de twee pinnen bij de USB-poort)
- Draai TurnIntoAJoystick.bat – Arduino wordt nu als joystick herkend
- Om terug te gaan: zelfde procedure met TurnIntoAnArduino.bat
Eenvoudige Controller
Voor een stuurwiel heb je een 10K potentiometer nodig op pin A0. De code gebruikt de UnoJoy bibliotheek (kopieer UnoJoy.h naar je sketch map).
Spelen op Steam
Steam herkent het als Xbox 360 controller. Gebruik x360ce (32/64-bit) om de USB-controller te mappen op een virtuele Xbox 360 gamepad. Plaats x360ce.exe in de game-map en start het.
Er is een videotutorial op mijn YouTube-kanaal. Vragen? Neem contact op!
Code
/* Arduino USB Joystick HID demo */
/* Auteur: Darran Hunt, Publiek Domein */
/* Update RICLAMER 25/03/2014: Analog/Digitale poorten */
/* Voor Arduino UNO (6 assen, 13 knoppen), compatibel met Mega */
#undef DEBUG
#define NUM_BUTTONS 40
#define NUM_AXES 8
typedef struct joyReport_t {
int16_t axis[NUM_AXES];
uint8_t button[(NUM_BUTTONS + 7) / 8];
} joyReport_t;
joyReport_t joyReport;
uint8_t btn[12];
int fulloff = 0;
void setup() {
for (int portId = 2; portId < 13; portId++) {
pinMode(portId, INPUT_PULLUP);
}
Serial.begin(115200);
delay(200);
for (uint8_t ind = 0; ind < 8; ind++) joyReport.axis[ind] = ind * 1000;
for (uint8_t ind = 0; ind < sizeof(joyReport.button); ind++) joyReport.button[ind] = 0;
}
void sendJoyReport(struct joyReport_t *report) {
#ifndef DEBUG
Serial.write((uint8_t *)report, sizeof(joyReport_t));
#else
for (uint8_t ind = 0; ind < NUM_AXES; ind++) {
Serial.print("axis["); Serial.print(ind); Serial.print("]= ");
Serial.print(report->axis[ind]); Serial.print(" ");
}
Serial.println();
for (uint8_t ind = 0; ind < NUM_BUTTONS / 8; ind++) {
Serial.print("button["); Serial.print(ind); Serial.print("]= ");
Serial.print(report->button[ind], HEX); Serial.print(" ");
}
Serial.println();
#endif
}
void setButton(joyReport_t *joy, uint8_t button) {
uint8_t index = button / 8;
uint8_t bit = button - 8 * index;
joy->button[index] |= 1 << bit;
}
void clearButton(joyReport_t *joy, uint8_t button) {
uint8_t index = button / 8;
uint8_t bit = button - 8 * index;
joy->button[index] &= ~(1 << bit);
}
void loop() {
// Knoppen uitlezen (pinnen 2-13)
for (int bt = 1; bt < 13; bt++) btn[bt] = digitalRead(bt + 1);
// Knoppen verwerken (offset 16)
for (int on = 1; on < 13; on++) {
if (btn[on] == LOW) setButton(&joyReport, on + 16);
if (btn[on] == HIGH) clearButton(&joyReport, on + 16);
}
// Analog assen (alleen 2 in dit voorbeeld: X en Y)
for (uint8_t axis = 0; axis < 2; axis++) {
joyReport.axis[axis] = map(analogRead(axis), 350, 700, -32768, 32767);
}
// Ongebruikte assen op 0
joyReport.axis[3] = 0;
joyReport.axis[4] = analogRead(A0);
joyReport.axis[5] = analogRead(A3);
joyReport.axis[6] = analogRead(A2);
joyReport.axis[7] = 0;
joyReport.axis[8] = 0;
sendJoyReport(&joyReport);
delay(35);
fulloff = 0;
}
3D-Modellen
Beschikbaar: volante_iDt4RqmPLZ.dwg en volante_idt4rqmplz_hakHRvVNYD.dxf
Schema
Aansluitschema beschikbaar in de originele documentatie.
Productieproces
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
- Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
- Interactieve Joystick Game met Arduino en LED Feedback
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Contactloze temperatuurgate voor snelle, accurate screening
- NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
- Bouw een krachtige FM-radio ontvanger met Arduino en TEA5767 module
- Arduino 101: Bouw een teller met DHT11 sensor & LCD display