how to add a buzzer to a heart beat monitor/ PLEASE HELP! URGENT!

the aim of my project is to measure the heart rate. I currently have a heart sensor, LCD screen and I need to add a buzzer, but I don't know what code to use and where it goes in the breadboard and the Arduino Uno. I need the buzzer to make a sound when the heart rate is higher than normal which is 60-90BMP.

This is the code that I have right now:
#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int pulsePin = A0; // Pulse Sensor purple wire connected to analog pin A0
int blinkPin = 13; // pin to blink led at each beat

// Volatile Variables, used in the interrupt service routine!
volatile int BPM; // int that holds raw Analog in 0. updated every 2mS
volatile int Signal; // holds the incoming raw data
volatile int IBI = 300; // int that holds the time interval between beats! Must be seeded!
volatile boolean Pulse = false; // "True" when User's live heartbeat is detected. "False" when not a "live beat".
volatile boolean QS = false; // becomes true when Arduoino finds a beat.

static boolean serialVisual = true; // Set to 'false' by Default. Re-set to 'true' to see Arduino Serial Monitor ASCII Visual Pulse

volatile int rate[10]; // array to hold last ten IBI values
volatile unsigned long sampleCounter = 0; // used to determine pulse timing
volatile unsigned long lastBeatTime = 0; // used to find IBI
volatile int P = 512; // used to find peak in pulse wave, seeded
volatile int T = 512; // used to find trough in pulse wave, seeded
volatile int thresh = 525; // used to find instant moment of heart beat, seeded
volatile int amp = 100; // used to hold amplitude of pulse waveform, seeded
volatile boolean firstBeat = true; // used to seed rate array so we startup with reasonable BPM
volatile boolean secondBeat = false; // used to seed rate array so we startup with reasonable BPM

void setup()
{
pinMode(blinkPin,OUTPUT); // pin that will blink to your heartbeat!
Serial.begin(115200); // we agree to talk fast!
interruptSetup(); // sets up to read Pulse Sensor signal every 2mS
// IF YOU ARE POWERING The Pulse Sensor AT VOLTAGE LESS THAN THE BOARD VOLTAGE,
// UN-COMMENT THE NEXT LINE AND APPLY THAT VOLTAGE TO THE A-REF PIN
// analogReference(EXTERNAL);
lcd.begin(16, 2);
lcd.clear();
}

// Where the Magic Happens
void loop()
{
serialOutput();

if (QS == true) // A Heartbeat Was Found
{
// BPM and IBI have been Determined
// Quantified Self "QS" true when arduino finds a heartbeat
serialOutputWhenBeatHappens(); // A Beat Happened, Output that to serial.
QS = false; // reset the Quantified Self flag for next time
}

delay(10); // take a break
}

