This article is about a simple heart rate monitor using 8051 microcontroller. Like the previous 8051 projects, AT89S51 is the microcontroller used here. The device senses the heart rate from the finger tip using IR reflection method and displays it on a three digit seven segment display in beats per minute. The circuit has an accuracy of 4 beats per minute and it is very easy to use. In medical terms, the technique used here for sensing heart rate is called photoplethysmography.

Photoplethysmography.

Photoplethysmography is the process of optically estimating the volumetric measurement of an organ. Pulse oximetry, cardiovascular monitoring, respiration detection, heart rate monitoring etc are few common applications of photoplethysmography. Let us have a look at the application of photoplethysmography in heart rate monitoring from the figer tip. When the heart expands (diastole) the volume of blood inside the finger tip increases and when the heart contrcats (systole) the volume of blood inside the finger tip decreases. The resultant pulsing of blood volume inside the finger tip is directly proportional to the heart rate and if you could some how count the number of pulses in one minute, that’s the heart rate in beats per minute (bpm). For this an IR transmitter/receiver pair  placed in close contact with the finger tip. When the heart beats, the volume of blood cells under the sensor increases and this reflects more IR waves to sensor and when there is no beat the intensity of the reflected beam decreases. The pulsating reflection is converted to a suitable current or voltage pulse by the sensor. The sensor output is processed by suitable electronic circuits to obtain a visible indication (digital display or graph).

Heart rate monitor using 8051.

You can buy this project from our store now

Buy Now

 

Circuit diagram.


heart-rate-monitor-using-8051

Working of the heart rate monitor

LTH1550-01 photo interrupter forms the photoplethysmographic sensor here. LTH1550-01 is simply a IR diode – photo transistor pair in single package. The front side of the IR diode and photo transistor are exposed and the remaining parts are well isolated. When the finger tip is placed over the sensor the volumetric pulsing of  the blood volume inside the finger tip due to heart beat varies the intensity of the reflected beam and this variation in intensity is according to the heart beat.

When more light falls on the photo transistor it conducts more, its collector current increases and so its collector voltage decreases. When less light falls on the photo transistor it conducts less, its collector current decreases and so its collector voltage decreases. This variation in the collector voltage will be proportional to the heart rate. Any way this voltage variation is so feeble and additional signal conditioning stages are necessary to convert it into a microcontroller  recognizable form.

The next part of the circuit consists of a two active low pass filters using opamp LM324.  The LM324 is a quad opamp that can be operated from a single rail supply. Resistor R23, R17 and capacitor C5 sets the gain and cut off frequency of the first filter. With the given component values, gain will be 11 and cut off frequency will be 2.5Hz. The gain and cut off frequency are determined using the following equations. Capacitor C15 is used to by-pass noise if any may cause false triggering of the comparator.

Voltage gain Av =1 + (R17 / R23)

Cut off frequency Fc= 1/(2π *R17*C5)

The second low pass filter also have same gain and cut off frequency. The two low pass filters form a very critical part of the circuit as any noise or false signals passing to the microcontroller stage will produce disastrous results. The output of the filter stage will be a voltage level fluctuating between 0 and 0.35 volts and this fluctuation is converted into a 0 to 5V swing using the comparator  based on the third opamp (IC1c). The reference voltage of the comparator is set to 0.3V. When ever the output voltage of the filter stage goes above 0.3V, the output of the comparator goes to zero and whenever the output voltage of the filter stage goes below 0.3V, the output of the comparator goes to positive saturation. The result will be a neat pulse fluctuating between 0 and 5V at a rate equal to the heart rate. This pulse is fed to the microcontroller for counting.

Program.

ORG 000H                   // origin
MOV DPTR,#LUT              // moves starting address of LUT to DPTR
MOV P1,#00000000B          // sets P1 as output port
MOV P0,#00000000B          // sets P0 as output port
MAIN: MOV R6,#230D         // loads register R6 with 230D
      SETB P3.5            // sets P3.5 as input port
      MOV TMOD,#01100001B  // Sets Timer1 as Mode2 counter & Timer0 as Mode1 timer
      MOV TL1,#00000000B   // loads TL1 with initial value
      MOV TH1,#00000000B   // loads TH1 with initial value
      SETB TR1             // starts timer(counter) 1
