Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Herzfrequenz und SpO2 mit MAX30102 messen

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Adafruit OLED 128x32
× 1
Summer
× 1
Maxim Integrated MAX30102 Hochempfindliches Pulsoximeter und Herzfrequenzsensor für tragbare Gesundheit
× 1

Über dieses Projekt

Einführung

Hallo, in diesem Tutorial werden wir MAX30102:Pulsoximetrie- und Herzfrequenzmonitormodul mit Arduino UNO-Platine verbinden und dann ein Projekt zur Messung von BPM mit diesem Modul + OLED-Display und einem Summer erstellen.

BPM sind die "Schläge pro Minute" und sie liegen bei einer normalen Person bei etwa 65-75 während sie sich ausruht. Leichtathletik kann darunter liegen und der SpO2 ist der Sauerstoffsättigungsgrad und bei einer normalen Person liegt er über 95%.

Der MAX30102 ist in verschiedenen Modulen zu finden, ich habe eine WAVGAT-Version, ist kein Problem, solange der IC MAX30102 ist.

Komponenten

Hier sind die Dinge, die ich verwenden werde

Tests:

Die Codes, die ich im Tutorial verwendet habe, sind ziemlich klar und sie sind nur Beispiele aus der Sparkfun_MAX3010x-Bibliothek.

Der Code, den ich für OLED und Buzzer erstellt habe, ist eine modifizierte Version des Beispiels "HeartRate", in dem Sie aufgefordert werden, Ihren Finger auf den Sensor zu legen.

Wenn Sie Ihren Finger auflegen, bleiben Sie eine Weile ruhig, bis Sie die mit Ihrem Herzschlag synchronisierten "Beeps" des Summers hören oder die OLED-Animation damit synchronisiert ist, und dann können Sie einen korrekten BPM ablesen.

N.B:Im Code drucke ich tatsächlich den Average BPM, da er den Durchschnitt von 4 BPMs erreicht, ist es genauer, geben Sie ihm einfach etwas Zeit.

Bitmaps für das OLED erstellen

Das Herz (klein), das Sie sehen, ist ein Bitmap-Bild, und jedes Mal, wenn der Sensor einen Herzschlag erkennt, wechseln wir für eine Weile zu einem anderen (großen) Herz-Bitmap-Bild und es erweckt den Eindruck eines Herzschlags zusammen mit einem Piepton vom Summer.

Hier sind die beiden Bitmaps im Code, die wir später im Code aufrufen

Um diese zu erstellen, suchen Sie nach einem Bild (schwarz mit weißem Hintergrund) für alles, was Sie auf dem Bildschirm sehen möchten. Vergessen Sie nicht die Größe px) und (24x21 px)

Laden Sie den LCD-Assistenten herunter und öffnen Sie ihn (einige Schritte weiter unten)

Und hier sind deine "Zahlen"

Und so habe ich es im Code genannt

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

Was bedeutet

 display.drawBitmap(Start x Pos, Start y Pos, Bitmap-Name, Breite, Höhe, Farbe); 

Und wie Sie im Code sehen können, wird einer aufgerufen, wenn ein Finger erkannt wird und der andere, wenn ein Herzschlag erkannt wird.

Und hier kannst du machen, was du willst.

Code

  • MAX_BPM_OLED_Buzzer.ino
MAX_BPM_OLED_Buzzer.inoArduino
Modifiziert aus der SparkFun MAX3010x-Bibliothek
/* Dieser Code funktioniert mit MAX30102 + 128x32 OLED i2c + Buzzer und Arduino UNO * Er zeigt die durchschnittliche BPM auf dem Bildschirm an, mit einer Animation und einem Summerton * jedes Mal, wenn ein Herzpuls erkannt wird * Dies ist eine modifizierte Version des HeartRate-Bibliotheksbeispiels * Weitere Informationen finden Sie unter www.surtrtech.com oder auf dem SurtrTech YouTube-Kanal */#include  //OLED-Bibliotheken#include #include #include "MAX30105.h" //MAX3010x Bibliothek#include "heartRate.h" //HerzfrequenzberechnungsalgorithmusMAX30105 PartikelSensor;const byte RATE_SIZE =4; // Erhöhen Sie diesen Wert für eine bessere Mittelwertbildung. 4 ist gut.Byte-Raten[RATE_SIZE]; //Array von Herzratenbyte rateSpot =0;long lastBeat =0; //Zeit, zu der der letzte Beat aufgetreten istfloat beatsPerMinute;int beatAvg;#define SCREEN_WIDTH 128 // OLED-Anzeigebreite, in Pixel#define SCREEN_HEIGHT 32 // OLED-Anzeigehöhe, in Pixel#define OLED_RESET -1 // Reset Pin # (oder -1, wenn Arduino Reset-Pin geteilt wird) Adafruit_SSD1306-Display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Anzeigename deklarieren (display)static const unsigned char PROGMEM logo2_bmp[] ={ 0x03, 0xC0, 0xF0, 0x06, 0x71, 0x8C, 0x0C, 0x1B, 0x06, 0x18, 0x0E, 0x02, 0x10, 0x0C, 0x03, , //Logo2 und Logo3 sind zwei bmp-Bilder, die auf dem OLED angezeigt werden, wenn sie aufgerufen werden0x04, 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, 0x1x00, 0 0x0E, 0x00, 0x00, 0x04, 0x00, };statische const unsigned char PROGMEM logo3_bmp[] ={ 0x01, 0xF0, 0x0F, 0x80, 0x06, 0x1C, 0x38, 0x60, 0x18, 0x06, 0x60, 0x18, 0x 0x80, 0x08,0x20, 0x01, 0x80, 0x04, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0xC0, 0x00, 0x08, 0x03,0x80, 0x00, 0x08, 0x01, 0x80, 0x00, 0x 0x01, 0x80, 0x00, 0x1C, 0x01, 0x80, 0x00, 0x14, 0x00,0x80, 0x00, 0x14, 0x00, 0x80, 0x00, 0x14, 0x00, 0x40, 0x10, 0x12, 0x00, 0x40, 0x10, 0x12, 0 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, 0x04, 0x60,00 0x40, 0xC0,0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0C, 0x00,0x00, 0x08, 0x10, 0x00, 0x00, 0x06, 0x 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00};void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Starten Sie das OLED-Display display.display (); Verzögerung (3000); // Sensor Partikelsensor.begin initialisieren (Wire, I2C_SPEED_FAST); // Standard-I2C-Port verwenden, 400-kHz-Geschwindigkeit PartikelSensor.setup (); // Sensor mit Standardeinstellungen konfigurieren PartikelSensor.setPulseAmplitudeRed (0x0A); // Rote LED auf niedrig stellen, um anzuzeigen, dass der Sensor läuft} Schleife () { long irValue =PartikelSensor.getIR (); // Das Lesen des IR-Werts ermöglicht es uns zu wissen, ob sich ein Finger auf dem Sensor befindet oder nicht // Auch einen Herzschlag erkennen (irValue> 7000) { // Wenn ein Finger erkannt wird display.clearDisplay (); // Display löschen display.drawBitmap(5, 5, logo2_bmp, 24, 21, WEISS); // Zeichnen Sie das erste bmp-Bild (kleines Herz) display.setTextSize(2); // In der Nähe wird der durchschnittliche BPM angezeigt. Sie können den BPM anzeigen, wenn Sie möchten display.setTextColor(WHITE); display.setCursor(50,0); display.println("BPM"); display.setCursor(50,18); display.println (beatAvg); display.display(); if (checkForBeat(irValue) ==true) // Wenn ein Herzschlag erkannt wird { display.clearDisplay(); // Display löschen display.drawBitmap(0, 0, logo3_bmp, 32, 32, WEISS); //Zeige das zweite Bild (größeres Herz) display.setTextSize(2); //Und zeigt immer noch den durchschnittlichen BPM an display.setTextColor(WHITE); display.setCursor(50,0); display.println("BPM"); display.setCursor(50,18); display.println (beatAvg); display.display(); Ton (3,1000); // Und den Summer für 100 ms tönen, Sie können ihn reduzieren, es ist besser Verzögerung (100); kein Ton(3); //Deaktiviere den Summer, um die Wirkung eines "Bip" zu haben //Wir haben einen Beat gespürt! langes Delta =millis() - lastBeat; //Messdauer zwischen zwei Schlägen lastBeat =millis(); beatsPerMinute =60 / (Delta / 1000.0); //Berechnung des BPM if (beatsPerMinute <255 &&beatsPerMinute> 20) //Um den Durchschnitt zu berechnen, speichern wir einige Werte (4) und machen dann etwas Mathematik, um den Durchschnitt zu berechnen { Rates[rateSpot++] =(byte)beatsPerMinute; //Speichere diesen Messwert im Array rateSpot %=RATE_SIZE; // Variable wickeln // Durchschnitt der Messwerte nehmen beatAvg =0; for (Byte x =0; x  
SparkFun MAX3010x-Bibliothek
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
Adafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306
Adafruit GFX-Bibliothek
https://github.com/adafruit/Adafruit-GFX-Library

Schaltpläne

Beide Module haben eine i²c-Schnittstelle, wenn Sie einen 2-poligen Summer (-) mit GND und (+) mit einem Widerstand verwenden, dann D3

Herstellungsprozess

  1. Zutrittskontrolle mit QR, RFID und Temperaturüberprüfung
  2. Messen Sie Temperaturen mit einem 1-Draht-DS18B20-Sensor und Raspberry Pi
  3. Aeroponik mit Raspberry Pi und Feuchtigkeitssensor
  4. Ferngesteuerter Herzfrequenzmesser
  5. Roboter bauen mit Raspberry Pi und Python
  6. Portenta- und Thermoelement-Sensor (mit MAX6675)
  7. Arduino-Gyroskop-Spiel mit MPU-6050
  8. Herzfrequenzmesser mit IoT
  9. Erfassen der Herzfrequenz mit einem Fotowiderstand
  10. Visual Components und Matterport – neue Automatisierungsmöglichkeiten mit ProFeeder X