Open Source Mechanical Ventilator

2.5K88

Intro: Open Source Mechanical Ventilator

Disclaimer:
This device has not been certified nor has been tested on any human or animal. I am sharing this project to inspire other Makers to create and develop better devices or as a starting point for companies that want to use this idea to develop for a medically approved ventilator.

This device does not include the expiratory valve nor the mask.





STEP 1: Building Steps


Watch this video first:

Building the base:

My base is 30 x 30 centimeters and 4.5 cm tall. You can make it bigger, but not smaller than this because the pipes underneath would not fit.

Wiring:

See the attached schema.

Voltage regulator steps down to 6 volts. Do not run the servo power through the Arduino. You will burn it. Ground the servo to the Arduino.

Assembling the Breather:

Watch the video to learn how to assemble the cylinder, the rods, the piston, bridge, valves and pipes.

The cylinder is a piece of standard inox chimney pipe. I cut a 14 cm chunk out of a longer piece. I used metal scissors for that.

I used felt as piston rings. It took me some time to figure out how big those rings should be to properly seal the piston to the cylinder walls. In the 3D design, I have put a center piece that can be used or not, depending on the thickness of the felt you are using or is you want to have 2 seals or just one. In any case, you put the felt between the head and the tail of the piston, and you close the whole thing with 4 M3 screws.

Make sure the 2 valves are placed in the right direction. Both valves are installed in the same direction (slanted part on top)

Please note that if your servo cannot cope with the piston, you can add a second one by installing a second bridge with another servo. The piston tail can accommodate either one piston rod or 2. Both servos can be connected to the same Arduino pin (D9).

STEP 2: Code

#include <Servo.h>
//Include LCD library
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


Servo myservo;  // create servo object to control a servo

int potpinvol = 0;  // analog pin used to connect the air volume potentiometer
int potpinvel = 1;  // analog pin used to connect the speed potentiometer

int valvol;    // variable to store the volume 
int valvel;    // variable to read the value from the analog pin
int dispvol;
int dispvel;

int pos = 0;    // variable to store the servo position
int vel = 0;    // variable to store the servo speed
void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.

  lcd.print(" TLR Respirator");
  delay(3000);
  lcd.setCursor(0, 0);
  lcd.print("                ");

}
void loop() {
  valvol = analogRead(potpinvol);            // reads the value of the potentiometer (value between 0 and 1023)
  valvol = map(valvol, 0, 1023, 180, 0);     // scale it to use it with the servo (value between 0 and 180)
  //delay(15);


  for (pos = 0; pos <= valvol; pos += 2) {
    // in steps of 1 degree
    myservo.write(pos);
    velocidad ();
    delay(valvel*2 );
    pantalla();

  }
  for (pos = valvol; pos >= 0; pos -= 2) {
    myservo.write(pos);
    velocidad ();
    delay(valvel);
    pantalla();

  }
}
void velocidad () {
  valvel = analogRead(potpinvel);            // reads the value of the potentiometer (value between 0 and 1023)
  valvel = map(valvel, 0, 1023, 10, 2);     // scale it to use it with the servo
  delay(1);
}

void pantalla() {
  lcd.setCursor(0, 0);
  lcd.print("Volume: ");
  lcd.setCursor(9, 0);
  lcd.print ("   ");
  lcd.setCursor(9, 0);
  dispvol = map(valvol, 0, 178, 0, 100);

  lcd.print (dispvol, DEC);
  lcd.setCursor(13, 0);
  lcd.print("%");

  lcd.setCursor(0, 1);
  lcd.print("Speed: ");
  lcd.setCursor(7, 1);
  lcd.print ("   ");

  lcd.setCursor(7, 1);
  dispvel = map(valvel, 10, 2, 5, 30);
  lcd.print (dispvel, DEC);

}

STEP 3: Print All This!

All elements are here: https://www.tinkercad.com/things/bVWfMEI9GNI

Check the video. Some pieces need to be printed twice.

7 Comments

Hello Mr. Diaz, here are some questions I hope to ask you about your ventilator:
- What did your design process look like, from the beginning to the creation of this model?
- Could you give a more in-depth explanation about how the mathematics behind the motion of the asymmetrical curved rod?
- Could you give a more in-depth explanation about how the mechanics of your ventilator work?
- Could more of the parts of this ventilator have been printed instead?
- How long did it take you to design all of the parts in Tinkercad?
- How did you come up with this idea?
- Could a similar ventilator be designed without the programming aspect?
- What was the most difficult part of the creation process?
- What, if anything, did you learn during creation of this model?

Thank you so much for your interest and availability!
Irene

I will respond to the
rest of questions in one post:

- How long did it take you to design all of the parts in
Tinkercad?


About half a day. Tinkercad,
when used correctly it is a simple yet powerful tool. I used tinkercad because
it allows others to easily modify my design.

- How did you come up with this idea?


I have no clue. There
are a lot of things going on in my head all the time. I guess it helps that I
know mechanics and electronics, and robotics, and on and on and on…


- Could a similar
ventilator be designed without the programming aspect?


Ehhhh…. Well, I guess
it could be done, but it would be like eating watermelon without using your
hands, or like eating spaghetti without a fork. Why would you want to do
that???


- What was the most
difficult part of the creation process?


By far, creating the
seal between the piston and the cylinder. I used several types of rubber, Teflon,
nylon… and ended up using felt. I remembered that church organs use felt to
seal the valves, and I used the same technique that has been working for
centuries. Watch the video in the instructables to better understand how the
seal is done:

- What, if anything, did you learn during creation of this
model?


Honestly, the device
itself it is much simpler than other projects that I have done, so, form a technical
point of view, I have not learnt much.


What I have learnt with
this experience is the following: Making a project “Open Source” means that
many people, form many parts of the world, with a wide range of skills is going
to contact you, and they are expecting help. Since I posted this project in
LinkedIn, People from all continents have contacted me willing to know more or
asking for help. When I thought I was done… I was not!


Hope this helps,





P
Hello Mr. Diaz,
We recently submitted out project for judging! Thank you so much for all the help and information you provided us with - we could not possibly have completed our project on time without it. My team deeply appreciates all you've done for us :)

Thanks,
Irene
- Could more of the
parts of this ventilator have been printed instead?


Yes. All the parts,
with the exception of the motor and electronics could have been 3d printed. The
inox cylinder would have needed to be polished on the inside.


I did not 3d print all the parts because if you can use common materials
such as plastic boards, rubber tubes or aluminum extrusions for the arch, you
better use that rather than 3d print those pieces. 3D printing is a painfully
slow process!!
- Could you give a more
in-depth explanation about how the mechanics of your ventilator work?


This is an air pumping
device where you can vary the volume of air pumped in each stroke and the speed
of the stroke. There is a one way valve on each end of the device to make the
air flow one way only.
- Could you give a more
in-depth explanation about how the mathematics behind the motion of the
asymmetrical curved rod?



The shaft of a
servomotor can only move 180 degrees. I made some quick calculations about the
distance that the piston should move to displace more than 1 liter of air and I
ended up with 8 cm of travel.


To be able to convert a
circular movement to a linear movement, you need some sort of double jointed arm,
as used in any car engine. I painted the whole thing in a piece of carboard and
with some bamboo sticks I figured out the shape of the rod and the shaft. The rod
is curved to avoid the interference with the shaft. I could have done a straight
rod that was attached in front of the shaft, but it would have moved in another
plane, and created unnecessary torque forces and wear. I am afraid you were
looking here of more a mathematical explanation, but all was done with an empty
box of Corn Flakes.


The key thing in all this was to work on the same plane of the head of
the servo, no lateral forces involved.
- What did your design
process look like, from the beginning to the creation of this model?


It starts by creating
the whole thing in my head. I am able to visualize the whole machine in my head,
with all the moving parts, forces, and flows. Many times, I can see in my head
different options for the same machine. In this case, in my head, there were 3
options:


  • Using bellows like
    those that were used in forges (google “forge bellows” and you will see what I mean)

  • Using a piston moved by
    a servo placed on the side of the machine, similar to a crude oil pump (yep,
    google that too if you do not know what I am talking about)

  • Using a vertical piston (the design
    posted here)


Once I have
designed the device in my head, I do a quick drawing in a piece of paper of all
the options and I start building a quick prototype of every option. In this case,
I started with the “forge bellows” option. I built the bellows and even if the
bellows worked flawlessly, I realized that the building process was way too
complicated and that there was no way to clean the inside of the bellows. I
stopped that option and moved to the next one, the “crude oil” design. With this
design, I was having a lot of lateral forces on the vertical shaft of the
device, having to reinforce the device and getting a lot of wear on the moving
parts. This option could have end up working, but it was getting way too complicated,
so I moved on to the third option, the one that you see in this instructables.


One key
aspect of the design is the constraints that will limit your design. In this
case, there were 2 major constraints:


  • The
    cylinder has to be super smooth to be able to have a good seal with the piston
    rings, it cannot be 3D printed. The surface would be too uneven for this device
    to work. Since the volume of air that you need to push has to be at least 1
    litter of air, I looked online for cylindrical objects that were made out of
    stainless steel that were about 15 cm in diameter. I found a chimney section
    that was that size and bought it.

  • The
    servomotor has a limited torque, it must be used wisely to be able to move the
    piston. Any lateral force (wasted power) must be avoided. I ended up creating a design that pushes in
    one single plane, and, as a backup plan, I even designed a version where 2
    servomotors are used if needed.


Once you
have in mind these constraints (in this case, size of one component and torque of
the motor) you can design the rest of the machine.