Thursday, April 16, 2020

Building a Ventilator, Opening Up Human Healthcare

Our project is up on Thingiverse here. It includes some STL files for printing as well as a SketchUp 2017 file with all the parts, an assembled and labeled view, an exploded view, and the parts laid down for 3D printing. 

Introduction: Covid-19 has woken up many people to the inadequacies of modern human healthcare. One of the many things lacking appears to be cheap, accessible, mechanical ventilators, especially ones that could be used during surges such as a virus outbreak, an accident, or natural disaster.

Servo-driven linear actuator controlled by an Arduino Uno compatible microcontroller will be used to compress a ball valve mask (BVM) resuscitation bag, functioning as a low-cost mechanical ventilator.

Many teams are now focused on developing a solution to this problem. Hopefully one (or more) of these teams will produce a solid, opensource design that can be replicated and distributed around the world where and when needed and not just for Covid-19 but for anyone who needs access to ventilators.

Hopefully it is the first of many examples of opening up human healthcare and the technology that drives it. 

Currently, we are basing the design on automating handheld manually squeezed resuscitation bags  known as bag valve masks (BVMs). BVMs are usually used by first responders to aid breathing until a patient can be connected more permanently to a mechanical ventilator. 

By automating BVMs, it will be possible to extend the amount of time a patient can wait before a more permanent (and much more expensive) ventilator becomes available.


The design uses a linear actuator driven by a 5V high-torque (25kg-cm) servo, controlled by a locally produced version of the Arduino Uno (Gravitech Lambda), with options to change compression rates and the volume of air delivered during each compression.    

The housing and actuator will be 3D printed but we plan on designing some of the larger parts to also be either laser cut or even cut and drilled by hand.


It will be fully opensource, with all the 3D printing/laser cutting/electrical/coding files provided along with documentation explaining how to make/assemble the parts as well as operate the final machine.

Why the Automatic Bag Valve Mask? 

There are stories where people have allegedly been kept alive for years by using ordinary BVMs. 

This story from China tells of a young man, the victim of a car accident, kept alive for at least 5 years using BVMs; one that is manually squeezed by family members who take turns, and another that is hooked up to a crude electro-mechanical device and works automatically when electricity is available.


BVMs are cheap and accessible to both large city centers and rural healthcare providers. You can also order them online and have them shipped to you almost anywhere. 

Building a likewise cheap and reliable electrical device with sufficient battery back-up and options to change the rate the BVM is compressed and the volume of air delivered to a patient would add automation to the already remarkable and life-saving qualities of BVMs. 

Many of the teams out there working on opensource, low-cost ventilators are also using BVMs as the basis of their project.

Other Specs

Our design was guided by specs provided in a promising design from MIT described in a 2010 paper titled Design and Prototyping of a Low-cost Portable Mechanical Ventilator. It lays out a great case for developing a low-cost portable mechanical ventilator (and warns of the necessity of such a design in the event of a virus outbreak) and even presents the initial results of their prototypes.

Other projects use linear actuators driven by stepper motors or servos. We combined the specs laid out by the 2010 MIT design with some of the linear actuator designs we've seen. 

We used servos because they are cheaper, have more torque, and don't require an additional driver in addition to a microcontroller to run.

We also incorporated 20mm PVC piping as a cheap structural support element. The initial results seem to indicate it has lent to a very sturdy design. 20mm PVC pipe is readily available in Thai hardware stores.

Below is the Arduino code we started with just to get the servo going:
#include <Servo.h>             //Servo library Servo servo_test;        //initialize a servo object for the connected servo                  int angle = -70;     void setup()   servo_test.attach(9);      // attach the signal pin of servo to pin9 of arduino  void loop()   for(angle = -70; angle < 150; angle += 1)    // command to move from 0 degrees to 180 degrees   {                                      servo_test.write(angle);                 //command to rotate the servo to the specified angle    delay(5);                         }    delay(100);    for(angle = 150; angle>=150; angle-=5)     // command to move from 180 degrees to 0 degrees   {                                    servo_test.write(angle);              //command to rotate the servo to the specified angle    delay(5);                         } 
    delay(700);
Current Status

Our current prototype is actually a prototype of a prototype. It uses a much weaker servo as a stand-in until our much stronger 25kg-cm servo arrives. We also don't have our BVM yet, so many things will still change.

Once both arrive and we refine the design, we will put up the files on our accounts at Thingiverse and Cults3D. There is also the matter of developing selector knobs for compression rate and volume (along with the appropriate code), as well as refining powering options including adding a powerbank as battery back-up. The powerbank we have on hand works with Arduinos, but some have circuitry that will not work with anything except a phone so always check beforehand!  

Another often overlooked feature necessary will be some sort of alarm system in case of a power, mechanical, or electronic failure.

Look for updates on our blog here, on Thingiverse, or Cults3D. If you have questions, comments, or inquires please contact us here.