Introduction: DIY Ventilator Using Common Medical Supplies

About: I am a mechanical engineering PhD student at the University of Michigan. My research interests include robotics, dynamics, and controls with a specific focus on soft robots. Currently, I am exploring data-driv…

This project provides instructions for assembling a make-shift ventilator for use in emergency scenarios when not enough commercial ventilators are available, such as the current COVID-19 pandemic. An advantage of this ventilator design is that it essentially just automates the use of a manual ventilation device that is already widely used and accepted by the medical community. Plus, it can be assembled primarily from components that are already available in most hospital settings and it requires no custom fabrication of any parts (e.g. 3d printing, laser cutting, etc.).

A bag valve mask (BVM), also known as a manual resuscitator, is a handheld device used to provide positive pressure ventilation to patients who need breathing assistance. They are used to provide temporary ventilation to patients when mechanical ventilators are unavailable, but are not used for extended periods of time because they require a human to squeeze the bag at regular breathing intervals.

This DIY ventilator automates the squeezing of a BVM so that it can be used to ventilate a patient for an indefinite amount of time. Squeezing is achieved by repeatedly inflating/deflating a blood pressure cuff wrapped around the BVM. Most hospitals are equipped with compressed air and vacuum wall outlets, which can be used to inflate and deflate the blood pressure cuff, respectively. A solenoid valve regulates the flow of compressed air, which is controlled by an Arduino microcontroller.

Other than the BVM and blood pressure cuff (both of which are already available in hospitals), this design requires less than $100 worth of parts, which can be readily purchased from online sellers such as McMaster-Carr and Amazon. Suggested components and purchase links are provided, but you can swap many of the parts with other similar components if the ones listed aren't available.


Special thanks to Professor Ram Vasudevan at the University of Michigan for funding this project and Mariama Runcie, M.D. from the Harvard Affiliated Emergency Medicine Residency at Massachusetts General Hospital and Brigham and Women's Hospital for lending her medical expertise and providing feedback on the concept.

I also want to recognize Christopher Zahner, M.D. and Aisen Chacin, PhD from UTMB who independently converged on a similar design before I posted this Instructable (news article). While my device is not novel, I hope that this detailed accounting of how it was built will prove useful to others looking to recreate or improve upon the concept.


Medical Components:

