Hi, my name is Ana Storino and I'm the designer and engineer behind this adaptive computer controller. I’m currently a junior at Sonoma Academy with a passion for creating accessible, user-friendly technology that can make a real difference in people’s lives. I’ve loved every step of designing and building this device—from the wiring to the coding to the problem-solving. If you’re interested in learning more, giving feedback, or collaborating, I’d love to hear from you!
Contact information: anajstorino@gmail.com
This demonstration shows how my adaptive computer controller functions. It features two easy-to-press buttons (left and right), each capable of triggering a computer key when pressed. In addition, the controller includes a pressure sensor that responds to gentle puffs and sips through a whistle-like attachment. A puff triggers one action, and a sip triggers another—ideal for hands-free use. Both the buttons and the pressure sensor outputs can be easily remapped to different keyboard keys (see remapping instructions below), making the device highly customizable. Everything is neatly embedded in a compact hub that contains the Arduino Leonardo and a breadboard for wiring.
Click here to access remapping interface.
Materials
Arduino Leonardo (x1)
Breadboard (x1)
Tactile Buttons (x2)
Code
Click here
CAD
Wiring the tactile push buttons:
Left button:
Connect one leg of the button to digital pin 2 on the Arduino
Connect the other leg of the button to GND (ground)
Right button:
Connect one leg of the button to digital pin 3 on the Arduino.
Connect the other leg of the button to GND (ground)
Note: make sure these two connections are on diagonal pins on the buttons (like the picture)
Wiring the MPX5010DP Pressure Sensor
The MPX5010DP is a pressure sensor that outputs an analog voltage corresponding to pressure changes (like blowing or sipping).
The MPX5010DP has 6 pins, but we only use 3
VCC (+5V Supply) - - - > connect to Arduino 5V pin
GND (ground) - - - > connect to Arduino GND
Vout (Analog Out) - - - > connect to Arduino A0 (analog pin 0)
*click here for pressure wiring specifics
Here is an easier-to-see diagram of the wiring, see wiring instructions above with descriptions to wire it up.
The only wires that needed extending were the ones connected to the pressure sensor. I soldered wires directly onto the sensor’s terminals to get the exact length I needed, ensuring a clean and reliable connection. For the buttons, I connected them straight to the Arduino and breadboard using male-to-male jumper wires, this made wiring quick and simple without any extra modifications.
The buttons are already embedded in my hub and wired directly to the Arduino for seamless input. The pressure sensor tube runs through a dedicated hole in the hub, where it connects securely to the sensor. Additionally, there’s a separate hole on the side of the hub that allows me to easily plug in the Arduino’s USB cable to connect it to a computer. This setup keeps everything neat and organized, with all components integrated into the hub for easy use and access.
Here is a tutorial on how to upload the code onto Arduino. Make sure to upload Arduino onto your computer before completing these instructions.
Downloading Arduino: link
First, print the STL file for the button top. Once printed, test the fit by gently pressing the button top into the hub. It should slide in smoothly without needing force or causing stress on the plastic. If there’s too much tension, lightly sand the edges before reprinting. A snug but easy fit will ensure the button works properly and doesn't stick.
Next, wire up the buttons as shown in the picture. Take each button and connect two wires to it—make sure they are attached diagonally across from each other on the button's legs (this ensures proper functionality when pressed). Then, thread the wires through the two holes in the hub so they come out neatly underneath. This keeps everything tidy and organized. From there, you can easily connect the wires to your Arduino inputs and ground pins. Double-check your connections before powering anything on to make sure each button will register correctly when pressed.
Now we add springs to make the buttons easier and more responsive to press. I used four identical springs, one for each button. The springs should be just tall enough to give a bit of resistance without making the button too hard to press. This setup helps the button return to its original position after being pressed, giving it a more satisfying and reliable feel. Make sure all springs are the same size so each button feels consistent when used.
First, print the STL file for the whistle. I used a flexible filament, which makes the whistle softer and more comfortable to use, especially if it’s held in the mouth.
Since the 3D printed attachment had small gaps, a lot of air was escaping before it could enter the tube and trigger the pressure sensor properly. To fix this issue, I wrapped the entire attachment in electrical tape, sealing off any leaks. Make sure to leave a hole at the top and bottom just big enough for the tube to fit snugly, this helps direct all the air through the tube and into the sensor. The tape creates an airtight seal, improving the sensor’s accuracy and making the button more responsive to breath input.
Lastly, I wanted my whistle to connect securely to the hub instead of hanging loosely. To do this, I attached a piece of magnetic tape to the side of the whistle and another matching piece on the top of the hub. This way, when the whistle isn’t being used, it can easily snap into place and stay put. The magnetic connection keeps it accessible and prevents it from getting lost, while still being easy to remove when needed. Just make sure the surfaces are clean before applying the tape so it sticks well.
Thanks so much for reading, please reach out if you have any questions!