Hardware
The core functionality of this project is built upon the capabilities of the ATmega32U4 microcontroller paired with an analog pressure sensor. Originally this board used 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.
---------------------------------------------------------------------------------------------------------------------------------------------
Firmware
The Arduino Leonardo bootloader is burned onto the ATmega32U4 allowing for some really nifty functionality using the USB HID class. Using built-in Arduino libraries we can easily get the board to show up as a USB keyboard, mouse, game controller, musical instrument or other such device, allowing the board to associate data from the pressure sensor (or any other inputs) with real actions on the user's computer.
In early experiments I have had great success with triggering keyboard and mouse actions based on the presence and intensity of air pressure ("sips" and "puffs") on the pressure sensor. I hope to develop some more sophisticated and abstracted firmware that will allow me to easily and arbitrarily associate events from the pressure sensor with various common keyboard, mouse and other device behaviors. For example, making a single sip trigger the keypress of the space bar.
---------------------------------------------------------------------------------------------------------------------------------------------
Software
Right now whenever the end user wants to change how input 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, especially since I'm trying to rely on standard Arduino practices as much as possible.
However, I want this device to ultimately become accessible to a demographic where it can have a truly meaningful impact, which means creating a way for users who are not developers to reconfigure their openSip+Puff in a friendly and intuitive way without ever having to see a line of code.
My current plan is to experiment with various modern, cross-platform desktop application technologies to create a simple configuration interface that sends packets of data (e.g. instructions for the board to carry out internally) to the device over a serial connection. Since I have a strong background in front-end web development I will be focusing on using some sort of browser-based method of doing this, perhaps through a framework such as Electron. While the low-level serial communication layer is a bit tricky, this will at least afford me the ability to create a really beautiful and intuitive UI and UX that I don't feel would be easily achievable with existing native desktop application frameworks like Qt.
i intrested for this feld .. i I Benefit from this page
medosonson