Introduction: Resp.PI : Affordable, Simple COVID-19 Ventilator

Project Overview

Resp-PI is a project which was born in a garage in Nancy (France) and ended in the FabLab of Ecole Polytechnique in Paris. It started with a group of engineers, technicians and students whose plan was to develop an 'old school', numerically-controlled, intuitive and inexpensive ventilator which can be built rapidly within a Fablab.

Given the crisis related to the COVID-19 pandemic, the objective is to allow any individual or teams who has access to a Fablab to construct such a ventilator and make it available for use in a medical setting, to assist a person in a state of respiratory distress.

A small team should be able to build the ventilator in only one or two days and the required supplies are common and affordable. The ventilator can be made using only a laser cutter or a CNC milling machine and a 3D printer.

The project is now in the hands of three Bachelor students from Ecole Polytechnique in Paris, who have developed a comprehensive and functional interface and have built a second prototype in the university laboratories.

The model has been successfully tested in a French hospital, and is now close to a final functional state. In this Instructables, we are giving the entirety of the instructions to build and run the ventilator, but also the source code and the CAO files. We are hoping to get help and feedback from the internet community to continue forward with this project.


This ventilator, although tested successfully on a pig and for an artificial lung, has NO certification. The members of our team, as well as, cannot be held accountable for any malfunction or misuse which might result in injury and/or death. The building and use of this ventilator is at your own risk. We do believe, however, that this very low-cost and simple ventilator might prove to work and assist in countries where industrial ventilators are missing, saving lives while waiting for the arrival of industrial equipment.


  • Plexiglass 5mm
  • PVC 1mm film roll (x1)
  • Sewing thread
  • Superglue
  • Waterthight bathing caps (x4)
  • Aluminium tube 6x8x160mm (x5)
  • Belt 200XL37 (x1)
  • Threaded rod M8x180mm (x5)
  • Cap nut M8 (x10)
  • Ball bearing 8x6x22 (x2)
  • Motor NEMA 17 with redu/5:1 (x1)
  • Arduino UNO (x1)
  • Shield Arduino GRBL (x1)
  • Raspberry PI zero w (x1)
  • Limit switch (x1)
  • A few M3 bolts
  • M4 bolts
  • PLA filament coil (x1)
  • 6x6x15 mm square aluminium rod

We also want to provide you with all the files required for laser cutting, 3D printing, as well as all the source codes used to control the prototype and its interface. All of these are available on the Resp.PI Google Drive.

Step 1: Download All Files and Source Code

We have decided to make all the laser/cnc (.dxf), 3D printing files open source, as well as all the source code for the interface and the Arduino.

These are all available on the Resp. PI Google Drive Folder.

For any questions, comments, suggestions, or if you would like to contribute to improving this project in any way, please feel free to comment on this page or to send an email to

Step 2: Milling and 3D Printing

Cut/print the following machined parts for the construction.

You will find all necessary files here.

Laser cutting or CNC (TOT : 23 pieces):

  • P1 : Base 1
  • P2 : Base 2
  • P3 : Palette
  • P4 : Crosspiece
  • P5 : Cam (x2)
  • P6 : Bellow support (x2)
  • P7 : Bellow contour (x2)
  • P8 : Bellow/valves base
  • P9 : Pulley (x4)
  • P10 : Turning support (x2)
  • P11 : Blocking support (x2)
  • P12 : Motor support
  • P13 : Valve filter (x3)
  • + The bellow model in plexiglass/wood

Laser cutting is the easiest and fastest solution but one can alternatively use a CNC machine.

3D printing (TOT: 18 pieces):

  • P14 : Bellow rings (x2) (no support)
  • P15 : Valve support (x5) (no support)
  • P16 : Elbow pipe out (support but not inside the part > see here )
  • P17: Wye pipe (no support)
  • P18 : Elbow pipe in (support but no inside the part)
  • P19 : Servo support (support touching bed)
  • P20 : Valve cam (no support)
  • P21 : Pulley support (x4) (no support)
  • P22 : Tensioner (x2) (no support)

The 3D-printed parts do not have to be perfect but must be airtight.

Step 3: Airtight Sealing

Draw out the contour of one of the bellow rings (P14) on a swimming cap, and cut it out. Make sure to also cut out the small holes to accomodate the screws.

Repeat this 7 times. These will be used to make sure that any connections between air-carrying parts are airtight.

Step 4: Valves - Preparation

Out of a bathing cap, cut three rectangles of the size of the valve filters (P13), with 4 holes in the corners for the screws. In the rectangles, cut three sides of a square of the size of the air filter in the Plexiglas piece. Use the dimensions in the picture above.

Step 5: Bellow Valves - Part 1

Take one valve support (P15). Place first a valve filter (P13) and on top, one of the swimming cap rectangles cut out in the previous step.

Repeat once.

Step 6: Bellow Valves - Part 2

Take another valve support (P15). Place it on top of the swimming cap rectangle. Use a clamp to hold the two valve supports (with the filter and cap in between) and screw the two together using M4-50 bolts. The bolt heads must be on the side of the swimming cap rectangle.

Repeat once.

You obtain two airtight valves.

Step 7: Bellow Valves - Wye Pipe Valve

Take one of the valves obtained in the previous step. Screw the wye pipe (P17) onto one of the valve supports, placing in between the two a swimming cap ring, using M4-15 screws.

Step 8: Bellow Valves - Elbow Pipe Valve

Take the second airtight valve in the previous step. Screw the bellow elbow pipe (P16) onto one of the valve supports, placing in between the two a swimming cap ring, using M4-15 screws.

Step 9: Motorized Valve

For the third valve, take the last valve support (P15) and place first the bathing cap rectangle and on top the last valve filter (P13).

Separately, take the servo support (P19) and the servo motor MG996R. Screw them together using M4-10 screws, with the screw heads on the side of the servo, as shown in the pictures. Screw the servo support with the servo together with the valve support, the filter and cap using M4-30 screws, with the head on the side of the bathing cap. Finally, add the valve cam (P20) to the servo motor.

Step 10: Bellow - Part 1

Using the bellow model as above, cut 14 ‘open’ faces out of the plastic film roll and the 2 ‘closed’ ones as shown in the pictures.

Step 11: Bellow - Part 2

Glue 14 open faces two by two together over 5mm of the interior cut and sew each two together on top of the glue, once the glue has dried. For the sewing, do the stitching points every 3-5 mm, preferably by hand. You obtain 7 separate folds.

Tip: use painting tape for clean gluing, and make sure that the glue you are using is non-toxic (preferably medically approved) and is suitable for flexible PVC.

Step 12: Bellow - Part 3

Take 6 of the folds obtained in the previous step. Glue them 2 by 2 over 5mm of the exterior border and sew on top of the glue as done before, to obtain three double folds. Glue and sew these 3 folds together similarly. You will obtain a set of 6 consecutive folds.

Glue and sew one extremity of this set of folds to obtained to closed face A (over 5mm of the exterior border and sown on top of the glue).

Glue and sew the seventh fold obtained in the previous step to closed face B (mind the orientation!) using the same method. You will use this in the next step.

Step 13: Bellow - Part 4

Take the fold glued and sown to face B obtained in the previous step, together with the bellow base (P8). Use a driller to make 6 small holes around each opening on closed face B, and 4 other small ones at each corner.

Place a Plexiglas bellow contour (P7) between face B and the fold, as well as the bellow base (P8) on the other side of the bel. Screw the three together on the four corners with M4-15 screws.

Take the bellow rings and place 12 M4 nuts in the holes. Secure them with a drop of superglue, though making sure it will not obstruct the bolt.

Take two bathing cap rings cut at the beginning. Place them between the face B and the bellow rings, centered in front of the holes in the bellow end. To hold them together and add the base, placeM4-15 screws in the 12 holes, directed inside of the bellow.

You can now, as done previously, glue and sew the two parts of the bellow together on the external cut.

Finally, place the second bellow contour between the closed face A and the first fold and screw it together with the bellow end on the four corners.

Step 14: Construct the Mobile Part - Part 1

Take the palette (P3), crosspiece (P4) and the bellow supports (P6). Place the palette and the crosspiece perpendicularly on the T slot of one of the supports as shown above, and glue the three pieces. Be sure to glue the palette on the side with no opening.

In the main hole of the bellow support, put one of the 8x6x22 ball bearings. Add on the portion of the bearing that exceeds (on the side of the palette) first a turning support (P10) and then a blocking support (P11). Screw the three layers together using countersunk M4-20 screws.

Step 15: Construct the Mobile Part - Part 2

Take the two cams (P5) and screw them together with M4-15 screws. Insert them in the palette and crosspiece and glue them to the structure as shown in the picture.

Take an aluminium tube 6x8x160mm of 15cm and make it pass inside the cams and the ball bearing, letting around 1cm exceed on the side.

Separately, take the second bellow support (P6), ball bearing, turning support (P10) and blocking support (P11). As done previously, insert the ball bearing in the Plexiglas, add first the turning and then the blocking support and screw the three together.

Then, complete the mobile body by inserting the second end of the aluminium tube in the ball bearing of the second bellow support, letting again around 1cm excess. When doing so, glue the bellow support together with the palette where they coincide.

Step 16: Attach Bellow Valves

Now, take the bellow and the 2 bellow valves realised previously. We will screw the elbow pipe out to the right ring of the bellow and the wye pipe to the left ring. To do so without moving the rings inside the bellow (be very careful or it won’t be airtight), unscrew the top screw of the ring only and screw the valve to the base and ring at this point, thus placing the valve at 180° compared to its final position. Then, while keeping the bellow closed and maintaining the ring from the other side, unscrew the 5 screws left. Turn the valve down to its final position and, always keeping pressure on the rings from the other end of the bellow, screw the valve to the base and rings using M4-20 screws.

Repeat this procedure for the two valves.

Step 17: Assemble Mobile Part and Bellow

Finally, take the bellow structure realised and place the closed end A on the side of the palette opposite to the one where the crosspiece lays.

Unscrew the bellow end’s A corners in order to screw the bellow to the palette. Use M4-15 screws to maintain the palette, bellow and contour together.

