Introduction: Odd Controller

Picture of Odd Controller

Mijn idee is om een controller te maken die anders is dan de standaard contoller qua layout en hoe je hem vast houdt. Dit omdat een controller al iets is wat bestaat en in meerdere praktische vormen opnieuw op de markt komt. Daarom wil ik een controller maken die net even wat anders is.

Behuizing:
Plastic, omdat het makkelijk te maken is met een 3d printer.
Hout is ook een mogelijkheid maar moet nog gesneden en gelijmd worden, wordt denk ik een zootje en erg zwaar voor een controller maar wel fancy.

De controller wordt waarschijnlijk aangestuurd met een Arduino (omdat ik deze ook al in bezit heb). De Arduino heeft ook alles tot beschikking wat nodig is voor een controller.

Onderdelen:

Arduino Uno

Joystick Shields

Losse thumbsticks

Buttons

Plastic/Hout

Step 1: First Prototype

Picture of First Prototype

Voor mijn eerste prototype heb ik een bal gemaakt van pentagons. Dit heb ik gedaan omdat ik een ronde vorm wou maken van hout omdat dit makkelijk en snel te snijden is uit hout.
Na het uitsnijden van de pentagons (12 stuks), met de lasersnijder in het stadslab (zie de bijlage voor de template), heb ik ze aan elkaar gelijmd met hete lijm. In het begin heb ik alleen lijm aan de binnenkant gebruikt maar voor de laatste stukjes kwam ik niet meer bij de binnenkant dus moest ik lijm aan de buitenkant toebrengen om hem vast te zetten.
Ik had nog nooit eerder met hete lijm op hout gewerkt maar dit ging prima.

Het eindresultaat is een mooie (soort) bal waar ik goed mee kan zien hoe de bal lekker in de hand zou liggen en waar ik het beste de knoppen kan plaatsen.

Step 2: Second Prototype

Picture of Second Prototype

Voor mijn tweede prototype heb ik mijn eerste prototype weer uit elkaar gehaald. Ik heb de onderdelen binnen die ik wil gaan gebruiken voor mijn controller (Joysticks x2, en een hoop buttons). Ik heb de kantjes van mijn eerste bal af gehaald waar de joysticks horen te zitten. Hier heb ik vervolgens 2 gaten (22mm) in geboord om te kijken of dit zou passen. Dit paste verder wel, alleen kwam ik er achter dat de onderkantjes (waarmee ik ze wil bestigen) best ver van het hout verwijderd zijn dus hier moet ik nog wat op verzinnen. Ook moet de bal een tikkie groter omdat de 2 joysticks anders niet naast elkaar in het doosje passen. De knopjes moet ik nog opmeten maar kan ik daarna ook verwerken in mijn volgende ontwerp voor de lasersnijder.

Step 3: Third Prototype P.1

Picture of Third Prototype P.1

Voor dit prototype heb ik het eerste prototype opnieuw uitgesneden maar dan allemaal iets groter zodat er ruimte was voor alle buttons.

Ik heb hem weer helemaal opnieuw in elkaar gezet met hete lijm (werkt erg fijn voor dit soort prototype). Ik heb eerst de onderkant aan elkaar gelijmd waar geen buttons hoeven zodat ik dit als basis kan gebruiken. Daarna eerst alle knoppen op de juiste plaats bevestigd voordat ik deze kanten aan de rest vast lijm. De knoppen heb ik ook in circuits aan elkaar gesoldeerd (ground, power, input etc.). De Joysticks had ik ook zo gedaan maar dit was iets moeilijker. Daar moet je eerst 4 gaatje voor om het gat heen boren op de juiste afstanden. Dit kan je doen door met een pen door de gaatjes een markering te maken als je de joystick door het gaatje steekt. Zelf had ik hier wel moeite mee en heb een paar extra gaatjes moeten boren. Ook heb ik de gaatjes in de joystick board iets groter geboord omdat de bouten die ik had er anders niet in paste. Sommige gaatjes had ik ook heel groot geboord zodat ik hier een beetje speling in had. Dit was belangrijk omdat de joysticks een milimeter los moeten staan van het hout anders zijn ze een beetje stroef.

