Introduction: Modulaire Arduïno PC Controller

DISCLAIMER! This tutorial is currently in Dutch, because this Instructable is made for a school project. After all the steps have been completed and I have finished the project and have made a working prototype, I will translate this to English.

Het idee is om een controller voor video games te maken die via Arduïno
met de computer praat. De controller heeft aparte modules met verschillende knoppen, zodat je per spel kan bepalen welke knoppen je wel of niet wilt gebruiken.

Step 1: Module Verbindingen

De modules moeten uiteraard verbonden worden aan de controller. De bovenstaande verbinding kan ik gebruiken om de module aan de controller te 'klikken'. Ik moet wegens de dikte nog uitzoeken hoe stevig de verbinding is met diagonale bewegingen omhoog en omlaag.

Step 2: Casing

De casing is gemaakt van 3 mm dik triplex, lasergesneden. Alle panelen op de onderste na worden aan elkaar gelijmd. Het onderste paneel gaat met een scharnier open en dicht, zodat je altijd nog bij de hardware kan, wil je bijvoorbeeld nog iets aanpassen.Het prototype in de foto moeten nog gaten krijgen voor de knoppen en de zijkanten moeten nog bevestigingspunten voor de modules hebben. Mogelijk kan ik nog kijken naar het bijschuren van de randen, zodat hij wat lekkerder vasthoudt.

UPDATE: Er komt een nieuwe casing, voorzien van zwanennekken voor het toevoegen van de modules, en de gaten voor waar de knoppen zitten. Mogelijk kan er zelfs nog op gegraveerd worden, maar dit moet ik nog bekijken.

UPDATE 2: De .svg files zijn nu te downloaden. Het resultaat hiervan staat in stap 6: Prototype.

Step 3: 3D-geprinte Knoppen

De knoppen waar je op de buitenkant op gaat drukken worden 3D-geprint. De D-pad moet nog een extra laagje vanonder krijgen, net als de ABXY-knop heeft. Op deze manier blijven de knoppen in de controller zitten, en kunnen ze er niet uit vallen.

De Tinkercad projecten staan hieronder.

https://tinkercad.com/things/4NfTdLr5lce

https://tinkercad.com/things/bBJlsH6yD0w

Step 4: Arduïno Aansturing

De aansturing van de controller wordt volledig gedaan met een Arduïno Micro. De Micro, het kleinere broertje van de Leonardo, is gebaseerd op de ATMega32u4 chip. Deze chip ondersteunt directe HID-support (Human Interface Device), waardoor je makkelijk keystrokes kan aflezen van je circuit, en deze dan kan omzetten in toetsenbord input. Dit is een betere oplossing dan een Arduïno Uno, want deze heeft voor HID-support een firmware upgrade nodig. Daarnaast is het kleine formaat erg makkelijk om te gebruiken in de controller.

https://store.arduino.cc/product/A000093

Step 5: Arduino Prototype

Hierboven staat het schema wat je moet maken. Je kan altijd knoppen toevoegen, en uiteindelijk keyboard matrixes gaan maken. Daarnaast staat ook een YouTube video die de werking van de controller laat zien.

Hier staat de Arduïno code die de knoppen aansturen. (Je moet de HID library invoeren.)

#include <hid-project.h>
#include <hid-settings.h>

const int leftpin = 3;
const int rightpin = 4;
const int uppin = 5;
const int downpin = 6;
const int apin = 7;
const int bpin = 8;
const int startpin = 9;
const int selectpin = 10;
const int delayvalue = 100;

void setup() {
  pinMode(leftpin, INPUT);
  pinMode(rightpin, INPUT);
  pinMode(uppin, INPUT);
  pinMode(downpin, INPUT);
  pinMode(apin, INPUT);
  pinMode(bpin, INPUT);
  pinMode(startpin, INPUT);
  pinMode(selectpin, INPUT);
  Serial.begin(9600);
  Keyboard.begin();
}
void loop() {
  if(digitalRead(leftpin))
  {
    Keyboard.press('a');  
    delay(delayvalue);
    
  }
  if(digitalRead(rightpin))
  {
    Keyboard.press('d');  
    delay(delayvalue);
  }
  if(digitalRead(uppin))
  {
    Keyboard.press('w');  
    delay(delayvalue);
  }
  if(digitalRead(downpin))
  {
    Keyboard.press('s');  
    delay(delayvalue);
  }
    if(digitalRead(apin))
  {
    Keyboard.press(' ');  
    delay(delayvalue);
  }
    if(digitalRead(bpin))
  {
    Keyboard.press(KEY_LEFT_SHIFT);  
    delay(delayvalue);
  }
    if(digitalRead(startpin))
  {
    Keyboard.press('k');  
    delay(delayvalue);
  }
  
    if(digitalRead(selectpin))
  {
    Keyboard.press('l');  
    delay(delayvalue);
  }
  Keyboard.releaseAll();
 
}

De werking van de code is het volgende:

- Eerst worden alle knoppen gedeclareerd met constant ints.

- Daarna worden de pins van de knoppen gedeclareerd en wordt de Keyboard Simulatie gestart.

- In de loop wordt elke keer gecontroleerd of de pins van de knoppen op HIGH staan

Step 6: Casing Prototype

De uiteindelijke casing is gemaakt met lasergesneden plastic en 3D-geprinte knoppen. Deze zijn in het prototype jammer genoeg niet functioneel. Dit in verband met tijdsgebrek, wegens eigen slechte planning. Je kan hier de zwanennekken zien, aan de zijkanten van de modules en van de controller zelf.