Simple, low-cost "sip and puff" USB interface for expressive interactions, enabling breath-based control of keypresses, mouse actions and much more using USB HID.

openSip+Puff aims to provide a cheap, simple, open and modern alternative input method based on the breath of a user that can be easily mapped to a variety of common actions like mouse clicks and keypresses.

The ultimate goal of this project is to go beyond simple utilitarian functionality and provide a new modality for creative expression that is meaningful for people with or without limited mobility. For me this means musical expression and visual art applications, but you are welcome to take it in whatever direction you want!



The core functionality of this project is built upon the capabilities of the ATmega32U4 microcontroller running the Arduino Leonardo bootloader paired with an analog pressure sensor.

Currently this project uses the MPX12GP pressure sensor from Freescale, which requires an instrumentation amplifier in order to interface with the microcontroller. However, this sensor has proven to be hard to integrate into a manufacturable design, so I will be experimenting with another sensor very soon.


Thanks to the Arduino Leonardo bootloader, openSip+Puff can mimic generic USB devices such as keyboards, mice, game controllers, or musical instruments allowing data from the pressure sensor to be associated with real actions on the user’s computer.

The current firmware uses a rather crude data structure stored in EEPROM to do this association, but I am hoping to come up with a more elegant solution over time. If you know of a good way to do this, please consider detailing your idea in an Issue or a fork!


Currently whenever an end user wants to change how pressure data events are associated with keyboard/mouse/etc behaviors they need to dive into the firmware code, make alterations and upload a fresh sketch. For developers this is pretty trivial, but I ultimately want this process to be easier for non-developers.

Therefore my current plan is to experiment with Electron to build a modern, cross-platform desktop application using web technologies to create a simple, intuitive interface that allows for easy reconfiguration of the board over a transparent serial connection.


This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Use this project to learn, tinker and share with friends. Small commercial runs for workshops or other educational uses is completely cool, but please contact me if you’d like to mass produce this project for profit.

License: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
Authors: Jason Webb