Sensore MAX30100

ultimo aggiornamento 11 maggio 2019


JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Recati presso la JLCPCB, riceverai regali e coupon gratuiti
presso Maker Faire Rome il 18-20 ottobre


Indice

Descrizione

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.

 

Il sensore ha un sensore di temperatura su chip che può essere utilizzato per compensare l'errore SpO2 con variazioni di temperatura ambiente.
Nel nostro caso sulla scheda è comunque montato su un piccolo PCB dalle dimensioni di 19x14 mm con 7 pin in linea

 

OurPCB, your most reliable PCB and PCBA supplier.

Focusing on PCB Prototype and PCB Assembly Turnkey Services.

One-Stop Wire Harness & Cable Assemblies Solution

Schema elettrico del modulo

Lo schema del modulo è 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

 

 

Pin di collegamento del modulo sensore

Numero Pin Definizione dei pin
1 VIN Alimentazione 1.8-5.5V
2 SCL I2C-SCL
3 SDA I2C -SDA
4 INT MAX 30100 INT - Interrupt attivo-basso (Open-Drain)
5 IRD MAX 30100 IR_DRV - Catodo LED IR e LED Driver
6 RD MAX 30100 R_DRV - Catodo LED rosso e LED Driver
7 GND Alimentazione GND

 

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 un Arduino 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 16x2, 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.

 

Arduino Nano


Display LCD 16x2 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

 

/*
  Programma:max30100_minimal_lcd.ino
  Il programma misura i battiti cardiaci e il
  valore dell'ossigenazione riportando i dati
  sul monitor seriale o si display LCD
   
  Creato il 11/5/2019 da Adriano Gandolfo

  Sito web https://www.adrirobot.it
  Blog https://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
*/

#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();
  }
}

 

Elenco revisioni:

11/05/2019

Emissione preliminare