亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

开源 COVID-19 肺呼吸机

组件和用品

Arduino UNO
适用于 Arduino 版本
× 1
Arduino 4 继电器屏蔽
适用于 Arduino 版本
× 1
数字伺服MG995
适用于所有版本
× 1
LM2596S 模块
适用于所有版本
× 2
10k 线性多圈电位器
适用于所有版本
× 1
Digilent 60W PCIe 12V 5A 电源
适用于所有版本
× 1
5 毫米 LED:红色
适用于所有版本
× 1
5 毫米 LED:绿色
× 1
字母数字 LCD,20 x 4
适用于所有版本
× 1
开关按钮220v
适用于所有版本
× 1
呼吸管全脸
× 1
电磁阀,2 路
× 1

必要的工具和机器

3D 打印机(通用)
A8
300-001 - 灯箱,UV 曝光

应用和在线服务

Arduino IDE
PCB 优雅
Autodesk Fusion 360

关于这个项目

开源无创呼吸机 其低成本且易于构建,是一种紧急呼吸器,可在没有可用呼吸机且患者未进行镇静或插管的情况下应对健康危机 Covid19。

这个项目是我的前老师兼朋友 Serafim Pires 发起的挑战的结果,他联系我展示了一个西班牙项目,说如果我能开发一个项目来帮助应对这场世界危机就好了。

经过对无创通气主题的多次研究和研究,我基于现有的两种技术构建了这个功能原型,

所有测试均成功,并进行了20多天的功能测试,没有出现任何问题或中断。

使用面罩鼻罩进行无创通气,将一定量的加压空气推入肺部。当疾病导致肺部衰竭时,这支持自然呼吸过程,使身体能够抵抗感染并变得更好。

根据在意大利进行的研究,我在我的项目中使用了这项技术,该项目将迪卡侬呼吸管面罩变成了 COVID-19 患者的紧急呼吸机,以帮助缓解冠状病毒大流行高峰期间呼吸机的短缺问题。

这些口罩成本低,适应方便,已在世界各地进行改造和使用。

结果很明显,最近,这项技术也被用于葡萄牙的圣塔伦医院。

https://www.prosaude.org.br/noticias/hospital-regional-de-santarem-utiliza-mascaras-de-mergulho-no-tratamento-da-covid-19/?fbclid=IwAR36UVLXCztk0zSSJwTCBQ1lgb5iYmY1Ha_tyrxkv>

葡萄牙报纸上的新闻。

当地电台的 Iterview 在葡萄牙的社交网络上传播开来。

.

首次使用少量空气进行操作测试,使用15个呼吸周期改变呼吸频率和窥视进行演示。


警告:此原型尚未得到任何官方机构的验证,我拒绝对其使用承担任何责任。

此外,它将作为最后的手段,由训练有素的医疗人员使用,该设备旨在在极端高峰情况下挽救生命。

非盈利项目经葡萄牙主管部门批准可大规模复制。

代码

  • INOVT_COVID19_Version_2.2.ino
  • INOVT_COVID19_Version_2.2.rar
