হার্টবিট মনিটর (MAX30102 + OLED)Heartbeat Sensor with Arduino (MAX30102)
MAX30102 আঙুলে লাল ও infrared আলো ফেলে, প্রতিটা হৃদস্পন্দনে আলো কাঁপে। checkForBeat() প্রতিটা স্পন্দন ধরে, দুই স্পন্দনের ফাঁক থেকে BPM বের করে — শেষ চারটার গড় দেখায়।
The MAX30102 shines red and infrared light into a fingertip and watches it flicker with each heartbeat. checkForBeat() spots each flicker; the gap between two beats gives the BPM, averaged over the last four.
সার্কিট ডায়াগ্রাম · Circuit diagram
যা যা লাগবে · Parts you need
- 1 × Arduino Uno Arduino Uno
- 1 × Heart rate & SpO2 sensor (MAX30102) হার্ট রেট ও SpO2 সেন্সর (MAX30102)
- 1 × OLED display 0.96" (SSD1306) OLED ডিসপ্লে ০.৯৬" (SSD1306)
- 8 × Jumper wires জাম্পার তার
তার লাগানো · Wiring
| Heart rate & SpO2 sensor (MAX30102) VIN | → | Arduino Uno 5V |
| Heart rate & SpO2 sensor (MAX30102) GND | → | Arduino Uno GND |
| Heart rate & SpO2 sensor (MAX30102) SDA | → | Arduino Uno A4 |
| Heart rate & SpO2 sensor (MAX30102) SCL | → | Arduino Uno A5 |
| OLED display 0.96" (SSD1306) VCC | → | Arduino Uno 5V |
| OLED display 0.96" (SSD1306) GND | → | Arduino Uno GND |
| OLED display 0.96" (SSD1306) SDA | → | Arduino Uno A4 |
| OLED display 0.96" (SSD1306) SCL | → | Arduino Uno A5 |
Code (Arduino C++)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "MAX30105.h"
#include "heartRate.h"
// Heartbeat monitor: the MAX30102 shines red + infrared light into a fingertip and
// watches it flicker with each beat. checkForBeat() spots the flicker; the gap
// between two beats gives the BPM. Tap the sensor to put a finger on it.
Adafruit_SSD1306 display(128, 64, &Wire, -1);
MAX30105 particleSensor;
const byte RATE_SIZE = 4;
byte rates[RATE_SIZE];
byte rateSpot = 0;
long lastBeat = 0;
float beatsPerMinute;
int beatAvg;
long nextDraw = 0;
void setup() {
Serial.begin(115200);
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) { Serial.println("MAX30102 not found"); while (1); }
particleSensor.setup();
particleSensor.setPulseAmplitudeRed(0x0A);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
long irValue = particleSensor.getIR();
if (checkForBeat(irValue)) {
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute > 20 && beatsPerMinute < 255) {
rates[rateSpot++] = (byte)beatsPerMinute;
rateSpot %= RATE_SIZE;
beatAvg = 0;
for (byte x = 0; x < RATE_SIZE; x++) beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
Serial.print("BPM="); Serial.print(beatsPerMinute, 0);
Serial.print(" Avg="); Serial.println(beatAvg);
}
if (millis() > nextDraw) { // redraw the OLED 2x a second, not on every loop
nextDraw = millis() + 500;
display.clearDisplay();
display.setCursor(0, 0);
display.print("BPM:");
display.println(beatAvg);
display.setCursor(0, 32);
display.print(irValue > 50000 ? "finger OK" : "no finger");
display.display();
}
}
আরো project · More projects
- ESP32 আবহাওয়া স্টেশন (BME280 + OLED)ESP32 weather station (BME280 + OLED)
- হোম অটোমেশন: ব্লুটুথে ৪টা বাতি (রিলে মডিউল)Home automation: 4 lamps over Bluetooth (relay module)
- IR রিমোট কন্ট্রোল (VS1838B রিসিভার)IR remote control (VS1838B receiver)
- GPS ট্র্যাকার: NEO-6M + SIM800L দিয়ে SMS এ লোকেশনGPS tracker: NEO-6M + SIM800L sends coordinates by SMS