* This calculator uses the standard formula (220 – Age) to estimate maximum heart rate. Consult a doctor for medical advice.
How to Measure Your Heart Rate
To accurately calculate your Beats Per Minute (BPM), follow these manual steps if you don't have a heart rate monitor:
Find your pulse: Place two fingers (index and middle) on either your wrist (radial artery) just below the thumb, or on the side of your neck (carotid artery).
Check the time: Use a watch or stopwatch. You don't need to count for a full minute. Standard practice is to count for 10, 15, or 30 seconds.
Count the beats: Count the number of pulses you feel during that time interval.
Calculate: Input the number of beats and the duration into the calculator above. For example, if you counted 17 beats in 15 seconds, your heart rate is 68 BPM (17 × 4).
Understanding Heart Rate Zones
Knowing your heart rate zones helps you train effectively. These zones are calculated based on your Maximum Heart Rate (MHR), which is roughly estimated as 220 minus your age.
Warm Up (50-60%): Good for beginners, warm-ups, and cool-downs. Improves overall health and aids recovery.
Fat Burn (60-70%): The body relies more on fat for fuel. Feels comfortable; you can hold a conversation.
Aerobic / Cardio (70-80%): Increases cardiovascular endurance and lung capacity. You will sweat more and breathing becomes rhythmic.
Anaerobic / Hard (80-90%): Improves high-speed endurance and lactic acid tolerance. Breathing is heavy.
Maximum Effort (90-100%): Short bursts for athletic performance. Sustainable for only very short periods.
What is a Normal Resting Heart Rate?
For most adults, a normal resting heart rate ranges between 60 and 100 beats per minute. However, highly active individuals and athletes often have lower resting heart rates, sometimes as low as 40 BPM, indicating efficient heart function.
function calculateHeartRate() {
// Get Inputs
var beats = document.getElementById('beatsCounted').value;
var duration = document.getElementById('countDuration').value;
var age = document.getElementById('ageInput').value;
// Element References
var resultDiv = document.getElementById('bpmResults');
var bpmDisplay = document.getElementById('currentBPMResult');
var maxHRDisplay = document.getElementById('maxHRResult');
var tableBody = document.getElementById('zonesTableBody');
// Validation Flags
var hasBpmInput = (beats !== "" && !isNaN(beats) && beats > 0);
var hasAgeInput = (age !== "" && !isNaN(age) && age > 0 && age < 120);
if (!hasBpmInput && !hasAgeInput) {
alert("Please enter the number of beats counted OR your age to calculate.");
return;
}
// 1. Calculate Current BPM
if (hasBpmInput) {
var durationVal = parseFloat(duration);
var beatsVal = parseFloat(beats);
var multiplier = 60 / durationVal;
var currentBPM = Math.round(beatsVal * multiplier);
bpmDisplay.innerHTML = currentBPM;
} else {
bpmDisplay.innerHTML = "–";
}
// 2. Calculate Max HR and Zones
if (hasAgeInput) {
var ageVal = parseFloat(age);
var maxHR = 220 – ageVal;
maxHRDisplay.innerHTML = maxHR;
// Generate Table Rows
var zones = [
{ name: "Warm Up", pct: "50-60%", low: 0.50, high: 0.60, benefit: "Recovery & Health" },
{ name: "Fat Burn", pct: "60-70%", low: 0.60, high: 0.70, benefit: "Weight Control" },
{ name: "Aerobic", pct: "70-80%", low: 0.70, high: 0.80, benefit: "Cardiovascular Fitness" },
{ name: "Anaerobic", pct: "80-90%", low: 0.80, high: 0.90, benefit: "High Speed Endurance" },
{ name: "VO2 Max", pct: "90-100%", low: 0.90, high: 1.00, benefit: "Maximum Performance" }
];
var tableHtml = "";
for (var i = 0; i < zones.length; i++) {
var lowBPM = Math.round(maxHR * zones[i].low);
var highBPM = Math.round(maxHR * zones[i].high);
tableHtml += "