De schroeven had ik in mijn hout gestopt en vast gezet met bouten, daarna had ik op de afstand die de joystick van het hout moest komen nog een aantal bouten op de schroeven geplaatst (en nog even getest) en vervolgens die schroeven op die plaats vast gelijmd. Daar de joystick op gezet en vast gezet met nog een bout er bovenop in alle hoeken.

Step 4: Third Prototype P.2

Picture of Third Prototype P.2

Op school heb ik nog uit hout, de A, B, X, en Y knoppen uitgesneden en de D-pad. Dit vond ik wel grappig aangezien de rest van de controller ook van hout is.

Toen de controller in elkaar zat en alles gewired had, had ik nog moeite met de Arduino. schijnbaar kon mijn Arduino Uno geen keyboard inputs naar een pc sturen. Na een beetje onderzoek kwam ik er achter dat ik een USB host shield kon kopen maar dit scheen ook niet te werken (die werkt alleen als je een usb apparaat aan je Arduino wilt sluiten niet andersom). Daarna kwam ik er achter dat er een andere Arduino was, de Leonardo, die wel als usb keyboard kon simuleren. Toen zag ik ook dat je je Arduino Uno kon flashen met een update zodat je dezelfde functies had alleen dit werkte ook niet voor mij. Dus heb ik uiteindelijk op school gevraagd of ze zo'n Arduino Leonardo hadden voor mij om te gebruiken en die hadden ze!

Met deze Arduino deed mijn code het ook en kon ik er een simpel spelletje mee spelen.

Arduino code (erg lang):

<p>// Joystick 1 (left)   = 8, A0 (Y), A1 (X)<br>  const int J1_SW_pin = 8; // digital pin connected to switch output
  const int J1_X_pin = 1; // analog pin connected to X output
  const int J1_Y_pin = 0; // analog pin connected to Y output
  
  // Joystick 2 (right)   = 9, A2 (Y), A3 (X)
  const int J2_SW_pin = 9; // digital pin connected to switch output
  const int J2_X_pin = 3; // analog pin connected to X output
  const int J2_Y_pin = 2; // analog pin connected to Y output
  
  // A,B,X,Y      = 6, 5, 4, 3
  const int A = 3;
  const int B = 4;
  const int X = 6;
  const int Y = 5;
  
  // D-pad        = 7, 0, 1, 2 
  const int d_up      = 10;
  const int key_up    = 218;
  const int d_down    = 7;
  const int key_down  = 217;
  const int d_left    = 2;
  const int key_left  = 216;
  const int d_right   = 0;
  const int key_right = 215;
  
  
  const int W_key = 87;
  const int A_key = 65;
  const int S_key = 83;
  const int D_key = 68;
  
  const int Enter_key = 32;
  const int ESC_key = 27;
  
void setup() {
  // Joystick 1
  pinMode(J1_SW_pin, INPUT);
  digitalWrite(J1_SW_pin, HIGH);
  // Joystick 1
  pinMode(J2_SW_pin, INPUT);
  digitalWrite(J2_SW_pin, HIGH);
  // A, B, X, Y
  //pinMode(A, INPUT); digitalWrite(A, HIGH);
  pinMode(B, INPUT); digitalWrite(B, HIGH);
  pinMode(X, INPUT); digitalWrite(X, HIGH);
  pinMode(Y, INPUT); digitalWrite(Y, HIGH);
  // D-pad
  pinMode(d_up, INPUT); digitalWrite(d_up, HIGH);
  pinMode(d_down, INPUT); digitalWrite(d_down, HIGH);
  pinMode(d_left, INPUT); digitalWrite(d_left, HIGH);
  pinMode(d_right, INPUT); digitalWrite(d_right, HIGH);
  
  pinMode(A, INPUT_PULLUP); digitalWrite(A, HIGH);
  Keyboard.begin();
  Serial.begin(9600);
  </p><p>}</p><p>void loop() {
  Keyboard.begin();
  //Up, Down, Left, Right
  //Serial.println(analogRead(J2_X_pin));
  if(analogRead(J2_X_pin) > 540){
    Keyboard.write(key_down);
    Serial.println("Key Up activated");
  }
  if(analogRead(J2_X_pin) < 500){
    Keyboard.write(key_up);
    Serial.println("Key Up activated");
  }
  if(analogRead(J2_Y_pin) > 540){
    Keyboard.write(key_right);
    Serial.println("Key Up activated");
  }
  if(analogRead(J2_Y_pin) < 500){
    Keyboard.write(key_left);
    Serial.println("Key Up activated");
  }
  //WASD
  if(analogRead(J1_X_pin) > 540){
    Keyboard.write(S_key);
    Serial.println("Key Up activated");
  }
  if(analogRead(J1_X_pin) < 500){
    Keyboard.write(W_key);
    Serial.println("Key Up activated");
  }
  if(analogRead(J1_Y_pin) > 540){
    Keyboard.write(D_key);
    Serial.println("Key Up activated");
  }
  if(analogRead(J1_Y_pin) < 500){
    Keyboard.write(A_key);
    Serial.println("Key Up activated");
  }
  
  //A, B, X, Y
  if(!digitalRead(A)){
    Keyboard.write(Enter_key);
    Serial.println("A key");
  }
  if(!digitalRead(B)){
    Keyboard.write(ESC_key);
    Serial.println("B key");
  }
  
  //Up, Down, Left, Right
  if(!digitalRead(d_up)){
    Keyboard.write(key_up);
    Serial.println("Up key");
  }
  if(!digitalRead(d_down)){
    Keyboard.write(key_down);
    Serial.println("Key down");
  }
  if(!digitalRead(d_left)){
    Keyboard.write(key_left);
    Serial.println("Key left");
  }
  if(!digitalRead(d_right)){
    Keyboard.write(key_right);
    Serial.println("key right");
  }
  
  
  
  
  
  //Keyboard.releaseAll();</p><p>//code om inputs uit te lezen (voor mijn Uno)
  //Joystick 1
//  Serial.print("Joystick 1:");
//  Serial.print("\n");
//  Serial.print("Switch:  ");
//  Serial.print(digitalRead(J1_SW_pin));
//  Serial.print("\n");
//  Serial.print("X-axis: ");
//  Serial.print(analogRead(J1_X_pin));
//  Serial.print("\n");
//  Serial.print("Y-axis: ");
//  Serial.println(analogRead(J1_Y_pin));
//  Serial.print("\n\n");
//  
//  //Joystick 2
//  Serial.print("Joystick 2:");
//  Serial.print("\n");
//  Serial.print("Switch:  ");
//  Serial.print(digitalRead(J2_SW_pin));
//  Serial.print("\n");
//  Serial.print("X-axis: ");
//  Serial.print(analogRead(J2_X_pin));
//  Serial.print("\n");
//  Serial.print("Y-axis: ");
//  Serial.println(analogRead(J2_Y_pin));
//  Serial.print("\n\n");
//  
//  //A, B, X, Y
//  Serial.print("A:"); Serial.print(digitalRead(A));
//  Serial.print("  B:"); Serial.print(digitalRead(B));
//  Serial.print("  X:"); Serial.print(digitalRead(X));
//  Serial.print("  Y:"); Serial.print(digitalRead(Y));
//  Serial.print("\n\n");
//  
//  //A, B, X, Y
//  Serial.print("Up:"); Serial.print(digitalRead(d_up));
//  Serial.print("  Down:"); Serial.print(digitalRead(d_down));
//  Serial.print("  Left:"); Serial.print(digitalRead(d_left));
//  Serial.print("  Right:"); Serial.print(digitalRead(d_right));
//  Serial.print("\n\n");
//  delay(500);
}</p>

Comments

tomatoskins (author)2016-12-20

That is odd. But I like it! How does it play compared to a regular controller?