-Bag valve mask, ~$30 (

-Blood pressure cuff, ~$17 (

Electronic Components:

-Arduino Uno, ~$20 (

-3-way electronic solenoid valve (12V), ~$30 (

-12 V wall adapter, ~$10 (

-10k Potentiometer, <$1 (

-TIP120 Darlington transistor, ~$2 (

-Miniature breadboard, ~$1 (

-Single core wire, ~$15 for a whole set of different colors (

Other Components:

-Brass barbed hose fitting with 10-32 threads, ~$4 (

-(x2) Plastic barbed tube fitting with 1/4 NPT threads, ~$1 (

-Plastic spacer, <$1 (

-(x2) Crush resistant oxygen tubes, ~$10 (

-Small box or other container to serve as electronics and valve housing

Step 1: Wire Up the Electronics

Using the solid core wire and the miniature breadboard, connect the Arduino, TIP 120, and potentiometer as shown in the wiring diagram. You may also want to tape or hot glue the Arduino and breadboard to a piece of cardboard, as this will help limit incidental tugging on the wires.

Note that the 1k resistor is optional. It works as insurance against electrical shorts, but if you don't have one lying around you can just replace it with a wire and everything should still work fine.

The Arduino cannot drive the valve directly because it requires more power than the Arduino's output pins can supply. Instead, the Arduino drives the TIP 120 transistor, which acts like a switch to turn the valve on and off.

The potentiometer acts as a "breathing rate adjustment knob". Tweaking the pot setting changes the voltage signal into the Arduino's A0 pin. Code running on the Arduino converts that voltage into a "breathing rate", and sets the rate of the valve opening and closing to match it.

Step 2: Wire Up the Electronic Solenoid Valve

The electronic valve does not ship with any wires connected to it, so this has to be done manually.

First, remove the top cover using a Phillips head screwdriver to expose its three screw terminals, V+, V-, and GND (consult the photo to determine which is which)

Then, attach wires by clamping them with the screws. I would suggest using orange or yellow wire for the V+ (or whatever color you used for the 12V wire on the previous step), blue or black for V-, and black for GND (or whatever color you used for the GND wire on the previous step. I used black for both V- and GND but put a little piece of tape on the GND wire so I could distinguish them.

Once the wires are attached, put the cover back on and screw it in place.

Then, connect the wires to the breadboard as shown in the updated wiring diagram.

For clarity, a circuit diagram is also included, but if you are unfamiliar with that type of notation you can just ignore it :)

Step 3: Upload Arduino Code and Test Electronics

If you don't already have it, download the Arudino IDE or open the Arduino web editor (

If you are using the Arduino Create web editor, you can access the sketch for this project here. If you are using the Arduino IDE locally on your computer, you can download the sketch from this Instructable.

Open the sketch, connect the Arduino to your computer using a USB printer cable, and upload the sketch to the Arduino. If you're having trouble uploading the sketch, help can be found here.

Now plug in the 12V power supply. The valve should periodically make a clicking sound and light up, as shown in the video. If you turn the potentiometer knob clockwise it should switch faster, and slower if you turn it counterclockwise. If this is not the behavior you're seeing, go back and check all the previous steps.

Step 4: Attach Barbed Tube Connectors to Valve

The valve has three ports: A, P, and Exhaust. When the valve is inactive, A is connected to Exhaust and P is closed. When the valve is active, A is connected to P and Exhaust is closed. We are going to connect P to a compressed air source, A to the blood pressure cuff, and Exhaust to a vacuum. With this configuration, the blood pressure cuff will inflate when the valve is active, and deflate when the valve is inactive.

The Exhaust port is designed to just be open to atmosphere, but we need to connect it to a vacuum so that the blood pressure cuff deflates more quickly. To do this, first remove the black plastic cap covering the Exhaust port. Then place the plastic spacer over the exposed threads and attach the brass barbed connector on top.

Attach plastic barbed connectors to ports A and P. Tighten with a wrench to ensure no leaks.

Step 5: Create Housing for Electronics

Since none of the wires are soldered in place, it is important to protect them from being accidentally tugged and disconnected. This can be done by placing them in a protective housing.

For the housing, I used a small cardboard box (one of the McMaster shipping boxes some of the parts came in). You could also use a small tupperware container, or something fancier if you wish.

First, lay out the valve, Arduino, and miniature breadboard in the container. Then poke/drill holes in the container for the 12V power cable and air tubes. Once the holes are finished, hot glue, tape, or zip tie the valve, Arduino, and breadboard in their desired places.

Step 6: Wrap Blood Pressure Cuff Around BVM

Disconnect the inflation bulb from the blood pressure cuff (you should be able to just pull it off). In the next step, this tube will be connected to the electronic valve.

Wrap the blood pressure cuff around the BVM. Make sure the cuff is as tight as possible without collapsing the bag.

Step 7: Attach Air Tubes

The final step is to connect the blood pressure cuff, the compressed air source, and the vacuum source to the electronic valve.

Connect the blood pressure cuff to the valve's A terminal.

Using an oxygen tube, connect the valve's P terminal to the compressed air source. Most hospitals should have compressed air outlets available at a pressure of 4 bar (58 psi) (source).

Using another oxygen tube, connect the valve's Exhaust terminal to the vacuum source. Most hospitals should have vacuum outlets available at 400mmHg (7.7 psi) below atmosphere (source).

The device is now complete except for the necessary tubes/adapters to connect the outlet of the BVM to a patient's lungs. I am not a healthcare professional so I did not include those component in the design, but it is assumed that they would be available in any hospital setting.

Step 8: Test the Device

Plug in the device. If everything is connected properly, the blood pressure cuff should inflate and deflate periodically, as shown in the video.

I am not a healthcare professional, so I do not have access to hospital compressed air or vacuum outlets. Therefore, I used a small air compressor and vacuum pump to test the device in my home. I set the pressure regulator on the compressor to 4 bar (58 psi) and the vacuum to -400 mmHg (-7.7 psi) to simulate the hospital outlets as best as possible.

Some disclaimers and things to consider:

-The breathing rate can be adjusted by turning the potentiometer (between 12-40 breaths per minute). Using my compressed air/vacuum setup, I noticed that for breathing rates greater than ~20 breaths per minute the blood pressure cuff does not have time to completely deflate between breaths. This may not be an issue when using hospital air outlets which I assume can supply higher flow rates without as much of a pressure drop, but I don't know for sure.

-The bag valve is not completely compressed during each breath. This may result in insufficient air being pumped into the patients lungs. Testing on an medical airway manikin could reveal whether this is the case. If so, this could possibly be remedied by increasing the inflation time during each breath, which would require editing the Arduino code.

-I did not test the maximum pressure capacity for the blood pressure cuff. 4 bar is much higher than the pressure normally involved in taking a blood pressure reading. The blood pressure cuff did not break during my testing, but that doesn't mean it couldn't happen if the pressure in the cuff was allowed to fully equalize before deflating.

-A BVM is designed to provide air support without any extra tubing between the valve and the patient's nose/mouth. Thus, for a real application, the length of tubing between the BVM and the patient should be kept to a minimum.

-This ventilator design is not FDA approved and should only be considered as a LAST RESORT option. It was intentionally designed to be easy to assemble from hospital equipment and commercial parts for situations where better/more sophisticated alternatives are simply not available. Improvements are encouraged!