Arduino Controlled SIP & PUFF Switch


Introduction: Arduino Controlled SIP & PUFF Switch

The Arduino series of micro-controllers opens up a huge world of possibilities for novice programmers and hobbyists! With freely available development systems and tutorials, and a vast array of library functions and sample sketches, just about anyone can succeed in designing and building projects that once would have required an advanced degree in electronics and programming.

When I set out to develop my SIP&PUFF controlled kayak, the subject of another Instructable, I discovered that commercially available SIP&PUFF switches were very costly, and thus prohibitive for many hobbyists to experiment with in their designs.

This Instructable will fully detail how to construct a u-contoller based SIP&PUFF switch with the minimum and least expensive hardware I know of. I'll present complete purchasing info and detail how to fabricate a few parts you may wish to make yourself.


1.  1EA Arduino microController - I love the outdated Duemilinove, but you can use just about ANY of the available models for this rather simple project. I bought mine from for approximately $34.

2.   2EA DesignFlex PSF102 Series Pressure/Vacuum Switches, Part Number: 7882-710. Visit their web site for details: I purchased my switches through ((847) 965-9808) for about $18 each.

3.   Several Feet 1/16" ID X 3/16" OD Tygon Tubing, available from McMaster-Carr ( under their Part Number: 5466K31, for $1.09 per foot.

4.   4EA 1/16" X  10-32 Barbed Tube Fittings, available from McMaster-Carr under their Part Number: 2974K123, for $4.21 per package of 10.

5.   1EA 3/8" X 2-1/4" Polycarbonate Rod, or equivalent, for the Mouthpiece. Look at McMaster-Carr's Part Number 8571K13 at $1.82 per foot.

6.   1EA .65" X .50" X .25" Polycarbonate/Acrylic/Plastic/Delrin/Brass (your choice) small block to make the "Y" Manifold from. Even Easier - Purchase this part from McMaster-Carr with their Part Number: 2974K391, but you'll buy a package of 10 for $7.10.



Utilizing the DesignFlex PSF102 Series Pressure/Vacuum Switches, Part# 7882-710, is as simple as choosing the HIGH (Pressure) Port on one and the Low (Vacuum) Port on the other.

Connect one of the terminals from each switch together and then to Ground (for Negative Logic). From the switch of which you are using the High Port, connect the other terminal to the PUFFinput pin of the uController. From the switch of which you are using the Low Port, connect the other terminal to the SIPinput pin of the uController.

In the completed assembly, Sipping on the Mouthpiece will Ground the SIPinput pin of the uController, and Puffing (blowing lightly) into the Mouthpiece will Ground the PUFFinput pin of the uController.


If you care to make your "Y" Manifold, the photos attached to this step should give you all the info you need. Note how the .159 holes (for 10-32 thread) drilled in from opposite sides interfere with each other slightly, creating an open air passage between all the holes.

After drilling the holes, tap them with a 10-32 Bottoming Tap. Use a small sliver of Plumbers' Tape when you install the 1/16 X 10-32 Barbed Tube Fittings.

Alternatively, purchase a completed "Y" Adapter from McMaster-Carr ( with their Part Number: 2974K391. You'll get a package of 10 for $7.10.

In case it's not clear, the two holes on one side are at 0.145" centers. That leaves enough room for the barbed fittings to be tightened into place. Holes for 10-32 are 0.159"



The Mouthpiece may be the only part of this design you actually need to fabricate yourself. I am sure there are other solutions out there, but I haven't found them and this will fit the 1/16 X 10-32 Barbed Tube Fitting utilized in this design.

Use just about any solid plastic type material for this part: Polycarbonate, Acrylic, Delrin, etc.

Start with a rod of approximately 3/8" Diameter and 2-1/4" in length. Put the rod in a lathe and drill a 0.159 hole all the way through it. Later, you will tap the one end with a 10-32 Bottoming Tap for the Barbed Fitting.

Cut some smooth grooves near the mouth end of the tube to enable the user to grip it with their lips and teeth. Polish it up while still in the lathe with scouring pad material to remove all roughness and sharp edges.


I have included a portion of the Arduino Duemilinove schematic to illustrate the connections I used for my project. You can use any of the available pins you wish for your design and modify the code accordingly.

Tying the Common connections to Ground means that you will be implementing Negative Logic. That is to say that an Active Switch is indicated by a LOW (GND) on the Signal Pin of that Switch.

My code example illustrates activating the pull-up resistors for the SIPinput and PUFFinput pins so you would not need to add pull-up resistors in your design. Simply allow the switches to drive their signal low to indicate they have been activated.

Following is the Code Segment that is pertinent to implementing this SIP&PUFF Switch in my design:

// ----------------------------------------------------------------
// Mark Theobald -
// Free to Use in Any Way You Like!
// ----------------------------------------------------------------

// ----------------------------------------------------------------
// ----------------------------------------------------------------
int PUFFinput  = 9;
int SIPinput      = 10;

// ----------------------------------------------------------------
// TIME CONSTANTS - For 16MHz Oscillator
// ----------------------------------------------------------------
long VeryLongCt    = 100000;   //Approximately 2 seconds
long MinLongCt     = 20000;     //Approximately 0.6 second
long DebounceCt  = 4000;       //Approximately 0.1 second

// ----------------------------------------------------------------
// ----------------------------------------------------------------
void setup()  {

pinMode( SIPinput, INPUT );
pinMode( PUFFinput, INPUT );

digitalWrite( SIPinput, HIGH );    //Turn on 20k pullup resistors
digitalWrite( PUFFinput, HIGH );  }       //to simplify switch input

// ----------------------------------------------------------------
// ----------------------------------------------------------------
void loop()  {
int GotCmd;
long Counter;

Counter   = 0;     //Start each loop with the Counter Reset to 0
GotCmd  = 0;

while ( ! digitalRead( SIPinput ) )   {     //Negative Logic is being used!

     //Add code here to monitor the outside world and react as needed

     if ( Counter++ > VeryLongCt )   {
          //Add code to RespondToVeryLongSip(); without waiting for Sip release

          while ( ! digitalRead( SIPinput ) ) //then wait for Sip release

               //Add code here to monitor the outside world and react as needed

           }   }

if ( ! GotCmd )   {               //There was not a VERY Long SIP...
     if ( Counter > MinLongCt )         //but there was a Long SIP
          //Add code to RespondToLongSip();

     else if ( Counter > DebounceCt )       //or, there was a valid Short Sip
          //Add code to RespondToShortSip();   }

Counter   = 0;
GotCmd  = 0;

while ( ! digitalRead( PUFFinput ) )   {

     //Add code here to monitor the outside world and react as needed

     if ( Counter++ > VeryLongCt )   {
          //Add code to RespondToVeryLongPuff(); without waiting for Puff release

          while ( ! digitalRead( PUFFinput ) ) //then wait for Puff release

               //Add code here to monitor the outside world and react as needed

          }   }

if ( ! GotCmd )   {
     if ( Counter > MinLongCt )                //Long PUFF
          //Add code to RespondToLongPuff();

     else if ( Counter > DebounceCt )
          //Add code to RespondToShortPuff(); } } }

// ----------------------------------------------------------------
// ----------------------------------------------------------------

Note that the Code Segments for the SIP section and the PUFF section are identical.

When a SIP or PUFF is held for a long time (2+ seconds), the code assumes that some action must be taken immmediately without waiting for the SIP or PUFF to be released. Otherwise, the code will run "RespondTo...()" functions based on Very Short ( 0.1 to 0.6 second ) Sips and Puffs, and somewhat Longer ( 0.6 to 2 seconds ) Sips and Puffs. The Time Constants may be adjusted as the designer feels is neccessary.

Step 6: WHAT ELSE?

Your particular design will dictate what your housing may look like as well as how you will be supplying power to the arduino uController. The Arduino uControlers run very well on a wide range of voltages, as low as 4VDC up to about 15VDC, giving you many choices on how to power it.

If you need to talk to a USB Arduino such as the Duemilinove over a Serial (Rs-232) port, take a look at's TTL to RS-232 Level Shifter boards. They come in completed assemblies and in kit form, starting at about $6. I like the one in the photo attached to this section, RS232 Shifter SMD No DB9 sku: PRT-08780, for ~$10.



    • Clocks Contest

      Clocks Contest
    • Creative Misuse Contest

      Creative Misuse Contest
    • Oil Contest

      Oil Contest

    14 Discussions

    can u send me this project's all details to my mail id

    also u can send me pdf of this.

    I'm a Quadriplegic can't move from neck down I use Sip N Puff controls to drive my wheelchair, I've always wondered if it was possible to fix something up to drive an RC car, do you know of anything or have you ever herd of anybody doing this? I'm looking for something that I can turn the car not just go forward and backward.

    Is this likely a 2 switch setup? ($160) or is there simply a single pressure switch available? I need a switch that if I sustain a puff/sip the switch will close until I release (momentary)..

    1 reply

    Yes, this design uses two of the same (very) low pressure/vacuum switches joined on a 'Y' junction. One is connected at the HIGH (pressure) port and the other at the LOW (vacuum) port. The Common pins of the switches are tied together, and the switches can be configured as Active High or Active Low, depending on which level the Common pin is tied to. They are so sensitive that the user does not need to form a complete seal around the mouthpiece.

    The switches stay closed so long as there is the slightest amount of pressure or vacuum, however they do not give indication of higher or lower pressure/vacuum like a transducer switch would. There is extremely little or even no airflow through the switch, so holding a Sip or Puff is quite easy and the tube stays relatively dry.

    Why not use a pressure transducer? You'd only need one, plus a precious analogue pin, and this would allow you to use graduated sips and puffs (hard puff/soft puff,etc.) as well. This would allow quite a range of short commands, assuming your client has sufficient breath control. It would also be amenable to control using a sealed bulb - This would avoid the problem of using up all the puff or sip, which is the curse of concertina players everywhere, amongst many others.

    Would it be an idea to include a drool catcher as well? Or is drool resistance the reason the Designflex units are so satisfyingly expensive?

    5 replies

    I DO like the idea of measuring the force of the Sip and Puff! Still...

    These switches are close-ended (or at least nearly so for the purpose) so no air actually travels through the tube. It takes the lightest Sip and Puff against the mouthpiece to activate this very sensitive switch, so you hardly have to form a seal around the mouthpiece at all. The fact that no air is traveling throught the tube also greatly minimizes imparting saliva into the mouthpiece.

    It is not typical for users of such devices to think about the amount of pressure or vacuum they apply to the mouthpiece, but rather to only be concerned with the time of these very light, fatigue-free Sips and Puffs.

    I can imagine a few applications, though, where measuring the amount of pressure applied could provide for some unique capabilities. One might be in a device that swings a bat or golf club, or flings a Frisbee. Another application might be to use a hard Sip or Puff to activate an Emergency Stop or a Full Speed Ahead function.

    Thanks for the suggestion - I am going to look into transducers and see if there is an inexpensive and reliable device for both vacuum and pressure monitoring.

    Transducers are similarly closed-ended, and can be very sensitive. The same device can usually do both vacuum and pressure, as they often have an internal reference.

    Here are a couple of links you might find interesting:

    This describes interfacing one with a microcontroller, in an altimeter for a rocket, yet. The principles look straightforward though.

    This is a link to an example part (as used in the previous link). This one wouldn't be much use for your application, but I'll bet someone is making them with a spigot. Hell, for $14/unit it would be worth improvising.

    I don't know what pressure the human body is capable of generating though - 1 ATM is probably far beyond us. Being an analog device I'm guessing it's only a software problem to recalibrate, though.

    Sounds like you have an interesting project there.

    Thanks, RBLEE, for your interest in, and suggestions for, my project!

    A human can probably create up to about 3 or 4 PSI with some effort, more than you would want to expect from an adaptive equipment user. It is more likely that a momentary 1 PSI Puff would be the most you would want to expect for a High Pressure Command.

    There are transducers out there that are way more than sensitive enough to measure these low pressure variations, and I will definitely consider investigating them as the need arises.

    Other UP-sides to the switches I used are: 1. They are mechanically VERY easy to implement. No PCBA or supporting circuirtry is required, 2. The sensitivity is absolutely Perfect, right out of the box, 3. No calibration, ADC, or S/W is required to implement them, and 4. They are not very sensitive to salty and/or wet environments.

    Thanks for your links. These smaller packages are what I was originally thinking about when you mentioned transducers.

    I found this larger device that would actually work perfectly: Model TDH31. The version of this one that outputs 0 to 5VDC would be very easy to implement in my design and, as you suggested, would allow for measuring varying forces of both Sips and Puffs.

    Although my Motorized Kayak project would not benefit from this capability, I will definitely keep it in mind for future projects. The down-side to this particular device is 1. Cost: It is $90, and 2. While it outputs 0 to 5VDC, it needs 12VDC to operate on. I would want to be sure that it would still work OK down to about 8 or 9VDC as does the Arduino and other components of my current design.

    I'll take a further look at some of the devices you provided a link for, as well as some of the even smaller devices that we use in our avionics products.


    This is the link you'll find most use, I reckon:

    fantastic! these type of instructables are great for the disabled community and their family. While many people with hand use issues may not be able to build this, there are family members and friends looking for ways to help out.
    The price of durable medical equipment (DME) is usually out outrageous with markups of well over 100%. Many times insurance companies will pay, but there are many young people who were paralyzed through no fault of their own, and could not collect a dime in compensation, forced onto Medicaid , which many times, since it is state by state, does not pay very much or ill not pay for many items like a wheelchair.
    The price of a real wheelchair is well over $5000. That is what is needed in many
    cases. Steel is usually too heavy, since many people if they are going to be independent , they need to be able to break down the wheelchair and put in behind them in the car, it is a lot of strain on their shoulders.

    great work with many expandable possibities due to the arduino

    Awesome project! For those of us not in the industry, could you give us a sense of what "very costly" means for a commercial sip&puff? You've specked this project out at just under US$100 (I assumed 9 feet of tygon, to get a nice round $10 :-). Is that half of a commercial unit? 10%?

    2 replies

    Thanks! I have seen just the switch and mouthpiece units starting around $80. They go up from there. This project adds the endless capabilities of a microcontroller to take a project to the next step - intelligently timing and responding to Sip & Puff commands, and the ability to control the rest of the project beyond the user interface.

    Referring to my earlier Instructable:

    The same Arduino that manages the Sip&Puff portion of the design also controls the Operator Display Panel, communicates with the Motor Driver, and monitors the RC Throttle Input as well as the Man-Overboard Switch.

    Thanks for the info. It's interesting to me that a commercial unit is just about the same cost as building it yourself ($80 vs. $65 without the uC); I would have expected a bigger price differential because the target market is medical insurance.

    You might consider putting all of that text into the Intro step. Making the connection to your other I'ble (and pointing out that the same Arduino can handle everything) is really cool.