Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Meet hartslag en SpO2 met MAX30102

Componenten en benodigdheden

Arduino UNO
× 1
Adafruit OLED 128x32
× 1
Zoemer
× 1
Maxim Integrated MAX30102 zeer gevoelige pulsoxymeter en hartslagsensor voor draagbare gezondheid
× 1

Over dit project

Inleiding

Hallo, in deze tutorial gaan we MAX30102 interfacen:pulsoximetrie en hartslagmetermodule met Arduino UNO-bord, en dan een project maken voor het meten van BPM met behulp van deze module + OLED-display en een zoemer.

BPM zijn de "slagen per minuut" en ze zijn ongeveer 65-75 tijdens rust voor een normaal persoon, atletiek kan lager zijn dan dat, en de SpO2 is het zuurstofverzadigingsniveau, en voor een normaal persoon is het meer dan 95%.

De MAX30102 is te vinden in verschillende modules, ik heb een WAVGAT-versie, het is geen probleem zolang het IC MAX30102 is.

Componenten

Dit zijn de dingen die ik ga gebruiken

Testen:

De codes die ik in de tutorial heb gebruikt, zijn vrij duidelijk en het zijn slechts voorbeelden uit de Sparkfun_MAX3010x-bibliotheek.

Voor de code die ik heb gemaakt voor de OLED en Buzzer, het is een aangepaste versie van het voorbeeld "HeartRate", het vraagt ​​​​je om je vinger op de sensor te leggen.

Als je eenmaal je vinger hebt gelegd, blijf dan een tijdje kalm, totdat je de "piepjes" van de zoemer begint te horen die zijn gesynchroniseerd met je hartslag of de OLED-animatie ermee wordt gesynchroniseerd, en dan kun je een correcte BPM aflezen.

NB:In de code druk ik eigenlijk de gemiddelde BPM af, aangezien deze het gemiddelde van 4 BPM's doet, is het nauwkeuriger, geef het gewoon wat tijd.

Bitmaps maken voor de OLED

Het hart (klein) dat je ziet is een bitmapafbeelding, en elke keer dat de sensor een hartslag detecteert, schakelen we een tijdje over naar een andere hart (grote) bitmapafbeelding en het geeft de indruk van een hartslag naast een pieptoon van de zoemer.

Hier zijn de twee bitmaps in de code die we later de code noemen

Om deze te maken, zoek je een afbeelding (zwart met witte achtergrond) voor wat je ook op het scherm wilt zien, vergeet alleen de grootte niet, degene die ik gebruik is 128x32 px en de afbeeldingen zijn kleiner dan dat (32x32 px) en (24x21 px)

Download LCD Assistant en open het (enkele stappen hieronder)

En hier zijn je "nummers"

En zo noemde ik het in de code

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

Wat betekent

 display.drawBitmap(Start x pos, Start y pos, Bitmap naam, Breedte, Hoogte, Kleur); 

En zoals je in de code kunt zien, wordt er een gebeld wanneer een vinger wordt gedetecteerd en de andere als een hartslag wordt gedetecteerd.

En hier ga je maken wat je wilt.

Code

  • MAX_BPM_OLED_Buzzer.ino
