Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

ventilateur pulmonaire COVID-19 open source

Composants et fournitures

Arduino UNO
Pour la version avec Arduino
× 1
Bouclier de relais Arduino 4
Pour la version avec Arduino
× 1
Servo numérique MG995
Pour toutes les versions
× 1
Module LM2596S
Pour toutes les versions
× 2
potentiomètre linéaire multi-tours 10k
Pour toutes les versions
× 1
Alimentation Digilent 60W PCIe 12V 5A
Pour toutes les versions
× 1
LED 5 mm :Rouge
Pour toutes les versions
× 1
LED 5 mm :Vert
× 1
LCD alphanumérique, 20 x 4
Pour toutes les versions
× 1
interrupteur 220v
Pour toutes les versions
× 1
Tuba intégral
× 1
Électrovanne, 2 voies
× 1

Outils et machines nécessaires

Imprimante 3D (générique)
A8
300-001 - Lightbox, exposition UV

Applications et services en ligne

Arduino IDE
Élégance PCB
Autodesk Fusion 360

À propos de ce projet

Ventilateur non invasif open source Son faible coût et facile à construire, un respirateur d'urgence pour lutter contre la crise sanitaire Covid19 s'il n'y a pas de ventilateurs disponibles et tant que le patient n'est pas sédatif ou intubé.

Ce projet est le résultat d'un défi lancé par mon ancien professeur et ami Serafim Pires qui m'a contacté en me montrant un projet espagnol, me disant que ce serait bien si je pouvais développer un projet pour aider à combattre cette crise mondiale.

Après plusieurs recherches et études sur le thème de la Ventilation non invasive j'ai construit ce prototype fonctionnel basé sur 2 technologies existantes,

Tous les tests ont été concluants et avec un test fonctionnel avec plus de 20 jours sans aucun problème ni interruption.

La ventilation non invasive est assurée à l'aide de masques nasaux, qui poussent une quantité définie d'air sous pression dans les poumons. Cela soutient le processus naturel de respiration lorsque la maladie a provoqué une défaillance des poumons, permettant au corps de combattre l'infection et de se rétablir.

Sur la base de recherches menées en Italie, j'ai utilisé cette technologie dans mon projet qui transforme un masque de plongée Decathlon en un ventilateur d'urgence pour les patients souffrant de COVID-19, pour aider à atténuer le manque de ventilateurs pendant le pic de la pandémie de coronavirus.

Ces masques ont été adaptés et utilisés partout dans le monde en raison de leur faible coût et de leur facilité d'adaptation.

Les résultats étaient évidents et, récemment, cette technologie a également été utilisée ici au Portugal à l'hôpital de Santarém.

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

Nouvelles dans le journal au Portugal.

Iterview sur une radio locale est devenue virale sur les réseaux sociaux au Portugal.

.

Premier test de fonctionnement utilisant un petit volume d'air et utilisant 15 cycles respiratoires en changeant la fréquence respiratoire et le bip pour démonstration.


ATTENTION :Ce prototype n'est encore validé par aucun organisme officiel et je décline toute responsabilité quant à son utilisation.

De plus, il ne sera utilisé qu'en dernier recours et par du personnel médical formé, cet équipement est destiné à sauver des vies en situation de pic extrême.

Le projet à but non lucratif peut être reproduit en masse, s'il est approuvé par les autorités compétentes au Portugal.

Code

  • INOVT_COVID19_Version_2.2.ino
  • INOVT_COVID19_Version_2.2.rar
