Hands-Off Console

by yumei in Circuits > Assistive Tech

67 Views, 1 Favorites, 0 Comments

Hands-Off Console

IMG_1708.JPG

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

Print

Screenshot 2025-12-10 at 1.07.32 PM.png

The attached file is the main structure. Printing this may take a while.


Cut Wire

Photo on 12-10-25 at 1.12 PM.jpg

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

Photo on 12-2-25 at 10.21 AM.jpg
Photo on 12-2-25 at 10.23 AM.jpg
Photo on 12-2-25 at 10.39 AM.jpg
Photo on 12-2-25 at 10.39 AM #2.jpg
IMG_1697.JPG

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

IMG_1698.JPG

Take your joystick and glue the bottom to the mouth piece.

Wire Your Arduino: Joystick

IMG_1700.JPG

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

IMG_1703.JPG

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

IMG_1703.JPG

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

IMG_1703.JPG

Place the LED on the breadboard.

  1. Insert the long leg (anode) of the LED into one breadboard row.
  2. Insert the short leg (cathode) into a different row.

Connect a resistor to the LED’s short leg.

  1. One end of the 220 Ω resistor goes into the same row as the LED’s short leg.
  2. The other end of the resistor goes into a new row on the breadboard.

Connect the resistor to ground (GND).

  1. 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.

  1. 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:

  1. LED long leg → pin 13 (through breadboard row)
  2. LED short leg → resistor → GND

Correct Wiring

IMG_1701.JPG

Make sure you have all of your items wired correctly by briefly checking the following image.

Arduino IDE

Screenshot 2025-12-10 at 7.33.40 PM.png

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

IMG_1704.JPG

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!

IMG_1707.JPG
IMG_1706.JPG

Congrats!! Enjoy your new hands free console!