Hands-Off Console
The Hands-Off Console is a device that helps people with different disabilities play video games or use a computer more easily. It works by turning simple actions such as puffing into your mouth or moving your head—into keyboard inputs. Its goal is to make gaming and computer use more accessible for everyone.
Supplies
- Hot glue gun and refills
- Female to male wires
- A long wire (of any material)
- A joystick
- Sip and puff
- Sensor
- 3D printer and filament
- LED light
- Adapter
- Arduino Leonardo
- Breadboard
- Resistor
The attached file is the main structure. Printing this may take a while.
Downloads
Cut Wire
Once you have your structure, cut a long piece of wire. The measurement differs from person to person, just make sure it's a little longer than the length of the surface of your desk to your mouth.
Glue It Down
Take everything but the large box with the rectangular cut outs on the top from what you recently printed and glue the wire against the inside of each box until its a consecutive line.
Joystick Time
Take your joystick and glue the bottom to the mouth piece.
Wire Your Arduino: Joystick
On your joystick, there should be five conductors, each labelled with. GND or VRx or so on. Take your female to male wires and connect them to your Arduino.
Please use this guide to figure out where each wire connects to where.
Joystick Pin Connects To (Arduino Leonardo) Notes
VCC 5V Powers the joystick
GND GND Ground connection
VRx (X-axis) A0 Analog read for left-right motion
VRy (Y-axis) A1 Analog read for up-down motion
SW (Button) D2 Digital read for joystick press
It should end up looking something like this.
Wire Your Arduino: Sip and Puff
Next, take your Sip and Puff and do the same, following the guide below. If there isn't enough of one output on the Arduino, use your breadboard.
Sip and Puff Pin Connects To (Arduino Leonardo) Notes
VCC 5V Powers the Sip and puff
GND GND Ground connection
OUT Digital Pin 2 Digital read for sip and puff press
Wire Your Arduino: Sensor
Sensor Pin Connects To (Arduino Leonardo) Notes
VCC 5V Powers the Sensor
GND GND Ground connection
OUT Outputs HIGH(1) or LOW(0)depending Signal read
Wire Your Arduino: LED Light
Place the LED on the breadboard.
- Insert the long leg (anode) of the LED into one breadboard row.
- Insert the short leg (cathode) into a different row.
Connect a resistor to the LED’s short leg.
- One end of the 220 Ω resistor goes into the same row as the LED’s short leg.
- The other end of the resistor goes into a new row on the breadboard.
Connect the resistor to ground (GND).
- Use a jumper wire to connect the row with the other end of the resistor to the GND pin on the Arduino Leonardo.
Connect the LED’s long leg (anode) to a digital pin.
- Use a jumper wire to connect the row with the LED’s long leg to digital pin 13 on the Arduino Leonardo.
Double-check all connections:
- LED long leg → pin 13 (through breadboard row)
- LED short leg → resistor → GND
Correct Wiring
Make sure you have all of your items wired correctly by briefly checking the following image.
Arduino IDE
Install Arduino IDE on your computer and connect your Arduino with your adapter. Copy the following code into Arduino IDE and click Verify (the button on the top right corner with the check mark) and then click Upload (the button directly beside it with the arrow pointing towards the left).
#include <Mouse.h>
#include <Keyboard.h>
// Pin definitions
const int joystickX = A0;
const int joystickY = A1;
const int joystickBtn = 2;
const int irSensor = 3;
const int pressureSwitch = 4;
const int ledPin = 5;
// Joystick calibration
const int threshold = 10; // deadzone for joystick
void setup() {
pinMode(joystickBtn, INPUT_PULLUP);
pinMode(irSensor, INPUT);
pinMode(pressureSwitch, INPUT);
pinMode(ledPin, OUTPUT);
Mouse.begin();
Keyboard.begin();
}
void loop() {
// ---- Joystick Mouse Control ----
int xVal = analogRead(joystickX) - 512;
int yVal = analogRead(joystickY) - 512;
if(abs(xVal) > threshold || abs(yVal) > threshold){
Mouse.move(xVal/20, yVal/20); // adjust speed
}
// Joystick button click
if(digitalRead(joystickBtn) == LOW){
Mouse.press(MOUSE_LEFT);
} else {
Mouse.release(MOUSE_LEFT);
}
// ---- IR Sensor ----
if(digitalRead(irSensor) == HIGH){
Keyboard.press('w');
} else {
Keyboard.release('w');
}
// ---- Pressure Switch ----
if(digitalRead(pressureSwitch) == HIGH){
Keyboard.press('a');
digitalWrite(ledPin, HIGH);
} else {
Keyboard.release('a');
digitalWrite(ledPin, LOW);
}
delay(10); // small delay to reduce noise
}
Start Piecing Things Together
Once you have all your electronics wired correctly and working with the Arduino IDE, grab your glue gun again and glue the sensor vertically on the top surface of your mouth piece as well as your sip and puff on top of your joystick. It should end up looking like something like this.
You're Done!
Congrats!! Enjoy your new hands free console!