INOVT_COVID19_Version_2.2.inoArduino
/* Programme ventilateur pulmonaire INOVT COVID-19 Versio 2.2 * Auteur :David Pascoal * L'équipement a été testé et éprouvé, sécurité avec capteur de pression, * Sortie d'alarme pour allumer Buzer ou scarabée.*/#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 1#define #define MIN_139 =0;int valInspira =0;int valExpira =0;int valPeep =0; int aux; entier x =500 ; int y =1000;non signé longtemps;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};octet a1[8]={B11000, B01100, B00110, B00011, B00001, B00000, B00000};octet a4[9]={ B00000 , B00000, B00000, B00001, B00011, B00110, B01100, B11000 };octet a5[9]={ B00000, B01110, B11111, B10001, B00000, B00000, B00000, B01110, B00000,};octet a6[8]={ B00000, B00000, B00000, B10000, B11000, B01100, B00110, B00011};octet a7[10]={ B00000, B01110, B11111, B10001, B00000, B00000, B00000, B00000, };octet 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(octet(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(octet(1)); lcd.write(byte(2)); lcd.write(byte(0)); lcd.write(byte(7)); lcd.write(byte(2)); }void initior() { octet c11[8] ={B00000,B00000,B11111,B11111,B11111,B11111,B00000,B00000};lcd.createChar(3, c11);lcd.setCursor(0, 2); lcd.write(3); délai(x);lcd.setCursor(1, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,HIGH);lcd.setCursor(2, 2); lcd.write(3); délai(x);lcd.setCursor(3, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(4, 2); lcd.write(3); délai(x);lcd.setCursor(5, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,LOW);lcd.setCursor(6, 2); lcd.write(3); delay(x);lcd.setCursor(7, 2);lcd.write(3); retard(x); digitalWrite(PIN_LED2,LOW);lcd.setCursor(8, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,HIGH); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(9, 2); lcd.write(3); retard(x); monServo.write(100); digitalWrite(PIN_LED,LOW); digitalWrite(PIN_LED2,LOW);lcd.setCursor(10, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,HIGH); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(11, 2);lcd.write(3); retard(x); monServo.write(110); digitalWrite(PIN_LED,LOW); digitalWrite(PIN_LED2,LOW);lcd.setCursor(12, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,HIGH); digitalWrite(PIN_LED2, HAUT); lcd.setCursor(13, 2); lcd.write(3); retard(x); monServo.write(115); digitalWrite(PIN_LED,LOW); digitalWrite(PIN_LED2,LOW);lcd.setCursor(14, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,HIGH); digitalWrite(PIN_LED2,HIGH);lcd.setCursor(15, 2); lcd.write(3); retard(x); monServo.write(120); digitalWrite(PIN_LED,LOW); digitalWrite(PIN_LED2,LOW); lcd.setCursor (16, 2); lcd.write(3); retard(x); digitalWrite(PIN_LED,HIGH); digitalWrite(PIN_LED2, HAUT); lcd.setCursor(17, 2); lcd.write(3); delay(x);myServo.write(130); digitalWrite(PIN_LED,LOW); digitalWrite(PIN_LED2,LOW);lcd.setCursor(18, 2); lcd.write(3); retard(x); lcd.setCursor (19, 2); lcd.write(3); delay(x);}void maobc() { thumbdownA(); retard(x); lcd.clear(); pouces vers le haut(); retard(x); pouce vers le basA(); retard(x); lcd.clear(); pouces vers le haut(); retard(x); pouce vers le basA(); retard(x); lcd.clear(); pouces vers le haut(); retard(x); pouce vers le basA(); retard(x); lcd.clear(); pouces vers le haut(); retard(1000); lcd.clear();} void thumbdownA() { byte thumb1[8] ={B00001,B00010,B00011,B00100,B00011,B00100,B00011,B00100} ; octet thumb2[8] ={B00011,B00000,B00000,B00000,B00000,B00000,B00000,B00000} ; octet thumb3[8] ={B11110,B00001,B00000,B00000,B00000,B00000,B00000,B00000} ; octet thumb4[8] ={B00000,B11110,B01000,B10001,B10010,B10010,B01100,B00000} ; octet thumb5[8] ={B00000,B10000,B01110,B00010,B00010,B00010,B00010,B00010} ; octet thumb6[8] ={B00110,B01000,B10000,B00000,B00000,B00000,B00000,B00000} ; lcd.createChar(6, pouce1) ; lcd.createChar(1, pouce2) ; lcd.createChar(2, pouce3) ; lcd.createChar(3, pouce4) ; lcd.createChar(4, pouce5) ; lcd.createChar(5, pouce6) ; lcd.setCursor(7,0) ; lcd.write(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() { octet thumb1[8] ={B00100,B00011,B00100,B00011,B00100,B00011,B00010,B00001}; octet thumb2[8] ={B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00011} ; octet thumb3[8] ={B00000,B00000,B00000,B00000,B00000,B00000,B00001,B11110} ; octet thumb4[8] ={B00000,B01100,B10010,B10010,B10001,B01000,B11110,B00000} ; octet thumb5[8] ={B00010,B00010,B00010,B00010,B00010,B01110,B10000,B00000} ; octet thumb6[8] ={B00000,B00000,B00000,B00000,B00000,B10000,B01000,B00110} ; lcd.createChar(6, pouce1) ; lcd.createChar(1, pouce2) ; lcd.createChar(2, pouce3) ; lcd.createChar(3, pouce4) ; lcd.createChar(4, pouce5) ; lcd.createChar(5, pouce6) ; lcd.setCursor(7,1) ; lcd.write(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 ) { // Passer un inspirandO digitalWrite(PIN_LED2,LOW); digitalWrite(PIN_LED,HIGH); monServo.write(MIN_ANGLE); temps =millis() + (valInspira * 100); estado =INSPIRANDO; lcd.setCursor(8, 2); lcd.print("EXPIRANDO> "); } else if ( estado ==INSPIRANDO ) { // P0asar a expirando digitalWrite(PIN_LED2,HIGH); digitalWrite(PIN_LED,LOW); monServo.write(MAX_ANGLE - valPeep); heure =millis() + (valExpira * 100); estado =EXPIRANDO; lcd.setCursor(8, 2); lcd.print("INSPIRANDO <"); } }} void setup() { myServo.attach(PIN_SERVO); monServo.write(92); //digitalWrite(PIN_LED,LOW); pinMode(PIN_FREQ,INPUT_PULLUP); pinMode(PIN_PEEP,INPUT_PULLUP); pinMode(SENSOR_FLOW, INPUT); pinMode(PIN_LED,SORTIE); pinMode(PIN_LED2,OUTPUT); pinMode(PIN_Alarm_Relay,OUTPUT); pinMode(PIN_Safety_Valve,OUTPUT); lcd.init(); LCD rétro-éclairage(); lcd.clear(); lcd.setCursor(0,0); logo(); lcd.setCursor(4,2) ; lcd.print("SOURCE-OUVERTE"); lcd.setCursor(0,3) ; lcd.print("Ventilateur pulmonaire"); retard (4000); lcd.clear(); lcd.print("....Initialisation...."); initial(); retard (500); lcd.clear(); maobc(); lcd.clear(); if(digitalRead(SENSOR_FLOW) ==LOW) { thumbsup(); lcd.setCursor(0,0); lcd.print("SYSTÈME"); lcd.setCursor(2,1) ; lcd.print("OK"); retard (5000); lcd.clear(); } else { monServo.write(139); pouce vers le basA(); lcd.setCursor(0,0); lcd.print("SYSTÈME"); lcd.setCursor(1,1) ; lcd.print("ECHEC"); retard (5000); lcd.clear(); Serial.begin(9600); temps =millis(); frecuencia_ant=-1; valPeep_ant=-1; } délai (500); estado=EXPIRANDO; }boucle vide() {digitalRead(SENSOR_FLOW); aux =analogRead(PIN_FREQ); fréquence =carte(aux,0,1023, 10, 60); valInspira =((1,0 / fréquence )* 600,0 ) * (1,0/3,0); valExpira =((1,0 / fréquence ) * 600,0 ) * (2,0/3,0); aux =analogRead(PIN_PEEP); valPeep =map(aux,0,1023, 0, 10); if ( (frecuencia_ant !=frecuencia) || (valPeep_ant !=valPeep)) { //Pode monitorizar os valores de Frequencia et PEEP sem display usando o Monitor serie do Arduino IDE. Serial.print("Frecuencia:"); Serial.println(frecuencia); Serial.print("Inspira:"); Serial.println(valInspira); Serial.print("Expire:"); Serial.println(valExpira); Serial.print("Peep:"); Serial.println(valPeep); lcd.setCursor(1, 0); lcd.print("FREQUENCIA:"); lcd.setCursor(13, 0); lcd.print(frecuencia); lcd.setCursor(1, 1); lcd.print("PEEP:"); lcd.setCursor(13, 1); lcd.print(valPeep); // retard (500); lcd.setCursor(0, 2); lcd.print("ESTADO:"); lcd.setCursor(0, 3); lcd.print("VENTILATEUR D.PASCOAL "); frecuencia_ant =frecuencia; valPeep_ant =valPeep; } if(digitalRead(SENSOR_FLOW) ==HIGH) { myServo.write(139); digitalWrite(PIN_Alarm_Relay,HIGH); digitalWrite( PIN_Safety_Valve, HIGH); lcd.clear(); pouce vers le basA(); lcd.setCursor(0,0); lcd.print("SYSTÈME"); lcd.setCursor(1,1) ; lcd.print("ECHEC"); lcd.setCursor(1,2) ; lcd.print("******************"); lcd.setCursor(3,3); lcd.print("Vérifier le flux AR"); lcd.setCursor(12,1) ; lcd.print("ALARME"); digitalWrite(PIN_LED,HIGH); digitalWrite(PIN_LED2, HAUT); retard (500); lcd.setCursor(12,1) ; lcd.print(" "); retard (500); lcd.setCursor(12,1) ; lcd.print("ALARME"); digitalWrite(PIN_LED,LOW); digitalWrite(PIN_LED2,LOW); retard(1000); lcd.clear(); } else { digitalWrite(PIN_Alarm_Relay,LOW); digitalWrite( PIN_Safety_Valve,LOW); setServo(); retard(10);}}
INOVT_COVID19_Version_2.2.rarC/C++
Aucun aperçu (téléchargement uniquement).

Pièces et boîtiers personnalisés

Ils doivent être imprimés sur une imprimante 3D.
Nécessite une certaine précision. Instructions complètes étape par étape pour changer le masque de plongée et le transformer en masque respiratoire pressurisé Nécessite une certaine précision.
Imprimante 3D haute résolution inovt_covid19_version_2_0_david_pascoal_0mbFUa0ce1.rar

Schémas

Schéma de la version autonome,
n'a pas besoin de la colonne d'air de l'hôpital. Version 2.2 .
Avec gardien de sécurité et sortie d'alarme. Version 2.2 .
Avec gardien de sécurité et sortie d'alarme.

Processus de fabrication

  1. Le tableau de référence open source cible le déploiement rapide de ventilateurs médicaux
  2. Arduino Spybot
  3. FlickMote
  4. Téléviseur maison B-Gone
  5. horloge maîtresse
  6. Trouvez-moi
  7. Puissance Arduino
  8. Tech-TicTacToe
  9. Arduino quadrupède