Heart Rate Zone Calculator Cycling

.cycling-hr-container { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; max-width: 800px; margin: 20px auto; padding: 25px; border: 1px solid #e1e1e1; border-radius: 12px; background-color: #ffffff; box-shadow: 0 4px 6px rgba(0,0,0,0.05); } .cycling-hr-header { text-align: center; margin-bottom: 30px; } .cycling-hr-header h2 { color: #1a202c; margin-bottom: 10px; font-size: 28px; } .cycling-hr-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 25px; } @media (max-width: 600px) { .cycling-hr-grid { grid-template-columns: 1fr; } } .cycling-hr-input-group { display: flex; flex-direction: column; } .cycling-hr-input-group label { font-weight: 600; margin-bottom: 8px; color: #4a5568; } .cycling-hr-input-group input { padding: 12px; border: 2px solid #cbd5e0; border-radius: 6px; font-size: 16px; transition: border-color 0.2s; } .cycling-hr-input-group input:focus { outline: none; border-color: #3182ce; } .cycling-hr-btn { width: 100%; background-color: #e53e3e; color: white; padding: 15px; border: none; border-radius: 6px; font-size: 18px; font-weight: bold; cursor: pointer; transition: background-color 0.2s; } .cycling-hr-btn:hover { background-color: #c53030; } .cycling-hr-result-area { margin-top: 30px; display: none; } .cycling-hr-table { width: 100%; border-collapse: collapse; margin-top: 20px; } .cycling-hr-table th { background-color: #f7fafc; text-align: left; padding: 12px; border-bottom: 2px solid #edf2f7; } .cycling-hr-table td { padding: 12px; border-bottom: 1px solid #edf2f7; } .zone-1 { border-left: 5px solid #a0aec0; } .zone-2 { border-left: 5px solid #48bb78; } .zone-3 { border-left: 5px solid #ecc94b; } .zone-4 { border-left: 5px solid #ed8936; } .zone-5 { border-left: 5px solid #f56565; } .cycling-hr-content { margin-top: 40px; line-height: 1.6; color: #2d3748; } .cycling-hr-content h3 { color: #1a202c; margin-top: 25px; }

Cycling Heart Rate Zone Calculator

Optimize your training by calculating precise heart rate zones based on the Karvonen formula.

Karvonen (Includes Resting HR) Peak Power (% of Max HR)

Your Personalized Cycling Zones

Zone Intensity Range (BPM)

How to Use This Heart Rate Zone Calculator for Cycling

Training with heart rate zones allows cyclists to ensure they are riding at the correct intensity to achieve specific physiological adaptations. This calculator uses the Karvonen Formula, which is widely considered more accurate than simple percentages because it accounts for your Heart Rate Reserve (HRR)—the difference between your maximum heart rate and your resting heart rate.

Understanding the 5 Cycling Intensity Zones

  • Zone 1 (Recovery): Used for active recovery after hard efforts. It improves blood flow without adding fatigue.
  • Zone 2 (Endurance/Base): The "bread and butter" of cycling training. This builds aerobic capacity and teaches the body to burn fat efficiently.
  • Zone 3 (Tempo): A moderate intensity used for building aerobic power. It's the "comfortably hard" pace often used in long climbs.
  • Zone 4 (Lactate Threshold): The point where lactate begins to accumulate in the blood faster than it can be removed. Training here increases your "FTP" (Functional Threshold Power).
  • Zone 5 (VO2 Max): Short, high-intensity intervals that improve your maximum oxygen consumption and top-end speed.

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: 180 – 60 = 120 BPM.
  3. Zone 2 (Endurance) Calculation: (120 * 0.60) + 60 = 132 BPM to (120 * 0.70) + 60 = 144 BPM.

Instead of just riding "fast," this cyclist knows that staying between 132 and 144 BPM will provide the maximum endurance benefit without overtraining.

function updateMaxHR() { var age = document.getElementById("cyclingAge").value; if (age && age > 0) { document.getElementById("maxHR").value = 220 – age; } } function calculateCyclingZones() { var age = parseFloat(document.getElementById("cyclingAge").value); var mhr = parseFloat(document.getElementById("maxHR").value); var rhr = parseFloat(document.getElementById("restingHR").value); var method = document.getElementById("methodSelect").value; var resultArea = document.getElementById("cyclingResultArea"); var tableBody = document.getElementById("cyclingTableBody"); var summary = document.getElementById("summaryText"); if (!mhr || mhr <= 0) { alert("Please enter a valid Maximum Heart Rate."); return; } if (method === "karvonen" && (!rhr || rhr <= 0)) { alert("Resting Heart Rate is required for the Karvonen method."); return; } var hrr = mhr – rhr; var zones = [ { name: "Zone 1 (Recovery)", min: 0.50, max: 0.60, class: "zone-1" }, { name: "Zone 2 (Endurance)", min: 0.60, max: 0.70, class: "zone-2" }, { name: "Zone 3 (Tempo)", min: 0.70, max: 0.80, class: "zone-3" }, { name: "Zone 4 (Threshold)", min: 0.80, max: 0.90, class: "zone-4" }, { name: "Zone 5 (VO2 Max)", min: 0.90, max: 1.00, class: "zone-5" } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var z = zones[i]; var minBpm, maxBpm; if (method === "karvonen") { minBpm = Math.round((hrr * z.min) + rhr); maxBpm = Math.round((hrr * z.max) + rhr); } else { minBpm = Math.round(mhr * z.min); maxBpm = Math.round(mhr * z.max); } html += ""; html += "" + z.name + ""; html += "" + (z.min * 100) + "% – " + (z.max * 100) + "%"; html += "" + minBpm + " – " + maxBpm + " BPM"; html += ""; } summary.innerHTML = "Based on a Max HR of " + mhr + " BPM" + (method === "karvonen" ? " and a Resting HR of " + rhr + " BPM." : "."); tableBody.innerHTML = html; resultArea.style.display = "block"; }

Leave a Reply

Your email address will not be published. Required fields are marked *