top of page

Our Design

PROTOTYPE

Our Initial Design Idea

Our first design consisted of a single joystick with 4 buttons all placed in a row.

To space the buttons out enough to make it harder to accidentally press a button while providing a larger surface area for each component to make it easier for people with less motor function.

Programming 

The initial program utilized the built-in Keyboard library of the Arduino Leonardo to translate the input from the joystick to the WASD keys as well as the arrow keys to provide movement in simpler 2-dimensional games. The buttons were programmed to act as separate, defined keys on the keyboard that could be bound to whatever function was needed in-game.

Circuit 

The first joystick consisted of 2 inputs corresponding to the x and y axes as well as a pin for ground and power. The buttons each had 1 ground pin and 1 pin input directly to the Arduino.

Complications

The main issue with the initial design came from programming the joystick as using a keyboard as input for games greatly limits the functions that are possible, especially when certain games do not allow the user to change key binds. 

FINAL PRODUCT

The final design consists of a single main controller with a single joystick to account for the movement with 3 small buttons to act as "start", "select", and "menu" buttons. The 4 buttons from the initial design are placed in a diagonal pattern to separate from each other while allowing them to be close together for ease of access. A secondary joystick for rotation and looking around in a three-dimensional plane is in its own box connected externally to the main controller to be placed anywhere the user wants. 2-foot pedals act as the left and right bumper of a modern controller and are each wired to the main controller box.

Programming

A custom “Joystick” library was found that would allow the Arduino Leonardo to be read as a video game controller rather than a keyboard by the computer which would allow for actual calibration and testing of the controller on the computer itself using the Windows USB game controller calibration tool. The code was separated into different sections for each component (movement joystick, rotation joystick, and buttons). The main movement joystick uses a for loop to read the first four pins on the Arduino as the up, down, left, and right commands and uses a switch statement to change between cases for each direction of the joystick depending on where it is within the x or y axis range. The rotation joystick is mapped onto a complete 360-degree range for both the x and y axes using analog input so the user can look in all directions within the game.

Circuit 

The circuit design for the controller was relatively simple as most of the components were able to be directly connected to the Arduino without the need for extra components. A breadboard was used to connect the power and ground across all the components as we used up almost every pin of the Arduino. The main joystick consisted of 4 inputs and 1 ground so these inputs took up the first 4 digital pins while the second joystick consisted of 2 inputs, 2 ground, and 2 power so the inputs took up the first 2 analog pins. Each button had 1 input that was able to directly connect to the digital pins of the Arduino. 

3D Model

We talked with different volunteers with physical disabilities about how to design the joystick to be the most comfortable for them and this provided us with a great understanding of how to create different models that would allow people with varying disabilities to choose a joystick cover that is most suitable for their own specific needs. Our final 2 joystick designs that we developed were a simple u-shaped controller with padding to rest on as well as an x-shaped controller to provide a sort of armrest and grip for the joystick if needed. 

Product Testing

image.png
image.png

Team Progress

bottom of page