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.
Circuit diagram.
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.
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.
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
103 Comments
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?
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
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
can anyone send me the hex file for this need it
Sir,I just want to ask one question how you decided the voltage level 0-0.35v ?
Is that by performing experiment…
Plzz send me the hex file of full program & I hope that you will help me in making this project.
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 ‘;’ .
i did not understand why is a relay used in the circuit…..it would be helpful if anyone replies…..
With which software program 8051?
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
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?
How do you get the AT89s51 in Proteus 8?
Can we use AT89C51 instead of AT89C51?
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
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
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.
sir….can u plz snd the pcb layout and component layout
sir,
it is very helpful.thank you so much
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.
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
@deepak – You can buy the sensor online – http://www.dnatechindia.com/LTH-1550.html
keil software
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..
pls send me the pic micro controller coding and connection instead of using 8051mc
sir we are using sensor but the sensor is not responding….sir what can be the problem and it is not respnding
how can we convert it in C language programming or execute it on keil in assembly language?
Reference volatge in not 0.3v in this circuit. Change resistors near comparator. Vary pot slowly. ATB
sir I want buy the heart rate monitor project plz tell cost of projection.
sir
i needed full components list of this project (heart rate moniter using 8051)
pls email me..
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
pleas share it for me
is this project working?????
i want to do this project pls anybody sugest me that it is working or not pls help me guys
send the hex file please right now it’s urgent
@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…
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.
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.
Will you please send me c code for this project…..i need it .
send me hex file at bhasanewar@gmail.com
sir can u please send me the components list for both circuits?
can someone plz send me hex file of these both program? plz plz plz its urgent.
Hi Sir, can u send me the component required list?
hi caan you send me hex file ?? plse i want to do this
I can’t find LTH 1550-01 IR diode photo transistor pair. Which other component can be use as substitute.
please can you mail me required component list ??
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
pls can you mail me hex file format of this program?
THe cicuit is bulid by me but no giving correct output..Plz help
Hi, can i use OPB606A instead of LTH1550-01, they have pretty much same values ? pls answer me i will be appreciated.
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
I can’t find LTH 1550-01 IR diode photo transistor pair. Which other component can be use as substitute.
hai..i want to do this project by using above program….
can i get output…? if any corrections necessary…plzz give inf of modifications
please send me hex file of the program.i have submission it is urgent.
sir can you please guide if i want to replace 7 segments with lcd??
IS EVERYONE GOT THE OUTPUT
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
Hi, I want to subscribe for this web site to take moset up-to-date updates, therefore where can i do it please assist.
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
Please please send me a good code for the above project. i have project submission tomorrow at 9am
with the code mentioned above we are facing a problem so please correct the errors and post it as soon as possible
pls can you mail me hex file format of this program?
how to burn this program to microcontroller
sevensegment replace lcd?? give me programm plz
pls can you mail me hex file format of this program?
Sir, please send me pcb layout and exact cost of this project.
. and please convert programming in assembly language.
it is urgent.
I think the LED in the sensor should be forward biased and not as shown in the diagram.
thanks. good well explained article. could please send me the same code in assembly language. URGENT
pls send me the list of components used and power circuit.
thanks
Can u please tell me whether this heart rate monitor can be combined with a bp monitor???
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… 😎
can anyone, plz tell me y gain is 101 at each stage of amplification.. thanku
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…..
sir,can you please post the corresponding block diagram with explanation?
pls..
give other alternative for the lth1550-01 ldr sensor?
tcrt5000,tcrt1000
sir can u please post RC car circuit using IC’s?
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
è possibile avere il pcb?
can you please give the same procedure of circuit connection and code to measure heart rate using atmega 32a ??? please sir want it fast
give other alternative for the lth1550-01 ldr sensor?
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.
..
any ldr type matches with lth1550-01 sensor?
is any alternative to use of instead of lth 1550-01 sensor and any ldr type suport tell that sensor
Sir, can I use LDR instead of the photo transistor?
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?
Can we use any other sensor than LTH1550-01??
If Yes please mention the name
Thanks
can i just replace another infrared transmitter and receiver with
lth 1550-01
Can I use any other Sensor for this project instead of LTH1550-01???
Please Reply Urgent
HOW CAN PROGRAM OF 8051 MICRICONTROLLER
about the preset.
what does the n/c means?
no connection
what is x1 with frequency 11Mhz?
can you please tell me what method or programmer was used to program the micro-controller?
how can we convert it in C language programming or execute it on keil in assembly language?
Xi is a 11.0592 MHz crystal.
abcdefgh are shorted with each other.
thanks
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
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
read this article
https://www.circuitstoday.com/interfacing-seven-segment-display-to-8051
Thanks.very useful.can you post the pic micro version in asm.once again thanks in advance
how can we convert it in C language programming or execute it on keil in assembly language?