Oxímetro de Pulso Portátil para Emergencias COVID-19 - Arduino Nano + MAX30100
Componentes y materiales
| Arduino Nano R3 (o Nano Every) | 1 |
| Sensor MAX30100 (oxímetro + frecuencia cardíaca, I2C) | 1 |
| Pantalla OLED SSD1306 128x32 I2C | 1 |
| Protoboard / placa perforada | 1 |
| Pinza dedo (diseño Peter Smith, Thingiverse) | 1 |
Herramientas necesarias
- Impresora 3D
- Soldador
- Estaño sin plomo
- Cable 4x0.25 mm²
Sobre el proyecto
Este proyecto nace para ayudar a personas e instituciones en emergencia COVID-19, cuando la disponibilidad de oxímetros médicos es escasa. Todo es open source para replicación rápida.
Paquete base ("base pack")
- Hardware: Lista corta, barata y común: Arduino Nano, MAX30100, OLED 128x32, "placa de emergencia".
- Carcasa 3D: Caja simple para proteger electrónica y conexiones.
- Pinza dedo 3D: Diseño open source "Pulse Oximeter Clip" de Peter Smith para placa MAX30100.
- Placa base simple: Protoboard perforada conectando Arduino, sensor y OLED (próxima versión: PCB impresa).
- Código: Configuración base para monitorizar frecuencia cardíaca y SpO2 en tiempo real. Parámetros genéricos; ajustes finos según caso.
- Instrucciones: Esquemas, paso a paso, links a librerías y Thingiverse.
⚠ DESCARGO DE RESPONSABILIDAD MÉDICO - IMPORTANTE
Esta aplicación, sensores y dispositivo NO están testados para uso médico y sus componentes NO están calibrados ni certificados.
Úsalo solo para monitorización preventiva o en emergencia cuando no haya oxímetros médicos disponibles. Cualquier uso fuera de este ámbito es bajo tu responsabilidad. Modificaciones también bajo tu responsabilidad.
Licencia: GNU GPL v3+. Copyright © 2020, CEREBRUM™ srl. Descargar cualquier archivo implica aceptar este descargo y la intención del proyecto bajo emergencia "Covid-19".
Código - CE_Pulse-Oxi_dev2.4.ino
/* CEREBRUM-oximeter dev. 2.4 - v1.1 - 6 Abr 2020
* Arduino NANO - 3.3V | I2C A4 (SDA), A5 (SCL)
* Arduino NANO Every - 3.3V | I2C A4 (SDA), A5 (SCL)
* Arduino MICRO - 3.3V | I2C 2 (SDA), 3 (SCL)
* MAX30100 - PulseOximeter board (+3.3V | GND | SDA/SCL)
* OLED SSD1306 128x32 (+3.3V | GND | SDA/SCL)
* Licencia GNU GPL v3+ - CEREBRUM Srl, Italy */
#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;
uint32_t 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.setCursor(15, 12);
u8g2.setFont(u8g2_font_crox2hb_tr);
u8g2.print("CEREBRUM.it");
u8g2.setFont(u8g2_font_crox2h_tr);
u8g2.setCursor(30, 29);
u8g2.print("Inicializando...");
u8g2.sendBuffer();
delay(4000);
initialized = true;
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2hb_tr);
if (!pox.begin()) {
u8g2.setCursor(40, 12); u8g2.print("FALLO");
u8g2.setCursor(15, 29); u8g2.print("Revisa Sensor!");
u8g2.sendBuffer();
for(;;);
} else {
u8g2.setCursor(20, 12); u8g2.print("INICIALIZADO");
u8g2.setCursor(0, 29); u8g2.print("Coloca el sensor...");
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("lpm");
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();
}
}
Partes personalizadas y cajas (CAD)
- Carcasa principal para electrónica y OLED
- Tapa superior carcasa
- Pinza dedo 2 partes (diseño Peter Smith - ver colaboradores)
Esquemáticos
- Conexiones principales I2C (Nano A4/A5 → MAX30100 + OLED)
- Archivo Fritzing:
ce_pulse-oxi_nano_v1_rlt456wOHw.fzz - Placa base simple:
ce_pulse-oxi_nano_eboard_v1_Hr01HUzdkf.fzz
Documentos PDF adjuntos en proyecto original: CE_Pulse-Oxi_nano_2.4_V1_Instruction.pdf, CE_Pulse-Oxi_nano_2xscheme_V1.pdf.
Proceso de manufactura
- Por Qué las Listas de Verificación Impulsan la Eficiencia en Planta: Beneficios Comprobados e Implementación Práctica
- Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
- Guía Eficiente de Software de Grabación ISD1700 y Configuración con Arduino
- Health Band: Asistente Inteligente Vestible para Personas Mayores
- Guía Experta para Seleccionar Cubiertas de Alambre para Estanterías de Paletas Confiables
- Soluciones Premium de Fundición en Arena para Aplicaciones Industriales
- Bomba de agua eléctrica para uso doméstico: fiable, eficiente, fácil de instalar
- Mejores Máquinas CNC EDM para Mecanizado de Precisión
- Impresión 3D metálica: 5 aplicaciones de vanguardia que transforman la industria
- COVID-19: Estrategias clave para un plan de respuesta de cadena de suministro de emergencia efectivo
- 5 Potentes Casos de Uso de la Impresión 3D