Arduino, Tutoriels

Comment utiliser MAX30102 module capteur d’Oxygène et rythme cardiaque avec Arduino

Max30102 Module Capteur Avec Arduino ,Pour Mesurer Pourcentage D'Oxygène Et Rythme Cardiaque.

Guide d’utilisation module capteur d’Oxygène et rythme cardiaque MAX30102 avec Arduino

Introduction:

Le capteur MAX30102 est un capteur biométrique plug-and-play basse consommation basé sur la technologie I2C. Il est utilisé pour mesurer la fréquence cardiaque et la saturation en oxygène (SpO2) en temps réel. Dans cet article, nous vous guiderons à travers toutes les étapes nécessaires pour interfacer le capteur MAX30102 avec Arduino et exploiter ses fonctionnalités dans vos projets.

Présentation du capteur MAX30102:

Le capteur MAX30102 est un circuit intégré de pointe qui intègre deux LED (rouge et infrarouge) et un photodétecteur pour mesurer la fréquence cardiaque et la SpO2. Il utilise la technique de photopléthysmographie (PPG) pour détecter les changements d’absorption de lumière dans le sang.

Les Composantes Du  Module Max30102
Les Composantes Du Module Max30102

Vue d’ensemble du matériel:

Le module MAX30102 comprend le circuit intégré MAX30102, deux LED (rouge et infrarouge) et un photodétecteur très sensible. Le module dispose également de régulateurs de tension 3,3V et 1,8V pour alimenter correctement le circuit intégré et les LED. Le capteur consomme peu d’énergie, ce qui le rend adapté aux appareils alimentés par batterie.

Les Composantes Du  Module Max30102
Les Composantes Du Module Max30102

Exigences d’alimentation:

Le capteur MAX30102 nécessite une tension d’alimentation de 3,3V à 5,5V. Le module est livré avec des régulateurs de tension intégrés pour fournir les tensions requises. Il peut être alimenté par la carte Arduino elle-même ou par une autre source d’alimentation compatible.

Interface I2C:

Le module MAX30102 utilise une interface I2C (Inter-Integrated Circuit) à deux fils pour communiquer avec la carte Arduino. Il dispose d’une adresse I2C fixe pour les opérations de lecture et d’écriture. Vous pouvez connecter le module à n’importe quelle broche I2C de votre carte Arduino.

Mémoire tampon FIFO:

Le capteur MAX30102 dispose d’une mémoire tampon FIFO intégrée qui peut stocker jusqu’à 32 échantillons de fréquence cardiaque et de SpO2. Cela permet d’économiser la puissance du système en évitant à l’Arduino de lire chaque nouvel échantillon de données du capteur.

Interruptions:

Le MAX30102 peut générer une interruption pour différentes sources, telles que la disponibilité de nouvelles données, la détection de la présence, la saturation maximale de l’annulation de la lumière ambiante, la température et la mémoire tampon FIFO presque pleine. Les interruptions permettent à l’Arduino de réaliser d’autres tâches pendant que les données sont collectées par le capteur.

Spécifications techniques:

Le capteur MAX30102 fonctionne avec une tension d’alimentation de 3,3V à 5,5V. Il a une consommation de courant inférieure à 600μA pendant les mesures et seulement 0,7μA en mode veille. Les LED rouges et infrarouges ont des longueurs d’onde de 660nm et 880nm respectivement. Le capteur dispose également d’un capteur de température intégré pour la compensation et l’étalonnage des mesures.

Fonctionnement du capteur MAX30102:

Le capteur MAX30102 fonctionne en mesurant la quantité de lumière réfléchie par le sang. Pour mesurer la fréquence cardiaque, il utilise l’absorption de la lumière infrarouge par l’hémoglobine oxygénée dans le sang artériel. Pour la SpO2, il mesure le rapport de la lumière infrarouge et rouge absorbée pour calculer le niveau d’oxygène dans le sang.

Max30102 Pour Mesurer La Fréquence Cardiaque, Il Utilise L'Absorption De La Lumière Infrarouge Par L'Hémoglobine Oxygénée Dans Le Sang Artériel. Pour La Spo2, Il Mesure Le Rapport De La Lumière Infrarouge Et Rouge Absorbée Pour Calculer Le Niveau D'Oxygène Dans Le Sang.
Fonctionnement De Capteur Max30102

