Joystick

by EmmaVisscher14 in Living > Video Games

29 Views, 0 Favorites, 0 Comments

Joystick

WhatsApp Image 2025-06-20 at 10.42.30.jpeg

In dit project hebben we een volledig werkende joystick gemaakt vanaf nul. Geen kant-en-klare controller, maar een zelfgebouwde combinatie van sensoren, hout, ducktape, en creatieve elektronica. En ja: hij werkt echt.

Onze joystick gebruikt drie verschillende sensoren:

– een drukknop die via een PCV-buis wordt bediend,

– een zelfgemaakte potentiometer op basis van koolstofvezeldraad,

– en een hallsensor die de positie tussen twee magneten bepaalt.

Deze sensoren verbinden we met een Arduino via een breadboard. De waarden worden uitgelezen, geprint én verwerkt tot een joystick met meerdere ‘richtingen’ net als bij een echte gamecontroller. Als je op de knop drukt, krijg je feedback op het scherm. Als je de potentiometer of de hall sensor beweegt, zie je de bijbehorende waardes. Simpel, maar effectief.

We gebruikten lasersnijden om het houten doosje te maken, en verwerkten alle sensoren in de behuizing met slimme trucs zoals tape, spijkers, kurk en magneten. Technisch gezien kun je dit een joystick noemen. Wij noemen het liever: een combinatie van techniek, prutsen, en trots.

Supplies

Hier is de uiteindelijke materialen- en kostenlijst van ons zelfgemaakte Joystick:

Materialen:

  1. 2 x kubusmagneten N45
  2. 1 x Hallsensor 49E
  3. 1 x Plywood (lasersnijden)
  4. 8 x schroeven
  5. 8 x Elastieken
  6. 1 x koolstofvezeldraad
  7. 1 x klein stukje kurk
  8. 2 x pvc-buis
  9. 1 x drukknop
  10. 1 x koperen staaf
  11. 2 x bout
  12. 1 x LDC diplay I2C

Circuit:

  1. Arduino
  2. Breadboard
  3. wires
  4. batterij 9V

Tools

Verschillend gereedschap:

  1. Lasersnij apperaat
  2. houtlijm
  3. secondenlijm
  4. boor
  5. hamer
  6. laptop
  7. ducktape
  8. schroevendraaier

Lasersnijden

WhatsApp Image 2025-06-18 at 11.58.51.jpeg

Om onze joystick netjes te kunnen monteren, hebben we eerst een houten behuizing ontworpen. Deze doos hebben we zelf ontworpen en laten lasersnijden uit 6 mm dik plywood. Zo past alles precies, en blijft het stevig genoeg voor het gebruik.

We maakten het ontwerp in Inkscape, en exporteerden dat als een bestand dat de lasersnijder direct begrijpt. De totale afmetingen van het plaatmateriaal zijn 600 × 450 mm, ruim genoeg voor alle onderdelen van het doosje.

Na het snijden hoefden we alleen nog maar de delen in elkaar te klikken en vast te lijmen met houtlijm. De openingen in het ontwerp zijn op maat gemaakt voor de sensoren en bedrading die later worden toegevoegd. Zo is alles overzichtelijk weggewerkt, zonder dat het onhandig wordt tijdens het bouwen of testen.

Arduino Circuit Maken

WhatsApp Image 2025-05-28 at 11.58.22.jpeg
WhatsApp Image 2025-06-11 at 12.04.36.jpeg
WhatsApp Image 2025-06-20 at 10.41.27.jpeg

Voor onze joystick maken we gebruik van drie verschillende sensoren: een drukknop, een hallsensor en een zelfgemaakte potentiometer. Elk van deze sensoren meet een ander aspect van de beweging of input van de gebruiker. In deze stap bouwen we het circuit op een breadboard en verbinden we alles met een Arduino Uno.

We beginnen met het aansluiten van de drukknop. Deze zit op een digitale pin (A2) in de code ingesteld, zodat we eenvoudig kunnen detecteren of de knop wordt ingedrukt of niet.

De hallsensor wordt gebruikt om de positie van een magneet te meten. Deze sensor geeft een analoge waarde afhankelijk van de afstand tussen sensor en magneet. We sluiten deze aan op pin A0 van de Arduino.

Onze potentiometer is zelfgemaakt met koolstofvezeldraad, en gedraagt zich elektrisch gezien als een standaard spanningsdeler. Door beweging van een koperen staaf verandert de weerstand, en dus ook de uitgangsspanning. Deze waarde lezen we uit op pin A1.

