Percentage of Max Heart Rate (%Max HR)
Heart Rate Reserve (%HRR / Karvonen)
Garmin default is %Max HR. HRR is more accurate for athletes.
Required for HRR calculations. Check your watch upon waking.
Zone
Intensity (%)
Heart Rate Range (BPM)
Benefit
Understanding Garmin Heart Rate Zones
Heart rate zone training is the most effective way to improve cardiovascular health, endurance, and speed. Garmin devices categorize training intensity into five distinct zones. By customizing these zones in your Garmin Connect settings based on your specific physiology, you ensure that your "Training Status" and "VO2 Max" estimates remain accurate.
The Two Primary Calculation Methods
Garmin watches primarily use two methods to determine your zones. It is critical to select the one that matches your fitness level and data availability.
1. Percentage of Maximum Heart Rate (%Max HR)
This is the default setting on most fitness trackers. It calculates zones based solely on your highest achievable heart rate. While simple, it does not account for your fitness level (Resting Heart Rate). The formula is:
Zone X Limit = Max HR × Zone Percentage
This method is sufficient for beginners but may underestimate training intensity for fit individuals with low resting heart rates.
2. Heart Rate Reserve (%HRR / Karvonen Formula)
The Heart Rate Reserve method is generally considered more accurate for athletes because it incorporates your Resting Heart Rate (RHR). The "Reserve" is the difference between your Max HR and your RHR. The formula is:
Using %HRR prevents the "Zone 1" floor from being too low, ensuring warm-ups are actually effective.
Garmin Zone Breakdown
Zone 1 (Warm Up): Very light intensity. Used for warm-ups, cool-downs, and active recovery.
Zone 2 (Easy): The "all day" pace. Builds basic endurance and burns fat efficiently. You should be able to hold a conversation.
Zone 3 (Aerobic): Moderate intensity. Improves aerobic capacity and blood circulation efficiency. Breathing becomes rhythmic and harder.
Zone 4 (Threshold): Hard intensity. Improves high-speed endurance and lactate threshold. Sustainable for shorter periods (e.g., 10k race pace).
Zone 5 (Maximum): Maximum effort. Develops maximum performance speed and sprint power. Sustainable for only a few minutes.
How to Update Zones in Garmin Connect
Once you have calculated your zones above using the calculator:
Open the Garmin Connect App on your phone.
Go to More (iOS) or Menu (Android).
Select Garmin Devices and choose your device.
Select User Settings > Heart Rate Zones.
Input the specific BPM values generated by this calculator for Zones 1 through 5.
function toggleRestingHR() {
var method = document.getElementById('ghr_method').value;
var container = document.getElementById('resting_hr_container');
if (method === 'hrr') {
container.style.display = 'block';
} else {
container.style.display = 'none';
}
}
function autoCalculateMaxHR() {
var age = document.getElementById('ghr_age').value;
var maxHrInput = document.getElementById('ghr_max_hr');
// Only auto-fill if the Max HR field is empty or was previously auto-filled
// We generally leave it to the user, but this function exists if we wanted to enforce it.
// For this specific UX, we will just calculate it inside the main function if input is blank.
}
function calculateGarminZones() {
// 1. Get Inputs
var ageStr = document.getElementById('ghr_age').value;
var maxHrStr = document.getElementById('ghr_max_hr').value;
var method = document.getElementById('ghr_method').value;
var restHrStr = document.getElementById('ghr_resting_hr').value;
// 2. Validate and Parse
var age = parseFloat(ageStr);
var maxHr = parseFloat(maxHrStr);
var restHr = parseFloat(restHrStr);
// Calculate Max HR if missing
if (isNaN(maxHr)) {
if (isNaN(age)) {
alert("Please enter your Age or a known Max Heart Rate.");
return;
}
maxHr = 220 – age;
// Optionally update the input to show the calculated value
// document.getElementById('ghr_max_hr').value = maxHr;
}
// Validate Resting HR if HRR method selected
if (method === 'hrr') {
if (isNaN(restHr)) {
alert("Please enter your Resting Heart Rate for the Reserve calculation method.");
return;
}
if (restHr >= maxHr) {
alert("Resting Heart Rate cannot be higher than or equal to Max Heart Rate.");
return;
}
}
// 3. Define Zones Logic
// Garmin Default Percentages
var zones = [
{ name: "Zone 1", label: "Warm Up", minPct: 0.50, maxPct: 0.60, colorClass: "z1-color", benefit: "Active Recovery, Warm up" },
{ name: "Zone 2", label: "Easy", minPct: 0.60, maxPct: 0.70, colorClass: "z2-color", benefit: "Basic Endurance, Fat Burning" },
{ name: "Zone 3", label: "Aerobic", minPct: 0.70, maxPct: 0.80, colorClass: "z3-color", benefit: "Aerobic Capacity, Stamina" },
{ name: "Zone 4", label: "Threshold", minPct: 0.80, maxPct: 0.90, colorClass: "z4-color", benefit: "High Speed Endurance" },
{ name: "Zone 5", label: "Maximum", minPct: 0.90, maxPct: 1.00, colorClass: "z5-color", benefit: "Max Performance, Sprinting" }
];
var tableBody = "";
// 4. Calculation Loop
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var minBpm, maxBpm;
if (method === 'hrr') {
// Karvonen Formula: TargetHR = ((MaxHR − RestingHR) × %Intensity) + RestingHR
var reserve = maxHr – restHr;
minBpm = Math.round((reserve * z.minPct) + restHr);
maxBpm = Math.round((reserve * z.maxPct) + restHr);
} else {
// Standard Max HR Formula: MaxHR * %Intensity
minBpm = Math.round(maxHr * z.minPct);
maxBpm = Math.round(maxHr * z.maxPct);
}
// Adjust edge cases (e.g., Zone 1 start shouldn't overlap weirdly, Zone 5 max is Max HR)
if (i === 4) maxBpm = maxHr; // Zone 5 cap is always Max HR
tableBody += "