{"id":8911,"date":"2026-08-15T10:46:13","date_gmt":"2026-08-15T08:46:13","guid":{"rendered":"https:\/\/www.softon.it\/wpress\/?page_id=8911"},"modified":"2026-08-21T13:06:21","modified_gmt":"2026-08-21T11:06:21","slug":"calcolo-resistenza-di-base-transistor-bjt","status":"publish","type":"page","link":"https:\/\/www.softon.it\/wpress\/calcolo-resistenza-di-base-transistor-bjt\/","title":{"rendered":"Calcolo della Resistenza di BASE del BJT"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column has-background is-layout-flow wp-block-column-is-layout-flow\" style=\"background-color:#00a63a;flex-basis:1%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:97%\">    <style>\n      \/* VARIABILI LOCALIZZATE SOLTANTO NELLA CALCOLATRICE *\/\n      .calc-container {\n        --bg-main: #1e1e2f;\n        --bg-card: #282a36;\n        --bg-input: #2d2d44;\n        --bg-input-focus: #363654;\n        --cyan: #00d2ff;\n        --green: #50fa7b;\n        --pink: #ff79c6;\n        --yellow: #f1fa8c;\n        --purple: #bd93f9;\n        --subtext: #8be9fd;\n        --text: #f8f8f2;\n        --border: #44475a;\n\n        width: 100%;\n        max-width: 640px;\n        background: var(--bg-main);\n        color: var(--text);\n        padding: 16px 20px;\n        border-radius: 14px;\n        box-shadow: 0 8px 30px rgba(0,0,0,0.5);\n        border: 1px solid #2e2e42;\n        margin: 0 auto;\n        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        box-sizing: border-box;\n      }\n\n      \/* RESET SICURO INTERNO *\/\n      .calc-container * {\n        box-sizing: border-box;\n      }\n\n      .calc-header {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        border-bottom: 2px solid #333;\n        padding-bottom: 8px;\n        margin-bottom: 16px;\n      }\n\n      .calc-title {\n        color: var(--cyan);\n        font-size: 1.35rem;\n        font-weight: bold;\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        margin: 0;\n      }\n\n      .type-selector {\n        display: flex;\n        gap: 8px;\n        background: var(--bg-card);\n        padding: 4px;\n        border-radius: 8px;\n        border: 1px solid var(--border);\n      }\n\n      .type-btn {\n        background: transparent;\n        border: none;\n        color: #aaa;\n        padding: 4px 12px;\n        font-weight: bold;\n        font-size: 0.85rem;\n        border-radius: 6px;\n        cursor: pointer;\n        transition: all 0.2s ease;\n      }\n\n      .type-btn.active-npn {\n        background: var(--cyan);\n        color: #121212;\n      }\n\n      .type-btn.active-pnp {\n        background: var(--pink);\n        color: #121212;\n      }\n\n      \/* GRID DI INPUT *\/\n      .calc-grid {\n        display: grid;\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        gap: 16px 28px;\n        margin-bottom: 16px;\n      }\n\n      .calc-group {\n        display: flex;\n        flex-direction: column;\n      }\n\n      .calc-group label {\n        font-size: 0.85rem;\n        font-weight: bold;\n        color: #fff;\n        margin-bottom: 3px;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n      }\n\n      .ds-tag {\n        background: var(--pink);\n        color: #121212;\n        font-size: 0.7rem;\n        font-family: monospace;\n        font-weight: bold;\n        padding: 1px 6px;\n        border-radius: 4px;\n      }\n      .ds-tag-cyan {\n        background: var(--cyan);\n        color: #121212;\n        font-size: 0.7rem;\n        font-family: monospace;\n        font-weight: bold;\n        padding: 1px 6px;\n        border-radius: 4px;\n      }\n      .ds-tag-yellow {\n        background: var(--yellow);\n        color: #121212;\n        font-size: 0.7rem;\n        font-family: monospace;\n        font-weight: bold;\n        padding: 1px 6px;\n        border-radius: 4px;\n      }\n\n      .calc-sublabel {\n        font-size: 0.72rem;\n        color: var(--subtext);\n        margin-bottom: 4px;\n        line-height: 1.1;\n      }\n\n      .calc-group input[type=number]::-webkit-inner-spin-button, \n      .calc-group input[type=number]::-webkit-outer-spin-button { \n        -webkit-appearance: none; \n        margin: 0; \n      }\n\n      .calc-group input[type=number] {\n        -moz-appearance: textfield;\n        background: var(--bg-input);\n        border: 1px solid #555;\n        color: #fff;\n        padding: 4px 8px;\n        height: 32px;\n        border-radius: 6px;\n        font-size: 0.95rem;\n        font-weight: bold;\n        width: 100%;\n        transition: background 0.2s, border-color 0.2s;\n      }\n\n      .calc-group input:focus {\n        border-color: var(--cyan);\n        outline: none;\n        background: var(--bg-input-focus);\n      }\n\n      \/* MOLTIPLICATORE SATURAZIONE *\/\n      .overdrive-options {\n        display: flex;\n        gap: 8px;\n        margin-top: 2px;\n      }\n\n      .overdrive-btn {\n        flex: 1;\n        background: var(--bg-input);\n        border: 1px solid #555;\n        color: #ccc;\n        padding: 5px 0;\n        font-size: 0.8rem;\n        font-weight: bold;\n        border-radius: 6px;\n        cursor: pointer;\n        text-align: center;\n        transition: all 0.2s;\n      }\n\n      .overdrive-btn.active {\n        background: var(--purple);\n        color: #121212;\n        border-color: var(--purple);\n      }\n\n      \/* BOTTONE CALCOLA *\/\n      .calc-btn-container {\n        margin: 14px 0;\n      }\n\n      .calc-btn {\n        width: 100%;\n        background: var(--cyan);\n        color: #121212;\n        border: none;\n        padding: 9px 12px;\n        font-size: 0.95rem;\n        font-weight: bold;\n        border-radius: 8px;\n        cursor: pointer;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        transition: background 0.2s ease, transform 0.1s ease;\n      }\n\n      .calc-btn:hover { background: var(--green); }\n      .calc-btn:active { transform: scale(0.99); }\n\n      \/* SCHEDA RISULTATI *\/\n      .calc-info-box {\n        background: var(--bg-card);\n        border: 1px solid var(--border);\n        border-radius: 8px;\n        padding: 12px;\n        margin-bottom: 14px;\n      }\n\n      .calc-info-title {\n        font-size: 0.8rem;\n        color: var(--purple);\n        text-transform: uppercase;\n        font-weight: bold;\n        margin-bottom: 8px;\n      }\n\n      .calc-info-row {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        font-size: 0.88rem;\n        margin-bottom: 5px;\n      }\n\n      .calc-info-val {\n        font-family: monospace;\n        font-weight: bold;\n        color: var(--yellow);\n        font-size: 0.95rem;\n      }\n\n      \/* BOX RISULTATO PRINCIPALE *\/\n      .calc-final-box {\n        background: #193549;\n        border: 2px solid var(--green);\n        border-radius: 10px;\n        padding: 14px;\n        text-align: center;\n        margin-bottom: 16px;\n      }\n\n      .calc-final-label {\n        font-size: 0.82rem;\n        color: #fff;\n        text-transform: uppercase;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        gap: 8px;\n      }\n\n      .calc-final-val {\n        font-size: 2.2rem;\n        font-weight: bold;\n        color: var(--green);\n        line-height: 1.1;\n        margin: 6px 0;\n      }\n\n      \/* NUOVO RESISTORE GRAFICO STILE MOSFET (THT CON REOFORI REALISTICI E CORPO DOG-BONE) *\/\n      .resistor-display {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        margin: 12px 0 8px 0;\n      }\n\n      .resistor-svg {\n        width: 240px;\n        height: 50px;\n        filter: drop-shadow(0px 3px 5px rgba(0,0,0,0.5));\n      }\n\n      .calc-range-val {\n        font-size: 0.88rem;\n        color: var(--yellow);\n        font-weight: bold;\n        margin-top: 6px;\n      }\n\n      .calc-final-sub {\n        font-size: 0.78rem;\n        color: var(--subtext);\n        margin-top: 4px;\n      }\n\n      \/* SCHEMATICO INTEGRATO CON SVG *\/\n      .calc-schema-container {\n        background: #181824;\n        padding: 12px;\n        border-radius: 8px;\n        border: 1px solid #333;\n      }\n\n      .schema-title {\n        font-size: 0.8rem;\n        color: var(--pink);\n        text-transform: uppercase;\n        font-weight: bold;\n        margin-bottom: 8px;\n        text-align: center;\n      }\n\n      .schema-svg {\n        width: 100%;\n        max-height: 170px;\n      }\n\n      .formula-footer {\n        margin-top: 10px;\n        padding-top: 8px;\n        border-top: 1px dashed var(--border);\n        font-size: 0.78rem;\n        color: #aaa;\n        display: flex;\n        justify-content: space-around;\n        font-family: monospace;\n      }\n\n      @media (max-width: 600px) {\n        .calc-container { padding: 14px; }\n        .calc-grid { grid-template-columns: 1fr; gap: 12px; }\n        .calc-header { flex-direction: column; align-items: flex-start; gap: 10px; }\n        .type-selector { width: 100%; justify-content: center; }\n        .calc-final-val { font-size: 1.8rem; }\n        .formula-footer { flex-direction: column; gap: 4px; align-items: center; }\n      }\n    <\/style>\n\n    <div class=\"calc-container\">\n      <!-- INTESTAZIONE -->\n      <div class=\"calc-header\">\n        <div class=\"calc-title\">\n          \u26a1 BJT Base Resistor Calculator\n        <\/div>\n        <div class=\"type-selector\">\n          <button type=\"button\" class=\"type-btn active-npn\" id=\"btn-npn\" onclick=\"setType('NPN')\">NPN<\/button>\n          <button type=\"button\" class=\"type-btn\" id=\"btn-pnp\" onclick=\"setType('PNP')\">PNP<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- INPUT GRID -->\n      <div class=\"calc-grid\">\n        <!-- TENSIONE DI COLLETTORE -->\n        <div class=\"calc-group\">\n          <label>Tensione di Collettore (V) <span class=\"ds-tag\">[Vc]<\/span><\/label>\n          <span class=\"calc-sublabel\">Alimentazione carico (es. 5V, 12V, 24V)<\/span>\n          <input type=\"number\" id=\"vc\" value=\"12\" step=\"0.1\" oninput=\"calcolaBJT()\">\n        <\/div>\n\n        <!-- RESISTENZA \/ CARICO COLLETTORE -->\n        <div class=\"calc-group\">\n          <label>Resistenza Collettore (\u03a9) <span class=\"ds-tag\">[Rc]<\/span><\/label>\n          <span class=\"calc-sublabel\">Resistenza del carico o rel\u00e8<\/span>\n          <input type=\"number\" id=\"rc\" value=\"330\" step=\"1\" oninput=\"calcolaBJT()\">\n        <\/div>\n\n        <!-- CORRENTE DI COLLETTORE -->\n        <div class=\"calc-group\">\n          <label>Corrente Collettore (mA) <span class=\"ds-tag-yellow\">[Ic]<\/span><\/label>\n          <span class=\"calc-sublabel\">Calcolata da Vc\/Rc o modificabile<\/span>\n          <input type=\"number\" id=\"ic_ma\" value=\"36.4\" step=\"0.1\" oninput=\"aggiornaDaIc()\">\n        <\/div>\n\n        <!-- GUADAGNO HFE -->\n        <div class=\"calc-group\">\n          <label>Guadagno Transistor <span class=\"ds-tag\">[hFE]<\/span><\/label>\n          <span class=\"calc-sublabel\">Da datasheet (es. BC337: ~100-250)<\/span>\n          <input type=\"number\" id=\"hfe\" value=\"160\" step=\"1\" oninput=\"calcolaBJT()\">\n        <\/div>\n\n        <!-- TENSIONE COMANDO BASE -->\n        <div class=\"calc-group\">\n          <label>Tensione di Base (V) <span class=\"ds-tag\">[Vb]<\/span><\/label>\n          <span class=\"calc-sublabel\">Segnale da Micro\/PLC (es. 3.3V, 5V)<\/span>\n          <input type=\"number\" id=\"vb\" value=\"5\" step=\"0.1\" oninput=\"calcolaBJT()\">\n        <\/div>\n\n        <!-- FATTORE DI SATURAZIONE -->\n        <div class=\"calc-group\">\n          <label>Fattore Saturazione <span class=\"ds-tag-cyan\">[Overdrive]<\/span><\/label>\n          <span class=\"calc-sublabel\">Moltiplicatore Ib per sicurezza commutazione<\/span>\n          <div class=\"overdrive-options\">\n            <button type=\"button\" class=\"overdrive-btn\" id=\"od-1\" onclick=\"setOverdrive(1)\">x1<\/button>\n            <button type=\"button\" class=\"overdrive-btn active\" id=\"od-3\" onclick=\"setOverdrive(3)\">x3<\/button>\n            <button type=\"button\" class=\"overdrive-btn\" id=\"od-5\" onclick=\"setOverdrive(5)\">x5<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"calc-btn-container\">\n        <button class=\"calc-btn\" onclick=\"calcolaBJT()\">CALCOLA RESISTENZA DI BASE<\/button>\n      <\/div>\n\n      <!-- SCONTRINO VALORI DERIVATI -->\n      <div class=\"calc-info-box\">\n        <div class=\"calc-info-title\">\ud83d\udcca Analisi delle Correnti e Potenza:<\/div>\n        <div class=\"calc-info-row\">\n          <span>Corrente di Base Teorica (Ic \/ hFE):<\/span>\n          <span class=\"calc-info-val\" id=\"val_ib_teorica\">227.5 \u00b5A<\/span>\n        <\/div>\n        <div class=\"calc-info-row\">\n          <span>Corrente di Base con Saturation Factor <span class=\"ds-tag-cyan\">[Ib]<\/span>:<\/span>\n          <span class=\"calc-info-val\" id=\"val_ib_reale\">682.5 \u00b5A<\/span>\n        <\/div>\n        <div class=\"calc-info-row\">\n          <span>Potenza Dissipata su Rb:<\/span>\n          <span class=\"calc-info-val\" id=\"val_prb\">2.93 mW<\/span>\n        <\/div>\n        <div class=\"calc-info-row\">\n          <span>Potenza Dissipata sul Carico Rc:<\/span>\n          <span class=\"calc-info-val\" id=\"val_prc\">0.44 W<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- RISULTATO BANCO E COMMERCIALI -->\n      <div class=\"calc-final-box\">\n        <div class=\"calc-final-label\">\n          \ud83d\uded2 Resistenza di Base Commerciale Consigliata <span class=\"ds-tag-yellow\">[Rb]<\/span>\n        <\/div>\n        <div class=\"calc-final-val\" id=\"res_commerciale\">6.2 k\u03a9<\/div>\n\n        <!-- NUOVO RESISTORE GRAFICO REALISTICO CON REOFORI (SVG DEDICATO) -->\n        <div class=\"resistor-display\">\n          <svg class=\"resistor-svg\" viewBox=\"0 0 240 50\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n            <defs>\n              <!-- Sfumatura del corpo ceramico beige -->\n              <linearGradient id=\"bodyGrad\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n                <stop offset=\"0%\" stop-color=\"#e8cf9b\"\/>\n                <stop offset=\"20%\" stop-color=\"#f5e1b8\"\/>\n                <stop offset=\"50%\" stop-color=\"#d1b275\"\/>\n                <stop offset=\"85%\" stop-color=\"#a6884e\"\/>\n                <stop offset=\"100%\" stop-color=\"#7a6232\"\/>\n              <\/linearGradient>\n\n              <!-- Sfumatura metallica reofori -->\n              <linearGradient id=\"leadGrad\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n                <stop offset=\"0%\" stop-color=\"#888\"\/>\n                <stop offset=\"40%\" stop-color=\"#eee\"\/>\n                <stop offset=\"70%\" stop-color=\"#aaa\"\/>\n                <stop offset=\"100%\" stop-color=\"#555\"\/>\n              <\/linearGradient>\n            <\/defs>\n\n            <!-- Reofori Sinistro e Destro (Piedini in metallo) -->\n            <rect x=\"0\" y=\"23\" width=\"60\" height=\"4\" fill=\"url(#leadGrad)\" rx=\"1\"\/>\n            <rect x=\"180\" y=\"23\" width=\"60\" height=\"4\" fill=\"url(#leadGrad)\" rx=\"1\"\/>\n\n            <!-- Cappucci terminali metallici -->\n            <rect x=\"55\" y=\"19\" width=\"8\" height=\"12\" fill=\"url(#leadGrad)\" rx=\"2\"\/>\n            <rect x=\"177\" y=\"19\" width=\"8\" height=\"12\" fill=\"url(#leadGrad)\" rx=\"2\"\/>\n\n            <!-- Corpo Principale Resistore THT (Sagoma Osso \/ Dog-Bone) -->\n            <!-- Estremit\u00e0 Sinistra Arrotondata -->\n            <rect x=\"60\" y=\"11\" width=\"16\" height=\"28\" fill=\"url(#bodyGrad)\" rx=\"6\"\/>\n            <!-- Corpo Centrale Stretto -->\n            <rect x=\"72\" y=\"14\" width=\"96\" height=\"22\" fill=\"url(#bodyGrad)\"\/>\n            <!-- Estremit\u00e0 Destra Arrotondata -->\n            <rect x=\"164\" y=\"11\" width=\"16\" height=\"28\" fill=\"url(#bodyGrad)\" rx=\"6\"\/>\n\n            <!-- Anelli Colorati (Bande di Codice Colore) -->\n            <rect id=\"svg-band1\" x=\"78\" y=\"14\" width=\"7\" height=\"22\" fill=\"#000\"\/>\n            <rect id=\"svg-band2\" x=\"98\" y=\"14\" width=\"7\" height=\"22\" fill=\"#000\"\/>\n            <rect id=\"svg-band3\" x=\"118\" y=\"14\" width=\"7\" height=\"22\" fill=\"#000\"\/>\n            <rect id=\"svg-band4\" x=\"148\" y=\"14\" width=\"7\" height=\"22\" fill=\"#d4af37\"\/> <!-- Oro 5% -->\n\n            <!-- Riflesso Lucido Superiore sul corpo -->\n            <path d=\"M 64,13 Q 120,16 176,13\" stroke=\"rgba(255,255,255,0.4)\" stroke-width=\"2\" fill=\"none\"\/>\n          <\/svg>\n        <\/div>\n\n        <div class=\"calc-range-val\" id=\"res_esatta\">Valore Calcolato Esatto: 6300 \u03a9 (6.3 k\u03a9)<\/div>\n        <div class=\"calc-final-sub\" id=\"res_potenza\">Potenza Consigliata: 1\/4W (THT a strato \/ SMD 0805)<\/div>\n      <\/div>\n\n      <!-- SCHEMATICO INTERATTIVO CON SVG PERFETTAMENTO ALLINEATI -->\n      <div class=\"calc-schema-container\">\n        <div class=\"schema-title\" id=\"schema-header\">Schema di Collegamento NPN (Switch Low-Side)<\/div>\n        <svg class=\"schema-svg\" id=\"schema-svg\" viewBox=\"0 0 320 140\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n          <!-- SVG renderizzato dinamicamente via JS -->\n        <\/svg>\n\n        <div class=\"formula-footer\">\n          <span>Ic = Vc \/ Rc<\/span>\n          <span>Ib = (Ic \/ hFE) \u00d7 Molt<\/span>\n          <span>Rb = (Vb - 0.7V) \/ Ib<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n      const e24 = [\n        1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,\n        3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1\n      ];\n\n      const colorCodes = {\n        0: \"#000000\", \/\/ Nero\n        1: \"#8B4513\", \/\/ Marrone\n        2: \"#FF0000\", \/\/ Rosso\n        3: \"#FFA500\", \/\/ Arancione\n        4: \"#FFFF00\", \/\/ Giallo\n        5: \"#008000\", \/\/ Verde\n        6: \"#0000FF\", \/\/ Blu\n        7: \"#8A2BE2\", \/\/ Viola\n        8: \"#808080\", \/\/ Grigio\n        9: \"#FFFFFF\"  \/\/ Bianco\n      };\n\n      let bjtType = 'NPN';\n      let overdriveFactor = 3;\n\n      function setType(type) {\n        bjtType = type;\n        document.getElementById('btn-npn').className = type === 'NPN' ? 'type-btn active-npn' : 'type-btn';\n        document.getElementById('btn-pnp').className = type === 'PNP' ? 'type-btn active-pnp' : 'type-btn';\n        calcolaBJT();\n      }\n\n      function setOverdrive(factor) {\n        overdriveFactor = factor;\n        [1, 3, 5].forEach(f => {\n          document.getElementById('od-' + f).className = f === factor ? 'overdrive-btn active' : 'overdrive-btn';\n        });\n        calcolaBJT();\n      }\n\n      function trovaE24Infe(val) {\n        if (val <= 0) return 1;\n        let exp = Math.floor(Math.log10(val));\n        let scale = Math.pow(10, exp);\n        let norm = val \/ scale;\n        \n        let target = e24[0];\n        for (let i = 0; i < e24.length; i++) {\n          if (e24[i] <= norm + 0.05) {\n            target = e24[i];\n          } else {\n            break;\n          }\n        }\n        return Math.round(target * scale);\n      }\n\n      function formatResistance(val) {\n        if (val >= 1000000) return (val \/ 1000000).toFixed(1) + \" M\u03a9\";\n        if (val >= 1000) return (val \/ 1000).toFixed(1) + \" k\u03a9\";\n        return val.toFixed(0) + \" \u03a9\";\n      }\n\n      function aggiornaColoriResistore(val) {\n        if (val <= 0) return;\n        let exp = Math.floor(Math.log10(val));\n        let digits = Math.round(val \/ Math.pow(10, exp - 1));\n\n        let d1 = Math.floor(digits \/ 10);\n        let d2 = digits % 10;\n        let mult = exp - 1;\n\n        if (d1 > 9) d1 = 9;\n        if (d2 > 9) d2 = 9;\n\n        document.getElementById('svg-band1').setAttribute('fill', colorCodes[d1] || '#000');\n        document.getElementById('svg-band2').setAttribute('fill', colorCodes[d2] || '#000');\n        document.getElementById('svg-band3').setAttribute('fill', colorCodes[mult] || '#000');\n      }\n\n      function aggiornaDaIc() {\n        const vc = parseFloat(document.getElementById('vc').value) || 0;\n        const ic_ma = parseFloat(document.getElementById('ic_ma').value) || 0;\n        \n        if (ic_ma > 0 && vc > 0) {\n          const rc = (vc \/ (ic_ma \/ 1000));\n          document.getElementById('rc').value = rc.toFixed(0);\n        }\n        calcolaBJT();\n      }\n\n      function calcolaBJT() {\n        const vc = parseFloat(document.getElementById('vc').value) || 0;\n        const rc = parseFloat(document.getElementById('rc').value) || 0.001;\n        const hfe = parseFloat(document.getElementById('hfe').value) || 1;\n        const vb = parseFloat(document.getElementById('vb').value) || 0;\n        const vbe = 0.7;\n\n        const ic_A = vc \/ rc;\n        const ic_mA = ic_A * 1000;\n        document.getElementById('ic_ma').value = ic_mA.toFixed(1);\n\n        const ib_teorica_A = ic_A \/ hfe;\n        const ib_reale_A = ib_teorica_A * overdriveFactor;\n\n        let rb_esatta = 0;\n        if (vb > vbe && ib_reale_A > 0) {\n          rb_esatta = (vb - vbe) \/ ib_reale_A;\n        }\n\n        const rb_comm = trovaE24Infe(rb_esatta);\n\n        const p_rb = Math.pow(ib_reale_A, 2) * rb_comm;\n        const p_rc = Math.pow(ic_A, 2) * rc;\n\n        document.getElementById('val_ib_teorica').innerText = (ib_teorica_A * 1e6).toFixed(1) + \" \u00b5A\";\n        document.getElementById('val_ib_reale').innerText = (ib_reale_A * 1e6).toFixed(1) + \" \u00b5A (\" + (ib_reale_A * 1000).toFixed(2) + \" mA)\";\n        document.getElementById('val_prb').innerText = (p_rb < 0.001) ? (p_rb * 1000000).toFixed(1) + \" \u00b5W\" : (p_rb * 1000).toFixed(2) + \" mW\";\n        document.getElementById('val_prc').innerText = p_rc.toFixed(2) + \" W\";\n\n        document.getElementById('res_commerciale').innerText = formatResistance(rb_comm);\n        document.getElementById('res_esatta').innerText = \"Valore Calcolato Esatto: \" + rb_esatta.toFixed(1) + \" \u03a9 (\" + (rb_esatta \/ 1000).toFixed(2) + \" k\u03a9)\";\n\n        let p_str = \"Potenza Consigliata: 1\/4W (THT a strato \/ SMD 0805)\";\n        if (p_rb > 0.25) {\n          p_str = \"\u26a0\ufe0f Potenza su Rb elevata: \" + (p_rb).toFixed(2) + \"W \u2794 Utilizzare resistore da 1\/2W o 1W\";\n        }\n        document.getElementById('res_potenza').innerText = p_str;\n\n        aggiornaColoriResistore(rb_comm);\n        disegnaSchema(vc, vb, rc, rb_comm);\n      }\n\n      function disegnaSchema(vc, vb, rc, rb) {\n        const svg = document.getElementById('schema-svg');\n        const header = document.getElementById('schema-header');\n\n        if (bjtType === 'NPN') {\n          header.innerText = `Schema di Collegamento NPN (Low-Side Switch) - Carico a Vc (${vc}V)`;\n          svg.innerHTML = `\n            <!-- VCC e Carico -->\n            <circle cx=\"240\" cy=\"12\" r=\"3.5\" fill=\"#ff5555\" \/>\n            <text x=\"248\" y=\"15\" fill=\"#ff5555\" font-size=\"10\" font-weight=\"bold\">+Vc (${vc}V)<\/text>\n            <line x1=\"240\" y1=\"15\" x2=\"240\" y2=\"30\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            \n            <!-- Resistenza Collettore Rc -->\n            <rect x=\"232\" y=\"30\" width=\"16\" height=\"26\" fill=\"#2d2d44\" stroke=\"#50fa7b\" stroke-width=\"1.5\" \/>\n            <text x=\"240\" y=\"46\" fill=\"#50fa7b\" font-size=\"8\" text-anchor=\"middle\">Rc ${rc}\u03a9<\/text>\n            <line x1=\"240\" y1=\"56\" x2=\"240\" y2=\"65\" stroke=\"#fff\" stroke-width=\"2\" \/>\n\n            <!-- BJT NPN Symbol -->\n            <circle cx=\"215\" cy=\"75\" r=\"18\" fill=\"none\" stroke=\"#00d2ff\" stroke-width=\"2\" \/>\n            <line x1=\"207\" y1=\"63\" x2=\"207\" y2=\"87\" stroke=\"#00d2ff\" stroke-width=\"3\" \/>\n            \n            <!-- Connessioni Base, Collettore, Emettitore -->\n            <line x1=\"170\" y1=\"75\" x2=\"207\" y2=\"75\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"207\" y1=\"68\" x2=\"240\" y2=\"65\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"207\" y1=\"82\" x2=\"240\" y2=\"100\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            \n            <!-- Freccia Emettitore NPN (uscente) -->\n            <polygon points=\"228,98 238,100 232,90\" fill=\"#00d2ff\" \/>\n\n            <!-- GND -->\n            <line x1=\"240\" y1=\"100\" x2=\"240\" y2=\"112\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"228\" y1=\"112\" x2=\"252\" y2=\"112\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"232\" y1=\"116\" x2=\"248\" y2=\"116\" stroke=\"#fff\" stroke-width=\"1.5\" \/>\n            <line x1=\"236\" y1=\"120\" x2=\"244\" y2=\"120\" stroke=\"#fff\" stroke-width=\"1\" \/>\n\n            <!-- Comando Base e Rb -->\n            <circle cx=\"25\" cy=\"75\" r=\"3.5\" fill=\"#8be9fd\" \/>\n            <text x=\"25\" y=\"63\" fill=\"#8be9fd\" font-size=\"10\" text-anchor=\"middle\">Vb (${vb}V)<\/text>\n            <line x1=\"28\" y1=\"75\" x2=\"70\" y2=\"75\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            \n            <!-- Resistenza Base Rb -->\n            <rect x=\"70\" y=\"66\" width=\"55\" height=\"18\" fill=\"#2d2d44\" stroke=\"#f1fa8c\" stroke-width=\"1.5\" \/>\n            <text x=\"97\" y=\"78\" fill=\"#f1fa8c\" font-size=\"8.5\" text-anchor=\"middle\" font-weight=\"bold\">Rb ${formatResistance(rb)}<\/text>\n            <line x1=\"125\" y1=\"75\" x2=\"207\" y2=\"75\" stroke=\"#fff\" stroke-width=\"2\" \/>\n          `;\n        } else {\n          header.innerText = `Schema di Collegamento PNP (High-Side Switch) - Carico a Massa`;\n          svg.innerHTML = `\n            <!-- VCC -->\n            <circle cx=\"240\" cy=\"12\" r=\"3.5\" fill=\"#ff5555\" \/>\n            <text x=\"248\" y=\"15\" fill=\"#ff5555\" font-size=\"10\" font-weight=\"bold\">+Vc (${vc}V)<\/text>\n            <line x1=\"240\" y1=\"15\" x2=\"240\" y2=\"50\" stroke=\"#fff\" stroke-width=\"2\" \/>\n\n            <!-- BJT PNP Symbol -->\n            <circle cx=\"215\" cy=\"68\" r=\"18\" fill=\"none\" stroke=\"#ff79c6\" stroke-width=\"2\" \/>\n            <line x1=\"207\" y1=\"56\" x2=\"207\" y2=\"80\" stroke=\"#ff79c6\" stroke-width=\"3\" \/>\n            \n            <!-- Base, Emettitore (In alto), Collettore (In basso) -->\n            <line x1=\"170\" y1=\"68\" x2=\"207\" y2=\"68\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"207\" y1=\"60\" x2=\"240\" y2=\"50\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"207\" y1=\"76\" x2=\"240\" y2=\"86\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            \n            <!-- Freccia Emettitore PNP (entrante verso la base) -->\n            <polygon points=\"220,53 210,59 218,63\" fill=\"#ff79c6\" \/>\n\n            <!-- Resistenza Collettore e Carico -->\n            <line x1=\"240\" y1=\"86\" x2=\"240\" y2=\"92\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <rect x=\"232\" y=\"92\" width=\"16\" height=\"24\" fill=\"#2d2d44\" stroke=\"#50fa7b\" stroke-width=\"1.5\" \/>\n            <text x=\"240\" y=\"107\" fill=\"#50fa7b\" font-size=\"8\" text-anchor=\"middle\">Rc ${rc}\u03a9<\/text>\n\n            <!-- GND -->\n            <line x1=\"240\" y1=\"116\" x2=\"240\" y2=\"124\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"228\" y1=\"124\" x2=\"252\" y2=\"124\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            <line x1=\"232\" y1=\"128\" x2=\"248\" y2=\"128\" stroke=\"#fff\" stroke-width=\"1.5\" \/>\n            <line x1=\"236\" y1=\"132\" x2=\"244\" y2=\"132\" stroke=\"#fff\" stroke-width=\"1\" \/>\n\n            <!-- Comando Base e Rb -->\n            <circle cx=\"25\" cy=\"68\" r=\"3.5\" fill=\"#8be9fd\" \/>\n            <text x=\"25\" y=\"56\" fill=\"#8be9fd\" font-size=\"10\" text-anchor=\"middle\">Vb (${vb}V)<\/text>\n            <line x1=\"28\" y1=\"68\" x2=\"70\" y2=\"68\" stroke=\"#fff\" stroke-width=\"2\" \/>\n            \n            <!-- Resistenza Base Rb -->\n            <rect x=\"70\" y=\"59\" width=\"55\" height=\"18\" fill=\"#2d2d44\" stroke=\"#f1fa8c\" stroke-width=\"1.5\" \/>\n            <text x=\"97\" y=\"71\" fill=\"#f1fa8c\" font-size=\"8.5\" text-anchor=\"middle\" font-weight=\"bold\">Rb ${formatResistance(rb)}<\/text>\n            <line x1=\"125\" y1=\"68\" x2=\"207\" y2=\"68\" stroke=\"#fff\" stroke-width=\"2\" \/>\n          `;\n        }\n      }\n\n      \/\/ Esecuzione immediata al caricamento\n      calcolaBJT();\n    <\/script>\n    \n\n\n\n<style>\n  \/* VARIABILI LOCALIZZATE SOLTANTO NELLA CALCOLATRICE *\/\n  .calc-container {\n    --bg-main: #1e1e2f;\n    --bg-card: #282a36;\n    --bg-input: #2d2d44;\n    --bg-input-focus: #363654;\n    --cyan: #00d2ff;\n    --green: #50fa7b;\n    --pink: #ff79c6;\n    --yellow: #f1fa8c;\n    --purple: #bd93f9;\n    --subtext: #8be9fd;\n    --text: #f8f8f2;\n    --border: #44475a;\n\n    width: 100%;\n    max-width: 640px;\n    background: var(--bg-main);\n    color: var(--text);\n    padding: 16px 20px;\n    border-radius: 14px;\n    box-shadow: 0 8px 30px rgba(0,0,0,0.5);\n    border: 1px solid #2e2e42;\n    margin: 0 auto;\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    box-sizing: border-box;\n  }\n\n  \/* RESET SICURO: SI APPLICA SOLO AGLI ELEMENTI INTERNI ALLA CALCOLATRICE *\/\n  .calc-container * {\n    box-sizing: border-box;\n  }\n\n  .calc-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    border-bottom: 2px solid #333;\n    padding-bottom: 8px;\n    margin-bottom: 16px;\n  }\n\n  .calc-title {\n    color: var(--cyan);\n    font-size: 1.35rem;\n    font-weight: bold;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin: 0;\n  }\n\n  .type-selector {\n    display: flex;\n    gap: 8px;\n    background: var(--bg-card);\n    padding: 4px;\n    border-radius: 8px;\n    border: 1px solid var(--border);\n  }\n\n  .type-btn {\n    background: transparent;\n    border: none;\n    color: #aaa;\n    padding: 4px 12px;\n    font-weight: bold;\n    font-size: 0.85rem;\n    border-radius: 6px;\n    cursor: pointer;\n    transition: all 0.2s ease;\n  }\n\n  .type-btn.active-npn {\n    background: var(--cyan);\n    color: #121212;\n  }\n\n  .type-btn.active-pnp {\n    background: var(--pink);\n    color: #121212;\n  }\n\n  \/* GRID DI INPUT *\/\n  .calc-grid {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 16px 28px;\n    margin-bottom: 16px;\n  }\n\n  .calc-group {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .calc-group label {\n    font-size: 0.85rem;\n    font-weight: bold;\n    color: #fff;\n    margin-bottom: 3px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n  }\n\n  .ds-tag {\n    background: var(--pink);\n    color: #121212;\n    font-size: 0.7rem;\n    font-family: monospace;\n    font-weight: bold;\n    padding: 1px 6px;\n    border-radius: 4px;\n  }\n  .ds-tag-cyan {\n    background: var(--cyan);\n    color: #121212;\n    font-size: 0.7rem;\n    font-family: monospace;\n    font-weight: bold;\n    padding: 1px 6px;\n    border-radius: 4px;\n  }\n  .ds-tag-yellow {\n    background: var(--yellow);\n    color: #121212;\n    font-size: 0.7rem;\n    font-family: monospace;\n    font-weight: bold;\n    padding: 1px 6px;\n    border-radius: 4px;\n  }\n\n  .calc-sublabel {\n    font-size: 0.72rem;\n    color: var(--subtext);\n    margin-bottom: 4px;\n    line-height: 1.1;\n  }\n\n  .input-with-unit {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n  }\n\n  .calc-group input[type=number]::-webkit-inner-spin-button, \n  .calc-group input[type=number]::-webkit-outer-spin-button { \n    -webkit-appearance: none; \n    margin: 0; \n  }\n\n  .calc-group input[type=number] {\n    -moz-appearance: textfield;\n    background: var(--bg-input);\n    border: 1px solid #555;\n    color: #fff;\n    padding: 4px 8px;\n    height: 32px;\n    border-radius: 6px;\n    font-size: 0.95rem;\n    font-weight: bold;\n    width: 100%;\n    transition: background 0.2s, border-color 0.2s;\n  }\n\n  .calc-group input:focus {\n    border-color: var(--cyan);\n    outline: none;\n    background: var(--bg-input-focus);\n  }\n\n  \/* MOLTIPLICATORE SATURAZIONE *\/\n  .overdrive-options {\n    display: flex;\n    gap: 8px;\n    margin-top: 2px;\n  }\n\n  .overdrive-btn {\n    flex: 1;\n    background: var(--bg-input);\n    border: 1px solid #555;\n    color: #ccc;\n    padding: 5px 0;\n    font-size: 0.8rem;\n    font-weight: bold;\n    border-radius: 6px;\n    cursor: pointer;\n    text-align: center;\n    transition: all 0.2s;\n  }\n\n  .overdrive-btn.active {\n    background: var(--purple);\n    color: #121212;\n    border-color: var(--purple);\n  }\n\n  \/* BOTTONE CALCOLA *\/\n  .calc-btn-container {\n    margin: 14px 0;\n  }\n\n  .calc-btn {\n    width: 100%;\n    background: var(--cyan);\n    color: #121212;\n    border: none;\n    padding: 9px 12px;\n    font-size: 0.95rem;\n    font-weight: bold;\n    border-radius: 8px;\n    cursor: pointer;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    transition: background 0.2s ease, transform 0.1s ease;\n  }\n\n  .calc-btn:hover { background: var(--green); }\n  .calc-btn:active { transform: scale(0.99); }\n\n  \/* SCHEDA RISULTATI E PASSI *\/\n  .calc-info-box {\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    border-radius: 8px;\n    padding: 12px;\n    margin-bottom: 14px;\n  }\n\n  .calc-info-title {\n    font-size: 0.8rem;\n    color: var(--purple);\n    text-transform: uppercase;\n    font-weight: bold;\n    margin-bottom: 8px;\n  }\n\n  .calc-info-row {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    font-size: 0.88rem;\n    margin-bottom: 5px;\n  }\n\n  .calc-info-val {\n    font-family: monospace;\n    font-weight: bold;\n    color: var(--yellow);\n    font-size: 0.95rem;\n  }\n\n  \/* BOX RISULTATO PRINCIPALE BANCO *\/\n  .calc-final-box {\n    background: #193549;\n    border: 2px solid var(--green);\n    border-radius: 10px;\n    padding: 14px;\n    text-align: center;\n    margin-bottom: 16px;\n  }\n\n  .calc-final-label {\n    font-size: 0.82rem;\n    color: #fff;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 8px;\n  }\n\n  .calc-final-val {\n    font-size: 2.2rem;\n    font-weight: bold;\n    color: var(--green);\n    line-height: 1.1;\n    margin: 6px 0;\n  }\n\n  \/* RESISTORE GRAFICO AD ANELLI *\/\n  .resistor-display {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    margin: 10px 0 6px 0;\n  }\n\n  .resistor-body {\n    width: 140px;\n    height: 30px;\n    background: #d1b280;\n    border-radius: 12px;\n    position: relative;\n    display: flex;\n    justify-content: space-evenly;\n    align-items: center;\n    border: 2px solid #a88958;\n    box-shadow: inset 0 2px 4px rgba(255,255,255,0.4), inset 0 -2px 4px rgba(0,0,0,0.4);\n  }\n\n  .resistor-body::before, .resistor-body::after {\n    content: '';\n    position: absolute;\n    top: 50%;\n    width: 40px;\n    height: 4px;\n    background: #aaa;\n    transform: translateY(-50%);\n    z-index: -1;\n  }\n\n  .resistor-body::before { right: 100%; }\n  .resistor-body::after { left: 100%; }\n\n  .band {\n    width: 8px;\n    height: 100%;\n  }\n\n  .calc-range-val {\n    font-size: 0.88rem;\n    color: var(--yellow);\n    font-weight: bold;\n    margin-top: 6px;\n  }\n\n  .calc-final-sub {\n    font-size: 0.78rem;\n    color: var(--subtext);\n    margin-top: 4px;\n  }\n\n  \/* SCHEMATICO INTEGRATO CON SVG *\/\n  .calc-schema-container {\n    background: #181824;\n    padding: 12px;\n    border-radius: 8px;\n    border: 1px solid #333;\n  }\n\n  .schema-title {\n    font-size: 0.8rem;\n    color: var(--pink);\n    text-transform: uppercase;\n    font-weight: bold;\n    margin-bottom: 8px;\n    text-align: center;\n  }\n\n  .schema-svg {\n    width: 100%;\n    max-height: 170px;\n  }\n\n  .formula-footer {\n    margin-top: 10px;\n    padding-top: 8px;\n    border-top: 1px dashed var(--border);\n    font-size: 0.78rem;\n    color: #aaa;\n    display: flex;\n    justify-content: space-around;\n    font-family: monospace;\n  }\n\n  @media (max-width: 600px) {\n    .calc-container { padding: 14px; }\n    .calc-grid { grid-template-columns: 1fr; gap: 12px; }\n    .calc-header { flex-direction: column; align-items: flex-start; gap: 10px; }\n    .type-selector { width: 100%; justify-content: center; }\n    .calc-final-val { font-size: 1.8rem; }\n    .formula-footer { flex-direction: column; gap: 4px; align-items: center; }\n  }\n<\/style>\n\n\n\n<div class=\"calc-container\">\n  <!-- INTESTAZIONE -->\n  <div class=\"calc-header\">\n    <div class=\"calc-title\">\n      \u26a1 BJT Base Resistor Calculator\n    <\/div>\n    <div class=\"type-selector\">\n      <button type=\"button\" class=\"type-btn active-npn\" id=\"btn-npn\" onclick=\"setType('NPN')\">NPN<\/button>\n      <button type=\"button\" class=\"type-btn\" id=\"btn-pnp\" onclick=\"setType('PNP')\">PNP<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- INPUT GRID -->\n  <div class=\"calc-grid\">\n    <!-- TENSIONE DI COLLETTORE -->\n    <div class=\"calc-group\">\n      <label>Tensione di Collettore (V) <span class=\"ds-tag\">[Vc]<\/span><\/label>\n      <span class=\"calc-sublabel\">Alimentazione carico (es. 5V, 12V, 24V)<\/span>\n      <input type=\"number\" id=\"vc\" value=\"12\" step=\"0.1\" oninput=\"calcolaBJT()\">\n    <\/div>\n\n    <!-- RESISTENZA \/ CARICO COLLETTORE -->\n    <div class=\"calc-group\">\n      <label>Resistenza Collettore (\u03a9) <span class=\"ds-tag\">[Rc]<\/span><\/label>\n      <span class=\"calc-sublabel\">Resistenza del carico o rel\u00e8<\/span>\n      <input type=\"number\" id=\"rc\" value=\"330\" step=\"1\" oninput=\"calcolaBJT()\">\n    <\/div>\n\n    <!-- CORRENTE DI COLLETTORE (AUTO O MANUALE) -->\n    <div class=\"calc-group\">\n      <label>Corrente Collettore (mA) <span class=\"ds-tag-yellow\">[Ic]<\/span><\/label>\n      <span class=\"calc-sublabel\">Calcolata da Vc\/Rc o modificabile<\/span>\n      <input type=\"number\" id=\"ic_ma\" value=\"36.4\" step=\"0.1\" oninput=\"aggiornaDaIc()\">\n    <\/div>\n\n    <!-- GUADAGNO HFE \/ GAIN -->\n    <div class=\"calc-group\">\n      <label>Guadagno Transistor <span class=\"ds-tag\">[hFE]<\/span><\/label>\n      <span class=\"calc-sublabel\">Da datasheet (es. BC337: ~100-250)<\/span>\n      <input type=\"number\" id=\"hfe\" value=\"160\" step=\"1\" oninput=\"calcolaBJT()\">\n    <\/div>\n\n    <!-- TENSIONE COMANDO BASE -->\n    <div class=\"calc-group\">\n      <label>Tensione di Base (V) <span class=\"ds-tag\">[Vb]<\/span><\/label>\n      <span class=\"calc-sublabel\">Segnale da Micro\/PLC (es. 3.3V, 5V)<\/span>\n      <input type=\"number\" id=\"vb\" value=\"5\" step=\"0.1\" oninput=\"calcolaBJT()\">\n    <\/div>\n\n    <!-- FATTORE DI SATURAZIONE -->\n    <div class=\"calc-group\">\n      <label>Fattore Saturazione <span class=\"ds-tag-cyan\">[Overdrive]<\/span><\/label>\n      <span class=\"calc-sublabel\">Moltiplicatore Ib per sicurezza commutazione<\/span>\n      <div class=\"overdrive-options\">\n        <button type=\"button\" class=\"overdrive-btn\" id=\"od-1\" onclick=\"setOverdrive(1)\">x1<\/button>\n        <button type=\"button\" class=\"overdrive-btn active\" id=\"od-3\" onclick=\"setOverdrive(3)\">x3<\/button>\n        <button type=\"button\" class=\"overdrive-btn\" id=\"od-5\" onclick=\"setOverdrive(5)\">x5<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"calc-btn-container\">\n    <button class=\"calc-btn\" onclick=\"calcolaBJT()\">CALCOLA RESISTENZA DI BASE<\/button>\n  <\/div>\n\n  <!-- SCONTRINO VALORI DERIVATI -->\n  <div class=\"calc-info-box\">\n    <div class=\"calc-info-title\">\ud83d\udcca Analisi delle Correnti e Potenza:<\/div>\n    <div class=\"calc-info-row\">\n      <span>Corrente di Base Teorica (Ic \/ hFE):<\/span>\n      <span class=\"calc-info-val\" id=\"val_ib_teorica\">227.5 \u00b5A<\/span>\n    <\/div>\n    <div class=\"calc-info-row\">\n      <span>Corrente di Base con Saturation Factor <span class=\"ds-tag-cyan\">[Ib]<\/span>:<\/span>\n      <span class=\"calc-info-val\" id=\"val_ib_reale\">682.5 \u00b5A<\/span>\n    <\/div>\n    <div class=\"calc-info-row\">\n      <span>Potenza Dissipata su Rb:<\/span>\n      <span class=\"calc-info-val\" id=\"val_prb\">2.93 mW<\/span>\n    <\/div>\n    <div class=\"calc-info-row\">\n      <span>Potenza Dissipata sul Carico Rc:<\/span>\n      <span class=\"calc-info-val\" id=\"val_prc\">0.44 W<\/span>\n    <\/div>\n  <\/div>\n\n  <!-- RISULTATO BANCO E COMMERCIALI -->\n  <div class=\"calc-final-box\">\n    <div class=\"calc-final-label\">\n      \ud83d\uded2 Resistenza di Base Commerciale Consigliata <span class=\"ds-tag-yellow\">[Rb]<\/span>\n    <\/div>\n    <div class=\"calc-final-val\" id=\"res_commerciale\">6.2 k\u03a9<\/div>\n\n    <!-- RESISTORE GRAFICO DINAMICO -->\n    <div class=\"resistor-display\">\n      <div class=\"resistor-body\">\n        <div class=\"band\" id=\"band1\" style=\"background:#000;\"><\/div>\n        <div class=\"band\" id=\"band2\" style=\"background:#000;\"><\/div>\n        <div class=\"band\" id=\"band3\" style=\"background:#000;\"><\/div>\n        <div class=\"band\" id=\"band4\" style=\"background:#d4af37;\"><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"calc-range-val\" id=\"res_esatta\">Valore Calcolato Esatto: 6300 \u03a9 (6.3 k\u03a9)<\/div>\n    <div class=\"calc-final-sub\" id=\"res_potenza\">Potenza Consigliata: 1\/4W (THT a strato \/ SMD 0805)<\/div>\n  <\/div>\n\n  <!-- SCHEMATICO INTERATTIVO CON SVG PERFETTAMENTO ALLINEATI -->\n  <div class=\"calc-schema-container\">\n    <div class=\"schema-title\" id=\"schema-header\">Schema di Collegamento NPN (Switch Low-Side)<\/div>\n    <svg class=\"schema-svg\" id=\"schema-svg\" viewBox=\"0 0 320 140\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n      <!-- SVG renderizzato dinamicamente via JS -->\n    <\/svg>\n\n    <div class=\"formula-footer\">\n      <span>Ic = Vc \/ Rc<\/span>\n      <span>Ib = (Ic \/ hFE) \u00d7 Molt<\/span>\n      <span>Rb = (Vb &#8211; 0.7V) \/ Ib<\/span>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n  \/\/ Tabelle colori resistori E24\n  const e24 = [\n    1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,\n    3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1\n  ];\n\n  const colorCodes = {\n    0: \"#000000\", \/\/ Nero\n    1: \"#8B4513\", \/\/ Marrone\n    2: \"#FF0000\", \/\/ Rosso\n    3: \"#FFA500\", \/\/ Arancione\n    4: \"#FFFF00\", \/\/ Giallo\n    5: \"#008000\", \/\/ Verde\n    6: \"#0000FF\", \/\/ Blu\n    7: \"#8A2BE2\", \/\/ Viola\n    8: \"#808080\", \/\/ Grigio\n    9: \"#FFFFFF\"  \/\/ Bianco\n  };\n\n  let bjtType = 'NPN';\n  let overdriveFactor = 3;\n\n  function setType(type) {\n    bjtType = type;\n    document.getElementById('btn-npn').className = type === 'NPN' ? 'type-btn active-npn' : 'type-btn';\n    document.getElementById('btn-pnp').className = type === 'PNP' ? 'type-btn active-pnp' : 'type-btn';\n    calcolaBJT();\n  }\n\n  function setOverdrive(factor) {\n    overdriveFactor = factor;\n    [1, 3, 5].forEach(f => {\n      document.getElementById('od-' + f).className = f === factor ? 'overdrive-btn active' : 'overdrive-btn';\n    });\n    calcolaBJT();\n  }\n\n  function trovaE24Infe(val) {\n    if (val <= 0) return 1;\n    let exp = Math.floor(Math.log10(val));\n    let scale = Math.pow(10, exp);\n    let norm = val \/ scale;\n    \n    let target = e24[0];\n    for (let i = 0; i < e24.length; i++) {\n      if (e24[i] <= norm + 0.05) {\n        target = e24[i];\n      } else {\n        break;\n      }\n    }\n    return Math.round(target * scale);\n  }\n\n  function formatResistance(val) {\n    if (val >= 1000000) return (val \/ 1000000).toFixed(1) + \" M\u03a9\";\n    if (val >= 1000) return (val \/ 1000).toFixed(1) + \" k\u03a9\";\n    return val.toFixed(0) + \" \u03a9\";\n  }\n\n  function aggiornaColoriResistore(val) {\n    if (val <= 0) return;\n    let exp = Math.floor(Math.log10(val));\n    let digits = Math.round(val \/ Math.pow(10, exp - 1));\n\n    let d1 = Math.floor(digits \/ 10);\n    let d2 = digits % 10;\n    let mult = exp - 1;\n\n    if (d1 > 9) d1 = 9;\n    if (d2 > 9) d2 = 9;\n\n    document.getElementById('band1').style.background = colorCodes[d1] || '#000';\n    document.getElementById('band2').style.background = colorCodes[d2] || '#000';\n    document.getElementById('band3').style.background = colorCodes[mult] || '#000';\n  }\n\n  function aggiornaDaIc() {\n    const vc = parseFloat(document.getElementById('vc').value) || 0;\n    const ic_ma = parseFloat(document.getElementById('ic_ma').value) || 0;\n    \n    if (ic_ma > 0 && vc > 0) {\n      const rc = (vc \/ (ic_ma \/ 1000));\n      document.getElementById('rc').value = rc.toFixed(0);\n    }\n    calcolaBJT();\n  }\n\n  function calcolaBJT() {\n    const vc = parseFloat(document.getElementById('vc').value) || 0;\n    const rc = parseFloat(document.getElementById('rc').value) || 0.001;\n    const hfe = parseFloat(document.getElementById('hfe').value) || 1;\n    const vb = parseFloat(document.getElementById('vb').value) || 0;\n    const vbe = 0.7;\n\n    const ic_A = vc \/ rc;\n    const ic_mA = ic_A * 1000;\n    document.getElementById('ic_ma').value = ic_mA.toFixed(1);\n\n    const ib_teorica_A = ic_A \/ hfe;\n    const ib_reale_A = ib_teorica_A * overdriveFactor;\n\n    let rb_esatta = 0;\n    if (vb > vbe && ib_reale_A > 0) {\n      rb_esatta = (vb - vbe) \/ ib_reale_A;\n    }\n\n    const rb_comm = trovaE24Infe(rb_esatta);\n\n    const p_rb = Math.pow(ib_reale_A, 2) * rb_comm;\n    const p_rc = Math.pow(ic_A, 2) * rc;\n\n    document.getElementById('val_ib_teorica').innerText = (ib_teorica_A * 1e6).toFixed(1) + \" \u00b5A\";\n    document.getElementById('val_ib_reale').innerText = (ib_reale_A * 1e6).toFixed(1) + \" \u00b5A (\" + (ib_reale_A * 1000).toFixed(2) + \" mA)\";\n    document.getElementById('val_prb').innerText = (p_rb < 0.001) ? (p_rb * 1000000).toFixed(1) + \" \u00b5W\" : (p_rb * 1000).toFixed(2) + \" mW\";\n    document.getElementById('val_prc').innerText = p_rc.toFixed(2) + \" W\";\n\n    document.getElementById('res_commerciale').innerText = formatResistance(rb_comm);\n    document.getElementById('res_esatta').innerText = \"Valore Calcolato Esatto: \" + rb_esatta.toFixed(1) + \" \u03a9 (\" + (rb_esatta \/ 1000).toFixed(2) + \" k\u03a9)\";\n\n    let p_str = \"Potenza Consigliata: 1\/4W (THT a strato \/ SMD 0805)\";\n    if (p_rb > 0.25) {\n      p_str = \"\u26a0\ufe0f Potenza su Rb elevata: \" + (p_rb).toFixed(2) + \"W \u2794 Utilizzare resistore da 1\/2W o 1W\";\n    }\n    document.getElementById('res_potenza').innerText = p_str;\n\n    aggiornaColoriResistore(rb_comm);\n    disegnaSchema(vc, vb, rc, rb_comm);\n  }\n\n  function disegnaSchema(vc, vb, rc, rb) {\n    const svg = document.getElementById('schema-svg');\n    const header = document.getElementById('schema-header');\n\n    if (bjtType === 'NPN') {\n      header.innerText = `Schema di Collegamento NPN (Low-Side Switch) - Carico a Vc (${vc}V)`;\n      svg.innerHTML = `\n        <!-- VCC e Carico -->\n        <circle cx=\"240\" cy=\"12\" r=\"3.5\" fill=\"#ff5555\" \/>\n        <text x=\"248\" y=\"15\" fill=\"#ff5555\" font-size=\"10\" font-weight=\"bold\">+Vc (${vc}V)<\/text>\n        <line x1=\"240\" y1=\"155\" x2=\"240\" y2=\"30\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        \n        <!-- Resistenza Collettore Rc -->\n        <rect x=\"232\" y=\"30\" width=\"16\" height=\"26\" fill=\"#2d2d44\" stroke=\"#50fa7b\" stroke-width=\"1.5\" \/>\n        <text x=\"240\" y=\"46\" fill=\"#50fa7b\" font-size=\"8\" text-anchor=\"middle\">Rc ${rc}\u03a9<\/text>\n        <line x1=\"240\" y1=\"56\" x2=\"240\" y2=\"65\" stroke=\"#fff\" stroke-width=\"2\" \/>\n\n        <!-- BJT NPN Symbol -->\n        <circle cx=\"215\" cy=\"75\" r=\"18\" fill=\"none\" stroke=\"#00d2ff\" stroke-width=\"2\" \/>\n        <line x1=\"207\" y1=\"63\" x2=\"207\" y2=\"87\" stroke=\"#00d2ff\" stroke-width=\"3\" \/>\n        \n        <!-- Connessioni Base, Collettore, Emettitore -->\n        <line x1=\"170\" y1=\"75\" x2=\"207\" y2=\"75\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"207\" y1=\"68\" x2=\"240\" y2=\"65\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"207\" y1=\"82\" x2=\"240\" y2=\"100\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        \n        <!-- Freccia Emettitore NPN (uscente) -->\n        <polygon points=\"228,98 238,100 232,90\" fill=\"#00d2ff\" \/>\n\n        <!-- GND -->\n        <line x1=\"240\" y1=\"100\" x2=\"240\" y2=\"112\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"228\" y1=\"112\" x2=\"252\" y2=\"112\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"232\" y1=\"116\" x2=\"248\" y2=\"116\" stroke=\"#fff\" stroke-width=\"1.5\" \/>\n        <line x1=\"236\" y1=\"120\" x2=\"244\" y2=\"120\" stroke=\"#fff\" stroke-width=\"1\" \/>\n\n        <!-- Comando Base e Rb -->\n        <circle cx=\"25\" cy=\"75\" r=\"3.5\" fill=\"#8be9fd\" \/>\n        <text x=\"25\" y=\"63\" fill=\"#8be9fd\" font-size=\"10\" text-anchor=\"middle\">Vb (${vb}V)<\/text>\n        <line x1=\"28\" y1=\"75\" x2=\"70\" y2=\"75\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        \n        <!-- Resistenza Base Rb -->\n        <rect x=\"70\" y=\"66\" width=\"55\" height=\"18\" fill=\"#2d2d44\" stroke=\"#f1fa8c\" stroke-width=\"1.5\" \/>\n        <text x=\"97\" y=\"78\" fill=\"#f1fa8c\" font-size=\"8.5\" text-anchor=\"middle\" font-weight=\"bold\">Rb ${formatResistance(rb)}<\/text>\n        <line x1=\"125\" y1=\"75\" x2=\"207\" y2=\"75\" stroke=\"#fff\" stroke-width=\"2\" \/>\n      `;\n    } else {\n      header.innerText = `Schema di Collegamento PNP (High-Side Switch) - Carico a Massa`;\n      svg.innerHTML = `\n        <!-- VCC -->\n        <circle cx=\"240\" cy=\"12\" r=\"3.5\" fill=\"#ff5555\" \/>\n        <text x=\"248\" y=\"15\" fill=\"#ff5555\" font-size=\"10\" font-weight=\"bold\">+Vc (${vc}V)<\/text>\n        <line x1=\"240\" y1=\"15\" x2=\"240\" y2=\"50\" stroke=\"#fff\" stroke-width=\"2\" \/>\n\n        <!-- BJT PNP Symbol -->\n        <circle cx=\"215\" cy=\"68\" r=\"18\" fill=\"none\" stroke=\"#ff79c6\" stroke-width=\"2\" \/>\n        <line x1=\"207\" y1=\"56\" x2=\"207\" y2=\"80\" stroke=\"#ff79c6\" stroke-width=\"3\" \/>\n        \n        <!-- Base, Emettitore (In alto), Collettore (In basso) -->\n        <line x1=\"170\" y1=\"68\" x2=\"207\" y2=\"68\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"207\" y1=\"60\" x2=\"240\" y2=\"50\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"207\" y1=\"76\" x2=\"240\" y2=\"86\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        \n        <!-- Freccia Emettitore PNP (entrante verso la base) -->\n        <polygon points=\"220,53 210,59 218,63\" fill=\"#ff79c6\" \/>\n\n        <!-- Resistenza Collettore e Carico -->\n        <line x1=\"240\" y1=\"86\" x2=\"240\" y2=\"92\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <rect x=\"232\" y=\"92\" width=\"16\" height=\"24\" fill=\"#2d2d44\" stroke=\"#50fa7b\" stroke-width=\"1.5\" \/>\n        <text x=\"240\" y=\"107\" fill=\"#50fa7b\" font-size=\"8\" text-anchor=\"middle\">Rc ${rc}\u03a9<\/text>\n\n        <!-- GND -->\n        <line x1=\"240\" y1=\"116\" x2=\"240\" y2=\"124\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"228\" y1=\"124\" x2=\"252\" y2=\"124\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        <line x1=\"232\" y1=\"128\" x2=\"248\" y2=\"128\" stroke=\"#fff\" stroke-width=\"1.5\" \/>\n        <line x1=\"236\" y1=\"132\" x2=\"244\" y2=\"132\" stroke=\"#fff\" stroke-width=\"1\" \/>\n\n        <!-- Comando Base e Rb -->\n        <circle cx=\"25\" cy=\"68\" r=\"3.5\" fill=\"#8be9fd\" \/>\n        <text x=\"25\" y=\"56\" fill=\"#8be9fd\" font-size=\"10\" text-anchor=\"middle\">Vb (${vb}V)<\/text>\n        <line x1=\"28\" y1=\"68\" x2=\"70\" y2=\"68\" stroke=\"#fff\" stroke-width=\"2\" \/>\n        \n        <!-- Resistenza Base Rb -->\n        <rect x=\"70\" y=\"59\" width=\"55\" height=\"18\" fill=\"#2d2d44\" stroke=\"#f1fa8c\" stroke-width=\"1.5\" \/>\n        <text x=\"97\" y=\"71\" fill=\"#f1fa8c\" font-size=\"8.5\" text-anchor=\"middle\" font-weight=\"bold\">Rb ${formatResistance(rb)}<\/text>\n        <line x1=\"125\" y1=\"68\" x2=\"207\" y2=\"68\" stroke=\"#fff\" stroke-width=\"2\" \/>\n      `;\n    }\n  }\n\n  \/\/ Calcolo Iniziale\n  calcolaBJT();\n<\/script>\n<\/div>\n\n\n\n<div class=\"wp-block-column has-background is-layout-flow wp-block-column-is-layout-flow\" style=\"background-color:#fd2600;flex-basis:1%\"><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u26a1 BJT Base Resistor Calculator NPN PNP Tensione di Collettore (V) [Vc] Alimentazione carico (es. 5V, 12V, 24V) Resistenza Collettore (\u03a9) [Rc] Resistenza del carico o rel\u00e8 Corrente Collettore (mA) [Ic] Calcolata da Vc\/Rc o modificabile Guadagno Transistor [hFE] Da datasheet (es. BC337: ~100-250) Tensione di Base (V) [Vb] Segnale da Micro\/PLC (es. 3.3V, 5V)&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-8911","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/pages\/8911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/comments?post=8911"}],"version-history":[{"count":14,"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/pages\/8911\/revisions"}],"predecessor-version":[{"id":9050,"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/pages\/8911\/revisions\/9050"}],"wp:attachment":[{"href":"https:\/\/www.softon.it\/wpress\/wp-json\/wp\/v2\/media?parent=8911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}