INOVT_COVID19_Version_2.2.inoArduino
/* 程序肺呼吸机 INOVT COVID-19 Versio 2.2 * 作者:David Pascoal * 该设备已经过测试和验证,带有压力传感器的安全性,* 警报输出以打开蜂鸣器或甲虫。*/#include  #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 EXPIRANDO 0#define INSPIRANDO ANG_19define INSPIRANDO ANG_19#define INSPIRANDO ANG19#define INSPIRANDO ANG_199 =0;int valInspira =0;int valExpira =0;int valPeep =0;内部辅助;整数 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, }byte; [8]={B00000, B00000, B00000, B00000, B10001, B11111, B01110};byte a1[8]={B11000, B01100, B00110, B00011, B00000] B000001;B00004 , B00000, B00000, B00001, B00011, B00110, B01100, B11000 };byte a5[9]={ B00000, B01110, B11111, B10001, B00000, B00,00,B010, B010, B010, B010, B010, B00000, B00000, B00000, B10000, B11000, B01100, B00110, B00011};byte a7[10]={ B00000, B01110, B11111, B10001, B00,B000, B0000, B0008000008 , 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);液晶显示器(字节(3));液晶显示器(字节(4));液晶显示器(字节(5));液晶显示器(字节(3));液晶显示器(字节(6));液晶显示器(字节(5)); lcd.setCursor(10,1);液晶显示器(字节(0));液晶显示器(字节(1));液晶显示器(字节(2));液晶显示器(字节(0));液晶显示器(字节(7));液晶显示器(字节(2)); }void initior() { byte c11[8] ={B00000,B00000,B11111,B11111,B11111,B11111,B00000,B00000};lcd.createChar(3, c11);lcd.setCursor);(0,液晶显示器(3);延迟(x);lcd.setCursor(1, 2);液晶显示器(3);延迟(x); digitalWrite(PIN_LED,HIGH);lcd.setCursor(2, 2);液晶显示器(3);延迟(x);lcd.setCursor(3, 2);液晶显示器(3);延迟(x); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(4, 2);液晶显示器(3);延迟(x);lcd.setCursor(5, 2);液晶显示器(3);延迟(x); digitalWrite(PIN_LED,LOW);lcd.setCursor(6, 2);液晶显示器(3);延迟(x);lcd.setCursor(7, 2);lcd.write(3);延迟(x); digitalWrite(PIN_LED2,LOW);lcd.setCursor(8, 2);液晶显示器(3);延迟(x);数字写入(PIN_LED,高); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(9, 2);液晶显示器(3);延迟(x); myServo.write(100);数字写入(PIN_LED,低); digitalWrite(PIN_LED2,LOW);lcd.setCursor(10, 2);液晶显示器(3);延迟(x);数字写入(PIN_LED,高); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(11, 2);lcd.write(3);延迟(x); myServo.write(110);数字写入(PIN_LED,低); digitalWrite(PIN_LED2,LOW);lcd.setCursor(12, 2);液晶显示器(3);延迟(x);数字写入(PIN_LED,高);数字写入(PIN_LED2,高); lcd.setCursor(13, 2);液晶显示器(3);延迟(x); myServo.write(115);数字写入(PIN_LED,低); digitalWrite(PIN_LED2,LOW);lcd.setCursor(14, 2);液晶显示器(3);延迟(x);数字写入(PIN_LED,高); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(15, 2);液晶显示器(3);延迟(x); myServo.write(120);数字写入(PIN_LED,低);数字写入(PIN_LED2,低); lcd.setCursor(16, 2);液晶显示器(3);延迟(x);数字写入(PIN_LED,高);数字写入(PIN_LED2,高); lcd.setCursor(17, 2);液晶显示器(3);延迟(x);myServo.write(130);数字写入(PIN_LED,低); digitalWrite(PIN_LED2,LOW);lcd.setCursor(18, 2);液晶显示器(3);延迟(x); lcd.setCursor(19, 2);液晶显示器(3);延迟(x);}void maobc(){拇指向下();延迟(x);液晶显示器();竖起大拇指();延迟(x);拇指向下();延迟(x);液晶显示器();竖起大拇指();延迟(x);拇指向下();延迟(x);液晶显示器();竖起大拇指();延迟(x);拇指向下();延迟(x);液晶显示器();竖起大拇指();延迟(1000); lcd.clear();} void thumbdownA() { byte thumb1[8] ={B00001,B00010,B00011,B00100,B00011,B00100,B00011,B00100};字节拇指2[8] ={B00011,B00000,B00000,B00000,B00000,B00000,B00000,B00000};字节拇指3 [8] ={B11110,B00001,B00000,B00000,B00000,B00000,B00000,B00000};字节拇指4[8] ={B00000,B11110,B01000,B10001,B10010,B10010,B01100,B00000};字节拇指5[8] ={B00000,B10000,B01110,B00010,B00010,B00010,B00010,B00010};字节拇指6[8] ={B00110,B01000,B10000,B00000,B00000,B00000,B00000,B00000}; lcd.createChar(6, thumb1); lcd.createChar(1,thumb2); lcd.createChar(2, thumb3); lcd.createChar(3, thumb4); lcd.createChar(4, thumb5); lcd.createChar(5,thumb6); lcd.setCursor(7,0);液晶显示器(6); lcd.setCursor(7,1);液晶显示器(1); lcd.setCursor(8,0);液晶显示器(2); lcd.setCursor(8,1);液晶显示器(3); lcd.setCursor(9,0);液晶显示器(4); lcd.setCursor(9,1); lcd.write(5);}void thumbsup() { byte thumb1[8] ={B00100,B00011,B00100,B00011,B00100,B00011,B00010,B00001};字节拇指2[8] ={B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00011};字节拇指3 [8] ={B00000,B00000,B00000,B00000,B00000,B00000,B00001,B11110};字节拇指4[8] ={B00000,B01100,B10010,B10010,B10001,B01000,B11110,B00000};字节拇指5[8] ={B00010,B00010,B00010,B00010,B00010,B01110,B10000,B00000};字节拇指6[8] ={B00000,B00000,B00000,B00000,B00000,B10000,B01000,B00110}; lcd.createChar(6, thumb1); lcd.createChar(1,thumb2); lcd.createChar(2, thumb3); lcd.createChar(3, thumb4); lcd.createChar(4, thumb5); lcd.createChar(5,thumb6); lcd.setCursor(7,1);液晶显示器(6); lcd.setCursor(7,0);液晶显示器(1); lcd.setCursor(8,1);液晶显示器(2); lcd.setCursor(8,0);液晶显示器(3); lcd.setCursor(9,1);液晶显示器(4); lcd.setCursor(9,0); lcd.write(5);}void setServo(){ if ( millis()> time ) { if ( estado ==EXPIRANDO ) { // Pasar a inspirandO digitalWrite(PIN_LED2,LOW);数字写入(PIN_LED,高); myServo.write(MIN_ANGLE);时间 =毫秒()+(valInspira * 100); estado =灵感; lcd.setCursor(8, 2); lcd.print("EXPIRANDO> "); } else if ( estado ==INSPIRANDO ) { // P0asar a expirando digitalWrite(PIN_LED2,HIGH);数字写入(PIN_LED,低); myServo.write(MAX_ANGLE - valPeep);时间 =毫秒() + (valExpira * 100); estado =EXPIRANDO; lcd.setCursor(8, 2); lcd.print("INSPIRANDO <"); } }}void setup() { myServo.attach(PIN_SERVO); myServo.write(92); //digitalWrite(PIN_LED,LOW); pinMode(PIN_FREQ,INPUT_PULLUP); pinMode(PIN_PEEP,INPUT_PULLUP); pinMode(SENSOR_FLOW,INPUT); pinMode(PIN_LED,OUTPUT); pinMode(PIN_LED2,OUTPUT); pinMode(PIN_Alarm_Relay,OUTPUT); pinMode(PIN_Safety_Valve,OUTPUT);液晶显示器.init();液晶背光();液晶显示器(); lcd.setCursor(0,0);标识(); lcd.setCursor(4,2); lcd.print("开源"); lcd.setCursor(0,3); lcd.print("肺呼吸机");延迟(4000);液晶显示器(); lcd.print("....初始化....");初始化();延迟(500);液晶显示器(); maobc();液晶显示器(); if(digitalRead(SENSOR_FLOW) ==LOW) {拇指向上(); lcd.setCursor(0,0); lcd.print("系统"); lcd.setCursor(2,1); lcd.print("确定");延迟(5000);液晶显示器(); } else { myServo.write(139);拇指向下(); lcd.setCursor(0,0); lcd.print("系统"); lcd.setCursor(1,1); lcd.print("失败");延迟(5000);液晶显示器(); Serial.begin(9600);时间 =毫秒(); frecuencia_ant=-1; valPeep_ant=-1; } 延迟(500); estado=EXPIRANDO; }void loop() {digitalRead(SENSOR_FLOW); aux =模拟读取(PIN_FREQ); frecuencia =map(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 =模拟读取(PIN_PEEP); valPeep =map(aux,0,1023, 0, 10); if ( (frecuencia_ant !=frecuencia) || (valPeep_ant !=valPeep)) { //Pode monitorizar os 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("过期:"); Serial.println(valExpira); Serial.print("窥视:"); Serial.println(valPeep); lcd.setCursor(1, 0); lcd.print("频率:"); lcd.setCursor(13, 0); lcd.print(frecuencia); lcd.setCursor(1, 1); lcd.print("PEEP:"); lcd.setCursor(13, 1);液晶打印(valPeep); // 延迟(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);数字写入(PIN_Alarm_Relay,高);数字写入(PIN_Safety_Valve,高);液晶显示器();拇指向下(); lcd.setCursor(0,0); lcd.print("系统"); lcd.setCursor(1,1); lcd.print("失败"); lcd.setCursor(1,2); lcd.print("********************"); lcd.setCursor(3,3); lcd.print("检查AR流量"); lcd.setCursor(12,1); lcd.print("闹钟");数字写入(PIN_LED,高);数字写入(PIN_LED2,高);延迟(500); lcd.setCursor(12,1);液晶打印(“”);延迟(500); lcd.setCursor(12,1); lcd.print("闹钟");数字写入(PIN_LED,低);数字写入(PIN_LED2,低);延迟(1000);液晶显示器(); } else { digitalWrite(PIN_Alarm_Relay,LOW);数字写入(PIN_Safety_Valve,低);设置伺服();延迟(10);}}
INOVT_COVID19_Version_2.2.rarC/C++
无预览(仅限下载)。

定制零件和外壳

它们必须在 3D 打印机上打印。
需要一定的精度。 完成更换潜水面罩并将其变成加压呼吸面罩的分步说明 需要一定的精度。
高分辨率 3d 打印机 inovt_covid19_version_2_0_david_pascoal_0mbFUa0ce1.rar

示意图

自主版图,
不需要医院气柱。 2.2 版。
具有安全防护和报警输出。 2.2 版。
具有安全防护和报警输出。

制造工艺

  1. 开源参考板旨在快速部署医用呼吸机
  2. Arduino Spybot
  3. FlickMote
  4. 自制电视 B-Gone
  5. 主时钟
  6. 找到我
  7. Arduino Power
  8. Tech-TicTacToe
  9. Arduino Quadruped
  10. Arduino Joystick
  11. 数控机床
  12. Earth_Analyzer