Heart Rate Training Zone Calculator for Cyclists

Heart Rate Training Zone Calculator for Cyclists

*Estimated Max HR = 220 – Age

Your Personalized Training Zones

Zone BPM Range Description

How to Use Heart Rate Zones for Cycling

For cyclists, training by heart rate is one of the most effective ways to ensure you are riding at the correct intensity to meet your goals. Whether you are training for a 100-mile century ride or looking to improve your sprinting power, understanding your zones prevents the common mistake of riding "too hard on easy days and too easy on hard days."

The Karvonen Formula

This calculator uses the Karvonen Method, which is more accurate than simple percentages because it accounts for your Heart Rate Reserve (HRR). HRR is the difference between your maximum heart rate and your resting heart rate. By incorporating your fitness level (resting heart rate), the zones become much more specific to your current physiology.

Breakdown of Cycling Zones

  • Zone 1: Active Recovery (50-60% HRR)
    Used for recovery rides the day after a hard race or interval session. It stimulates blood flow to the muscles without adding fatigue.
  • Zone 2: Endurance (60-70% HRR)
    The "Base" zone. This is where you build aerobic capacity and teach your body to burn fat efficiently. You should be able to hold a conversation in this zone.
  • Zone 3: Tempo (70-80% HRR)
    Moderate intensity. Used for building aerobic power. It feels "comfortably hard." Conversation becomes shorter.
  • Zone 4: Lactate Threshold (80-90% HRR)
    High intensity. This is roughly the pace you could sustain for a 40-60 minute time trial. Used to increase your maximum sustainable speed.
  • Zone 5: Anaerobic / VO2 Max (90-100% HRR)
    Maximum effort. Used for short intervals, sprinting, and steep climbs. These efforts are usually sustained for 30 seconds to 5 minutes.

Example Calculation

If a 40-year-old cyclist has a resting heart rate of 60 BPM:

  1. Max HR: 220 – 40 = 180 BPM
  2. Heart Rate Reserve (HRR): 180 – 60 = 120 BPM
  3. Zone 2 (Endurance) Lower Limit: (120 * 0.60) + 60 = 132 BPM
  4. Zone 2 (Endurance) Upper Limit: (120 * 0.70) + 60 = 144 BPM

Therefore, this cyclist should keep their heart rate between 132 and 144 BPM for their long endurance rides.

function calculateCyclingZones() { var age = parseFloat(document.getElementById("cycling_age").value); var rhr = parseFloat(document.getElementById("resting_hr").value); var userMax = parseFloat(document.getElementById("max_hr").value); if (isNaN(age) || age <= 0 || isNaN(rhr) || rhr 0) ? userMax : (220 – age); var hrr = mhr – rhr; if (hrr <= 0) { alert("Max Heart Rate must be higher than Resting Heart Rate. Please check your inputs."); return; } var zones = [ { name: "Zone 1: Recovery", min: 0.50, max: 0.60, color: "#9e9e9e", desc: "Easy recovery, light spinning." }, { name: "Zone 2: Endurance", min: 0.60, max: 0.70, color: "#4caf50", desc: "Base training, all-day pace." }, { name: "Zone 3: Tempo", min: 0.70, max: 0.80, color: "#ffeb3b", desc: "Steady aerobic effort, hard breathing." }, { name: "Zone 4: Threshold", min: 0.80, max: 0.90, color: "#ff9800", desc: "Lactate threshold, time trial pace." }, { name: "Zone 5: Anaerobic", min: 0.90, max: 1.00, color: "#f44336", desc: "Sprints and VO2 Max intervals." } ]; var tableBody = document.getElementById("zone_table_body"); tableBody.innerHTML = ""; document.getElementById("hr_summary").innerHTML = "Estimated Max HR: " + mhr + " BPM | Heart Rate Reserve: " + hrr + " BPM"; for (var i = 0; i < zones.length; i++) { var zoneMin = Math.round((hrr * zones[i].min) + rhr); var zoneMax = Math.round((hrr * zones[i].max) + rhr); var row = document.createElement("tr"); var cell1 = document.createElement("td"); cell1.style.padding = "12px"; cell1.style.border = "1px solid #ddd"; cell1.style.fontWeight = "bold"; cell1.style.borderLeft = "8px solid " + zones[i].color; cell1.innerHTML = zones[i].name; var cell2 = document.createElement("td"); cell2.style.padding = "12px"; cell2.style.border = "1px solid #ddd"; cell2.innerHTML = zoneMin + " – " + zoneMax + " BPM"; var cell3 = document.createElement("td"); cell3.style.padding = "12px"; cell3.style.border = "1px solid #ddd"; cell3.style.fontSize = "0.9em"; cell3.innerHTML = zones[i].desc; row.appendChild(cell1); row.appendChild(cell2); row.appendChild(cell3); tableBody.appendChild(row); } document.getElementById("cycling_results_area").style.display = "block"; document.getElementById("cycling_results_area").scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment