Etischer's Open source DIY Ventilator

Etischer's Open source DIY Ventilator
PLC control system

This is an Open Source project I created to help people build an effective ventilator. The control system is the biggest hurdle for most people building a ventilator. Most ventilator builds I've seen just run on a fixed cycle or timer, and feed a breath regardless if the patient is inhaling or exhaling. Unless the patient is sedated or paralyzed, these simple ventilators won't be effective. They need a more sophisticated control system, and that is what this project is about.

The mechanism that squeezes the bag can take on any shape (squeezing arms, cam lobe, belt cinch, weights and pulleys..), these are all compatible with the control system plans I'm providing.

This control system adds:
- Breath sensing functionality, so the ventilator synchronizes it's breath when the patient inhales, allowing the patient to breath naturally without timing their breath with the machine.
- Ability to change the volume, rate, and speed of breathing (T.V. BPM, I/E ratio)
- Measure diagnostic pressures (Peak, Plateau, and Peep)
- Turn on an Alarm if something goes wrong (pressures exceeded, belt slip, sensor fault...)

This ventilator control system uses a PLC (programmable controller), pressure sensor and position sensor to upgrade a simple mechanical ventilator into an Assist Control Ventilator. My control system design is open source, and provided free. A link to all the files is at the bottom of this webpage.

Note: I have no experience in the medical field, and am certainly not an expert in ventilators.

Controls Architecture diagram


Part 3 - Project complete

Project is completed and functional, link to the PLC code, and drawings at the bottom of the page.


PLC panel is assembled, and was able to start cycling the motor for the first time.

The user can modify the following parameters using the keypad and LCD screen on the HMI.
Breathing rate, Volume (Arm close position), Arm open position, Inhale/Exhale ratio,
Pressure drop trigger to initiate next breath cycle, mS delay from Peak pressure to measure plateau presssure,
Max pressure alarm limit, Max plateau pressure alarm limit, peak minus plateau pressure alarm limit,
Alarm end of travel limits, Arm travel time out limits,


Part 2

Finished programming the PLC, all parts are in hand, just powered up the stepper drive and started bench testing. Next steps are to make a cradle to hold the bag in the gripper, and start wiring the PLC.


Using a Shapeoko to fab a simple PCB

I needed a 5v and 10v power supply, so I decided to make a PCB on my CNC router. This board is a DC-DC converter, generating 5v and 10v from the 24v power supply.


Part 1

An "Assist Control" (AC) ventilator measures the pressure change as the patient starts to inhale, and uses that as a trigger to start the breath cycle on the ventilator. This is slightly more complex than a "Volume Control" (VC) ventilator that runs purely based on timers. The ventilator I'm building will have both modes available. I'll also have as many fault detections as possible (stalled motor, slipping coupling, high pressure limits, plateau pressure limits...)


My Siemens PLC code directory is HERE
Just a framework has been written so far, including start stop logic for the arms, step sequencer framework, alarm screen with faults. PDF copy

Bill of Materials

Siemens Logo PLC
8 Inputs (4 configurable as Analog), 4 Relay outputs
12/24 VDC, Ethernet, micro SD card slot
Siemens Comfort Soft PLC programming software
Windows 32/64bit and Mac
I will also provide a compiled copy of the PLC code which you can put on a micro SD card. Insert the SD card into the PLC, and it will download it, you do not need to purchase the programming software (unless you want to make changes). Changes to variable values can be done on the PLC without the programming software.

Nema 34 118mm length stepper motor
8.5Nm (6.25 lb*ft) torque.
Weight: 3.6kg
6 Amps
Sprocket 14mm bore, 5mm pitch, 20 teeth
Belt, 5mm pitch, 90 teeth
BESTORQ 450-5M-15
Stepper drive
2.4~7.20A, 18-80VAC or 36-110VDC, 1/256 Microstep Resolution
Pulse Generator
Operating voltage range DC 3.3v~30v
Frequency range 1Hz-150kHz
Output current 5-30mA
Duty cycle range 0-100%.
Sensor, hall effect for measuring angle, 0-5v output, (Range Rover suspension height sensor)
Electrical connector, for Range Rover suspension height sensor
Sensor, air pressure 0-1.45 PSI, 0-25mV output
Used to measure the back pressure in the breathing mask that is created by the PEEP valve.
*Alternative Sensor, air pressure 0-1.45 PSI, 0.2-4.7V output
Used to measure the back pressure in the breathing mask that is created by the PEEP valve. Replaces the part above, and negates the need for the amplifier below
Signal conditioner, 0-24mV input, 4-20mA output
Qidian GLT-B-W1-A14-01-P2 DC Voltage Signal Isolator Module
This was a rare find on eBay, Other Op-amp amplifier boards (adafruit) might work and be readily available, but lack the zero and gain adjustments.
This is used to convert the signal from the pressure sensor into a signal the PLC can use
Joystick, 2 axis analog with button press
10 volt voltage regulator L7810
TO-220 3 pin regulator.
Adult Patient Circuit With Peep valve And Water Trap
This will be used to select variables, and modify their values on the PLC HMI screen.
Air Cushion Mask, Large Adult
Airlife Adjustable Peep Valves With 22mm I.d. Connection And 22mm Adapter
This is a pressure valve used to maintain slight pressure in the lungs after the patient exhales

Additional resources online


If you have any questions, feel free to email me: