Calculate your Max Heart Rate and optimal training zones using the Karvonen Formula.
Your Cardiac Profile
Estimated Max Heart Rate: — BPM
Heart Rate Reserve (HRR): — BPM
Zone
Intensity
Target Range (BPM)
How to Use the Google Heart Rate Calculator
Tracking your heart rate is the most effective way to measure exercise intensity. This calculator uses your age and resting heart rate (RHR) to determine your specific cardiovascular training zones. Unlike simple calculators that only use age, this tool utilizes the Karvonen Formula, which accounts for your individual fitness level by including your resting pulse.
Understanding Heart Rate Zones
To get the most out of your workouts, you should aim for different zones based on your goals:
Zone 1 (50-60%): Recovery and light activity. Ideal for warming up or cooling down.
Zone 2 (60-70%): Fat burning and endurance. Improves basic aerobic capacity.
Zone 3 (70-80%): Aerobic fitness. Strengthens the heart and increases cardiovascular efficiency.
Zone 4 (80-90%): Anaerobic threshold. Improves speed and power; you'll be breathing hard.
Zone 5 (90-100%): Maximum effort. Sprinting and high-intensity interval training (HIIT).
The Science: Karvonen Formula
The standard "220 minus age" formula is often inaccurate for fit individuals. The Karvonen Formula provides a more personalized result:
Target HR = ((Max HR − Resting HR) × % Intensity) + Resting HR
Practical Example
If you are a 40-year-old with a resting heart rate of 60 BPM:
Max HR = 220 – 40 = 180 BPM.
Heart Rate Reserve (HRR) = 180 – 60 = 120 BPM.
To find the 70% intensity level: (120 × 0.70) + 60 = 144 BPM.
By monitoring these numbers on your smartwatch or Google Fit device, you can ensure you are training at the correct intensity to meet your health objectives.
function calculateHeartRate() {
var age = document.getElementById('hrAge').value;
var restingHR = document.getElementById('hrRest').value;
var resultDiv = document.getElementById('hrResults');
var zoneBody = document.getElementById('zoneBody');
if (age === "" || restingHR === "" || age <= 0 || restingHR <= 0) {
alert("Please enter valid positive numbers for Age and Resting Heart Rate.");
return;
}
var ageVal = parseFloat(age);
var restVal = parseFloat(restingHR);
// Fox Formula for Max HR
var maxHR = 220 – ageVal;
// Heart Rate Reserve
var hrr = maxHR – restVal;
if (hrr <= 0) {
alert("Resting Heart Rate cannot be higher than or equal to Max Heart Rate. Please check your inputs.");
return;
}
document.getElementById('maxHRDisplay').innerText = maxHR;
document.getElementById('hrrDisplay').innerText = hrr;
var zones = [
{ name: "Zone 1: Very Light", range: "50% – 60%", low: 0.50, high: 0.60 },
{ name: "Zone 2: Light", range: "60% – 70%", low: 0.60, high: 0.70 },
{ name: "Zone 3: Moderate", range: "70% – 80%", low: 0.70, high: 0.80 },
{ name: "Zone 4: Hard", range: "80% – 90%", low: 0.80, high: 0.90 },
{ name: "Zone 5: Maximum", range: "90% – 100%", low: 0.90, high: 1.00 }
];
var html = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var lowBPM = Math.round((hrr * z.low) + restVal);
var highBPM = Math.round((hrr * z.high) + restVal);
html += "