Mesure de la fréquence cardiaque:

Le capteur MAX30102 détecte les variations de la lumière réfléchie en fonction des battements du cœur. Il utilise cette information pour calculer la fréquence cardiaque en battements par minute (BPM).

Oxymétrie:

En utilisant les deux LED rouge et infrarouge, le capteur MAX30102 mesure la variation d’absorption de ces lumières par le sang pour déterminer la SpO2. Il calcule le pourcentage d’oxygène lié à l’hémoglobine dans le sang.

Schéma de brochage du module:

Le module MAX30102 est connecté à l’Arduino Uno en utilisant les broches VCC, GND, SCL, SDA et INT. Assurez-vous de connecter correctement ces broches pour une communication réussie entre le capteur et l’Arduino.

Les Différentes Entres De Max30102
Max30102 Ces Différentes Entres
Schéma De Brochage Du Module Max30102 Avec Arduino
Schéma De Brochage Max30102 Avec Arduino

Installation de la bibliothèque:

Pour utiliser le capteur MAX30102 avec Arduino, vous devez installer la bibliothèque SparkFun MAX3010x Pulse and Proximity Sensor Library via le Gestionnaire de bibliothèques Arduino. Cette bibliothèque facilite la communication avec le capteur et offre des fonctions pour calculer la fréquence cardiaque et la SpO2.

Exemples de code:

La bibliothèque SparkFun MAX3010x est livrée avec plusieurs exemples de code pour vous aider à démarrer rapidement. Ces exemples vous montrent comment lire les valeurs brutes des LED rouge et infrarouge, détecter la présence, mesurer la température, la fréquence cardiaque et la SpO2. Vous pouvez utiliser ces exemples comme point de départ pour développer votre propre code.

Parmi ces exemples :

Lecture des valeurs brute (rouge et infrarouge) :

#include <Wire.h>
#include "MAX30105.h"

MAX30105 particleSensor;

void setup() {
  Serial.begin(9600);

  // Initialisation du capteur
  if (particleSensor.begin() == false) {
    Serial.println("Le capteur MAX30102 n'a pas été trouvé. Veuillez vérifier le câblage ou l'alimentation.");
    while (1);
  }

  particleSensor.setup(); // Configuration du capteur. Utilisez un courant LED de 6.4 mA
}

void loop() {
  Serial.print(" R[");
  Serial.print(particleSensor.getRed());
  Serial.print("] IR[");
  Serial.print(particleSensor.getIR());
  Serial.println("]");
}

Détection de présence :

#include <Wire.h>
#include "MAX30105.h"

MAX30105 particleSensor;

long samplesTaken = 0; // Compteur pour calculer le taux de lecture (en Hz)
long unblockedValue; // Valeur IR moyenne au démarrage
long startTime; // Utilisé pour calculer le taux de mesure

void setup() {
  Serial.begin(9600);

  // Initialisation du capteur
  if (particleSensor.begin(Wire, I2C_SPEED_FAST) == false) {
    Serial.println("Le capteur MAX30102 n'a pas été trouvé. Veuillez vérifier le câblage ou l'alimentation.");
    while (1);
  }

  // Configuration pour détecter jusqu'à 18 pouces, avec une luminosité LED maximale
  byte ledBrightness = 0xFF; // Options : 0 = désactivé à 255 = 50mA
  byte sampleAverage = 4; // Options : 1, 2, 4, 8, 16, 32
  byte ledMode = 2; // Options : 1 = rouge uniquement, 2 = rouge + IR, 3 = rouge + IR + vert
  int sampleRate = 400; // Options : 50, 100, 200, 400, 800, 1000, 1600, 3200
  int pulseWidth = 411; // Options : 69, 118, 215, 411
  int adcRange = 2048; // Options : 2048, 4096, 8192, 16384
  
  // Configuration du capteur avec ces paramètres
  particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange);

  particleSensor.setPulseAmplitudeRed(0); // Désactiver la LED rouge
  particleSensor.setPulseAmplitudeGreen(0); // Désactiver la LED verte

  // Calcul de la valeur moyenne des lectures IR au démarrage
  unblockedValue = 0;
  for (byte x = 0 ; x < 32 ; x++) {
    unblockedValue += particleSensor.getIR(); // Lire la valeur IR
  }
  unblockedValue /= 32;

  startTime = millis();
}

