Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Mesurer la fréquence cardiaque et la SpO2 avec MAX30102

Composants et fournitures

Arduino UNO
× 1
Adafruit OLED 128x32
× 1
Sonnerie
× 1
Maxim Integrated MAX30102 Oxymètre de pouls et capteur de fréquence cardiaque haute sensibilité pour la santé portable
× 1

À propos de ce projet

Présentation

Salut, dans ce tutoriel, nous allons interfacer MAX30102 :module d'oxymétrie de pouls et de moniteur de fréquence cardiaque avec la carte Arduino UNO, puis créer un projet de mesure du BPM à l'aide de ce module + écran OLED et un buzzer.

Les BPM sont les "battements par minute" et ils sont d'environ 65-75 au repos pour une personne normale, l'athlétisme peut avoir un niveau inférieur à cela, et le SpO2 est le niveau de saturation en oxygène, et pour une personne normale, il est supérieur à 95%.

Le MAX30102 peut être trouvé dans différents modules, j'ai une version WAVGAT, ce n'est pas un problème tant que l'IC est MAX30102.

Composants

Voici les choses que je vais utiliser

Essais :

Les codes que j'ai utilisés dans le tutoriel sont assez clairs et ce ne sont que des exemples de la bibliothèque Sparkfun_MAX3010x.

Pour le code que j'ai fait pour l'OLED et le Buzzer, c'est une version modifiée de l'exemple "HeartRate", il vous demande de mettre votre doigt sur le capteur.

Une fois que vous avez mis votre doigt, restez calme pendant un moment, jusqu'à ce que vous commenciez à entendre les « bips » du buzzer synchronisés avec vos battements cardiaques ou que l'animation OLED soit synchronisée avec celui-ci, puis vous pouvez lire un BPM correct.

N.B :Dans le code, j'imprime en fait le BPM moyen, puisqu'il fait la moyenne de 4 BPM, il est plus précis de lui donner un peu de temps.

Créer des bitmaps pour l'OLED

Le cœur (petit) que vous voyez est une image bitmap, et chaque fois que le capteur détecte un battement de cœur, nous passons à une autre image bitmap de cœur (grande) pendant un moment et cela donne l'impression d'un cœur qui bat avec un bip du buzzer.

Voici les deux bitmaps dans le code que nous appellerons plus tard dans le code

Pour les faire, recherchez une image (noir avec fond blanc) pour tout ce que vous voulez voir à l'écran, n'oubliez pas la taille, celle que j'utilise est de 128x32 px et les images sont plus petites que cela (32x32 px) et (24x21 px)

Téléchargez LCD Assistant et ouvrez-le (quelques étapes ci-dessous)

Et voici vos "chiffres"

Et voici comment je l'ai appelé dans le code

display.drawBitmap(5, 5, logo2_bmp, 24, 21, BLANC); 

Ce qui signifie

 display.drawBitmap (position x de départ, position y de départ, nom du bitmap, largeur, hauteur, couleur) ; 

Et comme vous pouvez le voir dans le code, l'un est appelé lorsqu'un doigt est détecté et l'autre si un battement cardiaque est détecté.

Et voilà, faites ce que vous voulez.

Code

  • MAX_BPM_OLED_Buzzer.ino
MAX_BPM_OLED_Buzzer.inoArduino
Modifié à partir de la bibliothèque SparkFun MAX3010x
/* Ce code fonctionne avec MAX30102 + 128x32 OLED i2c + Buzzer et Arduino UNO * Il affiche le BPM moyen à l'écran, avec une animation et un buzzer * à chaque fois qu'un pouls cardiaque est détecté * C'est une version modifiée de l'exemple de bibliothèque HeartRate * Reportez-vous à www.surtrtech.com pour plus de détails ou à la chaîne YouTube de SurtrTech */#include  // Bibliothèques OLED#include #include #include "MAX30105.h" //Bibliothèque MAX3010x#include "heartRate.h" //Algorithme de calcul de la fréquence cardiaqueMAX30105 particulesSensor;const byte RATE_SIZE =4; //Augmentez ceci pour plus de moyenne. 4 est un bon taux d'octets[RATE_SIZE] ; // Tableau des fréquences cardiaquesbyte rateSpot =0;long lastBeat =0; //Heure à laquelle le dernier battement s'est produitfloat beatsPerMinute;int beatAvg;#define SCREEN_WIDTH 128 // Largeur d'affichage OLED, en pixels#define SCREEN_HEIGHT 32 // Hauteur d'affichage OLED, en pixels#define OLED_RESET -1 // Réinitialiser la broche # (ou -1 si vous partagez la broche de réinitialisation Arduino) Affichage Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Déclaration du nom d'affichage (display)static const unsigned char PROGMEM logo2_bmp[] ={ 0x03, 0xC0, 0xF0, 0x06, 0x71, 0x8C, 0x0C, 0x1B, 0x06, 0x18, 0x0E, 0x02, 0x10, 0x0C, 10 0x03 , //Logo2 et Logo3 sont deux images bmp qui s'affichent sur l'OLED si elles sont appelées0x04, 0x01, 0x10, 0x04, 0x01, 0x10, 0x40, 0x01, 0x10, 0x40, 0x01, 0x10, 0xC0, 0x03, 0x08, 0x88,0x02, 0x08, 0xB8, 0x04, 0xFF, 0x37, 0x08, 0x01, 0x30, 0x18, 0x01, 0x90, 0x30, 0x00, 0xC0, 0x60,0x00, 0x60, 0xC0, 0x00, 0x31, 0x80, 0x00, 00, 0x1B, 0x 0x0E, 0x00, 0x00, 0x04, 0x00, };caractère statique non signé PROGMEM logo3_bmp[] ={ 0x01, 0xF0, 0x0F, 0x80, 0x06, 0x1C, 0x38, 0x60, 0x18, 0x06, 0x60, 0,x181, 0x10 0x80, 0x08,0x20, 0x01, 0x80, 0x04, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0xC0, 0x00, 0x08, 0x03,0x80, 0x00, 0x08, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x1C, 0x01, 0x80, 0x00, 0x14, 0x00,0x80, 0x00, 0x14, 0x00, 0x80, 0x00, 0x14, 0x00, 0x40, 0x10, 0x12, 0x00, 0x40, 0x10, 0x12, 0x7E, 0x1F, 0x23, 0xFE, 0x03, 0 x31, 0xA0, 0x04, 0x01, 0xA0, 0xA0, 0x0C, 0x00, 0xA0, 0xA0, 0x08,0x00, 0x60, 0xE0, 0x10, 0x00, 0x20, 0x60, 0x20, 0x06, 0x00, 0,x403, 0x60 0x40, 0xC0,0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0C, 0x00,0x00, 0x08, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00 } ; configuration vide() { display.begin (SSD1306_SWITCHCAPVCC, 0x3C); //Démarrer l'affichage OLED display.display(); retard (3000); // Initialiser le capteur particuleSensor.begin(Wire, I2C_SPEED_FAST); //Utilisez le port I2C par défaut, vitesse de 400 kHz. //Configurez le capteur avec les paramètres par défaut particulesSensor.setPulseAmplitudeRed(0x0A); // Allumez la LED rouge pour indiquer que le capteur est en cours d'exécution} boucle vide() { long irValue =particulesSensor.getIR(); //La lecture de la valeur IR nous permettra de savoir s'il y a un doigt sur le capteur ou non //Détection également d'un heartbeatif(irValue> 7000){ //Si un doigt est détecté display.clearDisplay(); //Effacer l'affichage display.drawBitmap(5, 5, logo2_bmp, 24, 21, WHITE); // Dessine la première image bmp (petit coeur) display.setTextSize(2); // Près de lui, affichez le BPM moyen, vous pouvez afficher le BPM si vous voulez display.setTextColor(WHITE); display.setCursor (50,0); display.println("MPM"); display.setCursor(50,18); display.println(beatAvg); display.display(); if (checkForBeat(irValue) ==true) //Si un battement cardiaque est détecté { display.clearDisplay(); //Effacer l'affichage display.drawBitmap(0, 0, logo3_bmp, 32, 32, WHITE); // Dessine la deuxième image (cœur plus gros) display.setTextSize(2); //Et affiche toujours le BPM moyen display.setTextColor(WHITE); display.setCursor (50,0); display.println("MPM"); display.setCursor(50,18); display.println(beatAvg); display.display(); ton (3 1000); //Et tonner le buzzer pendant 100ms vous pouvez le réduire ce sera mieux delay(100); pas de tonalité(3) ; //Désactiver le buzzer pour avoir l'effet d'un "bip" //On a senti un battement ! long delta =millis() - lastBeat; //Mesure la durée entre deux temps lastBeat =millis(); battementsParMinute =60 / (delta / 1000,0); //Calcul du BPM if (beatsPerMinute <255 &&beatsPerMinute> 20) //Pour calculer la moyenne, nous stockons des valeurs (4) puis faisons quelques calculs pour calculer la moyenne { rates[rateSpot++] =(byte)beatsPerMinute; //Stocker cette lecture dans le tableau rateSpot %=RATE_SIZE; //Envelopper la variable //Prendre la moyenne des lectures beatAvg =0; for (byte x =0; x  
Bibliothèque SparkFun MAX3010x
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
Adafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306
Bibliothèque Adafruit GFX
https://github.com/adafruit/Adafruit-GFX-Library

Schémas

Les deux modules ont une interface i²c, si vous utilisez un buzzer à 2 broches (-) avec GND et (+) avec une résistance alors D3

Processus de fabrication

  1. Contrôle d'accès avec QR, RFID et vérification de la température
  2. Mesure des températures avec un capteur DS18B20 1 fil et Raspberry Pi
  3. Aéroponie avec Raspberry Pi et capteur d'humidité
  4. Moniteur de fréquence cardiaque à distance
  5. Créer des robots avec Raspberry Pi et Python
  6. Capteur Portenta et thermocouple (avec MAX6675)
  7. Jeu de gyroscope Arduino avec MPU-6050
  8. Moniteur de fréquence cardiaque utilisant l'IoT
  9. Composants visuels et Matterport – nouvelles possibilités d'automatisation avec ProFeeder X