BACK: MOV TH0,#00000000B   // loads initial value to TH0
      MOV TL0,#00000000B   // loads initial value to TL0
      SETB TR0             // starts timer 0
HERE: JNB TF0,HERE         // checks for Timer 0 roll over
      CLR TR0              // stops Timer0
      CLR TF0              // clears Timer Flag 0
      DJNZ R6,BACK
      CLR TR1              // stops Timer(counter)1
      CLR TF0              // clears Timer Flag 0
      CLR TF1              // clears Timer Flag 1
      ACALL DLOOP          // Calls subroutine DLOOP for displaying the count
      SJMP MAIN            // jumps back to the main loop
DLOOP: MOV R5,#252D
BACK1: MOV A,TL1           // loads the current count to the accumulator
       MOV B,#4D           // loads register B with 4D
       MUL AB              // Multiplies the TL1 count with 4
       MOV B,#100D         // loads register B with 100D
       DIV AB              // isolates first digit of the count
       SETB P1.0           // display driver transistor Q1 ON
       ACALL DISPLAY       // converts 1st digit to 7seg pattern
       MOV P0,A            // puts the pattern to port 0
       ACALL DELAY
       ACALL DELAY
       MOV A,B
       MOV B,#10D
       DIV AB              // isolates the second digit of the count
       CLR P1.0            // display driver transistor Q1 OFF
       SETB P1.1           // display driver transistor Q2 ON
       ACALL DISPLAY       // converts the 2nd digit to 7seg pattern
       MOV P0,A
       ACALL DELAY
       ACALL DELAY
       MOV A,B             // moves the last digit of the count to accumulator
       CLR P1.1            // display driver transistor Q2 OFF
       SETB P1.2           // display driver transistor Q3 ON
       ACALL DISPLAY       // converts 3rd digit to 7seg pattern
       MOV P0,A            // puts the pattern to port 0
       ACALL DELAY         // calls 1ms delay
       ACALL DELAY
       CLR P1.2
       DJNZ R5,BACK1       // repeats the subroutine DLOOP 100 times
       MOV P0,#11111111B
       RET

DELAY: MOV R7,#250D        // 1ms delay
 DEL1: DJNZ R7,DEL1
       RET

DISPLAY: MOVC A,@A+DPTR    // gets 7seg digit drive pattern for current value in A
         CPL A
         RET
LUT: DB 3FH                // LUT starts here
     DB 06H
     DB 5BH
     DB 4FH
     DB 66H
     DB 6DH
     DB 7DH
     DB 07H
     DB 7FH
     DB 6FH
END

About the program.

For the counting purpose both the timers of 8051 (Timer0 and Timer1) are used. Timer 1 is configured as an 8 bit auto reload counter for registering the number of incoming zero going pulses and Timer0 is configured as a 16 bit timer which generate the necessary 1 second time span for the Timer1 to count.For counting the number of beats Timer0 and Timer1 are used. Timer1 is set as an 8 bit auto reload counter for counting the the number of pulses (indicating the heart beat) and Timer0 is set as a 16 bit timer which generates a 65536uS delay. When looped 230 times it will produce a 15 second time span (230 x 65536uS =15S)  for the Timer 1 to count. The number of counts obtained in 15 seconds is multiplied by 4 to obtain the heart rate in beats per minute.

 The Timer 0 which generates the 1 second time span is configured in Mode 1 (16 bit timer). So the maximum it can count is 2^16 and it is 65536. In 8051 the crystal frequency is divided by 12 using an internal frequency divider network before applying it as a clock for the timer. That means the timer will increment by one for every 1/12th of the crystal frequency. For an 8051 based system clocked by a 12MHz crystal, the time taken for one timer increment will be 1µS (ie; 1/12MHz). So the maximum time delay that can be obtained using one session of the timer will be 65536µS. Go through this article Delay using 8051 timer for a better grasp.

