feat(phys10 ch3 wave4): §22 «Напряжение» + §23 «Конденсаторы»

This commit is contained in:
Maxim Dolgolyov
2026-05-29 17:41:19 +03:00
parent a24c334730
commit 774b54afc8
+674 -12
View File
@@ -2798,34 +2798,696 @@ function build_p21(){
function build_p22(){
const box = document.getElementById('p22-body');
let html = '';
html += makeCard('theory', "Разность потенциалов. Напряжение", "§22", `
<p><b>Разность потенциалов. Напряжение</b> — этот параграф в разработке (Phase 1+).</p>
<p>Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «алгебры 11» — таблицы, симуляции, ползунки, drag-and-drop и автопроверяемые тренажёры.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.92rem">
<b>Phase 0:</b> создан скелет учебника. <b>Phase 3+:</b> наполнение этого § содержанием по учебнику «Физика 10» (Беларусь, 2019).
</p>
/* THEORY 1 — Разность потенциалов и напряжение */
html += makeCard('theory', "Разность потенциалов и напряжение", "§22", `
<p><b>Напряжение</b> $U$ между двумя точками 1 и 2 электростатического поля — это <b>разность потенциалов</b> этих точек:</p>
<p style="text-align:center;margin:10px 0">$$U_{12} = \\varphi_1 - \\varphi_2$$</p>
<p><b>Единица измерения:</b> <b>Вольт</b> (В) $= 1$ Дж / 1 Кл.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px">$1$ В — это напряжение, при котором поле совершает работу $1$ Дж при переносе заряда $1$ Кл из одной точки в другую.</p>
<p style="margin-top:10px"><b>Работа поля</b> при перемещении заряда $q$ из точки 1 в точку 2:</p>
<p style="text-align:center;margin:10px 0">$$A_{12} = q U_{12} = q(\\varphi_1 - \\varphi_2)$$</p>
<p>Если $A > 0$ — поле помогает перемещению. Если $A < 0$ — поле сопротивляется (нужно работать против поля).</p>
<p style="margin-top:10px">Напряжение измеряется <b>вольтметром</b> (подключается между двумя точками).</p>
`);
/* THEORY 2 — Связь U и E в однородном поле */
html += makeCard('rule', "Связь напряжения с напряжённостью", "§22", `
<p>В <b>однородном поле</b> (например, между обкладок плоского конденсатора) напряжение и напряжённость связаны формулой:</p>
<p style="text-align:center;margin:10px 0">$$U = E \\cdot d$$</p>
<p>где:</p>
<ul style="margin:6px 0 6px 18px">
<li>$U$ — напряжение в В</li>
<li>$E$ — напряжённость в В/м</li>
<li>$d$ — расстояние между точками <b>вдоль направления $\\vec{E}$</b>, в м</li>
</ul>
<p>Если перемещение перпендикулярно $\\vec{E}$ — напряжение между точками равно нулю.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--warn-bg,#fef3c7);border-left:4px solid var(--warn,#f59e0b);border-radius:9px">Эта формула — главный инструмент для расчётов в однородных полях: конденсаторы, поле над поверхностью, поле между параллельными пластинами.</p>
<p style="margin-top:10px">Отсюда удобная форма для напряжённости: $E = U/d$ — поэтому единица $\\vec{E}$ — <b>В/м</b>.</p>
`);
/* THEORY 3 — Эквипотенциальные поверхности */
html += makeCard('example', "Эквипотенциальные поверхности", "§22", `
<p><b>Эквипотенциальная поверхность</b> — поверхность, на которой потенциал во всех точках одинаков ($\\varphi = $ const).</p>
<p><b>Свойства:</b></p>
<ul style="margin:6px 0 6px 18px">
<li>Силовые линии $\\vec{E}$ <b>перпендикулярны</b> эквипотенциальным поверхностям.</li>
<li>Работа поля при перемещении вдоль эквипотенциальной поверхности <b>равна нулю</b>: $\\Delta\\varphi = 0 \\Rightarrow A = q\\Delta\\varphi = 0$.</li>
<li>В <b>однородном поле</b> эквипотенциальные поверхности — параллельные плоскости.</li>
<li>Вокруг <b>точечного заряда</b> — концентрические сферы.</li>
<li>Поверхность <b>проводника</b> — эквипотенциальная (в электростатике).</li>
</ul>
<p style="padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;margin:10px 0"><b>Пример.</b> Между параллельными пластинами заряженного конденсатора эквипотенциальные поверхности — плоскости, параллельные пластинам. Чем ближе к положительной пластине — тем выше $\\varphi$.</p>
`);
/* INTERACTIVE 1 — Связь U и E в однородном поле */
html += `<div class="wg" id="p22-iv1">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 1</span><div class="wg-title">Связь $U$ и $E$ в однородном поле</div></div>
<div class="wg-help">Меняй напряжение $U$ и расстояние $d$ между пластинами. Наблюдай $E = U/d$ — ширина стрелок $\\vec{E}$ пропорциональна напряжённости.</div>
<div class="sliders">
<label>$U$: <b id="p22-iv1-UL">100</b> В <input type="range" id="p22-iv1-U" min="10" max="500" value="100" step="10"></label>
<label>$d$: <b id="p22-iv1-dL">0.05</b> м <input type="range" id="p22-iv1-d" min="0.01" max="0.20" value="0.05" step="0.01"></label>
</div>
<div style="background:var(--card);border:1px solid var(--border);border-radius:9px;padding:8px">
<svg id="p22-iv1-svg" viewBox="0 0 480 280" width="100%" style="height:auto"></svg>
</div>
<div id="p22-iv1-out" style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.94rem;line-height:1.75;text-align:center"></div>
</div>`;
/* INTERACTIVE 2 — Калькулятор работы поля */
html += `<div class="wg" id="p22-iv2">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 2</span><div class="wg-title">Калькулятор работы поля</div></div>
<div class="wg-help">Режим A: $A = q(\\varphi_1 - \\varphi_2)$. Режим B: $A = qEd$ в однородном поле.</div>
<div style="display:flex;gap:8px;justify-content:center;margin-bottom:10px">
<button class="btn primary" id="p22-iv2-mA">Режим A: $\\varphi_1, \\varphi_2$</button>
<button class="btn" id="p22-iv2-mB">Режим B: $E, d$</button>
</div>
<div id="p22-iv2-inA" style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;align-items:end;margin-bottom:10px">
<label>$q$ (нКл): <input type="number" id="p22-iv2-q" class="tinp" value="2" step="0.5" style="width:100%"></label>
<label>$\\varphi_1$ (В): <input type="number" id="p22-iv2-f1" class="tinp" value="100" step="10" style="width:100%"></label>
<label>$\\varphi_2$ (В): <input type="number" id="p22-iv2-f2" class="tinp" value="40" step="10" style="width:100%"></label>
</div>
<div id="p22-iv2-inB" style="display:none;grid-template-columns:1fr 1fr 1fr;gap:10px;align-items:end;margin-bottom:10px">
<label>$q$ (нКл): <input type="number" id="p22-iv2-qB" class="tinp" value="2" step="0.5" style="width:100%"></label>
<label>$E$ (В/м): <input type="number" id="p22-iv2-E" class="tinp" value="500" step="50" style="width:100%"></label>
<label>$d$ (м): <input type="number" id="p22-iv2-d" class="tinp" value="0.1" step="0.01" min="0.001" style="width:100%"></label>
</div>
<div style="display:flex;justify-content:center;margin-bottom:10px">
<button class="btn primary" id="p22-iv2-go">Вычислить $A$</button>
</div>
<div id="p22-iv2-out" style="padding:12px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.95rem;line-height:1.75;text-align:center"></div>
</div>`;
/* INTERACTIVE 3 — Знак напряжения */
html += `<div class="wg" id="p22-iv3">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 3</span><div class="wg-title">$U$ положительно, отрицательно или ноль?</div></div>
<div class="wg-help">Определи знак напряжения $U_{12} = \\varphi_1 - \\varphi_2$.</div>
<div class="score-display"><span>Задача <b id="p22-iv3-i">1</b> / 6</span><span>Очки: <b id="p22-iv3-s">0</b> / 6</span></div>
<div id="p22-iv3-q" style="padding:14px;background:var(--sec-acc-soft);border-radius:10px;font-size:1.02rem;margin-bottom:10px;text-align:center;min-height:54px"></div>
<div id="p22-iv3-opts" style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px"></div>
<div class="feedback" id="p22-iv3-fb"></div>
<div class="actions"><button class="btn" id="p22-iv3-restart">Начать заново</button></div>
</div>`;
/* INTERACTIVE 4 — Тренажёр напряжения */
html += `<div class="wg" id="p22-iv4">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 4</span><div class="wg-title">Тренажёр напряжения</div></div>
<div class="wg-help">5 задач. Допуск $\\pm 5\\%$.</div>
<div class="score-display"><span>Задача <b id="p22-iv4-i">1</b> / 5</span><span>Очки: <b id="p22-iv4-s">0</b> / 5</span></div>
<div id="p22-iv4-q" style="padding:14px;background:var(--sec-acc-soft);border-radius:10px;font-size:1.02rem;margin-bottom:10px;text-align:center;min-height:54px"></div>
<div style="display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:center">
<span style="font-family:'JetBrains Mono',monospace">ответ =</span>
<input type="number" id="p22-iv4-ans" class="tinp" style="width:140px;text-align:center" step="any">
<button class="btn primary" id="p22-iv4-go">Проверить</button>
<button class="btn" id="p22-iv4-start">Заново</button>
</div>
<div class="feedback" id="p22-iv4-fb"></div>
</div>`;
html += secNav('p21', 'p23');
html += readButton('p22');
box.innerHTML = html;
renderMath(box);
/* IV1 — Связь U и E в однородном поле */
(function(){
const svg = document.getElementById('p22-iv1-svg');
const US = document.getElementById('p22-iv1-U');
const dS = document.getElementById('p22-iv1-d');
const UL = document.getElementById('p22-iv1-UL');
const dL = document.getElementById('p22-iv1-dL');
const out = document.getElementById('p22-iv1-out');
const seen = new Set();
let _done = false;
function render(){
const U = +US.value, d = +dS.value;
UL.textContent = U; dL.textContent = d.toFixed(2);
const E = U / d;
const W = 480, H = 280;
// Две пластины: верхняя "+", нижняя "". Расстояние px зависит от d.
const yMid = 140;
const platePx = Math.max(30, Math.min(180, d * 900)); // визуальное расстояние
const yTop = yMid - platePx/2;
const yBot = yMid + platePx/2;
const xL = 80, xR = 400;
let g = '';
g += '<rect x="0" y="0" width="'+W+'" height="'+H+'" fill="#fafafa"/>';
g += '<text x="240" y="22" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#0f172a">Однородное поле: $U = E\\cdot d$</text>';
// Верхняя пластина (+)
g += '<line x1="'+xL+'" y1="'+yTop+'" x2="'+xR+'" y2="'+yTop+'" stroke="#dc2626" stroke-width="4"/>';
g += '<text x="'+(xL-12)+'" y="'+(yTop+5)+'" text-anchor="end" font-family="Inter,sans-serif" font-size="14" font-weight="700" fill="#dc2626">+</text>';
// Нижняя пластина (−)
g += '<line x1="'+xL+'" y1="'+yBot+'" x2="'+xR+'" y2="'+yBot+'" stroke="#2563eb" stroke-width="4"/>';
g += '<text x="'+(xL-12)+'" y="'+(yBot+5)+'" text-anchor="end" font-family="Inter,sans-serif" font-size="14" font-weight="700" fill="#2563eb"></text>';
// Линии E между пластинами — толщина ~ E (от 0.6 до 4)
const Emin = 10/0.20, Emax = 500/0.01;
const wE = 0.6 + 3.4 * (Math.min(E, Emax) - Emin) / (Emax - Emin);
const sw = Math.max(0.8, Math.min(4, wE));
const arrowCount = 6;
for(let i = 0; i < arrowCount; i++){
const x = xL + 40 + (xR - xL - 80) * i / (arrowCount-1);
g += PHYS.drawArrow(x, yTop+6, x, yBot-6, '#a78bfa', sw, 7);
}
g += '<text x="'+(xR+12)+'" y="'+yMid+'" font-family="Inter,sans-serif" font-size="12" font-weight="700" fill="#7c3aed">$\\vec{E}$</text>';
// Метка d (вертикальная)
g += '<line x1="'+(xR+45)+'" y1="'+yTop+'" x2="'+(xR+45)+'" y2="'+yBot+'" stroke="#10b981" stroke-width="1.6" stroke-dasharray="3,3"/>';
g += '<line x1="'+(xR+40)+'" y1="'+yTop+'" x2="'+(xR+50)+'" y2="'+yTop+'" stroke="#10b981" stroke-width="1.6"/>';
g += '<line x1="'+(xR+40)+'" y1="'+yBot+'" x2="'+(xR+50)+'" y2="'+yBot+'" stroke="#10b981" stroke-width="1.6"/>';
g += '<text x="'+(xR+58)+'" y="'+(yMid+4)+'" font-family="JetBrains Mono,monospace" font-size="12" font-weight="700" fill="#10b981">d</text>';
// Эквипотенциали — несколько горизонтальных пунктирных
const equipCount = 3;
for(let i = 1; i <= equipCount; i++){
const yE = yTop + (yBot-yTop) * i / (equipCount+1);
g += '<line x1="'+(xL+10)+'" y1="'+yE+'" x2="'+(xR-10)+'" y2="'+yE+'" stroke="#94a3b8" stroke-width="0.8" stroke-dasharray="4,4"/>';
}
g += '<text x="'+(xL+8)+'" y="'+(yBot+22)+'" font-family="Inter,sans-serif" font-size="10" fill="#64748b">эквипотенциали ⊥ $\\vec{E}$</text>';
svg.innerHTML = g;
out.innerHTML = '<b>$E = U/d = '+U+'/'+d.toFixed(2)+' = '+E.toFixed(0)+'$ В/м</b> &nbsp; '
+ '<span style="color:#64748b">(чем больше $U$ или меньше $d$ — тем сильнее поле)</span>';
renderMath(out);
seen.add(U+':'+d.toFixed(2));
if(!_done && seen.size >= 4){ _done = true; addXp(10, 'p22-iv1'); bumpProgress('p22', 15); }
}
US.addEventListener('input', render);
dS.addEventListener('input', render);
render();
})();
/* IV2 — Калькулятор работы поля */
(function(){
let mode = 'A';
const inA = document.getElementById('p22-iv2-inA');
const inB = document.getElementById('p22-iv2-inB');
const mA = document.getElementById('p22-iv2-mA');
const mB = document.getElementById('p22-iv2-mB');
const out = document.getElementById('p22-iv2-out');
const seen = new Set();
let _done = false;
function setMode(m){
mode = m;
if(m === 'A'){
inA.style.display = 'grid'; inB.style.display = 'none';
mA.classList.add('primary'); mB.classList.remove('primary');
} else {
inA.style.display = 'none'; inB.style.display = 'grid';
mB.classList.add('primary'); mA.classList.remove('primary');
}
calc();
}
function calc(){
let html = '';
if(mode === 'A'){
const q = parseFloat(document.getElementById('p22-iv2-q').value) || 0;
const f1 = parseFloat(document.getElementById('p22-iv2-f1').value) || 0;
const f2 = parseFloat(document.getElementById('p22-iv2-f2').value) || 0;
const U = f1 - f2;
const A = (q * 1e-9) * U;
const Annano = A * 1e9;
html += '<div><b>$U = \\varphi_1 - \\varphi_2 = '+f1+' - '+f2+' = '+U.toFixed(1)+'$ В</b></div>';
html += '<div style="margin-top:6px"><b>$A = qU = '+q+'\\cdot 10^{-9} \\cdot '+U.toFixed(1)+' = '+Annano.toFixed(2)+'$ нДж</b></div>';
if(A > 0) html += '<div style="margin-top:6px;color:#10b981">$A > 0$: поле совершает положительную работу.</div>';
else if(A < 0) html += '<div style="margin-top:6px;color:#dc2626">$A < 0$: поле сопротивляется — нужно работать против поля.</div>';
else html += '<div style="margin-top:6px;color:#64748b">$A = 0$: точки на одной эквипотенциали.</div>';
seen.add('A:'+q+':'+f1+':'+f2);
} else {
const q = parseFloat(document.getElementById('p22-iv2-qB').value) || 0;
const E = parseFloat(document.getElementById('p22-iv2-E').value) || 0;
const d = parseFloat(document.getElementById('p22-iv2-d').value) || 0;
const U = E * d;
const A = (q * 1e-9) * U;
const Annano = A * 1e9;
html += '<div><b>$U = Ed = '+E+'\\cdot '+d+' = '+U.toFixed(2)+'$ В</b></div>';
html += '<div style="margin-top:6px"><b>$A = qEd = '+q+'\\cdot 10^{-9} \\cdot '+E+' \\cdot '+d+' = '+Annano.toFixed(2)+'$ нДж</b></div>';
seen.add('B:'+q+':'+E+':'+d);
}
out.innerHTML = html;
renderMath(out);
if(!_done && seen.size >= 3){ _done = true; addXp(10, 'p22-iv2'); bumpProgress('p22', 15); }
}
mA.addEventListener('click', () => setMode('A'));
mB.addEventListener('click', () => setMode('B'));
document.getElementById('p22-iv2-go').addEventListener('click', calc);
['p22-iv2-q','p22-iv2-f1','p22-iv2-f2','p22-iv2-qB','p22-iv2-E','p22-iv2-d'].forEach(id => {
const el = document.getElementById(id);
if(el) el.addEventListener('keydown', e => { if(e.key === 'Enter') calc(); });
});
setMode('A');
})();
/* IV3 — Знак напряжения */
(function(){
const OPTS = ['$U > 0$', '$U < 0$', '$U = 0$'];
const Q = [
{ q:'$\\varphi_1 = 100$ В, $\\varphi_2 = 50$ В. Чему равно $U_{12}$?', ans:0, why:'$U = 100 - 50 = 50 > 0$.' },
{ q:'$\\varphi_1 = 30$ В, $\\varphi_2 = 80$ В.', ans:1, why:'$U = 30 - 80 = -50 < 0$.' },
{ q:'$\\varphi_1 = 50$ В, $\\varphi_2 = 50$ В.', ans:2, why:'$U = 50 - 50 = 0$ — на одной эквипотенциали.' },
{ q:'Точки 1 и 2 лежат на одной эквипотенциальной поверхности.', ans:2, why:'$\\varphi_1 = \\varphi_2 \\Rightarrow U = 0$.' },
{ q:'В направлении $\\vec{E}$ на расстоянии $d = 0{,}1$ м при $E = 1000$ В/м.', ans:0, why:'$U = Ed = 100$ В $> 0$ (потенциал падает вдоль $\\vec{E}$).' },
{ q:'Перемещение между двумя точками — строго перпендикулярно $\\vec{E}$.', ans:2, why:'Это вдоль эквипотенциали $\\Rightarrow U = 0$.' }
];
let i = 0, score = 0;
const qEl = document.getElementById('p22-iv3-q');
const oEl = document.getElementById('p22-iv3-opts');
const fb = document.getElementById('p22-iv3-fb');
const iEl = document.getElementById('p22-iv3-i');
const sEl = document.getElementById('p22-iv3-s');
function show(){
if(i >= Q.length){
qEl.innerHTML = '<b>Готово!</b> Результат: ' + score + ' / ' + Q.length;
oEl.innerHTML = '';
if(score === Q.length){ addXp(15, 'p22-iv3'); bumpProgress('p22', 25); }
else if(score >= 4){ addXp(8, 'p22-iv3'); bumpProgress('p22', 15); }
return;
}
iEl.textContent = (i+1);
sEl.textContent = score;
const item = Q[i];
qEl.innerHTML = item.q;
oEl.innerHTML = OPTS.map((t, k) => '<button class="btn primary" data-v="' + k + '">' + t + '</button>').join('');
fb.style.display = 'none';
renderMath(qEl); renderMath(oEl);
oEl.querySelectorAll('button').forEach(b => {
b.addEventListener('click', () => {
const v = +b.dataset.v;
if(v === item.ans){ score++; feedback(fb, true, '&#10003; Верно! ' + item.why + ' Дальше ▶'); }
else feedback(fb, false, '&#10007; Неверно. ' + item.why + ' Дальше ▶');
sEl.textContent = score;
oEl.querySelectorAll('button').forEach(x => x.disabled = true);
i++;
setTimeout(show, 1800);
});
});
}
document.getElementById('p22-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); });
show();
})();
/* IV4 — Тренажёр напряжения */
(function(){
const Q = [
{ q:'$\\varphi_1 = 100$ В, $\\varphi_2 = 40$ В. Напряжение $U_{12}$ в В?', ans:60, tol:3, hint:'$U = \\varphi_1 - \\varphi_2 = 100 - 40 = 60$ В.' },
{ q:'Однородное поле $E = 500$ В/м между пластинами $d = 0{,}02$ м. Напряжение $U$ в В?', ans:10, tol:0.5, hint:'$U = Ed = 500\\cdot 0{,}02 = 10$ В.' },
{ q:'Заряд $+2$ мкКл перенесли при $U = 50$ В. Работа поля в мкДж?', ans:100, tol:5, hint:'$A = qU = 2\\cdot 10^{-6}\\cdot 50 = 10^{-4}$ Дж $= 100$ мкДж.' },
{ q:'$U = 1000$ В между пластинами на $d = 0{,}05$ м. Напряжённость $E$ в В/м?', ans:20000, tol:500, hint:'$E = U/d = 1000/0{,}05 = 20\\,000$ В/м.' },
{ q:'Какова работа поля при перемещении заряда вдоль эквипотенциальной поверхности? (Дж)', ans:0, tol:0.0001, hint:'$\\Delta\\varphi = 0 \\Rightarrow A = q\\Delta\\varphi = 0$.' }
];
let i = 0, score = 0;
function show(){
if(i >= Q.length){
document.getElementById('p22-iv4-q').innerHTML = '<b>Готово!</b> Результат: ' + score + ' / ' + Q.length;
if(score === Q.length){ addXp(15, 'p22-iv4'); bumpProgress('p22', 25); }
else if(score >= 3){ addXp(8, 'p22-iv4'); bumpProgress('p22', 15); }
return;
}
document.getElementById('p22-iv4-i').textContent = (i+1);
document.getElementById('p22-iv4-s').textContent = score;
document.getElementById('p22-iv4-q').innerHTML = Q[i].q;
document.getElementById('p22-iv4-ans').value = '';
renderMath(document.getElementById('p22-iv4-q'));
document.getElementById('p22-iv4-fb').style.display = 'none';
}
function go(){
if(i >= Q.length) return;
const fb = document.getElementById('p22-iv4-fb');
const raw = document.getElementById('p22-iv4-ans').value.replace(',', '.');
const ans = parseFloat(raw);
if(isNaN(ans)){ feedback(fb, false, '&#10007; Введи число.'); return; }
if(Math.abs(ans - Q[i].ans) <= Q[i].tol + 0.001){ score++; feedback(fb, true, '&#10003; Верно! '+Q[i].hint+' Дальше ▶'); }
else feedback(fb, false, '&#10007; Неверно. Ответ: $'+Q[i].ans+'$. '+Q[i].hint+' Дальше ▶');
document.getElementById('p22-iv4-s').textContent = score;
i++;
setTimeout(show, 1800);
}
document.getElementById('p22-iv4-go').addEventListener('click', go);
document.getElementById('p22-iv4-ans').addEventListener('keydown', e => { if(e.key === 'Enter') go(); });
document.getElementById('p22-iv4-start').addEventListener('click', () => { i = 0; score = 0; show(); });
show();
})();
wireReadBtn('p22');
}
function build_p23(){
const box = document.getElementById('p23-body');
let html = '';
html += makeCard('theory', "Конденсаторы", "§23", `
<p><b>Конденсаторы</b> — этот параграф в разработке (Phase 1+).</p>
<p>Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «алгебры 11» — таблицы, симуляции, ползунки, drag-and-drop и автопроверяемые тренажёры.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.92rem">
<b>Phase 0:</b> создан скелет учебника. <b>Phase 3+:</b> наполнение этого § содержанием по учебнику «Физика 10» (Беларусь, 2019).
</p>
/* THEORY 1 — Конденсатор и электроёмкость */
html += makeCard('theory', "Конденсатор и электроёмкость", "§23", `
<p><b>Конденсатор</b> — устройство из двух проводников (обкладок), разделённых диэлектриком, предназначенное для накопления электрического заряда и энергии.</p>
<p>Заряд конденсатора $q$ — это <b>модуль</b> заряда на одной обкладке (на другой обкладке заряд $-q$). Между обкладками возникает напряжение $U$.</p>
<p style="margin-top:10px"><b>Электроёмкость</b> $C$ — отношение заряда обкладки к напряжению между обкладками:</p>
<p style="text-align:center;margin:10px 0">$$C = \\dfrac{q}{U}$$</p>
<p>$C$ — характеристика самого конденсатора (не зависит от $q$ и $U$, только от геометрии и диэлектрика).</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px"><b>Единица:</b> <b>Фарад</b> (Ф) $= 1$ Кл / 1 В. Это очень большая ёмкость! На практике:</p>
<ul style="margin:6px 0 6px 18px">
<li>мкФ ($\\mu$Ф) $= 10^{-6}$ Ф</li>
<li>нФ $= 10^{-9}$ Ф</li>
<li>пФ $= 10^{-12}$ Ф</li>
</ul>
`);
/* THEORY 2 — Плоский конденсатор */
html += makeCard('rule', "Плоский конденсатор", "§23", `
<p><b>Плоский конденсатор</b> состоит из двух параллельных пластин площадью $S$, разделённых диэлектриком толщины $d$.</p>
<p style="text-align:center;margin:10px 0">$$C = \\dfrac{\\varepsilon \\varepsilon_0 S}{d}$$</p>
<p>где:</p>
<ul style="margin:6px 0 6px 18px">
<li>$\\varepsilon_0 = 8{,}85 \\cdot 10^{-12}$ Ф/м — электрическая постоянная</li>
<li>$\\varepsilon$ — относительная диэлектрическая проницаемость диэлектрика (для воздуха $\\approx 1$, для слюды $\\approx 6$, керамики до 1000)</li>
<li>$S$ — площадь пластины в м²</li>
<li>$d$ — расстояние между пластинами в м</li>
</ul>
<p style="margin-top:10px;padding:10px 14px;background:var(--warn-bg,#fef3c7);border-left:4px solid var(--warn,#f59e0b);border-radius:9px"><b>Способы увеличить $C$:</b></p>
<ul style="margin:6px 0 6px 18px">
<li>Увеличить площадь $S$.</li>
<li>Уменьшить расстояние $d$.</li>
<li>Использовать диэлектрик с большим $\\varepsilon$.</li>
</ul>
`);
/* THEORY 3 — Соединения конденсаторов */
html += makeCard('example', "Соединения конденсаторов", "§23", `
<p><b>Параллельное соединение:</b></p>
<ul style="margin:6px 0 6px 18px">
<li>Напряжение одинаково: $U = U_1 = U_2 = \\ldots$</li>
<li>Заряды складываются: $q = q_1 + q_2 + \\ldots$</li>
<li><b>Ёмкости складываются:</b> $C_{общ} = C_1 + C_2 + \\ldots$</li>
</ul>
<p style="margin-top:10px"><b>Последовательное соединение:</b></p>
<ul style="margin:6px 0 6px 18px">
<li>Заряд одинаков: $q = q_1 = q_2 = \\ldots$</li>
<li>Напряжения складываются: $U = U_1 + U_2 + \\ldots$</li>
<li><b>Складываются обратные ёмкости:</b></li>
</ul>
<p style="text-align:center;margin:10px 0">$$\\dfrac{1}{C_{общ}} = \\dfrac{1}{C_1} + \\dfrac{1}{C_2} + \\ldots$$</p>
<p>Для двух последовательно соединённых конденсаторов: $C_{общ} = \\dfrac{C_1 C_2}{C_1 + C_2}$.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px"><b>Применение:</b> в радио и электронике для фильтрации и сглаживания сигналов, в импульсных устройствах (фотовспышка), в фильтрах источников питания, в компьютерной памяти.</p>
`);
/* INTERACTIVE 1 — Конструктор плоского конденсатора */
html += `<div class="wg" id="p23-iv1">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 1</span><div class="wg-title">Конструктор плоского конденсатора</div></div>
<div class="wg-help">Меняй площадь пластин $S$, расстояние $d$ и диэлектрик. Наблюдай $C = \\varepsilon\\varepsilon_0 S/d$.</div>
<div class="sliders">
<label>$S$: <b id="p23-iv1-SL">0.010</b> м² <input type="range" id="p23-iv1-S" min="0.001" max="0.100" value="0.010" step="0.001"></label>
<label>$d$: <b id="p23-iv1-dL">0.005</b> м <input type="range" id="p23-iv1-d" min="0.001" max="0.010" value="0.005" step="0.0005"></label>
</div>
<div style="display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin:8px 0">
<button class="btn primary" id="p23-iv1-eA">Воздух $\\varepsilon = 1$</button>
<button class="btn" id="p23-iv1-eM">Слюда $\\varepsilon = 6$</button>
<button class="btn" id="p23-iv1-eC">Керамика $\\varepsilon = 100$</button>
</div>
<div style="background:var(--card);border:1px solid var(--border);border-radius:9px;padding:8px">
<svg id="p23-iv1-svg" viewBox="0 0 480 280" width="100%" style="height:auto"></svg>
</div>
<div id="p23-iv1-out" style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.94rem;line-height:1.75;text-align:center"></div>
</div>`;
/* INTERACTIVE 2 — Калькулятор соединений */
html += `<div class="wg" id="p23-iv2">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 2</span><div class="wg-title">Калькулятор соединений конденсаторов</div></div>
<div class="wg-help">Параллельно: $C = C_1 + C_2$. Последовательно: $1/C = 1/C_1 + 1/C_2$.</div>
<div style="display:flex;gap:8px;justify-content:center;margin-bottom:10px">
<button class="btn primary" id="p23-iv2-mP">Параллельно</button>
<button class="btn" id="p23-iv2-mS">Последовательно</button>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:end;margin-bottom:10px">
<label>$C_1$ (мкФ): <input type="number" id="p23-iv2-C1" class="tinp" value="2" step="0.5" min="0.1" style="width:100%"></label>
<label>$C_2$ (мкФ): <input type="number" id="p23-iv2-C2" class="tinp" value="6" step="0.5" min="0.1" style="width:100%"></label>
</div>
<div style="display:flex;justify-content:center;margin-bottom:10px">
<button class="btn primary" id="p23-iv2-go">Вычислить $C_{общ}$</button>
</div>
<div id="p23-iv2-out" style="padding:12px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.95rem;line-height:1.75;text-align:center"></div>
</div>`;
/* INTERACTIVE 3 — Что увеличит ёмкость? */
html += `<div class="wg" id="p23-iv3">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 3</span><div class="wg-title">Что увеличит ёмкость конденсатора?</div></div>
<div class="wg-help">Опираясь на $C = \\varepsilon\\varepsilon_0 S/d$, выбери: действие <b>увеличит</b> или <b>уменьшит</b> $C$.</div>
<div class="score-display"><span>Задача <b id="p23-iv3-i">1</b> / 6</span><span>Очки: <b id="p23-iv3-s">0</b> / 6</span></div>
<div id="p23-iv3-q" style="padding:14px;background:var(--sec-acc-soft);border-radius:10px;font-size:1.02rem;margin-bottom:10px;text-align:center;min-height:54px"></div>
<div id="p23-iv3-opts" style="display:grid;grid-template-columns:1fr 1fr;gap:8px"></div>
<div class="feedback" id="p23-iv3-fb"></div>
<div class="actions"><button class="btn" id="p23-iv3-restart">Начать заново</button></div>
</div>`;
/* INTERACTIVE 4 — Тренажёр конденсаторов */
html += `<div class="wg" id="p23-iv4">
<div class="wg-header"><span class="wg-badge">ИНТЕРАКТИВ 4</span><div class="wg-title">Тренажёр конденсаторов</div></div>
<div class="wg-help">5 задач. $\\varepsilon_0 = 8{,}85 \\cdot 10^{-12}$ Ф/м. Допуск $\\pm 5\\%$.</div>
<div class="score-display"><span>Задача <b id="p23-iv4-i">1</b> / 5</span><span>Очки: <b id="p23-iv4-s">0</b> / 5</span></div>
<div id="p23-iv4-q" style="padding:14px;background:var(--sec-acc-soft);border-radius:10px;font-size:1.02rem;margin-bottom:10px;text-align:center;min-height:54px"></div>
<div style="display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:center">
<span style="font-family:'JetBrains Mono',monospace">ответ =</span>
<input type="number" id="p23-iv4-ans" class="tinp" style="width:140px;text-align:center" step="any">
<button class="btn primary" id="p23-iv4-go">Проверить</button>
<button class="btn" id="p23-iv4-start">Заново</button>
</div>
<div class="feedback" id="p23-iv4-fb"></div>
</div>`;
html += secNav('p22', 'p24');
html += readButton('p23');
box.innerHTML = html;
renderMath(box);
/* IV1 — Конструктор плоского конденсатора */
(function(){
const eps0 = PHYS.CONST.eps0;
const svg = document.getElementById('p23-iv1-svg');
const SS = document.getElementById('p23-iv1-S');
const dS = document.getElementById('p23-iv1-d');
const SL = document.getElementById('p23-iv1-SL');
const dL = document.getElementById('p23-iv1-dL');
const out = document.getElementById('p23-iv1-out');
const bA = document.getElementById('p23-iv1-eA');
const bM = document.getElementById('p23-iv1-eM');
const bC = document.getElementById('p23-iv1-eC');
const seen = new Set();
let _done = false;
let eps = 1, epsName = 'воздух', epsColor = '#f8fafc';
function setEps(e, name, color, btn){
eps = e; epsName = name; epsColor = color;
[bA, bM, bC].forEach(x => x.classList.remove('primary'));
btn.classList.add('primary');
render();
}
function render(){
const S = +SS.value, d = +dS.value;
SL.textContent = S.toFixed(3);
dL.textContent = d.toFixed(3);
const C = eps * eps0 * S / d; // Ф
const Cnf = C * 1e9; // нФ
const Cmkf = C * 1e6; // мкФ
const W = 480, H = 280, cx = W/2, cy = H/2;
// Длина пластин пропорциональна sqrt(S), макс ширина ~280
const plateLen = 80 + 200 * Math.sqrt(S / 0.1);
// Расстояние между пластинами пропорционально d
const platesGap = 20 + 120 * (d / 0.01);
const xL = cx - plateLen/2, xR = cx + plateLen/2;
const yTop = cy - platesGap/2;
const yBot = cy + platesGap/2;
let g = '';
g += '<rect x="0" y="0" width="'+W+'" height="'+H+'" fill="#fafafa"/>';
g += '<text x="240" y="22" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#0f172a">Плоский конденсатор</text>';
// Диэлектрик между пластинами
g += '<rect x="'+xL+'" y="'+yTop+'" width="'+(xR-xL)+'" height="'+(yBot-yTop)+'" fill="'+epsColor+'" stroke="#cbd5e1" stroke-width="0.8"/>';
// Верхняя пластина (+)
g += '<line x1="'+xL+'" y1="'+yTop+'" x2="'+xR+'" y2="'+yTop+'" stroke="#dc2626" stroke-width="5"/>';
// Нижняя пластина (−)
g += '<line x1="'+xL+'" y1="'+yBot+'" x2="'+xR+'" y2="'+yBot+'" stroke="#2563eb" stroke-width="5"/>';
// Метки + и
g += '<text x="'+(xL-10)+'" y="'+(yTop+5)+'" text-anchor="end" font-family="Inter,sans-serif" font-size="16" font-weight="700" fill="#dc2626">+</text>';
g += '<text x="'+(xL-10)+'" y="'+(yBot+5)+'" text-anchor="end" font-family="Inter,sans-serif" font-size="16" font-weight="700" fill="#2563eb"></text>';
// Подпись диэлектрика по центру
g += '<text x="'+cx+'" y="'+(cy+4)+'" text-anchor="middle" font-family="Inter,sans-serif" font-size="13" font-weight="700" fill="#0f172a">'+epsName+' (ε = '+eps+')</text>';
// Размер d справа
g += '<line x1="'+(xR+25)+'" y1="'+yTop+'" x2="'+(xR+25)+'" y2="'+yBot+'" stroke="#10b981" stroke-width="1.6" stroke-dasharray="3,3"/>';
g += '<line x1="'+(xR+20)+'" y1="'+yTop+'" x2="'+(xR+30)+'" y2="'+yTop+'" stroke="#10b981" stroke-width="1.6"/>';
g += '<line x1="'+(xR+20)+'" y1="'+yBot+'" x2="'+(xR+30)+'" y2="'+yBot+'" stroke="#10b981" stroke-width="1.6"/>';
g += '<text x="'+(xR+38)+'" y="'+(cy+4)+'" font-family="JetBrains Mono,monospace" font-size="12" font-weight="700" fill="#10b981">d</text>';
// Размер плакеты сверху (S = площадь, длина — проекция)
g += '<text x="'+cx+'" y="'+(yTop-8)+'" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="11" font-weight="700" fill="#7c3aed">площадь S</text>';
svg.innerHTML = g;
// Вывод значения
let CStr;
if(Cmkf >= 1) CStr = Cmkf.toFixed(2) + ' мкФ';
else if(Cnf >= 1) CStr = Cnf.toFixed(2) + ' нФ';
else CStr = (C*1e12).toFixed(2) + ' пФ';
out.innerHTML = '<b>$C = \\dfrac{\\varepsilon\\varepsilon_0 S}{d} = \\dfrac{'+eps+'\\cdot 8{,}85\\cdot 10^{-12}\\cdot '+S.toFixed(3)+'}{'+d.toFixed(3)+'} = '+C.toExponential(2)+'$ Ф $\\approx$ '+CStr+'</b>';
renderMath(out);
seen.add(S.toFixed(3)+':'+d.toFixed(3)+':'+eps);
if(!_done && seen.size >= 4){ _done = true; addXp(10, 'p23-iv1'); bumpProgress('p23', 15); }
}
bA.addEventListener('click', () => setEps(1, 'воздух', '#f8fafc', bA));
bM.addEventListener('click', () => setEps(6, 'слюда', '#e2e8f0', bM));
bC.addEventListener('click', () => setEps(100, 'керамика', '#fed7aa', bC));
SS.addEventListener('input', render);
dS.addEventListener('input', render);
render();
})();
/* IV2 — Калькулятор соединений */
(function(){
let mode = 'P';
const mP = document.getElementById('p23-iv2-mP');
const mS = document.getElementById('p23-iv2-mS');
const out = document.getElementById('p23-iv2-out');
const seen = new Set();
let _done = false;
function setMode(m){
mode = m;
if(m === 'P'){ mP.classList.add('primary'); mS.classList.remove('primary'); }
else { mS.classList.add('primary'); mP.classList.remove('primary'); }
calc();
}
function calc(){
const C1 = parseFloat(document.getElementById('p23-iv2-C1').value) || 0;
const C2 = parseFloat(document.getElementById('p23-iv2-C2').value) || 0;
let html = '';
if(mode === 'P'){
const Cob = C1 + C2;
html += '<div><b>Параллельное соединение:</b></div>';
html += '<div style="margin-top:6px"><b>$C_{общ} = C_1 + C_2 = '+C1+' + '+C2+' = '+Cob.toFixed(2)+'$ мкФ</b></div>';
} else {
const inv = 1/C1 + 1/C2;
const Cob = (C1*C2)/(C1+C2);
html += '<div><b>Последовательное соединение:</b></div>';
html += '<div style="margin-top:6px"><b>$\\dfrac{1}{C_{общ}} = \\dfrac{1}{C_1} + \\dfrac{1}{C_2} = \\dfrac{1}{'+C1+'} + \\dfrac{1}{'+C2+'} = '+inv.toFixed(3)+'$ 1/мкФ</b></div>';
html += '<div style="margin-top:6px"><b>$C_{общ} = \\dfrac{C_1 C_2}{C_1 + C_2} = \\dfrac{'+C1+'\\cdot '+C2+'}{'+(C1+C2)+'} = '+Cob.toFixed(3)+'$ мкФ</b></div>';
}
out.innerHTML = html;
renderMath(out);
seen.add(mode+':'+C1+':'+C2);
if(!_done && seen.size >= 3){ _done = true; addXp(10, 'p23-iv2'); bumpProgress('p23', 15); }
}
mP.addEventListener('click', () => setMode('P'));
mS.addEventListener('click', () => setMode('S'));
document.getElementById('p23-iv2-go').addEventListener('click', calc);
['p23-iv2-C1','p23-iv2-C2'].forEach(id => {
document.getElementById(id).addEventListener('keydown', e => { if(e.key === 'Enter') calc(); });
});
setMode('P');
})();
/* IV3 — Что увеличит ёмкость? */
(function(){
const OPTS = ['Увеличит', 'Уменьшит'];
const Q = [
{ q:'Увеличить площадь пластин $S$ (при прочих равных).', ans:0, why:'$C \\propto S$ — рост $S$ увеличивает $C$.' },
{ q:'Увеличить расстояние $d$ между пластинами.', ans:1, why:'$C \\propto 1/d$ — рост $d$ уменьшает $C$.' },
{ q:'Заменить воздух на слюду ($\\varepsilon = 6$) между пластинами.', ans:0, why:'$C \\propto \\varepsilon$ — больший $\\varepsilon$ увеличивает $C$.' },
{ q:'Уменьшить площадь пластин $S$ вдвое.', ans:1, why:'$C \\propto S$ — уменьшение $S$ уменьшает $C$.' },
{ q:'Уменьшить расстояние $d$ между пластинами.', ans:0, why:'$C \\propto 1/d$ — уменьшение $d$ увеличивает $C$.' },
{ q:'Заменить слюду ($\\varepsilon = 6$) на вакуум ($\\varepsilon = 1$).', ans:1, why:'$\\varepsilon$ уменьшится в 6 раз $\\Rightarrow C$ уменьшится.' }
];
let i = 0, score = 0;
const qEl = document.getElementById('p23-iv3-q');
const oEl = document.getElementById('p23-iv3-opts');
const fb = document.getElementById('p23-iv3-fb');
const iEl = document.getElementById('p23-iv3-i');
const sEl = document.getElementById('p23-iv3-s');
function show(){
if(i >= Q.length){
qEl.innerHTML = '<b>Готово!</b> Результат: ' + score + ' / ' + Q.length;
oEl.innerHTML = '';
if(score === Q.length){ addXp(15, 'p23-iv3'); bumpProgress('p23', 25); }
else if(score >= 4){ addXp(8, 'p23-iv3'); bumpProgress('p23', 15); }
return;
}
iEl.textContent = (i+1);
sEl.textContent = score;
const item = Q[i];
qEl.innerHTML = item.q;
oEl.innerHTML = OPTS.map((t, k) => '<button class="btn primary" data-v="' + k + '">' + t + '</button>').join('');
fb.style.display = 'none';
renderMath(qEl); renderMath(oEl);
oEl.querySelectorAll('button').forEach(b => {
b.addEventListener('click', () => {
const v = +b.dataset.v;
if(v === item.ans){ score++; feedback(fb, true, '&#10003; Верно! ' + item.why + ' Дальше ▶'); }
else feedback(fb, false, '&#10007; Неверно. ' + item.why + ' Дальше ▶');
sEl.textContent = score;
oEl.querySelectorAll('button').forEach(x => x.disabled = true);
i++;
setTimeout(show, 1800);
});
});
}
document.getElementById('p23-iv3-restart').addEventListener('click', () => { i = 0; score = 0; show(); });
show();
})();
/* IV4 — Тренажёр конденсаторов */
(function(){
const Q = [
{ q:'$S = 0{,}01$ м², $d = 0{,}001$ м, воздух ($\\varepsilon = 1$). Ёмкость $C$ в пФ?', ans:88.5, tol:2, hint:'$C = \\varepsilon\\varepsilon_0 S/d = 8{,}85\\cdot 10^{-12}\\cdot 0{,}01/0{,}001 \\approx 88{,}5$ пФ.' },
{ q:'$C = 100$ мкФ, $U = 50$ В. Заряд $q$ в мКл?', ans:5, tol:0.3, hint:'$q = CU = 100\\cdot 10^{-6}\\cdot 50 = 5\\cdot 10^{-3}$ Кл $= 5$ мКл.' },
{ q:'$C_1 = 2$ мкФ, $C_2 = 6$ мкФ, соединены параллельно. $C_{общ}$ в мкФ?', ans:8, tol:0.5, hint:'$C_{общ} = C_1 + C_2 = 2 + 6 = 8$ мкФ.' },
{ q:'$C_1 = 2$ мкФ, $C_2 = 6$ мкФ, соединены последовательно. $C_{общ}$ в мкФ?', ans:1.5, tol:0.1, hint:'$C_{общ} = C_1 C_2 /(C_1+C_2) = 12/8 = 1{,}5$ мкФ.' },
{ q:'$C = 200$ нФ, $U = 100$ В. Заряд конденсатора $q$ в мкКл?', ans:20, tol:1, hint:'$q = CU = 200\\cdot 10^{-9}\\cdot 100 = 2\\cdot 10^{-5}$ Кл $= 20$ мкКл.' }
];
let i = 0, score = 0;
function show(){
if(i >= Q.length){
document.getElementById('p23-iv4-q').innerHTML = '<b>Готово!</b> Результат: ' + score + ' / ' + Q.length;
if(score === Q.length){ addXp(15, 'p23-iv4'); bumpProgress('p23', 25); }
else if(score >= 3){ addXp(8, 'p23-iv4'); bumpProgress('p23', 15); }
return;
}
document.getElementById('p23-iv4-i').textContent = (i+1);
document.getElementById('p23-iv4-s').textContent = score;
document.getElementById('p23-iv4-q').innerHTML = Q[i].q;
document.getElementById('p23-iv4-ans').value = '';
renderMath(document.getElementById('p23-iv4-q'));
document.getElementById('p23-iv4-fb').style.display = 'none';
}
function go(){
if(i >= Q.length) return;
const fb = document.getElementById('p23-iv4-fb');
const raw = document.getElementById('p23-iv4-ans').value.replace(',', '.');
const ans = parseFloat(raw);
if(isNaN(ans)){ feedback(fb, false, '&#10007; Введи число.'); return; }
if(Math.abs(ans - Q[i].ans) <= Q[i].tol + 0.001){ score++; feedback(fb, true, '&#10003; Верно! '+Q[i].hint+' Дальше ▶'); }
else feedback(fb, false, '&#10007; Неверно. Ответ: $'+Q[i].ans+'$. '+Q[i].hint+' Дальше ▶');
document.getElementById('p23-iv4-s').textContent = score;
i++;
setTimeout(show, 1800);
}
document.getElementById('p23-iv4-go').addEventListener('click', go);
document.getElementById('p23-iv4-ans').addEventListener('keydown', e => { if(e.key === 'Enter') go(); });
document.getElementById('p23-iv4-start').addEventListener('click', () => { i = 0; score = 0; show(); });
show();
})();
wireReadBtn('p23');
}