Volant Joystick Arduino Personnalisé pour Jeux Vidéo
Composants et Fournitures
| Potentiomètre rotatif | × | 1 |
| Arduino UNO | × | 1 |
| Breadboard | × | 1 |
Outils Nécessaires
- Découpeuse laser
- Arduino Materia 101
- Imprimante 3D
Logiciels
- Arduino IDE
À Propos du Projet
Volant Arduino + Création Volante
Réalisation d'un volant simulant un joystick USB, utilisable sur Steam. Alternative économique aux simulateurs de conduite coûteux.
Transformer l'Arduino en Manette USB
La procédure flashe le firmware de la puce de communication USB (ATmega16U2) pour la faire reconnaître comme manette de jeu. Opération sûre et réversible.
- Télécharger la bibliothèque UnoJoy (inclut firmware spécial)
- Installer les drivers via
InstallUnoJoyDrivers.bat - Installer l'outil ATmel FLIP pour flasher le firmware
Flasher le Firmware
- Mettre l'Arduino en mode DFU : court-circuiter les deux pins près du connecteur USB (groupe de 6 pins)
- Exécuter
TurnIntoAJoystick.bat(UnoJoy) - Débrancher/rebrancher : l'Arduino apparaît comme « Joystick »
- Pour revenir en mode Arduino : même manipulation avec
TurnIntoAnArduino.bat
Manette Simple
Un potentiomètre 10K sur pin A0 suffit. Copier UnoJoy.h dans le dossier du sketch.
Jouer sur Steam
Steam reconnaît le volant comme manette Xbox 360. Utiliser x360ce (version 32/64 bits selon le jeu) pour mapper les axes/boutons. Copier x360ce.exe dans le dossier de l'exécutable du jeu.
Tutoriel vidéo sur ma chaîne YouTube (lien dans l'article original).
Code (Firmware Joystick HID)
/* Arduino USB Joystick HID demo */
/* Auteur: Darran Hunt - Domaine public */
/* Mise à jour RICLAMER 25/03/2014 : ports analogiques et numériques */
/* Compatible Arduino UNO (6 axes, 13 boutons) et 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
// Sortie debug lisible
#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() {
// Lecture boutons (pins 2-13)
for (int bt = 1; bt < 13; bt++) btn[bt] = digitalRead(bt + 1);
for (int on = 1; on < 13; on++) {
if (btn[on] == LOW) setButton(&joyReport, on + 16);
if (btn[on] == HIGH) clearButton(&joyReport, on + 16);
}
// Axes analogiques (A0 = volant = axe X)
for (uint8_t axis = 0; axis < 2; axis++) {
joyReport.axis[axis] = map(analogRead(axis), 350, 700, -32768, 32767);
}
// Ports non utilisés mis à 0
joyReport.axis[2] = 0;
joyReport.axis[3] = 0;
joyReport.axis[4] = analogRead(A0);
joyReport.axis[5] = analogRead(A3);
joyReport.axis[6] = analogRead(A2);
joyReport.axis[7] = 0;
sendJoyReport(&joyReport);
delay(35);
}
Pièces Personnalisées
volante_iDt4RqmPLZ.dwgvolante_idt4rqmplz_hakHRvVNYD.dxf
Schéma de Câblage

Processus de fabrication
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Transformez une vieille voiture RC en véhicule piloté au joystick avec Arduino
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Jeu interactif joystick + LEDs avec Arduino
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Portique de contrôle de température sans contact pour dépistage rapide et précis
- Jeu Pong sur Matrice NeoPixel avec Arduino Nano