Also read this article Interfacing seven segment display to 8051 before trying this project.

Setting up the circuit.

When power is switched ON, the indicator LED D4 will glow an continues in that state. Now place your finger tip over the sensor and adjust preset R14 so that the LED D4 starts blinking. After you got the LED blinking, reset the power and wait for 15 seconds. The display will show your heart rate in beats per minute.

Testing Video.

 

You can buy this project from our store now

Buy Now

 

 

LCD version of the heart rate monitor.

A simple LCD version of the heart rate monitor is shown below. This is just a modification of the above circuit.LCD displays are very popular now a most of the embedded system designers prefer them over multiplexed seven segment LED displays. Using LCD displays you can display text, custom characters, graphics and a lot of other stuff and it is a great advantage over the LED counterparts. JHD162 is the LCD display used here. It is a 16X2 LCD display based on the HD44780 driver IC. Go through the following link for knowing more about JHD162 and its interfacing to the 8051 microcontroller. Interfacing LCD display to 8051. The circuit diagram of the LCD version of the heart rate monitor is shown below.

LCD heart rate monitor using 8051

Data/command input pin DB0 to DB7 of the display is interfaced to Port0 of the microcontroller. Resistor network R17 is used for pulling up thePort0. Port0 needs external pull up for proper functioning. Preset resistor R1 is used for adjusting the contrast of the display. R2 limits the current through the back light LED. Other parts of the circuit are similar to the LED version.

Program.
RS EQU P2.7
RW EQU P2.6
EN EQU P2.5
ORG 000H
ACALL INIT
ACALL TEXT1
ACALL LINE2
ACALL TEXT3
MOV DPTR,#LUT
MOV P1,#00000000B
MOV P0,#00000000B
MAIN: MOV R6,#230D
SETB P3.5
MOV TMOD,#01100001B
MOV TL1,#00000000B
MOV TH1,#00000000B
SETB TR1
BACK: MOV TH0,#00000000B
MOV TL0,#00000000B
SETB TR0
HERE: JNB TF0,HERE
CLR TR0
CLR TF0
DJNZ R6,BACK
CLR TR1
CLR TF0
CLR TF1
MOV A,TL1
MOV B,#4D
MUL AB
ACALL SPLIT
ACALL INIT
ACALL TEXT1
ACALL LINE2
ACALL TEXT2
ACALL BPM

SJMP MAIN



INIT:

ACALL CMD
MOV A,#0FH
ACALL CMD
MOV A,#01H
ACALL CMD
MOV A,#06H
ACALL CMD
MOV A,#83H
ACALL CMD
MOV A,#3CH
ACALL CMD
RET

TEXT1:
MOV A,#48H
ACALL DISPLAY
MOV A,#65H
ACALL DISPLAY
MOV A,#61H
ACALL DISPLAY
MOV A,#72H
ACALL DISPLAY
MOV A,#74H
ACALL DISPLAY
MOV A,#20H
ACALL DISPLAY
MOV A,#52H
ACALL DISPLAY
MOV A,#61H
ACALL DISPLAY
MOV A,#74H
ACALL DISPLAY
MOV A,#65H
ACALL DISPLAY
RET

LINE2:

MOV A,#0C0H
ACALL CMD
RET
TEXT2:
MOV A,#62H
ACALL DISPLAY
MOV A,#70H
ACALL DISPLAY
MOV A,#6DH
ACALL DISPLAY
MOV A,#20H
ACALL DISPLAY
RET
TEXT3:
MOV A,#63H
ACALL DISPLAY
MOV A,#6FH
ACALL DISPLAY
MOV A,#75H
ACALL DISPLAY
MOV A,#6EH
ACALL DISPLAY
MOV A,#74H
ACALL DISPLAY
MOV A,#69H
ACALL DISPLAY
MOV A,#6EH
ACALL DISPLAY
MOV A,#67H
ACALL DISPLAY
MOV A,#2EH
ACALL DISPLAY
MOV A,#2EH
ACALL DISPLAY
MOV A,#2EH
ACALL DISPLAY
RET