Step 18: Assemble Motor Body - Part 1

Screw the motor support (P12) to the stepper motor, taking care of the orientation based on the position of the cables.

Step 19: Assemble Motor Body - Part 2

Assemble the pulley as shown in the pictures, using 2 × pulley (P9), 2 × pulley support (P21), 5 M4-20 bolts and the 6x6x15 mm square aluminium rod.

Step 20: Assemble Pulley

Assemble the pulley as shown in the pictures, using 2 × pulley (P9), 2 × pulley support (P21), and 5 M4-20 bolts.

Step 21: Complete Main Body

Take the mobile part + bellow, and place it in the approprite holes and notches in the two bases (P1 and P2). Use 4 of the M8x180mm threaded rod, as well as aluminium tubing of appropriate length and 8 cap nuts, to hold the two bases together.

Place the stepper motor in the appropriate position (as shown above), and the pulley (using an M8 threaded rod, cap nuts and aluminium tubing) as shown in the pictures.

Tighten the cap nuts until the structure is rigid.

Let the belt run over the cams and the two pulleys.

Tighten the belt using the tensioners (P22) and 2 M4-30 bolts as shown above.

Step 22: Attach Motorized Valve

Take the P18 elbow pipe and attach it to the valve support of the motorized valve, attaching it at the same time to the side of the main structure. Use 6 M4-20 bolts and place a swimming cap ring between the two 3D-printed parts. Make sure that the connection is airtight.

Step 23: Attach Touch Sensor

Screw the Arduino touch sensor onto the inside on the ventilator as shown above.

Step 24: Wiring and Electronics

  • Servomotor
  1. Orange wire to the Arduino 10
  2. Red wire on the external power +5V
  3. Black wire to ground on the external power and on the Arduino
  • Stepper

Plug the 4 wires of the stepper on A+, A-, B+, B-. Add an external on the GND VCC on the TB6600. Bridge all the ground of the TB6600, meaning ENA-, DIR-, PUL- and GND. Then, on the Arduino plug the ground, ENA on 13, DIR on 12 and PUL on 11.

  • Touch Sensor: + on 4, - on GND.

Step 25: Upload Arduino Code

You will find the arduino code file in this Google Drive folder.

Upload the code file onto the Arduino card.

You can then connect the Arduino to the Raspberry PI.

Step 26: Raspberry PI W Installation

  • Step 1: Use this instructables to set up a working Raspberry Pi generating its private wifi network.
  • Step 2: Install the server:
sudo apt-get update
sudo apt-get install python-pip python-dev nginx
pip install gunicorn flask
  • Step 3: Upload the files, asset/functions.js and asset/style.css given above to the root of the Raspberry Pi.

These files can be found in this Google Drive folder.

  • Plug using a usb cable the arduino to the pi
  • Step 4: test the server and the interface:
sudo gunicorn app:server -b:5000
  • Step 5: Create a command file to launch the server in start up:
sudo nano
  • Step 6: Write in:
sudo gunicorn app:app -b:5000<br>
  • Paste in the following commands:
$ crontab -e
@reboot ( sleep 90 ; sh / )

The interface should now start when you plug the pi.

Step 27: The Interface

In order to code the interface and run the ventilator, we followed the Harvard mooc on mechanical ventilation.

Resp-Pi runs using Volume Assist Control (AC-VC), which is a mechanical ventilation mode where the controlled parameters are the flow and volume of air injected in the lungs for every breath, while pressure results as a variable parameter.

In this version of the ventilator, the pressure sensor and the resulting graph are not yet available.

The interface is organised as follows :

  • a : The On/Off button which allows to start and stop the ventilator’s movement. The parameters can be changed while the ventilator is both On and Off.
  • b : The flow rate graph, representing the litres of air injected in the lung per minute as a function of time.
  • c (Input) : Allows to input the parameters specific to the patient, that is his gender and height.
  • d (Input) : Allows to choose the Respiratory Rate (RR), which is the number of breaths delivered per minute by the ventilator.
  • e (Input) : Allows to control the Inspiratory/Expiratory ratio (I:E).
  • f (Input) : Allows to add a pause time (Tpause) in each breath cycle of the patient, between inspiration and expiration.
  • g (Input) : Allows to control the Tidal Volume (volume of gas delivered for each breath) per IBW (Ideal Body Weight), which is computed from input c.
  • h : The IBW computed for an adult patient.
  • i : The Tidal Volume (TV) that is injected during each cycle.
  • j : The Minute Ventilation (MV), which is the ventilation received in one minute.
  • k : The inspiratory flow time (iTime).
  • l : the G-code sent to run the ventilator for each breath, with the time at which it is sent and the values of the TV, iTime and Tpause.

Step 28: Check for Updates!

A second version of Resp.Pi is currently being developed, with a pressure sensor using a floater and optical forks. The code and interface are also being modified to receive the data from the sensor and plot the graph of the lung’s pressure as a function of time. This will improve the medical compliance of the ventilator. Bookmark this page and check regularly to make sure you are up to date!

First Time Author Contest

Runner Up in the
First Time Author Contest