void loop() {
  samplesTaken++;

  Serial.print("IR[");
  Serial.print(particleSensor.getIR());
  Serial.print("] Hz[");
  Serial.print((float)samplesTaken / ((millis() - startTime) / 1000.0), 2);
  Serial.print("]");

  long currentDelta = particleSensor.getIR() - unblockedValue;

  Serial.print(" delta[");
  Serial.print(currentDelta);
  Serial.print("]");

  if (currentDelta > (long)100) {
    Serial.print(" Quelque chose est là !");
  }

  Serial.println();
}

Lecture de la température :

#include <Wire.h>
#include "MAX30105.h"

MAX30105 particleSensor;

void setup() {
  Serial.begin(9600);
  Serial.println("Initialisation...");

  // Initialisation du capteur
  if (particleSensor.begin(Wire, I2C_SPEED_FAST) == false) {
    Serial.println("Le capteur MAX30102 n'a pas été trouvé. Veuillez vérifier le câblage ou l'alimentation.");
    while (1);
  }

  // Les LED sont très faibles et n'affectent pas beaucoup la lecture de la température, mais
  // vous pouvez les éteindre pour éviter toute augmentation de la température locale
  particleSensor.setup(0); // Configuration du capteur. Désactive les LED

  particleSensor.enableDIETEMPRDY(); // Activer l'interruption de température prête. C'est nécessaire.
}

void loop() {
  float temperature = particleSensor.readTemperature();

  Serial.print("temperatureC=");
  Serial.print(temperature, 4);

  float temperatureF = particleSensor.readTemperatureF();

  Serial.print(" temperatureF=");
  Serial.print(temperatureF, 4);

  Serial.println();
}

Mesure de la fréquence cardiaque (BPM) :

#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"

MAX30105 particleSensor;

const byte RATE_SIZE = 4; // Augmentez cela pour plus de moyennage. 4 est bon.
byte rates[RATE_SIZE]; // Tableau des fréquences cardiaques
byte rateSpot = 0;
long lastBeat = 0; // Temps du dernier battement

float beatsPerMinute;
int beatAvg;

void setup() {
  Serial.begin(115200);
  Serial.println("Initialisation...");

  // Initialisation du capteur
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
    Serial.println("Le capteur MAX30102 n'a pas été trouvé. Veuillez vérifier le câblage ou l'alimentation.");
    while (1);
  }
  Serial.println("Placez votre doigt sur le capteur avec une pression constante.");

  particleSensor.setup(); // Configuration du capteur avec les paramètres par défaut
  particleSensor.setPulseAmplitudeRed(0x0A); // LED rouge faible pour indiquer que le capteur fonctionne
  particleSensor.setPulseAmplitudeGreen(0); // Désactiver la LED verte
}

void loop() {
  long irValue = particleSensor.getIR();

  if (checkForBeat(irValue) == true) {
    // Un battement a été détecté !
    long delta = millis() - lastBeat;
    lastBeat = millis();

    beatsPerMinute = 60 / (delta / 1000.0);

    if (beatsPerMinute < 255 && beatsPerMinute > 20) {
      rates[rateSpot++] = (byte)beatsPerMinute; //

Problèmes courants et solutions:

L’article fournit également des conseils pour résoudre les problèmes courants rencontrés lors de l’utilisation du capteur MAX30102, tels que la détection de battements irréguliers, les interférences de mouvement et les mesures incohérentes. Il est important de bien placer le doigt sur le capteur et d’appliquer une pression constante pour obtenir des mesures précises.

Conclusion:

Le capteur MAX30102 offre une solution pratique et abordable pour mesurer la fréquence cardiaque et la SpO2 en temps réel. Grâce à son interface I2C et à ses fonctionnalités avancées, il peut être facilement intégré dans vos projets Arduino. En utilisant les exemples des données fournies par le capteur, vous pouvez surveiller votre fréquence cardiaque et votre saturation en oxygène, et les utiliser pour diverses applications telles que le suivi de la condition physique, la surveillance médicale à domicile, etc.

Video description

la fiche technique du module MAX6675 : MAX30102–High-Sensitivity Pulse Oximeter and Heart-Rate Sensor for Wearable Health (analog.com)

Pour plus d’article : https://www.moussasoft.com/tutoriels-electroniques

Twitter: Moussa Lhoussaine (@Moussasoft_com) / Twitter