BPM:
MOV A,R1
ACALL ASCII
ACALL DISPLAY
MOV A,R2
ACALL ASCII
ACALL DISPLAY
MOV A,R3
ACALL ASCII
ACALL DISPLAY
RET



CMD: MOV P0,A
CLR RS
CLR RW
SETB EN
CLR EN
ACALL DELAY
RET

DISPLAY:MOV P0,A
SETB RS
CLR RW
SETB EN
CLR EN
ACALL DELAY
RET

DELAY: CLR EN
CLR RS
SETB RW
MOV P0,#0FFh
SETB EN
MOV A,P0
JB ACC.7,DELAY

CLR EN
CLR RW
RET

DELAY1:MOV R5,#255D
HERE2:DJNZ R5,HERE2
RET

SPLIT: MOV B,#10D
DIV AB
MOV R3,B
MOV B,#10D
DIV AB
MOV R2,B
MOV R1,A
RET

ASCII: MOVC A,@A+DPTR
RET
LUT: DB 48D
DB 49D
DB 50D
DB 51D
DB 52D
DB 53D
DB 54D
DB 55D
DB 56D
DB 57D

END

 

Author

103 Comments

  1. How do we start the experiment in the LCD version of heart rate monitor and what is LED D4 in the circuit and it is not mentioned anywhere in the circuit diagram?.
    so please tell me how to preset it?.and what to preset?

  2. Hello ,
    I am a college student trying to make this project. A few teachers suggest that this project will not work. Can you help me go about with it?? I only have 4 days to submit the project. Please help. How does this circuit work? I am an amateur at microcontrollers

  3. Hello
    I did all the steps but only led a wink and the lcd did not work!
    My microcontroller is 89c52. But here is 89s51. Are the codes different from each other?

    Please help me

  4. vinay bhalekar

    can anyone send me the hex file for this need it

  5. Kavya jain

    Sir,I just want to ask one question how you decided the voltage level 0-0.35v ?
    Is that by performing experiment…

  6. Aslam Tadvi

    Plzz send me the hex file of full program & I hope that you will help me in making this project.

  7. for those of you trying to generate the hex file using mide-51 and you are getting 43 error……. this is the solution. change the double forward slash ‘//’ to the normal asembly language comment sign which is semi colon ‘;’ .

  8. anushree

    i did not understand why is a relay used in the circuit…..it would be helpful if anyone replies…..

  9. hi sir. ı want to make this project so much but ı have no more documents for thıs can you sent me all of stuff for this ? ı am waıtıng your attetıon have a nıce day

  10. Pankhuri

    Thanku sir, this project is really helpful and its working…:D
    sir i have a doubt, why have u used an inverting comparator in the sensor?

  11. sourav k. sahoo

    How do you get the AT89s51 in Proteus 8?
    Can we use AT89C51 instead of AT89C51?

  12. utkarsha rajendra bhosale

    sir plz help us about lth 1550-01 sensor.is this sensor working properly for this project.suggest another sensor.plz reply at email id

  13. we are doing project on “blood leakage monitoring system in the application of haemodialysis therapy “… plese help us to interface photo interrupter tcst110 with 8051 controller….. plz send me a code

  14. Pranshu Chittora

    Hello, I constructed the circuit as shown for the LCD version. But the sensor (LTH 1550-01) doesn’t work even when placed correctly in the circuit. Can you please tell me the operating voltage of the sensor. because i think that it is getting burnt out due to high voltage.

  15. sir….can u plz snd the pcb layout and component layout

    • Aslam Tadvi

      Plzzzz send me a code of the project, bcoz i had made hardware of this project but i don’t have a code so i hope you will help me. I am waiting for your help.
      Thanks have a nice day.

  16. Sir… The project is successful….. But only the problem is with lth1550-01…… Plzz suggest a alternate sensor…. Or the location of sensor availability in the region of andhra pradesh…..
    Plzz sir it’s so urgent

  17. can anyboby suggest me that above diagram and program for lcd is correct and in working condition so that i can choose for my final year project guyz help me out plzz..

  18. kiruthika kalingaraj

    pls send me the pic micro controller coding and connection instead of using 8051mc

  19. veena chandrakar

    sir we are using sensor but the sensor is not responding….sir what can be the problem and it is not respnding

  20. how can we convert it in C language programming or execute it on keil in assembly language?

  21. Ptasad m

    Reference volatge in not 0.3v in this circuit. Change resistors near comparator. Vary pot slowly. ATB

  22. chavda chetan

    sir I want buy the heart rate monitor project plz tell cost of projection.

  23. Ramavtar Jangid

    sir
    i needed full components list of this project (heart rate moniter using 8051)
    pls email me..

  24. Raihan Ahmed

    Can I replace the LTH 1550-01 sensor with a TCRT 5000 sensor ? What adjustments I have to make ?? Need urgent reply. Thanks in advance

  25. is this project working?????
    i want to do this project pls anybody sugest me that it is working or not pls help me guys

  26. send the hex file please right now it’s urgent

  27. @Hemant – If you get a warning in Keil, there should some problem with your code or Keil setting. We use MIDE-51 for creating HEX files. But that doesn’t matter…

    • Raymond Tan

      Dear, Hemant

      i using MIDE-51 for creating HEX file, i just copy above coding and save to “.asm”, after compile it, i get 43 error. Do you configure or set any setting?

      Thanks.

      • Raymond Tan

        Dear, Jojo

        i using MIDE-51 for creating HEX file, i just copy above coding and save to “.asm”, after compile it, i get 43 error. Do you configure or set any setting?

        Thanks.

  28. Will you please send me c code for this project…..i need it .

  29. Reshma Raj

    sir can u please send me the components list for both circuits?

  30. can someone plz send me hex file of these both program? plz plz plz its urgent.

  31. Raymond Tan

    Hi Sir, can u send me the component required list?

  32. hi caan you send me hex file ?? plse i want to do this

  33. Utkarsh Pantawane

    I can’t find LTH 1550-01 IR diode photo transistor pair. Which other component can be use as substitute.

  34. dhanshree

    please can you mail me required component list ??

  35. Soudip Sinha Roy

    Hellow Sir,
    I am feeling that there is any prob in the programing that have given . For that some error is appearing. But the circuit is correct. Please mae it correct, for us

  36. Prashant katkar

    pls can you mail me hex file format of this program?

  37. THe cicuit is bulid by me but no giving correct output..Plz help

  38. david niko

    Hi, can i use OPB606A instead of LTH1550-01, they have pretty much same values ? pls answer me i will be appreciated.

  39. Sanjeevan

    I can’t find LTH 1550-01 IR diode photo transistor pair. Which other component can be use as substitute.
    plzzzz tell me fast its really urgent

  40. I can’t find LTH 1550-01 IR diode photo transistor pair. Which other component can be use as substitute.

  41. RAMA KRISHNA

    hai..i want to do this project by using above program….
    can i get output…? if any corrections necessary…plzz give inf of modifications

  42. please send me hex file of the program.i have submission it is urgent.

  43. sir can you please guide if i want to replace 7 segments with lcd??

  44. Thank you for posting the project. Please could you mind sending me the list of components used in the project? I will really be grateful if you send me list of the components. looking forward to hearing from you. More grease to your elbow

  45. unlock htc desire gmail

    Hi, I want to subscribe for this web site to take moset up-to-date updates, therefore where can i do it please assist.

  46. magiceco

    sir i have assembled this circuit with proper components as shown in the circuit diagram but did not convert this program to hex,will you please sent me the hex code at samsungb2030@gmail.com

  47. Please please send me a good code for the above project. i have project submission tomorrow at 9am

  48. with the code mentioned above we are facing a problem so please correct the errors and post it as soon as possible

  49. pls can you mail me hex file format of this program?

    how to burn this program to microcontroller

  50. sevensegment replace lcd?? give me programm plz

  51. pls can you mail me hex file format of this program?

  52. Sir, please send me pcb layout and exact cost of this project.
    . and please convert programming in assembly language.
    it is urgent.

  53. R Thangaraj

    I think the LED in the sensor should be forward biased and not as shown in the diagram.

  54. thanks. good well explained article. could please send me the same code in assembly language. URGENT

  55. muhammad usman iliyasu jen

    pls send me the list of components used and power circuit.
    thanks

  56. Can u please tell me whether this heart rate monitor can be combined with a bp monitor???

  57. vijaykumar

    sir i have assembled this circuit with proper components as shown in the circuit diagram but it will not working properly ,
    the led D4 will glowing continuously it will not blinking and display will showing 000 every after 15 seconds ,so please help me what can i do…
    help me urgent thank you .

    • You will need to follow the set-up instructions – hold your finger on the tip of the sensor and adjust the R14 variable resistor (with your *other* hand!) until D4 is pulsing – until that happens there is no signal that the following circuitry (that counts the pulse to work out the heart-rate) will not give a reading (i.e. will show 000). Of course, if you are DEAD then there won’t be a reading either… 😎

  58. can anyone, plz tell me y gain is 101 at each stage of amplification.. thanku

  59. bhagyesh modi

    can u plz forward me with the pcb layout of the above project.. i’ll b highly obliged.. waiting for ur reply.. u can mail me the pcb layout on my email ID mentioned above…..

  60. sir,can you please post the corresponding block diagram with explanation?
    pls..

  61. give other alternative for the lth1550-01 ldr sensor?

  62. Mubashir

    sir can u please post RC car circuit using IC’s?

  63. Hello, i did not understand why register R5 is loaded with 252 and used as a counter in the displaying part. Please help. Thanks in advance

  64. sandesh k a

    can you please give the same procedure of circuit connection and code to measure heart rate using atmega 32a ??? please sir want it fast

  65. give other alternative for the lth1550-01 ldr sensor?

  66. Sir can I use lm358 or lm 293 instead of lm 324 and moreover why amplification is required in the third stage? Can’t I get the pulse in the 2nd stage only

    • 3rd stage is jus buffer ckt, which decr output impedence.. nd it helps whn u connect to MCU

      • hey can anyone send me the layout of this project its very urgent…. plz.
        ..

  67. any ldr type matches with lth1550-01 sensor?

  68. is any alternative to use of instead of lth 1550-01 sensor and any ldr type suport tell that sensor

  69. Sir, can I use LDR instead of the photo transistor?

    • admin

      its difficult to use the LDR. it is not sensitive enough for this application

      • Sir,can you mail me hex file format of this program?

  70. Can we use any other sensor than LTH1550-01??
    If Yes please mention the name
    Thanks

  71. can i just replace another infrared transmitter and receiver with
    lth 1550-01

  72. Can I use any other Sensor for this project instead of LTH1550-01???
    Please Reply Urgent

  73. can you please tell me what method or programmer was used to program the micro-controller?

  74. ROHIT KUMAR

    how can we convert it in C language programming or execute it on keil in assembly language?

  75. admin

    Xi is a 11.0592 MHz crystal.
    abcdefgh are shorted with each other.

    • sir it urgent can u plz….. sent me layout of it . within 1 week have submit project

    • hello sir this circuit not working on bread board i tired more than 50 time is there something wrong with sensor pin plz check out

  76. what is X1? and what about 7 segment display… ? abcdefgh of these 3 segments are shorted with each other??… please send me details on my mail address bilalzai@yahoo.com

  77. Thanks.very useful.can you post the pic micro version in asm.once again thanks in advance

  78. how can we convert it in C language programming or execute it on keil in assembly language?