MAX_BPM_OLED_Buzzer.inoArduino
Aangepast vanuit de SparkFun MAX3010x-bibliotheek
/* Deze code werkt met MAX30102 + 128x32 OLED i2c + Buzzer en Arduino UNO * Het geeft de gemiddelde BPM weer op het scherm, met een animatie en een zoemergeluid * telkens wanneer een hartpuls wordt gedetecteerd * Het is een aangepaste versie van het HeartRate-bibliotheekvoorbeeld * Raadpleeg www.surtrtech.com voor meer details of SurtrTech YouTube-kanaal */#include  //OLED-bibliotheken#include #include #include "MAX30105.h" //MAX3010x library#include "heartRate.h" //HartslagberekeningsalgoritmeMAX30105 partikelSensor;const byte RATE_SIZE =4; // Verhoog dit voor meer middeling. 4 is good.byte-snelheden [RATE_SIZE]; // Array van hartslagbyte rateSpot =0; lange lastBeat =0; //Tijd waarop de laatste beat plaatsvondfloat beatsPerMinute;int beatAvg;#define SCREEN_WIDTH 128 // OLED-weergavebreedte, in pixels#define SCREEN_HEIGHT 32 // OLED-weergavehoogte, in pixels#define OLED_RESET -1 // Reset pin # (of -1 bij het delen van de Arduino-resetpin) Adafruit_SSD1306-display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // De weergavenaam declareren (display)static const unsigned char PROGMEM logo2_bmp[] ={ 0x03, 0xC0, 0xF0, 0x06, 0x71, 0x8C, 0x0C, 0x1B, 0x06, 0x18, 0x0E, 0x02, 0x10, 0x0C, 0x03 , // Logo2 en Logo3 zijn twee bmp-afbeeldingen die worden weergegeven op de OLED als ze worden genoemd 0x04, 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, 0x1B, 0x 0x0E, 0x00, 0x00, 0x04, 0x00, };static 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, 0x01, 0x80, 0x00, 0x1C, 0x01, 0x80, 0x00, 0x14, 0x00,0x80, 0x00, 0x14, 0x00, 0x80, 0x00, 0x14, 0x00, 0x40, 0x10, 0x12, 0x00, 0x40, 0x100, 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, 0x403, 0x60,00x, 0x60, 0x40, 0xC0,0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0C, 0x00,0x00, 0x08, 0x10, 0x0006, 0x0060, 0x 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00 };void setup() {display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Start het OLED-display display.display (); vertraging (3000); // Initialiseer sensor particleSensor.begin (Wire, I2C_SPEED_FAST); // Gebruik standaard I2C-poort, 400 kHz-snelheid particleSensor.setup (); // Configureer de sensor met standaardinstellingen partikelSensor.setPulseAmplitudeRed (0x0A); // Draai de rode LED naar laag om aan te geven dat de sensor actief is} void loop () { long irValue =particleSensor.getIR (); // Door de IR-waarde te lezen, kunnen we weten of er een vinger op de sensor zit of niet //Ook een hartslag gedetecteerdif (irValue> 7000) { //Als een vinger wordt gedetecteerd display.clearDisplay(); // Wis het display display.drawBitmap (5, 5, logo2_bmp, 24, 21, WIT); // Teken de eerste bmp-afbeelding (hartje) display.setTextSize (2); // In de buurt ervan wordt de gemiddelde BPM weergegeven, u kunt de BPM weergeven als u display.setTextColor (WHITE) wilt; display.setCursor(50,0); display.println("BPM"); display.setCursor(50,18); display.println(beatAvg); weergave.weergave(); if (checkForBeat(irValue) ==true) //Als een hartslag wordt gedetecteerd { display.clearDisplay(); // Wis het display display.drawBitmap (0, 0, logo3_bmp, 32, 32, WIT); // Teken de tweede afbeelding (groter hart) display.setTextSize (2); //En geeft nog steeds de gemiddelde BPM weer display.setTextColor(WHITE); display.setCursor(50,0); display.println("BPM"); display.setCursor(50,18); display.println(beatAvg); weergave.weergave(); toon (3.1000); //En toon de zoemer gedurende 100 ms, je kunt het verminderen, het zal een betere vertraging zijn (100); geen toon (3); //Deactiveer de zoemer om het effect van een "bip" te hebben // We voelden een beat! lange delta =millis() - lastBeat; // Meetduur tussen twee beats lastBeat =millis(); beatsPerMinuut =60 / (delta / 1000,0); // De BPM berekenen if (beatsPerMinute <255 &&beatsPerMinute> 20) //Om het gemiddelde te berekenen, hebben we enkele waarden ingevoerd (4) en vervolgens wat rekenwerk om het gemiddelde te berekenen {rates[rateSpot++] =(byte)beatsPerMinute; // Bewaar deze meting in de array rateSpot %=RATE_SIZE; //Wrap variabele //Neem het gemiddelde van de metingen beatAvg =0; for (byte x =0; x  
SparkFun MAX3010x-bibliotheek
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
Adafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306
Adafruit GFX-bibliotheek
https://github.com/adafruit/Adafruit-GFX-Library

Schema's

Beide modules hebben een i²c-interface, als je een 2-pins zoemer (-) met GND en (+) met een weerstand gebruikt, dan D3

Productieproces

  1. Toegangscontrole met QR, RFID en temperatuurverificatie
  2. Meet temperaturen met een 1-draads DS18B20-sensor en Raspberry Pi
  3. Aerocultuur met Raspberry Pi en vochtigheidssensor
  4. Hartslagmeter op afstand
  5. Botten bouwen met Raspberry Pi en Python
  6. Portenta- en thermokoppelsensor (met MAX6675)
  7. Arduino-gyroscoopspel met MPU-6050
  8. Hartslagmeter met IoT
  9. Hartslag detecteren met een fotoresistor
  10. galvaniseren met koper
  11. Visuele componenten en Matterport – nieuwe automatiseringsmogelijkheden met ProFeeder X