Arduino Heartbeat Monitoring System

Components Needed

Wiring Instructions

DS18B20 Temperature Sensor

KY-039 Heartbeat Sensor

OLED Display (SSD1306 I2C)

Required Libraries

Arduino Code

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

#define HEART_PIN A0

int signal;
unsigned long lastBeat = 0;
int bpm = 0;
int beatCount = 0;
unsigned long startTime;

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

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED failed");
    while (true);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  startTime = millis();
}

void loop() {
  sensors.requestTemperatures();
  float temperature = sensors.getTempCByIndex(0);
  signal = analogRead(HEART_PIN);

  if (signal > 512 && (millis() - lastBeat) > 300) {
    lastBeat = millis();
    beatCount++;
  }

  if (millis() - startTime >= 10000) {
    bpm = beatCount * 6;
    beatCount = 0;
    startTime = millis();
  }

  display.clearDisplay();
  display.setCursor(0, 0);
  display.println("Heartbeat Monitor");
  display.print("Temp: ");
  display.print(temperature);
  display.println(" C");
  display.print("Signal: ");
  display.println(signal);
  display.print("BPM: ");
  display.println(bpm);
  display.display();

  delay(100);
}

Notes