Alle sensoren sluiten we aan op een breadboard, dat via 5V en GND met de Arduino verbonden is. Zo kunnen we de signalen goed testen voordat we alles monteren in de behuizing. De pinnen zijn bewust zo gekozen dat we eenvoudig de waardes kunnen uitlezen via de seriële monitor. Later verwerken we deze waardes in de code om de joystick in meerdere richtingen te kunnen gebruiken.

Upload Code

WhatsApp Image 2025-06-11 at 12.04.36 (1).jpeg
Scherm­afbeelding 2025-06-18 om 13.42.10.png

Als alle sensoren goed aangesloten zijn op het breadboard, kunnen we de Arduino-code uploaden om te testen of alles werkt zoals bedoeld.

De code leest de waarden uit van drie sensoren:

  1. de hallsensor (pin A0),
  2. de potentiometer (pin A1),
  3. en de drukknop (pin A2).

In de seriële monitor van de Arduino IDE verschijnen drie regels met waardes. Zo kun je direct zien of er beweging is bij de potentiometer of hallsensor, en of de knop wordt ingedrukt. Wanneer op de knop wordt gedrukt, verschijnt het woord “POW!” in het scherm om zeker te weten dat het signaal goed doorkomt.

Sluit je Arduino via USB aan op je laptop en upload de code via de Arduino IDE. Zorg dat je het juiste board en de juiste poort geselecteerd hebt, klik op “Upload” en open daarna de seriële monitor (9600 baud).

tip: Als je geen waardes ziet, controleer of de pinnen goed overeenkomen met je code. Een klein foutje in de pin-aansluiting is zo gemaakt.

Dit is puur om te checken of inderdaad alles klopt. Nu gaan we voor onze uiteindelijke opstelling gebruik maken van een LDC display (stap 5)

LDC Display I2C

WhatsApp Image 2025-06-20 at 10.44.51 (2).jpeg

Om ons ontwerp te laten werken zonder computer maken we gebruik van een LDC display I2C. Deze is connected aan de arduino. De onderstaande code is via de laptop 1 x gestuurd naar de Arduino, die hem vervolgens onthoudt. Nu kunnen we zonder laptop maar door middel van een batterij de joystick laten runnen. De 4 pinnen zijn als volgt connected met het breadboard.

  1. De GND --> GND van breadboard
  2. VCC --> 5V van breadboard
  3. SDA --> A4 arduino
  4. SCL --> A5 arduino

Voordat je dit kan gebruiken moet je de volgende library installeren

  1. LiquidCrystal_I2C by Marco Schwartz

Hier is de uiteindelijke code die we gebruiken:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>


// I2C address 0x27 is most common; change to 0x3F if needed

LiquidCrystal_I2C lcd(0x27, 16, 2);


const int hallPin = A0; // Hall-sensor

const int potPin = A1; // Potentiometer

const int buttonPin = A2; // Drukknop (digitale pin)


void setup() {

Serial.begin(9600);

pinMode(buttonPin, INPUT_PULLUP);


lcd.init(); // Initialize LCD

lcd.backlight(); // Turn on backlight

lcd.clear(); // Clear screen

}


void loop() {

int hallValue = analogRead(hallPin);

float hallVolt = hallValue * (5.0 / 1023.0);


int potValue = analogRead(potPin);

float potVolt = potValue * (5.0 / 1023.0);


int buttonState = digitalRead(buttonPin);


// Print to Serial Monitor

Serial.print("Hall: ");

Serial.print(hallVolt, 2);

Serial.print(" V | Pot: ");

Serial.print(potVolt, 2);

Serial.print(" V");

if (buttonState == LOW) {

Serial.print(" | POW!");

}

Serial.println();


// Print to LCD

lcd.setCursor(0, 0); // First row

lcd.print("Hall:");

lcd.print(hallVolt, 2);

lcd.print("V");


lcd.setCursor(0, 1); // Second row

lcd.print("Pot:");

lcd.print(potVolt, 2);

if (buttonState == LOW) {

lcd.print(" POW!");

} else {

lcd.print(" "); // Clear leftover "POW!" text

}


delay(200);

}

Sensoren Verwerken in De Joystick

WhatsApp Image 2025-06-18 at 12.09.13 (1).jpeg
WhatsApp Image 2025-06-18 at 12.09.13 (2).jpeg
WhatsApp Image 2025-06-18 at 12.09.13.jpeg
WhatsApp Image 2025-06-18 at 12.09.14.jpeg
WhatsApp Image 2025-06-18 at 11.54.53.jpeg
WhatsApp Image 2025-06-18 at 12.20.13 (1).jpeg
WhatsApp Image 2025-06-18 at 12.20.13.jpeg

