Oxymètre de pouls portable pour usage d'urgence COVID-19
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 (ou Nano Every, Micro) | 1 |
| Capteur MAX30100 (oxymétrie + pouls) | 1 |
| Écran OLED SSD1306 128×32 I2C | 1 |
| Plaque d'essai (prototype) / futur PCB | 1 |
| Clip doigt imprimé 3D (Peter Smith, Thingiverse) | 1 |
| Fil 4×0.25 mm² | 1 |
Outils
- Imprimante 3D
- Fer à souder + fil sans plomb
À propos du projet
Pénurie d'oxymètres en période COVID. Projet open-source pour réplication rapide : hardware commun/peu cher, boîtier 3D, clip doigt existant, carte de liaison simple, code de base, instructions claires.
1. Hardware : liste courte, grand potentiel
- Arduino Nano (3.3V, I2C : A4=SDA, A5=SCL)
- MAX30100 (3.3V, I2C)
- OLED SSD1306 128×32 (3.3V, I2C)
- Carte « emergency board » (plaque prototype → futur PCB)
2. Boîtier 3D imprimable
Protège électronique et connexions. Fichiers fournis.
3. Clip doigt 3D (open source)
Modèle « Pulse Oximeter Clip » pour MAX30100 par Peter_Smith sur Thingiverse. Impression rapide, partage facile.
4. Carte de liaison simple
Plaque prototype connectant Nano, capteur, OLED. Prochaine étape : PCB imprimé.
5. Code : monitoring temps réel
Configuration de base : fréquence cardiaque + SpO2 temps réel. Paramètres généraux, ajustables selon usage.
6. Instructions
Schémas, pas-à-pas, liens bibliothèques, repo Thingiverse. Rien d'autre requis.
AVERTISSEMENT MÉDICAL
Ce dispositif, ses capteurs et son code NE SONT PAS testés, calibrés ni certifiés pour usage médical. Usage préventif et surveillance d'urgence UNIQUEMENT quand aucun dispositif médical n'est disponible. Toute utilisation hors ce cadre ou modification est sous votre entière responsabilité.
Licence GPL v3+. Copyright © 2020 CEREBRUM™ srl. Télécharger un fichier = accepter la disclaimer et l'intention du projet (urgence COVID-19).
Code Arduino (CE_Pulse-Oxi_dev2.4.ino)
/* CEREBRUM-oximeter dev 2.4 v1.1 - 06/04/2020 - GPL v3
Arduino NANO/NANO Every: 3.3V | I2C A4(SDA), A5(SCL)
Arduino MICRO: 3.3V | I2C 2(SDA), 3(SCL)
MAX30100 + OLED SSD1306 128x32 sur même bus I2C */
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include "MAX30100.h"
#include <U8g2lib.h>
#define REPORTING_PERIOD_MS 1000
#define PULSE_WIDTH MAX30100_SPC_PW_1600US_16BITS
#define IR_LED_CURRENT MAX30100_LED_CURR_40MA
#define LED_CURRENT MAX30100_LED_CURR_20_8MA
#define SAMPLING_RATE MAX30100_SAMPRATE_100HZ
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
PulseOximeter pox;
MAX30100 sensor;
uint32_t tsLastReport = 0, last_beat = 0;
bool initialized = false;
int HRclean, SpO2;
void onBeatDetected() { show_beat(); last_beat = millis(); }
void show_beat() {
u8g2.setFont(u8g2_font_cursor_tr);
u8g2.setCursor(118, 10);
u8g2.print("_");
u8g2.sendBuffer();
}
void initial_display() {
if (!initialized) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2hb_tr);
u8g2.setCursor(15, 12); u8g2.print("CEREBRUM.it");
u8g2.setFont(u8g2_font_crox2h_tr);
u8g2.setCursor(30, 29); u8g2.print("Initialisation...");
u8g2.sendBuffer(); delay(4000);
initialized = true;
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2hb_tr);
if (!pox.begin()) {
u8g2.setCursor(40, 12); u8g2.print("ECHEC");
u8g2.setCursor(15, 29); u8g2.print("Verifiez Capteur!");
u8g2.sendBuffer(); for(;;);
} else {
u8g2.setCursor(20, 12); u8g2.print("INITIALISE");
u8g2.setCursor(0, 29); u8g2.print("Mettez le capteur...");
u8g2.sendBuffer();
}
delay(2000);
}
}
void setup() {
u8g2.begin();
initial_display();
pox.begin();
pox.setOnBeatDetectedCallback(onBeatDetected);
pox.setIRLedCurrent(LED_CURRENT);
sensor.setMode(MAX30100_MODE_SPO2_HR);
sensor.setLedsPulseWidth(PULSE_WIDTH);
sensor.setSamplingRate(SAMPLING_RATE);
}
void loop() {
pox.update();
HRclean = pox.getHeartRate();
SpO2 = pox.getSpO2();
if ((millis() - tsLastReport > REPORTING_PERIOD_MS) &&
(HRclean > 30 && HRclean < 220 && SpO2 > 30 && SpO2 < 100)) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2h_tr);
u8g2.setCursor(0, 12); u8g2.print("FC");
u8g2.setCursor(75, 12); u8g2.print("bpm");
u8g2.setCursor(0, 30); u8g2.print("SpO2");
u8g2.setCursor(75, 30); u8g2.print("%");
u8g2.setFont(u8g2_font_fub11_tf);
u8g2.setCursor(45, 12); u8g2.print(HRclean);
u8g2.setCursor(45, 30); u8g2.print(SpO2);
u8g2.setFont(u8g2_font_cursor_tr);
u8g2.setCursor(118, 10); u8g2.print("^");
u8g2.sendBuffer();
tsLastReport = millis();
}
}
Pièces 3D personnalisées
- Boîtier principal (électronique + OLED)
- Couvercle boîtier
- Clip doigt 2 parties (Peter Smith)
Schémas
- Connexions principales
ce_pulse-oxi_nano_v1_rlt456wOHw.fzz(Fritzing)- Carte de liaison simple
ce_pulse-oxi_nano_eboard_v1_Hr01HUzdkf.fzz(Fritzing)
Processus de fabrication
- Impression 3D métallique : 5 applications de pointe transformant l'industrie
- Pourquoi les check-lists boostent l'efficacité usine : bénéfices prouvés et mise en œuvre pratique
- COVID-19 : stratégies clés pour un plan de réponse d'urgence efficace de la chaîne d'approvisionnement
- Health Band : Bracelet intelligent fiable d'assistance pour personnes âgées
- Guide d'expert pour sélectionner les caillebotis métalliques pour rayonnages à palettes fiables
- 5 cas d'usage puissants de l'impression 3D
- Solutions de moulage en sable premium pour applications industrielles
- Pompe à eau électrique pour usage domestique – Fiable, efficace, facile à installer
- Meilleures machines EDM CNC pour usinage de précision