{"id":983,"date":"2026-07-06T06:54:09","date_gmt":"2026-07-06T06:54:09","guid":{"rendered":"https:\/\/pedalmoto.com\/blog\/?p=983"},"modified":"2026-07-06T12:00:29","modified_gmt":"2026-07-06T12:00:29","slug":"calculadora-de-autonomia-real-de-e-bike","status":"publish","type":"post","link":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/","title":{"rendered":"Calculadora de autonom\u00eda real de e-bike"},"content":{"rendered":"\n<section class=\"pm-ebike\" id=\"pm-ebike\">\n  <style>\n    \/* ===== Scope & tokens ===== *\/\n    .pm-ebike{\n      --pm-brand:#009AEF;\n      --pm-brand-dark:#0f80c9;\n      --pm-brand-light:#33B6FF;\n      --pm-ink:#1f2933;\n      --pm-muted:#6b7684;\n      --pm-line:#e4e8ec;\n      --pm-bg:#f6f8fa;\n      --pm-card:#ffffff;\n      --pm-success:#1e967b;\n      --pm-warning:#b7791f;\n      --pm-danger:#d63031;\n      --pm-radius:16px;\n      font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif;\n      color:var(--pm-ink);\n      line-height:1.5;\n      box-sizing:border-box;\n      display:block;\n      max-width:1120px;\n      margin:0 auto;\n      padding:8px;\n      -webkit-font-smoothing:antialiased;\n    }\n    .pm-ebike *,.pm-ebike *::before,.pm-ebike *::after{box-sizing:border-box;}\n    .pm-ebike h1,.pm-ebike h2,.pm-ebike h3,.pm-ebike h4,.pm-ebike p{margin:0;}\n\n    \/* ===== Header ===== *\/\n    .pm-ebike .pm-head{text-align:center;margin:8px 0 22px;}\n    .pm-ebike .pm-head h1{font-size:clamp(1.5rem,1.1rem + 1.8vw,2.1rem);font-weight:800;letter-spacing:-.02em;}\n    .pm-ebike .pm-head p{color:var(--pm-muted);max-width:640px;margin:8px auto 0;font-size:.95rem;}\n\n    \/* ===== Grid layout ===== *\/\n    .pm-ebike .pm-grid{display:grid;grid-template-columns:1fr;gap:18px;}\n    @media(min-width:940px){.pm-ebike .pm-grid{grid-template-columns:minmax(320px,380px) 1fr;align-items:start;}}\n\n    \/* ===== Cards ===== *\/\n    .pm-ebike .pm-card{background:var(--pm-card);border:1px solid var(--pm-line);border-radius:var(--pm-radius);padding:20px;}\n    .pm-ebike .pm-card + .pm-card{margin-top:16px;}\n    .pm-ebike .pm-card h2{font-size:1.02rem;font-weight:700;display:flex;align-items:center;gap:8px;margin-bottom:16px;}\n    .pm-ebike .pm-card h2 .pm-ico{font-size:1.15rem;line-height:1;}\n\n    \/* ===== Form controls ===== *\/\n    .pm-ebike .pm-field{margin-bottom:16px;}\n    .pm-ebike .pm-field:last-child{margin-bottom:0;}\n    .pm-ebike .pm-field > label{display:block;font-size:.82rem;font-weight:600;color:var(--pm-ink);margin-bottom:6px;}\n    .pm-ebike .pm-hint{font-size:.72rem;color:var(--pm-muted);margin-top:5px;}\n    .pm-ebike select,.pm-ebike input[type=number]{\n      width:100%;padding:9px 11px;font-size:.92rem;font-family:inherit;color:var(--pm-ink);\n      background:#fff;border:1px solid var(--pm-line);border-radius:10px;outline:none;transition:border-color .15s,box-shadow .15s;\n      -webkit-appearance:none;appearance:none;\n    }\n    .pm-ebike select{background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%236b7684' d='M6 8 0 0h12z'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;}\n    .pm-ebike select:focus,.pm-ebike input[type=number]:focus{border-color:var(--pm-brand);box-shadow:0 0 0 3px rgba(0,154,239,.15);}\n\n    .pm-ebike .pm-slider-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;}\n    .pm-ebike .pm-slider-top label{font-size:.82rem;font-weight:600;}\n    .pm-ebike .pm-slider-val{font-size:.88rem;font-weight:700;color:var(--pm-brand);}\n    .pm-ebike input[type=range]{width:100%;-webkit-appearance:none;appearance:none;height:6px;border-radius:6px;background:var(--pm-line);outline:none;}\n    .pm-ebike input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--pm-brand);border:3px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.25);cursor:pointer;}\n    .pm-ebike input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--pm-brand);border:3px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.25);cursor:pointer;}\n\n    .pm-ebike .pm-check{display:flex;align-items:center;gap:9px;cursor:pointer;font-size:.85rem;font-weight:600;}\n    .pm-ebike .pm-check input{width:18px;height:18px;accent-color:var(--pm-brand);cursor:pointer;}\n\n    .pm-ebike .pm-two{display:grid;grid-template-columns:1fr 1fr;gap:12px;}\n\n    \/* ===== Result hero ===== *\/\n    .pm-ebike .pm-hero{background:linear-gradient(135deg,#00263b 0%,#004b73 55%,var(--pm-brand-dark) 100%);color:#fff;border:none;border-radius:var(--pm-radius);padding:26px;display:grid;grid-template-columns:1fr;gap:20px;}\n    @media(min-width:560px){.pm-ebike .pm-hero{grid-template-columns:1fr 1fr;align-items:center;}}\n    .pm-ebike .pm-hero .pm-kicker{text-transform:uppercase;letter-spacing:.08em;font-size:.7rem;font-weight:700;color:var(--pm-brand-light);}\n    .pm-ebike .pm-hero .pm-big{font-size:clamp(3rem,2rem + 6vw,4.6rem);font-weight:800;line-height:1;letter-spacing:-.03em;margin-top:4px;}\n    .pm-ebike .pm-hero .pm-unit{font-size:1.15rem;font-weight:600;color:rgba(255,255,255,.75);margin-top:2px;}\n    .pm-ebike .pm-hero .pm-range-band{margin-top:14px;font-size:.86rem;color:rgba(255,255,255,.9);background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);border-radius:10px;padding:9px 12px;}\n    .pm-ebike .pm-hero .pm-range-band b{color:#fff;}\n\n    \/* ===== Gauge (SVG) ===== *\/\n    .pm-ebike .pm-gauge{position:relative;width:100%;max-width:260px;margin:0 auto;}\n    .pm-ebike .pm-gauge svg{width:100%;height:auto;display:block;overflow:visible;}\n    .pm-ebike .pm-gauge-center{position:absolute;left:0;right:0;bottom:6%;text-align:center;}\n    .pm-ebike .pm-gauge-center .g-num{font-size:1.6rem;font-weight:800;line-height:1;}\n    .pm-ebike .pm-gauge-center .g-lab{font-size:.66rem;letter-spacing:.05em;text-transform:uppercase;color:rgba(255,255,255,.7);}\n\n    \/* ===== Analysis panels ===== *\/\n    .pm-ebike .pm-panels{display:grid;grid-template-columns:1fr;gap:16px;margin-top:16px;}\n    @media(min-width:620px){.pm-ebike .pm-panels{grid-template-columns:1fr 1fr;}}\n    .pm-ebike .pm-panel h3{font-size:.95rem;font-weight:700;margin-bottom:4px;}\n    .pm-ebike .pm-panel .pm-sub{font-size:.74rem;color:var(--pm-muted);margin-bottom:16px;}\n\n    \/* Bars *\/\n    .pm-ebike .pm-bar-row{margin-bottom:13px;}\n    .pm-ebike .pm-bar-row:last-child{margin-bottom:0;}\n    .pm-ebike .pm-bar-top{display:flex;justify-content:space-between;font-size:.78rem;margin-bottom:5px;}\n    .pm-ebike .pm-bar-top .pm-bar-lab{font-weight:600;color:var(--pm-ink);}\n    .pm-ebike .pm-bar-top .pm-bar-num{color:var(--pm-muted);font-variant-numeric:tabular-nums;}\n    .pm-ebike .pm-bar-track{height:9px;border-radius:6px;background:var(--pm-bg);overflow:hidden;}\n    .pm-ebike .pm-bar-fill{height:100%;border-radius:6px;width:0;transition:width .45s cubic-bezier(.4,0,.2,1);}\n\n    \/* ===== Insight cards ===== *\/\n    .pm-ebike .pm-insights{display:grid;grid-template-columns:1fr;gap:12px;margin-top:16px;}\n    @media(min-width:620px){.pm-ebike .pm-insights{grid-template-columns:repeat(3,1fr);}}\n    .pm-ebike .pm-ins{border-radius:12px;padding:14px;border:1px solid;}\n    .pm-ebike .pm-ins h4{font-size:.8rem;font-weight:700;margin-bottom:4px;}\n    .pm-ebike .pm-ins p{font-size:.75rem;line-height:1.45;}\n    .pm-ebike .pm-ins.blue{background:#eaf6fe;border-color:#c7e7fb;}\n    .pm-ebike .pm-ins.blue h4{color:#0f6aa0;} .pm-ebike .pm-ins.blue p{color:#2b6f97;}\n    .pm-ebike .pm-ins.green{background:#e9f6f2;border-color:#c6e9df;}\n    .pm-ebike .pm-ins.green h4{color:#157a63;} .pm-ebike .pm-ins.green p{color:#2a7d69;}\n    .pm-ebike .pm-ins.amber{background:#fbf3e4;border-color:#f0e0bf;}\n    .pm-ebike .pm-ins.amber h4{color:#8a5d10;} .pm-ebike .pm-ins.amber p{color:#8a6a2a;}\n\n    \/* ===== Engineering note ===== *\/\n    .pm-ebike .pm-note{background:#12212b;color:#cfe0ea;border-radius:var(--pm-radius);padding:20px;margin-top:16px;}\n    .pm-ebike .pm-note h3{color:#fff;font-size:.98rem;font-weight:700;margin-bottom:6px;display:flex;gap:8px;align-items:center;}\n    .pm-ebike .pm-note p{font-size:.83rem;line-height:1.6;color:#a9c3d2;}\n    .pm-ebike .pm-note b{color:var(--pm-brand-light);}\n\n    \/* ===== Footer ===== *\/\n    .pm-ebike .pm-foot{margin-top:22px;padding-top:16px;border-top:1px solid var(--pm-line);text-align:center;color:var(--pm-muted);font-size:.72rem;}\n    .pm-ebike .pm-foot a{color:var(--pm-brand-dark);text-decoration:none;}\n  <\/style>\n\n  <header class=\"pm-head\">\n    <h1>Calculadora de Autonom\u00eda Real de tu E-Bike<\/h1>\n    <p>Olvida los kil\u00f3metros del cat\u00e1logo. Calcula la autonom\u00eda <strong>real<\/strong> seg\u00fan tu peso, el terreno, la temperatura y las condiciones de tu ruta, con un modelo de balance de potencia din\u00e1mico.<\/p>\n  <\/header>\n\n  <div class=\"pm-grid\">\n\n    <!-- ================= COLUMNA IZQUIERDA \u00b7 ENTRADAS ================= -->\n    <aside>\n      <div class=\"pm-card\">\n        <h2><span class=\"pm-ico\">\ud83d\udd0b<\/span> Bicicleta y bater\u00eda<\/h2>\n\n        <div class=\"pm-field\">\n          <label for=\"pm-wh\">Capacidad de la bater\u00eda (Wh)<\/label>\n          <input type=\"number\" id=\"pm-wh\" value=\"800\" min=\"100\" max=\"1500\" step=\"25\">\n          <p class=\"pm-hint\">Ej.: Bosch PowerTube 625 \/ 750 \/ 800 Wh<\/p>\n        <\/div>\n\n        <div class=\"pm-field\">\n          <label for=\"pm-biketype\">Tipo de bicicleta<\/label>\n          <select id=\"pm-biketype\">\n            <option value=\"urbana\">Urbana \/ Paseo<\/option>\n            <option value=\"plegable\">Plegable urbana<\/option>\n            <option value=\"hibrida\">H\u00edbrida \/ Trekking<\/option>\n            <option value=\"emtb\" selected>Monta\u00f1a (e-MTB)<\/option>\n            <option value=\"fat\">Fat \/ Cruiser<\/option>\n            <option value=\"cargo\">Cargo \/ Utility<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"pm-field\">\n          <label for=\"pm-mode\">Modo de asistencia<\/label>\n          <select id=\"pm-mode\">\n            <option value=\"eco\">Eco<\/option>\n            <option value=\"tour\" selected>Tour (mixto)<\/option>\n            <option value=\"sport\">Sport \/ eMTB<\/option>\n            <option value=\"turbo\">Turbo<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n\n      <div class=\"pm-card\">\n        <h2><span class=\"pm-ico\">\ud83d\udeb5<\/span> Ciclista y entorno<\/h2>\n\n        <div class=\"pm-field\">\n          <div class=\"pm-slider-top\">\n            <label for=\"pm-rider\">Peso ciclista + equipaje<\/label>\n            <span class=\"pm-slider-val\" id=\"pm-rider-val\">80 kg<\/span>\n          <\/div>\n          <input type=\"range\" id=\"pm-rider\" min=\"45\" max=\"160\" value=\"80\" step=\"1\">\n        <\/div>\n\n        <div class=\"pm-field\">\n          <label for=\"pm-terrain\">Perfil del terreno<\/label>\n          <select id=\"pm-terrain\">\n            <option value=\"flat\">Llano (asfalto \/ carril bici)<\/option>\n            <option value=\"rolling\" selected>Ondulado (colinas suaves)<\/option>\n            <option value=\"mountain_mid\">Monta\u00f1a \u00b7 nivel medio<\/option>\n            <option value=\"mountain_high\">Monta\u00f1a \u00b7 grandes desniveles (&gt;25%)<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"pm-two\">\n          <div class=\"pm-field\">\n            <label for=\"pm-tire\">Cubierta<\/label>\n            <select id=\"pm-tire\">\n              <option value=\"slick\" selected>Lisa \/ Slick<\/option>\n              <option value=\"mixed\">Mixta \/ Gravel<\/option>\n              <option value=\"knobby\">Tacos \/ Enduro<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"pm-field\">\n            <label for=\"pm-wind\">Viento de cara<\/label>\n            <select id=\"pm-wind\">\n              <option value=\"none\" selected>Sin viento<\/option>\n              <option value=\"moderate\">Moderado (~15 km\/h)<\/option>\n              <option value=\"strong\">Fuerte (&gt;25 km\/h)<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <div class=\"pm-field\">\n          <div class=\"pm-slider-top\">\n            <label for=\"pm-temp\">Temperatura exterior<\/label>\n            <span class=\"pm-slider-val\" id=\"pm-temp-val\">20 \u00b0C<\/span>\n          <\/div>\n          <input type=\"range\" id=\"pm-temp\" min=\"-10\" max=\"40\" value=\"20\" step=\"1\">\n        <\/div>\n\n        <div class=\"pm-field\">\n          <label class=\"pm-check\"><input type=\"checkbox\" id=\"pm-lights\"> Luces permanentes encendidas<\/label>\n          <p class=\"pm-hint\">Reserva un ~3% extra de bater\u00eda para iluminaci\u00f3n.<\/p>\n        <\/div>\n      <\/div>\n    <\/aside>\n\n    <!-- ================= COLUMNA DERECHA \u00b7 RESULTADOS ================= -->\n    <main>\n      <!-- HERO -->\n      <div class=\"pm-hero\">\n        <div>\n          <p class=\"pm-kicker\">Autonom\u00eda estimada real<\/p>\n          <div class=\"pm-big\" id=\"pm-result\">&#8212;<\/div>\n          <div class=\"pm-unit\">kil\u00f3metros<\/div>\n          <div class=\"pm-range-band\">\n            Rango seguro estimado: <b id=\"pm-range-min\">&#8212;<\/b> \u2013 <b id=\"pm-range-max\">&#8212;<\/b> km\n            <br><span style=\"opacity:.75\">Incluye reserva del BMS y margen de seguridad de \u00b110%.<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"pm-gauge\">\n          <svg viewBox=\"0 0 200 120\" aria-hidden=\"true\">\n            <path d=\"M15 110 A85 85 0 0 1 185 110\" fill=\"none\" stroke=\"rgba(255,255,255,.18)\" stroke-width=\"16\" stroke-linecap=\"round\"\/>\n            <path id=\"pm-gauge-arc\" d=\"M15 110 A85 85 0 0 1 185 110\" fill=\"none\" stroke=\"#33B6FF\" stroke-width=\"16\" stroke-linecap=\"round\"\/>\n          <\/svg>\n          <div class=\"pm-gauge-center\">\n            <div class=\"g-num\" id=\"pm-gauge-num\">&#8212;<\/div>\n            <div class=\"g-lab\">km<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- PANELS -->\n      <div class=\"pm-panels\">\n        <div class=\"pm-card pm-panel\">\n          <h3>\u00bfA d\u00f3nde va tu energ\u00eda?<\/h3>\n          <p class=\"pm-sub\">Reparto estimado del consumo (Wh\/km) por tipo de resistencia.<\/p>\n          <div id=\"pm-losses\"><\/div>\n        <\/div>\n        <div class=\"pm-card pm-panel\">\n          <h3>Salud del sistema<\/h3>\n          <p class=\"pm-sub\">Rendimiento actual de cada subsistema (100% = \u00f3ptimo).<\/p>\n          <div id=\"pm-eff\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- INSIGHTS -->\n      <div class=\"pm-insights\">\n        <div class=\"pm-ins blue\">\n          <h4>\u2744\ufe0f Efecto t\u00e9rmico<\/h4>\n          <p id=\"pm-ins-temp\"><\/p>\n        <\/div>\n        <div class=\"pm-ins green\">\n          <h4>\u2696\ufe0f Masa del sistema<\/h4>\n          <p id=\"pm-ins-mass\"><\/p>\n        <\/div>\n        <div class=\"pm-ins amber\">\n          <h4>\u26f0\ufe0f Terreno y pendiente<\/h4>\n          <p id=\"pm-ins-terrain\"><\/p>\n        <\/div>\n      <\/div>\n\n      <!-- ENGINEERING NOTE -->\n      <div class=\"pm-note\">\n        <h3>\ud83d\udca1 Nota de ingenier\u00eda: el factor motor<\/h3>\n        <p id=\"pm-note-text\"><\/p>\n      <\/div>\n    <\/main>\n  <\/div>\n\n  <footer class=\"pm-foot\">\n    <p>Estimaci\u00f3n orientativa basada en el modelo de balance de potencia din\u00e1mico (norma EN&nbsp;15194 y pruebas de campo independientes). Los valores reales var\u00edan seg\u00fan el estilo de conducci\u00f3n. \u00b7 <a href=\"https:\/\/pedalmoto.com\/blog\/\" target=\"_blank\" rel=\"noopener\">Pedalmoto<\/a><\/p>\n  <\/footer>\n\n  <script>\n  (function(){\n    \"use strict\";\n\n    \/* ===================================================================\n       CONSTANTES DEL MODELO\n       (Fuente: informe \"Modelado f\u00edsico-matem\u00e1tico de la autonom\u00eda real\")\n       =================================================================== *\/\n\n    \/\/ Consumo real (Wh\/km) por combinaci\u00f3n TERRENO \u00d7 MODO de asistencia.\n    \/\/ Calibrado contra los datos emp\u00edricos del informe para una e-MTB de 500 Wh\n    \/\/ (p. ej. monta\u00f1a\/eco 7,7-10 Wh\/km \u2192 50-65 km; monta\u00f1a\/turbo 12,5-16,6 \u2192 30-40 km).\n    \/\/ El modo domina sobre el terreno porque en Eco el ciclista aporta gran parte\n    \/\/ de la energ\u00eda de ascenso (~60%), mientras que en Turbo se acerca al l\u00edmite f\u00edsico.\n    var CONSUMO = {\n      flat:          { eco:5.0, tour:7.0,  sport:8.5,  turbo:10.5 },\n      rolling:       { eco:6.5, tour:9.0,  sport:11.0, turbo:13.0 },\n      mountain_mid:  { eco:8.0, tour:10.5, sport:12.0, turbo:13.0 },\n      mountain_high: { eco:9.0, tour:11.5, sport:13.0, turbo:14.5 }\n    };\n    \/\/ Factor por tipolog\u00eda de bici (referencia e-MTB = 1.0): rueda, dibujo y aerodin\u00e1mica medias.\n    var BIKE_F  = { urbana:0.80, plegable:0.85, hibrida:0.90, emtb:1.0, fat:1.20, cargo:1.25 };\n    \/\/ Peso medio de la bici (kg) por tipo, para el factor de masa.\n    var BIKE_KG = { urbana:22, plegable:20, hibrida:24, emtb:24, fat:30, cargo:35 };\n\n    \/\/ Sensibilidad del peso seg\u00fan terreno (k) para el factor de masa (suave: el terreno ya est\u00e1 en la matriz).\n    var TERRAIN_K = { flat:0.30, rolling:0.45, mountain_mid:0.55, mountain_high:0.70 };\n    \/\/ Reparto orientativo de la energ\u00eda de ascenso sobre el consumo total.\n    var GRAV_SHARE = { flat:0.0, rolling:0.22, mountain_mid:0.38, mountain_high:0.50 };\n    \/\/ P\u00e9rdidas t\u00e9rmicas\/transmisi\u00f3n del motor (fracci\u00f3n del consumo) seg\u00fan exigencia del terreno.\n    var MOTOR_LOSS = { flat:0.06, rolling:0.08, mountain_mid:0.10, mountain_high:0.12 };\n\n    \/\/ Fricci\u00f3n mec\u00e1nica por perfil de la cubierta (ajuste fino).\n    var TIRE_F    = { slick:1.0, mixed:1.05, knobby:1.10 };\n\n    \/\/ Componente aerodin\u00e1mico por viento de cara.\n    var WIND_F    = { none:1.0, moderate:1.12, strong:1.22 };\n\n    var MASA_REF  = 95;    \/\/ kg de referencia (ciclista 75 + bici 20)\n    var RESERVA_BMS  = 0.10;   \/\/ reserva permanente del BMS (5-15%)\n    var RESERVA_LUZ  = 0.03;   \/\/ reserva adicional si luces permanentes ON\n\n    \/* -------- Coeficientes por rangos -------- *\/\n    function tempFactor(t){                 \/\/ correcci\u00f3n por temperatura\n      if(t >= 20) return 1.0;\n      if(t >= 10) return 0.95;\n      if(t >= 0)  return 0.85;\n      return 0.70;\n    }\n\n    \/* ===================================================================\n       LECTURA DE CONTROLES + C\u00c1LCULO\n       =================================================================== *\/\n    var $ = function(id){ return document.getElementById(id); };\n\n    function calc(){\n      var wh      = parseFloat($('pm-wh').value) || 0;\n      var bike    = $('pm-biketype').value;\n      var mode    = $('pm-mode').value;\n      var rider   = parseInt($('pm-rider').value, 10);\n      var terrain = $('pm-terrain').value;\n      var tire    = $('pm-tire').value;\n      var wind    = $('pm-wind').value;\n      var temp    = parseInt($('pm-temp').value, 10);\n      var lights  = $('pm-lights').checked;\n\n      \/* ---- FASE 1 \u00b7 Energ\u00eda neta disponible (Wh) ---- *\/\n      var fTemp   = tempFactor(temp);\n      var reserva = RESERVA_BMS + (lights ? RESERVA_LUZ : 0);\n      var eNet    = wh * fTemp * (1 - reserva);\n\n      \/* ---- FASE 2 \u00b7 Consumo din\u00e1mico ajustado (Wh\/km) ---- *\/\n      var base    = CONSUMO[terrain][mode] * (BIKE_F[bike] || 1);\n      var totalMass = rider + (BIKE_KG[bike] || 22);\n      var k       = TERRAIN_K[terrain];\n      var fMass   = Math.max(0.7, 1 + ((totalMass - MASA_REF) \/ MASA_REF) * k);\n      var fTire   = TIRE_F[tire];\n      var fWind   = WIND_F[wind];\n\n      var consumo = base * fMass * fTire * fWind;\n\n      \/* ---- FASE 3 \u00b7 Autonom\u00eda ---- *\/\n      var km      = consumo > 0 ? eNet \/ consumo : 0;\n      var kmMin   = km * 0.9;\n      var kmMax   = km * 1.1;\n\n      \/* ---- Desglose del consumo total para el gr\u00e1fico (Wh\/km) ---- *\/\n      var motorShare = MOTOR_LOSS[terrain] || 0.08;\n      var eGrav = consumo * GRAV_SHARE[terrain];            \/\/ desnivel (gravedad)\n      var eAero = consumo * 0.25 * fWind;                   \/\/ aerodin\u00e1mica\n      var eMot  = consumo * motorShare;                    \/\/ p\u00e9rdidas t\u00e9rmicas motor\n      var eRod  = Math.max(0, consumo - eGrav - eAero - eMot); \/\/ rodadura + transmisi\u00f3n\n\n      render({\n        km:km, kmMin:kmMin, kmMax:kmMax,\n        losses:{ rod:eRod, aero:eAero, grav:eGrav, mot:eMot },\n        eff:{ quim:fTemp*100, term:(1 - motorShare)*100, mec:Math.min(100,(1\/fMass)*100) },\n        ctx:{ temp:temp, rider:rider, terrain:terrain, fMass:fMass }\n      });\n    }\n\n    \/* ===================================================================\n       RENDER\n       =================================================================== *\/\n    var GAUGE_LEN = 267;  \/\/ longitud aprox. del arco semicircular (r=85)\n\n    function render(r){\n      var kmR = Math.round(r.km);\n      $('pm-result').textContent  = isFinite(kmR) ? kmR : '--';\n      $('pm-gauge-num').textContent = isFinite(kmR) ? kmR : '--';\n      $('pm-range-min').textContent = Math.round(r.kmMin);\n      $('pm-range-max').textContent = Math.round(r.kmMax);\n\n      \/\/ Gauge: escala 0..150 km sobre el arco\n      var frac = Math.max(0, Math.min(1, r.km \/ 150));\n      var arc = $('pm-gauge-arc');\n      arc.style.strokeDasharray = GAUGE_LEN;\n      arc.style.strokeDashoffset = GAUGE_LEN * (1 - frac);\n      arc.style.transition = 'stroke-dashoffset .5s cubic-bezier(.4,0,.2,1)';\n      arc.setAttribute('stroke', frac < 0.25 ? '#ff6b6b' : (frac < 0.5 ? '#ffd166' : '#33B6FF'));\n\n      \/\/ Barras de p\u00e9rdidas\n      var L = r.losses;\n      var maxL = Math.max(L.rod, L.aero, L.grav, L.mot, 0.001);\n      $('pm-losses').innerHTML =\n        bar('Rodadura y transmisi\u00f3n', L.rod, maxL, '#009AEF') +\n        bar('Aerodin\u00e1mica',           L.aero, maxL, '#33B6FF') +\n        bar('Desnivel (gravedad)',    L.grav, maxL, '#1e967b') +\n        bar('P\u00e9rdidas del motor',     L.mot,  maxL, '#b7791f');\n\n      \/\/ Barras de eficiencia\n      var E = r.eff;\n      $('pm-eff').innerHTML =\n        effBar('Qu\u00edmica (temperatura)', E.quim) +\n        effBar('T\u00e9rmica del motor',      E.term) +\n        effBar('Mec\u00e1nica (peso)',        E.mec);\n\n      updateInsights(r.ctx);\n    }\n\n    function bar(label, val, max, color){\n      var pct = Math.max(2, (val \/ max) * 100);\n      return '<div class=\"pm-bar-row\"><div class=\"pm-bar-top\"><span class=\"pm-bar-lab\">'+label+\n        '<\/span><span class=\"pm-bar-num\">'+val.toFixed(1)+' Wh\/km<\/span><\/div>'+\n        '<div class=\"pm-bar-track\"><div class=\"pm-bar-fill\" style=\"width:'+pct+'%;background:'+color+'\"><\/div><\/div><\/div>';\n    }\n\n    function effBar(label, pct){\n      pct = Math.max(0, Math.min(100, pct));\n      var color = pct >= 90 ? '#1e967b' : (pct >= 70 ? '#b7791f' : '#d63031');\n      return '<div class=\"pm-bar-row\"><div class=\"pm-bar-top\"><span class=\"pm-bar-lab\">'+label+\n        '<\/span><span class=\"pm-bar-num\">'+Math.round(pct)+'%<\/span><\/div>'+\n        '<div class=\"pm-bar-track\"><div class=\"pm-bar-fill\" style=\"width:'+pct+'%;background:'+color+'\"><\/div><\/div><\/div>';\n    }\n\n    function updateInsights(c){\n      var t = $('pm-ins-temp'), m = $('pm-ins-mass'), d = $('pm-ins-terrain'), n = $('pm-note-text');\n\n      if(c.temp < 0)       t.textContent = 'Fr\u00edo extremo: la bater\u00eda puede perder hasta un 30% de capacidad por la viscosidad del electrolito. Gu\u00e1rdala en interior antes de salir.';\n      else if(c.temp < 10) t.textContent = 'Fr\u00edo: rendimiento reducido (~15%). Las celdas de litio rinden por debajo de su \u00f3ptimo.';\n      else if(c.temp < 20) t.textContent = 'Temperatura fresca: p\u00e9rdida leve de capacidad (~5%).';\n      else                 t.textContent = 'Temperatura \u00f3ptima para las celdas de litio. Sin penalizaci\u00f3n t\u00e9rmica.';\n\n      if(c.fMass > 1.25)      m.textContent = 'Carga elevada: alta demanda de par en subidas y m\u00e1s resistencia a la rodadura. El peso penaliza especialmente en monta\u00f1a.';\n      else if(c.fMass > 1.05) m.textContent = 'Peso por encima de la referencia (95 kg): impacto moderado en el consumo, sobre todo cuesta arriba.';\n      else                    m.textContent = 'Masa eficiente: bajo impacto en la resistencia a la rodadura y en las subidas.';\n\n      if(c.terrain === 'mountain_high') d.textContent = 'Alta monta\u00f1a (>25%): pendientes t\u00e9cnicas y desniveles severos disparan la demanda de par. Es el escenario m\u00e1s exigente para la bater\u00eda y donde m\u00e1s se nota el modo de asistencia.';\n      else if(c.terrain === 'mountain_mid') d.textContent = 'Monta\u00f1a de nivel medio: los desniveles sostenidos elevan de forma notable el consumo. Reserva bater\u00eda para las rampas m\u00e1s largas.';\n      else if(c.terrain === 'rolling') d.textContent = 'Terreno ondulado: las subidas cortas suman consumo, pero en las bajadas recuperas cadencia y alivias el motor.';\n      else                              d.textContent = 'Terreno llano: el motor apenas lucha contra la gravedad. La mayor parte de la energ\u00eda va a rodadura y aerodin\u00e1mica.';\n\n      n.textContent = 'El motor CENTRAL (mid-drive) que montan estas e-bikes se integra con el cambio: en subidas mantienes cadencia y el motor gira en su rango de m\u00e1xima eficiencia (>80%), evitando p\u00e9rdidas t\u00e9rmicas y exprimiendo cada vatio-hora de la bater\u00eda.';\n    }\n\n    \/* ===================================================================\n       LISTENERS + ETIQUETAS DE SLIDERS\n       =================================================================== *\/\n    $('pm-rider').addEventListener('input', function(){ $('pm-rider-val').textContent = this.value + ' kg'; });\n    $('pm-temp').addEventListener('input',  function(){ $('pm-temp-val').textContent  = this.value + ' \u00b0C'; });\n    \/\/ Al cambiar de tipo de bici, sugiere un modo\/consumo coherente (s\u00f3lo refresca).\n    var scope = document.getElementById('pm-ebike');\n    scope.querySelectorAll('input, select').forEach(function(el){\n      el.addEventListener('input', calc);\n      el.addEventListener('change', calc);\n    });\n\n    calc();\n  })();\n  <\/script>\n<\/section>\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Calculadora de Autonom\u00eda Real de tu E-Bike Olvida los kil\u00f3metros del cat\u00e1logo. Calcula la autonom\u00eda real seg\u00fan tu peso, el terreno, la temperatura y las condiciones de tu ruta, con un modelo de balance de potencia din\u00e1mico. \ud83d\udd0b Bicicleta y bater\u00eda Capacidad de la bater\u00eda (Wh) Ej.: Bosch PowerTube 625 \/ 750 \/ 800 Wh [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4,133],"tags":[],"class_list":["post-983","post","type-post","status-publish","format-standard","hentry","category-bicicleta-electrica","category-guias-de-compra-y-comparativas"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Calculadora de autonom\u00eda real de e-bike - Pedalmoto Blog<\/title>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculadora de autonom\u00eda real de e-bike - Pedalmoto Blog\" \/>\n<meta property=\"og:description\" content=\"Calculadora de Autonom\u00eda Real de tu E-Bike Olvida los kil\u00f3metros del cat\u00e1logo. Calcula la autonom\u00eda real seg\u00fan tu peso, el terreno, la temperatura y las condiciones de tu ruta, con un modelo de balance de potencia din\u00e1mico. \ud83d\udd0b Bicicleta y bater\u00eda Capacidad de la bater\u00eda (Wh) Ej.: Bosch PowerTube 625 \/ 750 \/ 800 Wh [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/\" \/>\n<meta property=\"og:site_name\" content=\"Pedalmoto Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Pedalmoto\/?locale=es_ES\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-06T06:54:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-06T12:00:29+00:00\" \/>\n<meta name=\"author\" content=\"Grupo Trevenque\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Grupo Trevenque\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculadora de autonom\u00eda real de e-bike - Pedalmoto Blog","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"es_ES","og_type":"article","og_title":"Calculadora de autonom\u00eda real de e-bike - Pedalmoto Blog","og_description":"Calculadora de Autonom\u00eda Real de tu E-Bike Olvida los kil\u00f3metros del cat\u00e1logo. Calcula la autonom\u00eda real seg\u00fan tu peso, el terreno, la temperatura y las condiciones de tu ruta, con un modelo de balance de potencia din\u00e1mico. \ud83d\udd0b Bicicleta y bater\u00eda Capacidad de la bater\u00eda (Wh) Ej.: Bosch PowerTube 625 \/ 750 \/ 800 Wh [&hellip;]","og_url":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/","og_site_name":"Pedalmoto Blog","article_publisher":"https:\/\/www.facebook.com\/Pedalmoto\/?locale=es_ES","article_published_time":"2026-07-06T06:54:09+00:00","article_modified_time":"2026-07-06T12:00:29+00:00","author":"Grupo Trevenque","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Grupo Trevenque","Est. reading time":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/#article","isPartOf":{"@id":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/"},"author":{"name":"Grupo Trevenque","@id":"https:\/\/pedalmoto.com\/blog\/#\/schema\/person\/33905b7304a90bc69d46b004252b0415"},"headline":"Calculadora de autonom\u00eda real de e-bike","datePublished":"2026-07-06T06:54:09+00:00","dateModified":"2026-07-06T12:00:29+00:00","mainEntityOfPage":{"@id":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/"},"wordCount":250,"commentCount":0,"publisher":{"@id":"https:\/\/pedalmoto.com\/blog\/#organization"},"articleSection":["Bicicleta el\u00e9ctrica","Gu\u00edas de compra y comparativas"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/","url":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/","name":"Calculadora de autonom\u00eda real de e-bike - Pedalmoto Blog","isPartOf":{"@id":"https:\/\/pedalmoto.com\/blog\/#website"},"datePublished":"2026-07-06T06:54:09+00:00","dateModified":"2026-07-06T12:00:29+00:00","breadcrumb":{"@id":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/pedalmoto.com\/blog\/calculadora-de-autonomia-real-de-e-bike\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/pedalmoto.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/pedalmoto.com\/blog\/"},{"@type":"ListItem","position":3,"name":"Calculadora de autonom\u00eda real de e-bike"}]},{"@type":"WebSite","@id":"https:\/\/pedalmoto.com\/blog\/#website","url":"https:\/\/pedalmoto.com\/blog\/","name":"Pedalmoto Blog","description":"","publisher":{"@id":"https:\/\/pedalmoto.com\/blog\/#organization"},"alternateName":"El blog de Pedalmoto","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pedalmoto.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/pedalmoto.com\/blog\/#organization","name":"Pedalmoto Blog","alternateName":"Pedalmoto","url":"https:\/\/pedalmoto.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/pedalmoto.com\/blog\/#\/schema\/logo\/image\/","url":"http:\/\/pedalmoto.com\/blog\/wp-content\/uploads\/2025\/03\/pedal-moto-logo-1679504248.png","contentUrl":"http:\/\/pedalmoto.com\/blog\/wp-content\/uploads\/2025\/03\/pedal-moto-logo-1679504248.png","width":298,"height":65,"caption":"Pedalmoto Blog"},"image":{"@id":"https:\/\/pedalmoto.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Pedalmoto\/?locale=es_ES","https:\/\/www.instagram.com\/pedalmoto\/?hl=es","https:\/\/www.tiktok.com\/@pedalmoto.bicicletas"]},{"@type":"Person","@id":"https:\/\/pedalmoto.com\/blog\/#\/schema\/person\/33905b7304a90bc69d46b004252b0415","name":"Grupo Trevenque","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/pedalmoto.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2806f2768ed478ac6129d455ec74e622?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2806f2768ed478ac6129d455ec74e622?s=96&d=mm&r=g","caption":"Grupo Trevenque"},"url":"https:\/\/pedalmoto.com\/blog\/author\/trevenque\/"}]}},"_links":{"self":[{"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/posts\/983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/comments?post=983"}],"version-history":[{"count":2,"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/posts\/983\/revisions"}],"predecessor-version":[{"id":988,"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/posts\/983\/revisions\/988"}],"wp:attachment":[{"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/media?parent=983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/categories?post=983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pedalmoto.com\/blog\/wp-json\/wp\/v2\/tags?post=983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}