Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Ventilador pulmonar COVID-19 de código abierto

Componentes y suministros

Arduino UNO
Para la versión con Arduino
× 1
Arduino 4 Relys Shield
Para la versión con Arduino
× 1
Servo digital MG995
Para todas las versiones
× 1
LM2596S módule
Para todas las versiones
× 2
Potenciómetro lineal multivuelta de 10k
Para todas las versiones
× 1
Fuente de alimentación Digilent 60W PCIe 12V 5A
Para todas las versiones
× 1
LED de 5 mm:rojo
Para todas las versiones
× 1
LED de 5 mm:verde
× 1
LCD alfanumérico, 20 x 4
Para todas las versiones
× 1
botón de interruptor 220v
Para todas las versiones
× 1
snorke full face
× 1
Válvula solenoide, 2 vías
× 1

Herramientas y máquinas necesarias

Impresora 3D (genérica)
A8
300-001 - Lightbox, exposición UV

Aplicaciones y servicios en línea

Arduino IDE
PcB Elegance
Autodesk Fusion 360

Acerca de este proyecto

Ventilador no invasivo de código abierto Es económico y fácil de construir, un respirador de emergencia para combatir la crisis de salud Covid19 si no hay ventiladores disponibles y siempre que el paciente no esté sedado o intubado.

Este proyecto fue el resultado de un desafío lanzado por mi ex profesor y amigo Serafim Pires, quien se puso en contacto conmigo mostrándome un proyecto en español y me dijo que sería bueno si pudiera desarrollar un proyecto para ayudar a combatir esta crisis mundial.

Después de varias investigaciones y estudios sobre el tema de la Ventilación no invasiva, construí este prototipo funcional basado en 2 tecnologías existentes,

Todas las pruebas fueron exitosas y con una prueba funcional con más de 20 días sin ningún problema ni interrupción.

La ventilación no invasiva se administra mediante mascarillas nasales, que empujan una cantidad determinada de aire presurizado hacia los pulmones. Esto apoya el proceso de respiración natural cuando la enfermedad ha provocado la falla de los pulmones, lo que permite que el cuerpo luche contra las infecciones y mejore.

Basado en una investigación realizada en Italia, utilicé esta tecnología en mi proyecto que convierte una máscara de snorkel Decathlon en un ventilador de emergencia para pacientes que padecen COVID-19, para ayudar a mitigar la falta de ventiladores durante el pico de la pandemia de coronavirus.

Estas máscaras se han adaptado y utilizado en lugares de todo el mundo debido a su bajo costo y fácil adaptación.

Los resultados fueron evidentes y, recientemente, esta tecnología también se utilizó aquí en Portugal en el Hospital de Santarém.

https://www.prosaude.org. P>

Noticias en el periódico de portugal.

La entrevista en una radio local se volvió viral en las redes sociales de Portugal.

.

Primera prueba de funcionamiento con un pequeño volumen de aire y 15 ciclos de respiración cambiando la frecuencia respiratoria y el pío para la demostración.


ADVERTENCIA:Este prototipo aún no está validado por ningún organismo oficial y declino toda responsabilidad por su uso.

Además, será utilizado como último recurso y por personal médico capacitado, este equipo está destinado a salvar vidas en una situación de pico extrema.

El proyecto sin fines de lucro se puede reproducir en masa, si las autoridades competentes de Portugal lo aprueban.

Código

  • INOVT_COVID19_Version_2.2.ino
  • INOVT_COVID19_Version_2.2.rar
INOVT_COVID19_Version_2.2.ino Arduino
 / * Programa ventilador pulmonar INOVT COVID-19 Versio 2.2 * Autor:David Pascoal * El equipo ha sido probado y comprobado, seguridad con sensor de presión, * Salida de alarma para encender Buzer o escarabajo. * / # incluye  #include  #include  LiquidCrystal_I2C lcd (0x27,20,4); #define PIN_SERVO 6 #define PIN_FREQ A1 #define PIN_PEEP A0 #define PIN_LED 2 #define PIN_LED2 3 #define PIN_Alarm_Relay 8 #define PIN_Safety_Valve 9 # define SENSOR_FLOW A3 # define EXPIRANGLE 0 # define MINPIRANDO_92 =0; int valInspira =0; int valExpira =0; int valPeep =0; int aux; int x =500; int y =1000; unsigned long time; Servo myServo; int frecuencia_ant; int valPeep_ant; int estado; void logo () {byte a3 [8] ={B00011, B00111, B01100, B11000, B10000, B00000, B00000}; byte a2 [8] ={B00000, B00000, B00000, B00000, B10001, B11111, B01110}; byte a1 [8] ={B11000, B01100, B00110, B00011, B00001, B00000, B00000}; byte a4 [9] ={B00000 , B00000, B00000, B00001, B00011, B00110, B01100, B11000}; byte a5 [9] ={B00000, B01110, B11111, B10001, B00000, B00000, B00000, B01110, B00000,}; byte a6 [8] ={ B00000, B00000, B00000, B10000, B11000, B01100, B00110, B00011}; byte a7 [10] ={B00000, B01110, B11111, B10001, B00000, B00000, B00000, B00000,}; byte a8 [8] ={B00100 , B01110, B00100, B00000, B10001, B11111, B01110}; lcd.print ("* COVID19 *"); lcd.setCursor (0,1); lcd.print (".. INOVT .."); lcd.createChar (0, a1); lcd.createChar (1, a2); lcd.createChar (2, a3); lcd.createChar (7, a8); lcd.createChar (3, a4); lcd.createChar (4, a5); lcd.createChar (5, a6); lcd.createChar (6, a7); lcd.setCursor (10,0); lcd.write (byte (3)); lcd.write (byte (4)); lcd.write (byte (5)); lcd.write (byte (3)); lcd.write (byte (6)); lcd.write (byte (5)); lcd.setCursor (10,1); lcd.write (byte (0)); lcd.write (byte (1)); lcd.write (byte (2)); lcd.write (byte (0)); lcd.write (byte (7)); lcd.write (byte (2)); } void initior () {byte c11 [8] ={B00000, B00000, B11111, B11111, B11111, B11111, B00000, B00000}; lcd.createChar (3, c11); lcd.setCursor (0, 2); lcd.write (3); retraso (x); lcd.setCursor (1, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, ALTO); lcd.setCursor (2, 2); lcd.write (3); retraso (x); lcd.setCursor (3, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED2, ALTO); lcd.setCursor (4, 2); lcd.write (3); retraso (x); lcd.setCursor (5, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, BAJO); lcd.setCursor (6, 2); lcd.write (3); retraso (x); lcd.setCursor (7, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED2, BAJO); lcd.setCursor (8, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, ALTO); escritura digital (PIN_LED2, ALTO); lcd.setCursor (9, 2); lcd.write (3); retraso (x); myServo.write (100); digitalWrite (PIN_LED, BAJO); digitalWrite (PIN_LED2, BAJO); lcd.setCursor (10, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, ALTO); escritura digital (PIN_LED2, ALTA); lcd.setCursor (11, 2); lcd.write (3); retraso (x); myServo.write (110); digitalWrite (PIN_LED, BAJO); escritura digital (PIN_LED2, BAJO); lcd.setCursor (12, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, ALTO); escritura digital (PIN_LED2, ALTO); lcd.setCursor (13, 2); lcd.write (3); retraso (x); myServo.write (115); digitalWrite (PIN_LED, BAJO); escritura digital (PIN_LED2, BAJO); lcd.setCursor (14, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, ALTO); escritura digital (PIN_LED2, ALTO); lcd.setCursor (15, 2); lcd.write (3); retraso (x); myServo.write (120); digitalWrite (PIN_LED, BAJO); digitalWrite (PIN_LED2, BAJO); lcd.setCursor (16, 2); lcd.write (3); retraso (x); escritura digital (PIN_LED, ALTO); escritura digital (PIN_LED2, ALTO); lcd.setCursor (17, 2); lcd.write (3); retraso (x); myServo.write (130); digitalWrite (PIN_LED, BAJO); escritura digital (PIN_LED2, BAJO); lcd.setCursor (18, 2); lcd.write (3); retraso (x); lcd.setCursor (19, 2); lcd.write (3); delay (x);} void maobc () {thumbdownA (); retraso (x); lcd.clear (); Pulgares hacia arriba(); retraso (x); thumbdownA (); retraso (x); lcd.clear (); Pulgares hacia arriba(); retraso (x); thumbdownA (); retraso (x); lcd.clear (); Pulgares hacia arriba(); retraso (x); thumbdownA (); retraso (x); lcd.clear (); Pulgares hacia arriba(); retraso (1000); lcd.clear ();} void thumbdownA () {byte thumb1 [8] ={B00001, B00010, B00011, B00100, B00011, B00100, B00011, B00100}; byte thumb2 [8] ={B00011, B00000, B00000, B00000, B00000, B00000, B00000, B00000}; byte thumb3 [8] ={B11110, B00001, B00000, B00000, B00000, B00000, B00000, B00000}; byte thumb4 [8] ={B00000, B11110, B01000, B10001, B10010, B10010, B01100, B00000}; byte thumb5 [8] ={B00000, B10000, B01110, B00010, B00010, B00010, B00010, B00010}; byte thumb6 [8] ={B00110, B01000, B10000, B00000, B00000, B00000, B00000, B00000}; lcd.createChar (6, pulgar1); lcd.createChar (1, pulgar2); lcd.createChar (2, pulgar3); lcd.createChar (3, pulgar4); lcd.createChar (4, pulgar5); lcd.createChar (5, pulgar6); lcd.setCursor (7,0); escritura en pantalla (6); lcd.setCursor (7,1); lcd.write (1); lcd.setCursor (8,0); lcd.write (2); lcd.setCursor (8,1); lcd.write (3); lcd.setCursor (9,0); lcd.write (4); lcd.setCursor (9,1); lcd.write (5);} void thumbsup () {byte thumb1 [8] ={B00100, B00011, B00100, B00011, B00100, B00011, B00010, B00001}; byte thumb2 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00011}; byte thumb3 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B11110}; byte thumb4 [8] ={B00000, B01100, B10010, B10010, B10001, B01000, B11110, B00000}; byte thumb5 [8] ={B00010, B00010, B00010, B00010, B00010, B01110, B10000, B00000}; byte thumb6 [8] ={B00000, B00000, B00000, B00000, B00000, B10000, B01000, B00110}; lcd.createChar (6, pulgar1); lcd.createChar (1, pulgar2); lcd.createChar (2, pulgar3); lcd.createChar (3, pulgar4); lcd.createChar (4, pulgar5); lcd.createChar (5, pulgar6); lcd.setCursor (7,1); escritura en pantalla (6); lcd.setCursor (7,0); lcd.write (1); lcd.setCursor (8,1); lcd.write (2); lcd.setCursor (8,0); lcd.write (3); lcd.setCursor (9,1); lcd.write (4); lcd.setCursor (9,0); lcd.write (5);} void setServo () {if (millis ()> time) {if (estado ==EXPIRANDO) {// Pasar un inspirandO digitalWrite (PIN_LED2, LOW); escritura digital (PIN_LED, ALTO); myServo.write (MIN_ANGLE); tiempo =milis () + (valInspira * 100); estado =INSPIRANDO; lcd.setCursor (8, 2); lcd.print ("EXPIRANDO>"); } else if (estado ==INSPIRANDO) {// P0asar un expirando digitalWrite (PIN_LED2, HIGH); digitalWrite (PIN_LED, BAJO); myServo.write (MAX_ANGLE - valPeep); tiempo =milis () + (valExpira * 100); estado =EXPIRANDO; lcd.setCursor (8, 2); lcd.print ("INSPIRANDO <"); }}} void setup () {myServo.attach (PIN_SERVO); myServo.write (92); // escritura digital (PIN_LED, BAJO); pinMode (PIN_FREQ, INPUT_PULLUP); pinMode (PIN_PEEP, INPUT_PULLUP); pinMode (SENSOR_FLOW, ENTRADA); pinMode (PIN_LED, SALIDA); pinMode (PIN_LED2, SALIDA); pinMode (PIN_Alarm_Relay, SALIDA); pinMode (PIN_Safety_Valve, SALIDA); lcd.init (); LCD luz de fondo(); lcd.clear (); lcd.setCursor (0,0); logo(); lcd.setCursor (4,2); lcd.print ("FUENTE ABIERTA"); lcd.setCursor (0,3); lcd.print ("Ventilador pulmonar"); retraso (4000); lcd.clear (); lcd.print (".... Inicializando ...."); initior (); retraso (500); lcd.clear (); maobc (); lcd.clear (); if (digitalRead (SENSOR_FLOW) ==LOW) {thumbsup (); lcd.setCursor (0,0); lcd.print ("SISTEMA"); lcd.setCursor (2,1); lcd.print ("Aceptar"); retraso (5000); lcd.clear (); } else {myServo.write (139); thumbdownA (); lcd.setCursor (0,0); lcd.print ("SISTEMA"); lcd.setCursor (1,1); lcd.print ("FALLO"); retraso (5000); lcd.clear (); Serial.begin (9600); tiempo =milis (); frecuencia_ant =-1; valPeep_ant =-1; } retraso (500); estado =EXPIRANDO; } bucle vacío () {digitalRead (SENSOR_FLOW); aux =analogRead (PIN_FREQ); frecuencia =mapa (aux, 0,1023, 10, 60); valInspira =((1.0 / frecuencia) * 600.0) * (1.0 / 3.0); valExpira =((1.0 / frecuencia) * 600.0) * (2.0 / 3.0); aux =analogRead (PIN_PEEP); valPeep =mapa (aux, 0,1023, 0, 10); if ((frecuencia_ant! =frecuencia) || (valPeep_ant! =valPeep)) {// Pode monitorizar los valores de Frequencia e PEEP sem display usando o Monitor serie do Arduino IDE. Serial.print ("Frecuencia:"); Serial.println (frecuencia); Serial.print ("Inspira:"); Serial.println (valInspira); Serial.print ("Caducidad:"); Serial.println (valExpira); Serial.print ("Peep:"); Serial.println (valPeep); lcd.setCursor (1, 0); lcd.print ("FRECUENCIA:"); lcd.setCursor (13, 0); lcd.print (frecuencia); lcd.setCursor (1, 1); lcd.print ("PEEP:"); lcd.setCursor (13, 1); lcd.print (valPeep); // retraso (500); lcd.setCursor (0, 2); lcd.print ("ESTADO:"); lcd.setCursor (0, 3); lcd.print ("VENTILADOR D.PASCOAL"); frecuencia_ant =frecuencia; valPeep_ant =valPeep; } if (digitalRead (SENSOR_FLOW) ==HIGH) {myServo.write (139); digitalWrite (PIN_Alarm_Relay, ALTO); digitalWrite (PIN_Safety_Valve, ALTA); lcd.clear (); thumbdownA (); lcd.setCursor (0,0); lcd.print ("SISTEMA"); lcd.setCursor (1,1); lcd.print ("FALLO"); lcd.setCursor (1,2); lcd.print ("******************"); lcd.setCursor (3,3); lcd.print ("Verificar flujo de AR"); lcd.setCursor (12,1); lcd.print ("ALARMA"); escritura digital (PIN_LED, ALTO); escritura digital (PIN_LED2, ALTA); retraso (500); lcd.setCursor (12,1); lcd.print (""); retraso (500); lcd.setCursor (12,1); lcd.print ("ALARMA"); digitalWrite (PIN_LED, BAJO); digitalWrite (PIN_LED2, BAJO); retraso (1000); lcd.clear (); } else {digitalWrite (PIN_Alarm_Relay, LOW); digitalWrite (PIN_Safety_Valve, BAJO); setServo (); retraso (10);}} 
INOVT_COVID19_Version_2.2.rar C / C ++
 Sin vista previa (solo descarga). 

Piezas y carcasas personalizadas

Deben estar impresos en una impresora 3D.
Requiere algo de precisión. Instrucciones completas paso a paso para cambiar la máscara de buceo y convertirla en una máscara de respiración presurizada Requiere cierta precisión.
Impresora 3d de alta resolución inovt_covid19_version_2_0_david_pascoal_0mbFUa0ce1.rar

Esquemas

Diagrama de la versión autónoma,
no necesita la columna de aire del hospital. Versión 2.2.
Con guarda de seguridad y salida de alarma. Versión 2.2.
Con guarda de seguridad y salida de alarma.

Proceso de manufactura

  1. La placa de referencia de código abierto apunta al despliegue rápido del respirador médico
  2. Arduino Spybot
  3. FlickMote
  4. Televisión casera B-Gone
  5. Reloj maestro
  6. Encuéntrame
  7. Arduino Power
  8. Tech-TicTacToe
  9. Arduino Cuadrúpedo
  10. Joystick de Arduino
  11. Máquina CNC