Selfmade Ventilator

All of this comes "as is" without any liability or promise. This was pure explorative stuff. I am not an expert.

Last updated: 31th December 2020

As many people might get Covid-19 simultaniously, there is a chance that medical systems run out of capacity or having enough ventilators. That happened in the past and might perhaps happen again. For the vast majority of people Corvid-19 will not be much of a problem, but in worst case scenario having a shitty selfmade ventilator, that might just run for a few days and perhaps save your live is way better then suddenly not being able to breathe and have nothing at all. Therefore, like many other people around the globe, i started designing and building a very basic ventilator by myself. This page informs about it and provides ideas and 3D printing files for download, so you can build things yourself.

Actually i started this project early 2020, but then stopped early may, because the situation heavily improved in germany. As things got a lot more serious end 2020, i finished the last 10% of the project end december.

Apart from that:

Overall design
My design is based on an Arduino controlled stepper motor powering a forcer within a big glass tube (= spare part for hot dog heaters). A valve on top of the forcer pumps air into the mask at a speed, that can be changed by a single push button connected to the Arduino.

I used the following hard- and software:
Tool Description Needed? Effort to learn
3D Printer All models will do and i don't want to advertise products here. One important aspect is the maximum object size, a printer is able to create as one piece. It should idealy be at least something! like 20 x 20 x 20 cm. 90% yes, as it heavily simplifies building components. Nevertheless you can also build items in a traditional way if you want. It took me about 2 hours to set it up and learn all the needed basics. These machines are very simple to use.
 Cura  OpenSource "Slicer" software to transform mesh surfaces of objects from a CAD tool into gcode, that a 3D printer can read to print the object in layers/slices. My printer came with an old version (15.04.6) of it. If yours does also: Do not upgrade. The newest version might be better, but you need to invest a lot of time to understand all that 1000 options. I did not want that and again downgraded to my old and simple, but fully functional version of that software. If you use a 3D printer: Yes ~1 hour
 FreeCAD  OpenSource CAD software Only if you want to create/modify designs. If you just want to use designs, this is not needed. I never used CAD before, but with help of some Youtube tutorials and a few tryouts I understood all the needed basics after about a day.
 Arduino IDE  OpenSource Software (Integrated Development Environment) to program an Arduino microcontroller. I installed the version for Windwos on my PC, but you can also use a web version. Only if you use an Arduino. I "used" the IDE for 15 minutes or so. Just to open 2 or 3 examples, save my own code, compile and flash it to the Arduino. This is very simple, as it is made for people who have no or very little knowlede on software development. If you have no idea at all, maybe you need an hour or two to understand the basics (See "Help" > "Getting started").
I thinks that's about it for now, but the list might get extended in the coming days.

All together the components cost about 200 € or so.
Item Description Images/Videos Files
Pump valve Two way valve, i found on the internet and use "as is". The valve sucks air from the first tube and pumps it into the second. This is realized by two small pieces of plastic foil, that seal 6 holes when the airflow goes in one direction. I plan to screw this valve directly on top of the forcer. As it is designed for that.

BTW: It was an amazing experience, that I could physically print out in my Berlin apartment, what pretty clever people from Albuquerque have designed and shared just a few hours ago.

 The designer's video (NOT me)

My self printed copy:

 My printer printing  (15 MB, 0:27)

 The designer's CAD (NOT mine)

Exported .stl files: 

Forcer This is my own design and therefore public domain (CC0, No rights reserved). The forcer's diameter must of course match the cylinder it is supposed to move in. To seal it, there will be moveable 3D printed compression rings with a slightly bigger diameter, that are placed in the four notches. The hole on top is for the above pump valve and the vertical hole will hold a ball bearing, so that the piston rod can move it up and down.

Note: This is the second CAD drawing I ever made. First was a dummy object to tryout. So if you find a mistake, that might be the reason. I cut rubber from a bicyle tube 4 mm rubber band into each notch and have a compression ring per notch. Maybe multiple segments, so that remaining gaps are closed.

FreeCAD file:
(serves as a template for your own geometry)

Exported .stl:
(using my concrete geometry)

Compression rings

(and stripes from a bicyle tube)

I printed four of these. They need a bit of sanding respectively scraping with a knife to remove the fins. Then I cut a bicyle tube into 4 mm wide rubber stripes and placed one into each notch. One layer is enough. Make sure the rubber is not folded, but flat on the inner side of the notch. Rubber bands would also do, but i don't have rubber bands of that size. The rubber layers softly push the compression rings against the cylinder. Not exactly 100%, but all four together almost perfectly seal it with very little friction. Make sure to print the compression rings solid.

FreeCAD file:
(serves as a template for your own geometry)

Exported .stl:
(using my concrete geometry)

Cylinder I use a glass tube of 15 cm inner diameter, 21.5 cm height and 5 mm thickness, that is originally intended and sold as a hotdog heather replacement part. Glass has minimal friction, but a big plastic tube might also work.
Cylinder base To mount the bottom of the cylinder (glass tube) to a plywood board, i will use a circle with some holes for screws. This is my own design and therefore public domain (CC0, No rights reserved). The circle (149 mm outer diameter) fits into the cylinder and has a height of ~1 cm. I will screw that base onto the board and glue the cylinder onto/around it with silicone or silicone glue. Both should work and also fully seal the bottom. In case increased stability will be needed, that can easily be achieved by 3 or 4 pieces of wood, that get glued around the cylinder to hold it in place.

FreeCAD file:
(serves as a template for your own geometry)

Exported .stl:

Stepper motor I bought a "Nema 23" with 1,26 Nm. That's the one on the right. I assume, there is not much power needed to pump 0.5-1 liter of air into a lung. In emergency situations, this is normally done using an Ambu bag, where one hand squeezes the bag. And as finger muscles are not that powerful i think the motor for a ventilator can also be quite small. So maybe the smaller motor on the left (a "Nema 17") would also be sufficient, but i don't want to try that out.
Stepper motor mount The motor drives a belt, which needs to be tight. This 3 mm board with the stepper motor in the middle can easily be moved to the right position and then screwed to the plywood board.

FreeCAD file:
(serves as a template for your own geometry)

Exported .stl:

Stepper motor driver I have old powerful ones for my CNC machine, that i replaced a while ago. I will use this big stepper driver, so that it can drive the big stepper motor (a "Nema 23") above. Like in that Youtube video linked on the right, that i found after searching for about 10 seconds.  Instruction video  (Not mine)
Stepper motor power supply I have a box with maybe 50 old power adapters of all sizes. The stepper motor needs 2.8 Ampere, but my (oversized) Stepper motor driver needs 20 - 50 volt. So i use this old power adapter, i had in my CNC machine a few years ago. That works (37 Volts), but is really heavily oversized. You could go with a smaller Stepper motor driver and a normal 12 Volt power adapter. Alternatively I could simply go with two normal 12 Volt adapters in serial, so I get 24 Volt out of it.
Ball bearings I bought some bearings for inline skates. M8, 22 mm outer diameter, 7 mm thick.

Piston rod end connectors My own designs are again public domain, CC0. As piston rod i will use a round timber with 2 cm diameter, that gets fixed to the connectors with two M5 screws on each side.
The connector on the upper side (to the big wheel) is slightly asymetrical on purpose, so that the ball bearing can not fall out.

FreeCAD files:
Upper one:  pistoncon2.FCStd 
Lower one:  pistoncon1.FCStd 
(serve as a template for your own geometry)

Exported .stl:
(using my concrete geometry)

Gear transmission parts I just bought a wheel, that fits the bigger stepper motor's axis, that can drive a round Polyurethane (PU) belt between 3 and 5 mm.

As belt i bought one with 4mm diameter, that's 10 m long. So it has to be cut to size (maybe 50 cm) and to be connected to a circle. That connection can be done manually by heating up the end faces to 300 degree celsius for about 10 seconds, pressing the ends together (using 3 metal L profiles should help positioning), letting them cool down for 5 minutes, cutting away the melted outer material and cooling it down for another 20 minutes. For that you normally need a machine, that heats up to a precise temperature, but i guess some piece of metal heated up to 300 degree in my oven will do the same job. It was actually fun to see, that my oven can heat up to exactly 300 degrees. That's a sign, i guess : )

The big wheel (my own design, therefore public domain, CC0) has many options, where to mount the piston rod. Depending on the hole's position, the volume of pumped air varies.
By the way: Isn't it amazing that my 21st century  printing snapshot  looks like the  Nebra sky disk  created ~4000 years ago?! : )

To simplify mounting an axis (long M8 screw) for the big wheel, i designed and printed a screw holder, that is to be mounted on the opposite side of the plywood board. This is an optional part, that keeps the axis vertical to the board.

FreeCAD files:
(serve as a template for your own geometry)

Exported .stl:
(using my concrete geometry)

Mask I bought a standard CPR mask, but then decided to self print an open source one from the internet, as it is easier to glue an adaper to it and it actually better fits my face. There are meanwhile a lot of files for all kind of masks available for download. I use the open source mask linked on the right. To better seal it I put a stripe of foamed material on the inside. These adhesive stripes are normally used to seal windows.  Link to the mask i used 

 Link to many other masks 

Microcontroller I bought an  Arduino  UNO. The software will control the stepper motor, so that the speed can be changed by a single push button. A case for an Arduino can of course easily be downloaded and printed.

Note: A simple pulse generator made out of electronic components for a few cents would also do the job. Using a microcontroller to simply generate pulses is a massive overhead, but it's more fun and so i use one here : )

 Link to Arduino page with tutorials, examples etc. 

 Link to an Arduino UNO case to 3D print 

Software As expected, this is just a few trivial lines. My file (public domain, CC0) is linked on the right. Note, that the conrete values for changing speed need adjustment when the machine is assembled.  Ventilator.ino 
Tube I bought a 2 meter long silicone tube with 19 mm inner and 25 mm outer diameter.

Plywood I have a lot of old 15 mm plywood boards in my basement, so I simply used those.
Diversion valve A valve that switches at the patient/mask side. Again that guy from Albuquerque, who created the pump valve above, had already created one and I only needed to print it out. That's amazing.

 The designer's video (NOT me)

My printed copy:

 The designer's CAD (NOT mine)

Exported .stl files: 

Adapter My own design is again public domain, CC0. I created this little connector, that fits onto! my printed mask. The valve can therewith be glued! directly onto the mask.

FreeCAD files
 adapter.FCStd  (serves as a template for your own geometry)

Exported .stl:
 adapter.stl  (using my concrete geometry)

Assembly / Integration
Area Description Images/Videos Files
Software Important: As i (by oversight) use a normally closed contact (NCC) as a push button, you might need to modify the software if you use a normally open contact (NOC) or if you want different speeds. This is a bit of tryout, but it's very simple.

Here is how to transfer the software into the Arduino:

  1. Download the Arduino IDE linked on the right.
  2. Connect the Arduino with your PC using the USB cable. (No power adapter required)
  3. Start the Arduino IDE and follow the steps you find under "Help" > "Getting started"
  4. Create a local folder "Ventilator" and copy my file Ventilator.ino into it.
  5. In the IDE, click on the "Open" icon (Arrow up) and select your local Ventilator.ino file.
  6. In the IDE, click on the "Upload" icon (Arrow to the right).
  7. Wait 5 seconds until the program is compiled and transfered to the Arduino.
  8. That was it. You can close the IDE and disconnect the board.
 Arduino IDE 


