Sensore MAX30100 – Pulsossimetria e cardiofrequenzimetro.

Il sensore MAX30100 è una soluzione integrata per sensore di pulsossimetria e cardiofrequenzimetro. Combina due LED, un foto rilevatore, un’ottica ottimizzata e un elaboratore del segnale analogico a basso rumore.  Il MAX30100 funziona con alimentazioni da 1,8 V e 3,3 V e può essere spento tramite software con corrente di standby trascurabile, consentendo in tal modo alla rete di rimanere sempre connessa.

sensore max30100 pulsossimetria cardiofrequenzimetro

Il sensore ha un sensore di temperatura su chip che può essere utilizzato per compensare l’errore SpO2 (ovvero saturazione in ossigeno dell’emoglobina presente nel sangue arterioso) con variazioni di temperatura ambiente.
Nel nostro caso sulla scheda è comunque montato su un piccolo PCB dalle dimensioni di 19 x 14 mm con 7 pin in linea

sensore max30100 pulsossimetria cardiofrequenzimetro

sensore max30100 pulsossimetria cardiofrequenzimetro

sensore max30100 pulsossimetria cardiofrequenzimetro

Schema elettrico del modulo

Lo schema del sensore MAX30100 per pulsossimetria e cardiofrequenzimetro  è semplice in quanto è composto dall’ IC MAX30100 (datasheet) che  funziona con tensioni di 1,8 V e 3,3 V, in particolare i 3,3V utilizzati per alimentare i due Led e la tensione di 1,8V per alimentare la circuiteria interna.
Per poterlo alimentare a con una tensione compresa tra i 1.8 e i 5,5V sul modulo sono presenti due regolatori per ottenere questa tensioni U2 (RCWL-9183) che fornisce in uscita la tensione di 3,3V e U3 che fornisce la 1.8V

sensore max30100 pulsossimetria cardiofrequenzimetro

sensore max30100 pulsossimetria cardiofrequenzimetro

sensore max30100 pulsossimetria cardiofrequenzimetro

Pin di collegamento del modulo sensore

sensore max30100 pulsossimetria cardiofrequenzimetro

NumeroPinDefinizione dei pin
1VINAlimentazione 1.8-5.5V
2SCLI2C-SCL
3SDAI2C -SDA
4INTMAX 30100 INT - Interrupt attivo-basso (Open-Drain)
5IRDMAX 30100 IR_DRV - Catodo LED IR e LED Driver
6RDMAX 30100 R_DRV - Catodo LED rosso e LED Driver
7GNDAlimentazione GND

homotix

Libreria di gestione per Arduino

Per facilitare la gestione del sensore MAX30100 sono disponibili alcune libreria che potranno essere scaricate facilmente facendo uso della funzione Gestione librerie dell”IDE

A questo punto basterà inserire nel campo ricerca “max30100“, in questo modo appariranno due librerie, quella che è stata utilizzata è stata creata da OXullo, occorre premere il tasto Installa, Al termine dell’installazione apparirà la dicitura “INSTALLED

Ora andando sotto la sezione Esempi, potrete trovare sotto la cartella “Esempi da librerie personalizzate” gli esempi inerenti la libreria Max30100

Test del modulo

Il cablaggio questo sensore è molto semplice. Per il test è stato utilizzato unArduino Nano, come abbiamo visto il modulo può essere alimentato tramite la tensione fornita da Arduino, occorre poi collegare il modulo LCD su cui dovrà essere montato il modulo Bus I2C per poterlo pilotare.
Sia il modulo MAX30100 che il display 16×2, utilizzano il protocollo I2C ma operando con diversi indirizzi possono coesistere sullo stesso Bus.
I valori dei battiti cardiaci sono leggibili anche tramite il monitor seriale che dovrà essere impostato alla velocità di 115200 baud
Sotto sono riportati i relativi cablaggi.

sensore max30100 pulsossimetria cardiofrequenzimetro

Arduino Nano Display LCD 16×2 con Modulo Expander bus I2C

 


Scarica il programma

Per il test la scheda Arduino Nano, è stata montata sullo shield denominato Arduino Nano IO Shield prodotto dalla DFROBOT permette oltre che di istallare il modulo Arduino Nano di avere dei pin per il collegamento dei pin di Input e Output oltre che i pin di alimentazione.  La scheda dispone inoltre di appositi pin per il collegamento di sensori e schede dotate di connessione I2C

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define REPORTING_PERIOD_MS     1000

// PulseOximeter is the higher level interface to the sensor
// it offers:
//  * beat detection reporting
//  * heart rate calculation
//  * SpO2 (oxidation level) calculation
PulseOximeter pox;

uint32_t tsLastReport = 0;

// Callback (registered below) fired when a pulse is detected
void onBeatDetected()
{
  Serial.println("Beat!");
}

void setup()
{
  Serial.begin(115200);
  lcd.begin(); //Init with pin default ESP8266 or ARDUINO
  lcd.backlight();
  Serial.print("Initializing pulse oximeter..");
  lcd.setCursor(0, 0);
    lcd.print("Batt: "); lcd.print ("     "); lcd.print(" bpm");
    lcd.setCursor(0, 1);
    lcd.print("Oss.: "); lcd.print ("     "); lcd.print(" %");

  // Initialize the PulseOximeter instance
  // Failures are generally due to an improper I2C wiring, missing power supply
  // or wrong target chip
  if (!pox.begin()) {
    Serial.println("FAILED");
    for (;;);
  } else {
    Serial.println("SUCCESS");
  }

  // The default current for the IR LED is 50mA and it could be changed
  //   by uncommenting the following line. Check MAX30100_Registers.h for all the
  //   available options.
  // pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

  // Register a callback for the beat detection
  pox.setOnBeatDetectedCallback(onBeatDetected);
}

void loop()
{
  // Make sure to call update as fast as possible
  pox.update();

  // Asynchronously dump heart rate and oxidation levels to the serial
  // For both, a value of 0 means "invalid"
  if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
    Serial.print("Heart rate:");
    Serial.print(pox.getHeartRate());
    Serial.print("bpm / SpO2:");
    Serial.print(pox.getSpO2());
    Serial.println("%");
 
    lcd.setCursor(6, 0);
    lcd.print ("     ");
    lcd.setCursor(6, 0);
    lcd.print(pox.getHeartRate());
    lcd.setCursor(6, 1);
    lcd.print ("     ");
    lcd.setCursor(6, 1);
    lcd.print(pox.getSpO2());

    tsLastReport = millis();
  }
}

 

Lascia un commento

Your email address will not be published.