Nu het echte werk: de sensoren verwerken in de joystickbehuizing. Dit is het moment waarop elektronica en constructie samenkomen en waar je erachter komt of alles past zoals je had bedacht.

  1. Drukknop

Voor de drukknop gebruikten we een stevige PVC-buis als houder. Deze buis loopt verticaal door het midden van het houten doosje en zorgt ervoor dat je stevig op de knop kunt drukken zonder dat de bedrading loskomt of beschadigt. De bovenkant van de knop is zichtbaar aan de buitenkant van de buis, terwijl de rest netjes binnenin zit, vastgezet met ducktape. Op die manier zie je alleen wat je nodig hebt om te ‘schieten’, en blijft de bedrading beschermd.

  1. Potentiometer

De potentiometer is misschien wel het meest creatieve onderdeel. We hebben een stuk koolstofvezeldraad gespannen tussen twee spijkers in een gefreesde gleuf in een houten plaat. Deze draad vormt als het ware een spanningsdeler. Aan het uiteinde van de joystickbuis hebben we een stukje kurk bevestigd waarin een koperen staaf is geplaatst. Bij beweging van de buis glijdt die staaf over het koolstofdraad, waardoor de weerstand verandert. Dat spanningsverschil meten we via de Arduino, en zo weten we in welke richting de joystick draait.

  1. Hallsensor

Voor de hallsensor kozen we een iets andere aanpak. Twee kleine magneten zijn stevig vastgemaakt aan de binnenkant van het houten doosje met secondelijm, aan weerszijden van de sleuf. De hallsensor zelf beweegt mee met de joystickbuis — die is namelijk bevestigd aan het bewegende gedeelte. Dus in plaats van dat de magneet voorbij de sensor beweegt, schuift de sensor zelf langs de vaste magneten. Die omgekeerde opstelling werkt net zo goed, en levert een nette variatie in het gemeten magnetisch veld op. Zo kunnen we met één analoge waarde vaststellen of de joystick naar voren of achteren is bewogen.

Terugveermechanisme Bouwen

WhatsApp Image 2025-06-18 at 15.37.40.jpeg

Om ervoor te zorgen dat de joystick automatisch terugveert naar de middenstand, hebben we een simpel maar effectief mechanisme gemaakt met behulp van elastiekjes en houten staafjes.

Aan beide zijkanten van de houten behuizing hebben we twee rechte gaten gezaagd. Door deze gaten schuiven we twee houten balkjes (staafjes) die vrij kunnen bewegen. Aan beide uiteinden van elk balkje is een elastiek bevestigd, dat aan de binnenkant van de behuizing vastzit.

Wanneer je de joystick naar één kant beweegt, wordt ook het bijbehorende houten balkje meegetrokken. Het elastiek aan de andere kant rekt dan uit en zorgt voor tegendruk. Zodra je de joystick loslaat, trekt het gespannen elastiek het balkje, en dus de joystick, weer terug naar het midden.

Met dit systeem bootsen we een soort zelfcentrerend mechanisme na, zoals je dat ook bij commerciële joysticks ziet.

Joystick in Elkaar Zetten

WhatsApp Image 2025-06-18 at 13.38.17.jpeg
WhatsApp Image 2025-06-18 at 13.38.19.jpeg
WhatsApp Image 2025-06-18 at 13.38.20.jpeg

Alle losse onderdelen zijn gedaan, nu kunnen we de joystick in elkaar zetten. Dit doen we door middel van alle losse houtonderdelen met houtlijm vast te lijmen als een soort bouwpakket. Nu krijgen we 2 doosjes met de sensoren erin verwerkt en de

Finished!!

WhatsApp Image 2025-06-20 at 10.44.51.jpeg
WhatsApp Image 2025-06-20 at 10.44.51 (1).jpeg

Het enige wat we nu nog hoeven doen is de joystick helemaal testen. We sluiten alle bedradingen aan; de hallsensor, druksensor en de potentiometer. Nu kunnen we net zoals een joystick aantonen dat ons zelfgemaakte joystick in 4 verschillende richtingen kan bewegen door behulp van 2 assen. Door middel van de druksensor krijgen we ook het idee van 'schieten' bij een echte joystick terug. Door de LDC display kunnen we de waardes van alles aflezen. Nu zijn we ready voor een echte flight simulator.