Electrical Here is how to connect these compnents (others will of course also do):
  1. A Nema 23 stepper motor (2.8A, 1,26 Nm)
  2. A TB6600 stepper motor driver (9-42 Volt)
  3. Any power adapter, that produces 2,8 Ampere (or more) and has a direct voltage between 9 and 42 Volt. (It does not need to provide a range of voltage, but any voltage within that range will do.)
  4. An Arduino Uno (Arduino Mega or many other Arduino variants will also do).
  5. A push button.
As shown on the layout linked on the right you need to...
  • Connect Pulse+ of the stepper motor driver to the Arduino's digital pin 3
  • Connect Pulse- of the stepper motor driver attached to the Arduino's ground
  • Connect a Pushbutton between Arduino's digital pin 2 and the Arduino's +5V.
  • Connect a 10 kiloohm resistor between the Arduino's digital pin 2 to the Arduino's ground.
  • Connect the rest as shown on the layout.
  • Set the little switches on the stepper motor driver, to match the 2,8 Ampere of the motor and to (about) 6400 pulses/revolution.
  • The Arduino does not need to have a USB cable connected, but its own power adapter.
As soon as power is on, the motor will run and you can change through different speeds with the pushbutton.

 Good instruction video  (NOT mine)
(connects more/different pins, but you can ignore that part)

Mechanics The assembly is pretty much self explaining when you see the pictures or the video below. The following are just notes or aspects to consider:
  • I built a simple construction with 4 plywood boards to mount all the parts to it. It is important to have a certain height, so that there is little side pressure on the forcer.
  • Most parts of the assembly are not precise and donīt look nice, because there is no need for that. Nevertheless the machine is very solid and I would not be surprised if it could run nonstop for many months.
  • To adjust the cylinder I first installed the whole meachanism with loose screws. Then marked the position of the cylinder, dismounted the piston again, screwed the cylinder base on the plate, placed adhesive foamed material around the cylinder base, put the clinder onto it and fixed it with the two L-shaped plywood pieces, that press the cylinder against the bottom and hold it in place. This way the cylinder is sealed and you don't need any silicone or so. Things stay clean and can easily be disassembled anytime.
  • I glued the pump valve onto the forcer, as that was a lot easier then screwing it onto it (what I originally planned).
  • The ball bearings are also glued into their mounts, so they can not fall out.
  • To try things out I connected the ends of the belt using the flame of a candle. When you hold both ends a few milimeters next to the flame, the slowly melt. Then softly press them against each other, hold that for 30 seconds and then let it slowly cool down for 15 minutes. Then you can cut off the melted rest from the sides. I guess this is not the best way to connect the ends, but for tryout purposes it worked very well. I case I would ever really use! the machine, I would of course create a few belts using my 300 degree celsius oven and a piece of metal to melt the Polyurethane (PU) ends at the precise specified temperature.
  • The position of the upper piston connector on the wheel and the length of the piston depend on a lot of factors. You have to try things out. For trying out my concept I use the outermost hole and the maximum pump volume. A later modification would just take minutes, but - as written - I hope and expect to never really use this machine.

User Guide
Plug in the two power adapters. Put on the mask. Push the pushbutton a few times to select the right breathing speed. That's it. But note: As the valve on the mask side uses gravity, you must sit upright. The diversion valve will not work in the horizontal.

>>>  Video of the machine pumping air  <<< (.avi, 9 MB)

My own exploration stopped at this point. I don't expect to ever use the machine, so I will likely not finetune anything. What's additionally needed is two (upscaled) L connectors  like this  to place in the tube. Maybe 20 cm from each side. Othwerwise the tube is easily folding. If you proceed or actually use a machine like this, please let me know.

In case you have questions, advice or whatsoever ideas: Feel free to contact me.
Wolfgang Smidt, Berlin, Germany,


Some links to my other pages, that are all entirely offtopic and in german:
Landing page   Main page   Blog