void interruptSetup()
{
// Initializes Timer2 to throw an interrupt every 2mS.
TCCR2A = 0x02; // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE
TCCR2B = 0x06; // DON'T FORCE COMPARE, 256 PRESCALER
OCR2A = 0X7C; // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE
TIMSK2 = 0x02; // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A
sei(); // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}

void serialOutput()
{ // Decide How To Output Serial.
if (serialVisual == true)
{
arduinoSerialMonitorVisual('-', Signal); // goes to function that makes Serial Monitor Visualizer
}
else
{
sendDataToSerial('S', Signal); // goes to sendDataToSerial function
}
}

void serialOutputWhenBeatHappens()
{
if (serialVisual == true) // Code to Make the Serial Monitor Visualizer Work
{
Serial.print(" Heart-Beat Found "); //ASCII Art Madness
Serial.print("BPM: ");
Serial.println("BPM");
lcd.print("Heart-Beat Found ");
lcd.setCursor(1,1);
lcd.print("BPM: ");
lcd.setCursor(5,1);
lcd.print(BPM);
delay(300);
lcd.clear();
}
else
{
sendDataToSerial('B',BPM); // send heart rate with a 'B' prefix
sendDataToSerial('Q',IBI); // send time between beats with a 'Q' prefix
}
}

void arduinoSerialMonitorVisual(char symbol, int data )
{
const int sensorMin = 0; // sensor minimum, discovered through experiment
const int sensorMax = 1024; // sensor maximum, discovered through experiment
int sensorReading = data; // map the sensor range to a range of 12 options:
int range = map(sensorReading, sensorMin, sensorMax, 0, 11);
// do something different depending on the
// range value:
}

void sendDataToSerial(char symbol, int data )
{
Serial.print(symbol);
Serial.println(data);
}

ISR(TIMER2_COMPA_vect) //triggered when Timer2 counts to 124
{
cli(); // disable interrupts while we do this
Signal = analogRead(pulsePin); // read the Pulse Sensor
sampleCounter += 2; // keep track of the time in mS with this variable
int N = sampleCounter - lastBeatTime; // monitor the time since the last beat to avoid noise
// find the peak and trough of the pulse wave
if(Signal < thresh && N > (IBI/5)*3) // avoid dichrotic noise by waiting 3/5 of last IBI
{
if (Signal < T) // T is the trough
{
T = Signal; // keep track of lowest point in pulse wave
}
}

if(Signal > thresh && Signal > P)
{ // thresh condition helps avoid noise
P = Signal; // P is the peak
} // keep track of highest point in pulse wave

// NOW IT'S TIME TO LOOK FOR THE HEART BEAT
// signal surges up in value every time there is a pulse
if (N > 250)
{ // avoid high frequency noise
if ( (Signal > thresh) && (Pulse == false) && (N > (IBI/5)*3) )
{
Pulse = true; // set the Pulse flag when we think there is a pulse
digitalWrite(blinkPin,HIGH); // turn on pin 13 LED
IBI = sampleCounter - lastBeatTime; // measure time between beats in mS
lastBeatTime = sampleCounter; // keep track of time for next pulse

if(secondBeat)
{ // if this is the second beat, if secondBeat == TRUE
secondBeat = false; // clear secondBeat flag
for(int i=0; i<=9; i++) // seed the running total to get a realisitic BPM at startup
{
rate *= IBI; *

  • }*
  • }*
  • if(firstBeat) // if it's the first time we found a beat, if firstBeat == TRUE*
  • { *
  • firstBeat = false; // clear firstBeat flag*
  • secondBeat = true; // set the second beat flag*
  • sei(); // enable interrupts again*
  • return; // IBI value is unreliable so discard it*
  • } *
  • // keep a running total of the last 10 IBI values*
  • word runningTotal = 0; // clear the runningTotal variable *
  • for(int i=0; i<=8; i++)*
  • { // shift data in the rate array*
    _ rate = rate[i+1]; // and drop the oldest IBI value_
    _ runningTotal += rate*; // add up the 9 oldest IBI values*
    * }
    rate[9] = IBI; // add the latest IBI to the rate array*
    * runningTotal += rate[9]; // add the latest IBI to runningTotal*
    * runningTotal /= 10; // average the last 10 IBI values*
    * BPM = 30000/runningTotal;
    QS = true;
    // QS FLAG IS NOT CLEARED INSIDE THIS ISR*
    }
    }

    if (Signal < thresh && Pulse == true)
    { // when the values are going down, the beat is over
    * digitalWrite(blinkPin,LOW);
    Pulse = false;
    amp = P - T;
    thresh = amp/2 + T;
    P = thresh;
    T = thresh;
    }
    if (N > 2500)
    { *
    thresh = 512;
    P = 512;
    T = 512;
    lastBeatTime = sampleCounter;
    firstBeat = true;
    secondBeat = false;
    }

    sei();
    }
    _

PLEAS HELP HER

It would be really appreciated it you could help her, I don't know anything but all of you are super smart and this project has a deadline and she desperately needs your help to add an actuator.

PLEASE HELP! THIS IS VERY URGENT!!! MY PROJECT IS DUE IN 2 DAYS!!!! THANK YOU IN ADVANCE:)

This was NOT covid-19 related !

Nor is it URGENT please stop using each other with similar IP's as that may end up with one of you getting banned.
The use of all CAPS is considered shouting.

The people in this forum are just other Arduino users like yourself.
Asking for a quick response may be like watching paint dry.
In some cases it puts people off helping.
Remember almost all of us do not work for Arduino.

Could you also take a few moments to Learn How To Use The Forum.
Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.

Furthermore I have banned the extra accounts one of you seems to have set up down there via the catholic EDU system.

Should I find any more I will add the schools IP range to the BLOCKED list and let you explain how it got on that list as the timestamps from posts etc will allow them to see who was on which computer.

i am so sorry for using all caps as i was very stressing about the project and didn't read the guideline.

how is a heartbeat monitor not related to covid-19? when it's a respiratory disease. heart is part of the respiratory system so of course it is related to the covid-19.

also why would you banned the other account when it has completely different names so of course it is a different person.

zaraashleynorel:
i am so sorry for using all caps as i was very stressing about the project and didn't read the guideline.

how is a heartbeat monitor not related to covid-19? when it's a respiratory disease. heart is part of the respiratory system so of course it is related to the covid-19.

also why would you banned the other account when it has completely different names so of course it is a different person.

sydstu.catholic.edu.au has a lot of names with ZERO posts so either that system was or is being abused or not being maintained.
Moderators have the ability to check IP ranges to check for multiple accounts on the same IP's

You have said it is a school project therefore it was clearly homework.

Also if you are simply going to use the report to moderator button randomly there may be consequences.
Your report was closed.

Oh and the heart is NOT part of the respiratory system.

It is part of the circulatory system which is a different aspect of the body.

Please pay more attention in class.

oh okay and I will pay more attention thanks :slight_smile:
also, it's not homework. it's an assignment that's why I said i needed urgent help. thank you very much.

As an assignment it is in one of the better sections now anyway.

Can I give you a small assignment :grin:
Tell your IT department they need to clean up thier user database before they get a bad reputation and accidentally get themselves on any blacklists.

In order to provide help we will need to see your code.

As you did not use code tags when posting it some of it has been turned into italics

See Read this before posting a programming question and follow the advice on how to post coe