Heart Rate Zone Calculator with Resting Heart Rate

Heart Rate Zone Calculator (Karvonen Method)

Estimated Max Heart Rate: BPM

Heart Rate Reserve (HRR): BPM

Zone Intensity Target BPM Range

Understanding Heart Rate Zones and the Karvonen Formula

Training with heart rate zones is the most effective way to optimize your cardiovascular fitness. Unlike the simple "220 minus age" formula, the Karvonen Method incorporates your Resting Heart Rate (RHR). This provides a much more personalized set of training ranges because it accounts for your current fitness level.

How the Calculation Works

The Karvonen formula calculates your Heart Rate Reserve (HRR) by subtracting your resting heart rate from your maximum heart rate. Your target heart rate is then calculated as a percentage of that reserve, plus your resting heart rate:

Target HR = ((Max HR − Resting HR) × % Intensity) + Resting HR

Training Zone Breakdown

  • Zone 1: Very Light (50-60%) – Best for recovery and warm-ups. Improves overall health but provides minimal aerobic conditioning.
  • Zone 2: Light (60-70%) – The "Fat Burning" zone. Enhances endurance and teaches the body to use fat as a primary fuel source.
  • Zone 3: Moderate (70-80%) – Aerobic zone. Improves cardiovascular capacity and respiratory efficiency.
  • Zone 4: Hard (80-90%) – Anaerobic zone. Increases speed and power while raising your lactate threshold.
  • Zone 5: Maximum (90-100%) – VO2 Max training. Only sustainable for short bursts; used for high-intensity interval training (HIIT).

Example Calculation

If you are 30 years old with a resting heart rate of 60 BPM:

  1. Max HR: 220 – 30 = 190 BPM
  2. HRR: 190 – 60 = 130 BPM
  3. Zone 2 Lower (60%): (130 * 0.60) + 60 = 138 BPM
  4. Zone 2 Upper (70%): (130 * 0.70) + 60 = 151 BPM
function calculateZones() { var age = parseFloat(document.getElementById('age').value); var restingHR = parseFloat(document.getElementById('restingHR').value); var resultsDiv = document.getElementById('hr-results'); var tableBody = document.getElementById('zoneTableBody'); if (isNaN(age) || isNaN(restingHR) || age <= 0 || restingHR <= 0) { alert("Please enter valid numbers for age and resting heart rate."); return; } // Calculations var maxHR = 220 – age; var hrr = maxHR – restingHR; if (hrr <= 0) { alert("Resting heart rate cannot be higher than maximum heart rate. Please check your inputs."); return; } document.getElementById('displayMaxHR').innerText = maxHR; document.getElementById('displayHRR').innerText = hrr; var zones = [ { name: "Zone 1 (Recovery)", intensity: "50% – 60%", min: 0.50, max: 0.60, color: "#e8f5e9" }, { name: "Zone 2 (Endurance)", intensity: "60% – 70%", min: 0.60, max: 0.70, color: "#f1f8e9" }, { name: "Zone 3 (Aerobic)", intensity: "70% – 80%", min: 0.70, max: 0.80, color: "#fffde7" }, { name: "Zone 4 (Anaerobic)", intensity: "80% – 90%", min: 0.80, max: 0.90, color: "#fff3e0" }, { name: "Zone 5 (VO2 Max)", intensity: "90% – 100%", min: 0.90, max: 1.00, color: "#ffebee" } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var lower = Math.round((hrr * zones[i].min) + restingHR); var upper = Math.round((hrr * zones[i].max) + restingHR); html += '' + '' + zones[i].name + '' + '' + zones[i].intensity + '' + '' + lower + ' – ' + upper + ' BPM' + ''; } tableBody.innerHTML = html; resultsDiv.style.display = 'block'; // Smooth scroll to results resultsDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment