Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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.

  1. Download UnoJoy bibliotheek en installeer drivers via InstallUnoJoyDrivers.bat
  2. Installeer ATmel FLIP tool voor firmware flashen
  3. Zet Arduino in DFU-modus (kortsluit de twee pinnen bij de USB-poort)
  4. Draai TurnIntoAJoystick.bat – Arduino wordt nu als joystick herkend
  5. 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

  1. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  2. Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
  3. Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
  4. Interactieve Joystick Game met Arduino en LED Feedback
  5. Find Me: Slimme Item Locator met Arduino en Bluetooth
  6. Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
  7. DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
  8. Contactloze temperatuurgate voor snelle, accurate screening
  9. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  10. Bouw een krachtige FM-radio ontvanger met Arduino en TEA5767 module
  11. Arduino 101: Bouw een teller met DHT11 sensor & LCD display