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

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Composants et fournitures

Composant Quantité
Arduino Nano R3 1
Capteur pouls/rythme cardiaque MAX30102 (Maxim Integrated) 1
Écran OLED I2C 128x64 (DFRobot Gravity) 1

Outils nécessaires

Applications et services en ligne

À propos du projet

Les défis du COVID-19

Le COVID-19, causé par le SARS-CoV-2, attaque principalement le système respiratoire. Symptômes légers : fièvre, courbatures, frissons. Mais il peut évoluer vers pneumonie. Une personne essoufflée ne sait pas toujours quand aller à l'hôpital, surtout quand les services sont saturés. Cet oxymètre de pouls open-source vise à aider à surveiller son état et à prendre les bonnes décisions.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

⚠️ Avertissement important

Ce dispositif/projet n'est PAS un outil de diagnostic médical fiable ! Il fournit une indication, pas un diagnostic certifié.

L'électronique

MAX30102

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Capteur optique intégrant LED rouge + IR et photodétecteur. Mesure la saturation en oxygène (SpO₂) et le rythme cardiaque par photopléthysmographie. Interface I2C, alimentation 3,3V ou 5V.

Écran OLED 128x64

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Affichage I2C compact, lisible, faible consommation.

Arduino Nano

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Construction pas à pas

1. Imprimer et préparer les pièces

Téléchargez les fichiers STL (section « Custom parts »), tranchez (infill 70-80%, supports moyens, PLA). Retirez les supports, poncez légèrement pour un bon ajustement.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

2. Souder l'électronique

L'Arduino Nano est monté sur une plaque à pastilles 44×30 mm. Soudez fils sur VIN, GND, SDA, SCL du MAX30102, passez sous la base vers le Nano.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Connectez le connecteur OLED au Nano, remontez vers l'écran.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Insérez l'ensemble dans le boîtier, fixez avec vis 3 mm.

3. Assembler le dispositif

Fixez l'écran OLED sur la partie supérieure, vissez au châssis. Testez l'articulation du couvercle.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

4. Téléverser le sketch

Installez les bibliothèques requises (MAX30105, spo2_algorithm, SSD1306Ascii), sélectionnez « Arduino Nano », téléversez.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Le sketch : initialise OLED et MAX30102 (avec rapport d'erreurs), lit 100 échantillons pour calibrer, puis boucle : lit 25 nouvelles valeurs, calcule moyenne glissante, vérifie validité, affiche SpO₂ et FC si valides.

5. Utilisation

Placez le bout du doigt sur le capteur, fermez doucement le couvercle. Branchez l'alimentation (USB). Attendez l'affichage des données.

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Code

Code Oxymètre de pouls (C/C++)

/* Connexions hardware (Breakout vers Arduino) :
 * - 5V = 5V (3.3V autorisé)
 * - GND = GND
 * - SDA = A4 (ou SDA)
 * - SCL = A5 (ou SCL)
 * - INT = Non connecté
 * Le MAX30105 gère logique I2C 5V ou 3.3V. Alimentation 5V recommandée.
 */
#include <Wire.h>
#include "MAX30105.h"
#include "spo2_algorithm.h"
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

MAX30105 particleSensor;
SSD1306AsciiWire oled;
#define MAX_BRIGHTNESS 255

#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
// Arduino Uno/Nano : pas assez de SRAM pour 50 échantillons 32 bits
// On tronque à 16 bits (MSB)
uint16_t irBuffer[50];
uint16_t redBuffer[50];
#else
uint32_t irBuffer[50];
uint32_t redBuffer[50];
#endif

int32_t spo2; int8_t validSPO2;
int32_t heartRate; int8_t validHeartRate;

void setup() {
  Serial.begin(115200);
  oled.begin(&Adafruit128x64, 0x3C);
  oled.setFont(Arial14);
  
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
    Serial.println(F("MAX30105 introuvable. Vérifiez câblage/alimentation."));
    while (1);
  }
  // Configuration : ledBrightness=55, sampleAverage=4, ledMode=2, sampleRate=200, pulseWidth=411, adcRange=4096
  particleSensor.setup(55, 4, 2, 200, 411, 4096);
}

void loop() {
  // Premiers 50 échantillons : déterminer plage signal
  for (byte i = 0; i < 50; i++) {
    while (!particleSensor.available()) particleSensor.check();
    redBuffer[i] = particleSensor.getRed();
    irBuffer[i]  = particleSensor.getIR();
    particleSensor.nextSample();
    Serial.print(F("red=")); Serial.print(redBuffer[i], DEC);
    Serial.print(F(", ir=")); Serial.println(irBuffer[i], DEC);
  }
  
  // Premier calcul FC et SpO2
  maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);
  
  // Boucle continue : calcul chaque seconde
  while (1) {
    // Décaler les 25 derniers échantillons au début
    for (byte i = 25; i < 50; i++) {
      redBuffer[i - 25] = redBuffer[i];
      irBuffer[i - 25]  = irBuffer[i];
    }
    // Acquérir 25 nouveaux échantillons
    for (byte i = 25; i < 50; i++) {
      while (!particleSensor.available()) particleSensor.check();
      redBuffer[i] = particleSensor.getRed();
      irBuffer[i]  = particleSensor.getIR();
      particleSensor.nextSample();
      Serial.print(F("red=")); Serial.print(redBuffer[i], DEC);
      Serial.print(F(", ir=")); Serial.print(irBuffer[i], DEC);
      Serial.print(F(", HR=")); Serial.print(heartRate, DEC);
      Serial.print(F(", HRvalid=")); Serial.print(validHeartRate, DEC);
      Serial.print(F(", SPO2=")); Serial.print(spo2, DEC);
      Serial.print(F(", SPO2Valid=")); Serial.println(validSPO2, DEC);
    }
    // Recalculer
    maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);
    printToScreen();
  }
}

void printToScreen() {
  oled.clear();
  oled.setCursor(0, 0);
  if (validSPO2 && validHeartRate) {
    oled.print(F("FC: ")); oled.println(heartRate, DEC);
    oled.print(F("SpO2: ")); oled.println(spo2, DEC);
  } else {
    oled.print(F("Non valide"));
  }
}

Pièces personnalisées et boîtiers

Fichiers STL disponibles pour impression 3D (aucun réglage spécifique requis).

Schémas

Oxymètre de pouls open-source DIY pour COVID-19 : construction Arduino

Processus de fabrication

  1. Journal du projet FirePick Delta : Construire une MicroFactory open-source avec OpenPnP
  2. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  3. Construire un Iron Man animé avec Arduino : capteurs, sons et relais
  4. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  5. Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
  6. Oxymètre de pouls portable pour usage d'urgence COVID-19
  7. Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
  8. Health Band : Bracelet intelligent fiable d'assistance pour personnes âgées
  9. Pourquoi l'open source stimule l'innovation à la périphérie — eBook essentiel