electro/wiring-reference.html
2026-08-24 14:09:36 -04:00

316 lines
25 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<title>House Lighting, Wiring Reference</title>
<style>
* { box-sizing:border-box; -webkit-print-color-adjust:exact; print-color-adjust:exact; }
@page { size:Letter; margin:14mm; }
:root {
--paper:#fff; --ink:#1C1B18; --muted:#6E6A62; --line:#DED8CC; --line-strong:#B9B2A3;
--slate:#2F5D74; --accent:#E39A2C; --panel:#F6F3EC;
--z-ext:#3763A0; --z-fire:#C4402A; --z-gf:#B9741C; --z-up:#2E7D6B;
--pos:#C4402A; --gnd:#1C1B18;
}
body {
background:var(--paper); color:var(--ink); margin:0;
font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
font-size:12px; line-height:1.5;
}
.mono { font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace; }
.page { padding:0 0 8mm; }
.page + .page { break-before:page; padding-top:2mm; }
/* ---- Title block ---- */
.titleblock { border:1.5px solid var(--ink); border-radius:3px; overflow:hidden; display:grid; grid-template-columns:1.7fr 1fr; }
.tb-main { padding:14px 18px; border-right:1px solid var(--line-strong); }
.tb-eyebrow { font-family:ui-monospace,monospace; font-size:10px; letter-spacing:.18em; text-transform:uppercase; color:var(--accent); margin:0 0 4px; }
h1 { font-size:23px; line-height:1.08; margin:0; text-wrap:balance; letter-spacing:-.01em; }
.tb-sub { color:var(--muted); font-size:12px; margin:6px 0 0; }
.tb-meta { display:grid; grid-template-columns:1fr 1fr; }
.tb-cell { padding:7px 12px; border-bottom:1px solid var(--line); }
.tb-cell:nth-child(odd) { border-right:1px solid var(--line); }
.tb-cell:nth-last-child(-n+2) { border-bottom:none; }
.tb-cell .k { font-family:ui-monospace,monospace; font-size:8.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); }
.tb-cell .v { font-size:12px; font-weight:600; margin-top:1px; }
section { margin-top:15px; break-inside:avoid; }
.sec-head { display:flex; align-items:baseline; gap:10px; margin:0 0 10px; }
.sec-head h2 { font-size:14px; margin:0; }
.sec-head .num { font-family:ui-monospace,monospace; font-size:11px; color:var(--paper); background:var(--ink); border-radius:3px; padding:1px 7px; font-weight:700; }
.sec-head .hint { color:var(--muted); font-size:11px; margin-left:auto; }
.diagram { background:var(--panel); border:1px solid var(--line-strong); border-radius:6px; padding:12px 14px; }
.diagram svg { display:block; width:100%; height:auto; }
.caption { color:var(--muted); font-size:10.5px; margin:7px 2px 0; font-family:ui-monospace,monospace; }
.grid2 { display:grid; grid-template-columns:1fr 1fr; gap:20px; align-items:start; }
table { width:100%; border-collapse:collapse; font-size:11.5px; }
th { text-align:left; font-family:ui-monospace,monospace; font-size:8.5px; letter-spacing:.09em; text-transform:uppercase; color:var(--muted); font-weight:700; padding:0 7px 6px; border-bottom:1.5px solid var(--line-strong); }
td { padding:6px 7px; border-bottom:1px solid var(--line); vertical-align:top; }
td.c { font-family:ui-monospace,monospace; }
tbody tr:last-child td { border-bottom:none; }
.pic { font-family:ui-monospace,monospace; font-size:10.5px; color:var(--muted); white-space:nowrap; }
.chip { display:inline-flex; align-items:center; gap:5px; font-family:ui-monospace,monospace; font-size:10px; font-weight:700; white-space:nowrap; }
.chip::before { content:""; width:9px; height:9px; border-radius:2px; background:var(--c); flex:none; }
.z-ext{--c:var(--z-ext);} .z-fire{--c:var(--z-fire);} .z-gf{--c:var(--z-gf);} .z-up{--c:var(--z-up);}
.steps { list-style:none; margin:0; padding:0; }
.steps li { display:grid; grid-template-columns:auto 1fr; gap:10px; padding:6px 0; border-bottom:1px solid var(--line); break-inside:avoid; }
.steps li:last-child { border-bottom:none; }
.box { width:14px; height:14px; border:1.5px solid var(--line-strong); border-radius:3px; margin-top:2px; }
.steps .pic { display:block; margin-bottom:1px; }
.steps .what { font-size:11.5px; }
.crit { color:var(--z-fire); font-weight:700; font-family:ui-monospace,monospace; font-size:9px; letter-spacing:.07em; text-transform:uppercase; }
.bom { columns:2; column-gap:22px; font-size:11.5px; }
.bom .item { break-inside:avoid; display:grid; grid-template-columns:auto 1fr auto; gap:8px; align-items:baseline; padding:5px 0; border-bottom:1px solid var(--line); }
.bom .box { margin-top:3px; }
.bom .qty { font-family:ui-monospace,monospace; font-size:10px; color:var(--muted); white-space:nowrap; }
.bom .have { opacity:.5; }
.bom .have .name { text-decoration:line-through; }
.callout { background:var(--panel); border:1px solid var(--line-strong); border-left:3px solid var(--accent); border-radius:5px; padding:11px 13px; margin-top:14px; font-size:11.5px; break-inside:avoid; }
.callout b { font-family:ui-monospace,monospace; font-size:10px; letter-spacing:.04em; }
.scenes { display:flex; flex-wrap:wrap; gap:6px; margin-top:7px; }
.scenes span { font-family:ui-monospace,monospace; font-size:10.5px; border:1px solid var(--line-strong); border-radius:20px; padding:2px 9px; }
.scenes .arrow { border:none; color:var(--muted); padding:2px 0; }
footer { margin-top:16px; padding-top:9px; border-top:1px solid var(--line); display:flex; justify-content:space-between; color:var(--muted); font-size:10px; font-family:ui-monospace,monospace; }
</style>
<!-- ============================= PAGE 1 ============================= -->
<div class="page">
<div class="titleblock">
<div class="tb-main">
<p class="tb-eyebrow">Bench Reference · Rev B · discrete-driver</p>
<h1>House, Lighting Wiring Reference</h1>
<p class="tb-sub">4 switched zones · plain warm-white LEDs · ULN2803A low-side driver · cordless 5V.</p>
</div>
<div class="tb-meta">
<div class="tb-cell"><div class="k">Controller</div><div class="v">Arduino Nano</div></div>
<div class="tb-cell"><div class="k">Driver</div><div class="v">ULN2803A · 8-ch</div></div>
<div class="tb-cell"><div class="k">Power</div><div class="v">USB bank · 5V</div></div>
<div class="tb-cell"><div class="k">Outputs</div><div class="v mono">D3 D5 D6 D9 · PWM</div></div>
<div class="tb-cell"><div class="k">Sketch</div><div class="v mono">townhouse_lights.ino</div></div>
<div class="tb-cell"><div class="k">Series R</div><div class="v mono">220Ω / LED</div></div>
</div>
</div>
<section>
<div class="sec-head"><span class="num">1</span><h2>System schematic</h2><span class="hint">Nano drives ULN inputs; ULN sinks each zone to ground</span></div>
<div class="diagram">
<svg viewBox="0 0 900 300" role="img" aria-label="System schematic: USB power bank through master switch to 5V rail, Arduino Nano PWM pins into ULN2803A inputs, ULN outputs sinking each of four LED zones">
<!-- rails -->
<line x1="60" y1="46" x2="880" y2="46" stroke="var(--pos)" stroke-width="3"/>
<text x="60" y="38" font-size="11" fill="var(--pos)" font-family="ui-monospace,monospace" font-weight="700">+5V</text>
<line x1="60" y1="270" x2="880" y2="270" stroke="var(--gnd)" stroke-width="3"/>
<text x="60" y="288" font-size="11" fill="var(--gnd)" font-family="ui-monospace,monospace" font-weight="700">GND</text>
<!-- power bank + master switch -->
<rect x="60" y="92" width="104" height="58" rx="5" fill="#fff" stroke="var(--line-strong)" stroke-width="1.5"/>
<text x="112" y="116" text-anchor="middle" font-size="12" font-weight="700" fill="var(--ink)" font-family="ui-monospace,monospace">USB bank</text>
<text x="112" y="133" text-anchor="middle" font-size="9.5" fill="var(--muted)">5V · always-on</text>
<line x1="112" y1="150" x2="112" y2="270" stroke="var(--gnd)" stroke-width="3"/>
<!-- switch up to +5V rail -->
<line x1="112" y1="92" x2="112" y2="78" stroke="var(--pos)" stroke-width="3"/>
<circle cx="112" cy="74" r="4" fill="var(--pos)"/>
<line x1="115" y1="71" x2="133" y2="60" stroke="var(--pos)" stroke-width="3"/>
<circle cx="137" cy="58" r="4" fill="var(--pos)"/>
<line x1="137" y1="54" x2="137" y2="46" stroke="var(--pos)" stroke-width="3"/>
<text x="150" y="78" font-size="9.5" fill="var(--muted)" font-family="ui-monospace,monospace">master sw</text>
<!-- Nano -->
<rect x="250" y="86" width="150" height="128" rx="6" fill="#fff" stroke="var(--ink)" stroke-width="1.5"/>
<text x="325" y="112" text-anchor="middle" font-size="13" font-weight="700" fill="var(--ink)" font-family="ui-monospace,monospace">Arduino Nano</text>
<g font-family="ui-monospace,monospace" font-size="10" fill="var(--muted)">
<text x="264" y="140">5V</text><text x="264" y="196">GND</text>
<text x="386" y="140" text-anchor="end">D3</text>
<text x="386" y="158" text-anchor="end">D5</text>
<text x="386" y="176" text-anchor="end">D6</text>
<text x="386" y="194" text-anchor="end">D9</text>
</g>
<!-- power to nano -->
<line x1="112" y1="46" x2="250" y2="46" stroke="var(--pos)" stroke-width="3"/>
<line x1="240" y1="46" x2="240" y2="134" stroke="var(--pos)" stroke-width="2.5"/><line x1="240" y1="134" x2="252" y2="134" stroke="var(--pos)" stroke-width="2.5"/>
<circle cx="252" cy="134" r="2.5" fill="var(--pos)"/>
<line x1="252" y1="192" x2="238" y2="192" stroke="var(--gnd)" stroke-width="2.5"/><line x1="238" y1="192" x2="238" y2="270" stroke="var(--gnd)" stroke-width="2.5"/>
<circle cx="252" cy="192" r="2.5" fill="var(--gnd)"/>
<!-- button on ... show near nano bottom -->
<text x="325" y="236" text-anchor="middle" font-size="9.5" fill="var(--muted)" font-family="ui-monospace,monospace">button: D2 → GND (scene / wake)</text>
<!-- ULN2803 -->
<rect x="470" y="86" width="150" height="128" rx="6" fill="#fff" stroke="var(--ink)" stroke-width="1.5"/>
<text x="545" y="112" text-anchor="middle" font-size="13" font-weight="700" fill="var(--ink)" font-family="ui-monospace,monospace">ULN2803A</text>
<g font-family="ui-monospace,monospace" font-size="10" fill="var(--muted)">
<text x="484" y="140">IN1</text><text x="484" y="158">IN2</text><text x="484" y="176">IN3</text><text x="484" y="194">IN4</text>
<text x="606" y="140" text-anchor="end">O1</text><text x="606" y="158" text-anchor="end">O2</text><text x="606" y="176" text-anchor="end">O3</text><text x="606" y="194" text-anchor="end">O4</text>
</g>
<!-- nano D3/5/6/9 -> ULN IN1-4 (slate signal) -->
<g stroke="var(--slate)" stroke-width="2">
<line x1="400" y1="134" x2="470" y2="134"/>
<line x1="400" y1="152" x2="470" y2="152"/>
<line x1="400" y1="170" x2="470" y2="170"/>
<line x1="400" y1="188" x2="470" y2="188"/>
</g>
<!-- ULN GND pin9 -->
<line x1="545" y1="214" x2="545" y2="270" stroke="var(--gnd)" stroke-width="2.5"/>
<text x="551" y="230" font-size="9" fill="var(--muted)" font-family="ui-monospace,monospace">GND (pin 9)</text>
<!-- Zone outputs -->
<g font-family="ui-monospace,monospace" font-size="10">
<!-- each: line from ULN out to a zone tag box, LED glyph fed from +5V rail -->
<!-- Z GF -->
<line x1="620" y1="134" x2="700" y2="134" stroke="var(--z-gf)" stroke-width="2.5"/>
<rect x="700" y="122" width="150" height="24" rx="4" fill="#fff" stroke="var(--z-gf)" stroke-width="1.5"/>
<text x="712" y="138" fill="var(--ink)" font-weight="700">GF_INT</text><text x="843" y="138" text-anchor="end" fill="var(--muted)">2 LED</text>
<!-- Z UP -->
<line x1="620" y1="152" x2="700" y2="152" stroke="var(--z-up)" stroke-width="2.5"/>
<rect x="700" y="150" width="150" height="24" rx="4" fill="#fff" stroke="var(--z-up)" stroke-width="1.5"/>
<text x="712" y="166" fill="var(--ink)" font-weight="700">UP_INT</text><text x="843" y="166" text-anchor="end" fill="var(--muted)">3 LED</text>
<!-- Z EXT -->
<line x1="620" y1="170" x2="700" y2="178" stroke="var(--z-ext)" stroke-width="2.5"/>
<rect x="700" y="178" width="150" height="24" rx="4" fill="#fff" stroke="var(--z-ext)" stroke-width="1.5"/>
<text x="712" y="194" fill="var(--ink)" font-weight="700">EXT</text><text x="843" y="194" text-anchor="end" fill="var(--muted)">5 LED</text>
<!-- Z FIRE -->
<line x1="620" y1="188" x2="700" y2="206" stroke="var(--z-fire)" stroke-width="2.5"/>
<rect x="700" y="206" width="150" height="24" rx="4" fill="#fff" stroke="var(--z-fire)" stroke-width="1.5"/>
<text x="712" y="222" fill="var(--ink)" font-weight="700">FIRE</text><text x="843" y="222" text-anchor="end" fill="var(--muted)">1 LED</text>
</g>
<text x="775" y="252" text-anchor="middle" font-size="9.5" fill="var(--muted)" font-family="ui-monospace,monospace">each zone = 2-wire loop (+5V / return), see detail ▶</text>
</svg>
</div>
<p class="caption">Signal (slate) = Nano PWM → ULN input. +5V red, GND black. The ULN pulls each zone's return to ground on command; the LED current never touches an Arduino pin.</p>
</section>
<section>
<div class="sec-head"><span class="num">2</span><h2>Zone loop detail, how LEDs attach</h2><span class="hint">Repeat per zone · add LEDs anywhere on the loop</span></div>
<div class="grid2">
<div class="diagram">
<svg viewBox="0 0 420 220" role="img" aria-label="One zone loop: LEDs in parallel between the 5V rail and a ULN output, each LED with its own series resistor">
<line x1="20" y1="34" x2="400" y2="34" stroke="var(--pos)" stroke-width="3"/>
<text x="20" y="26" font-size="10" fill="var(--pos)" font-family="ui-monospace,monospace" font-weight="700">+5V</text>
<!-- three LEDs -->
<g font-family="ui-monospace,monospace" font-size="9">
<!-- LED template at x=90,190,290 -->
<!-- LED 1 -->
<line x1="90" y1="34" x2="90" y2="66" stroke="var(--pos)" stroke-width="2"/>
<polygon points="80,66 100,66 90,84" fill="var(--z-gf)"/><line x1="80" y1="84" x2="100" y2="84" stroke="var(--z-gf)" stroke-width="2.5"/>
<line x1="90" y1="84" x2="90" y2="104" stroke="var(--ink)" stroke-width="2"/>
<rect x="78" y="104" width="24" height="12" rx="2" fill="#fff" stroke="var(--ink)" stroke-width="1.3"/><text x="90" y="113" text-anchor="middle" fill="var(--ink)">220Ω</text>
<line x1="90" y1="116" x2="90" y2="170" stroke="var(--ink)" stroke-width="2"/>
<!-- LED 2 -->
<line x1="200" y1="34" x2="200" y2="66" stroke="var(--pos)" stroke-width="2"/>
<polygon points="190,66 210,66 200,84" fill="var(--z-gf)"/><line x1="190" y1="84" x2="210" y2="84" stroke="var(--z-gf)" stroke-width="2.5"/>
<line x1="200" y1="84" x2="200" y2="104" stroke="var(--ink)" stroke-width="2"/>
<rect x="188" y="104" width="24" height="12" rx="2" fill="#fff" stroke="var(--ink)" stroke-width="1.3"/><text x="200" y="113" text-anchor="middle" fill="var(--ink)">220Ω</text>
<line x1="200" y1="116" x2="200" y2="170" stroke="var(--ink)" stroke-width="2"/>
<!-- LED 3 -->
<line x1="310" y1="34" x2="310" y2="66" stroke="var(--pos)" stroke-width="2"/>
<polygon points="300,66 320,66 310,84" fill="var(--z-gf)"/><line x1="300" y1="84" x2="320" y2="84" stroke="var(--z-gf)" stroke-width="2.5"/>
<line x1="310" y1="84" x2="310" y2="104" stroke="var(--ink)" stroke-width="2"/>
<rect x="298" y="104" width="24" height="12" rx="2" fill="#fff" stroke="var(--ink)" stroke-width="1.3"/><text x="310" y="113" text-anchor="middle" fill="var(--ink)">220Ω</text>
<line x1="310" y1="116" x2="310" y2="170" stroke="var(--ink)" stroke-width="2"/>
</g>
<!-- return bus to ULN out -->
<line x1="90" y1="170" x2="360" y2="170" stroke="var(--ink)" stroke-width="3"/>
<line x1="360" y1="170" x2="360" y2="196" stroke="var(--ink)" stroke-width="3"/>
<rect x="300" y="196" width="100" height="18" rx="3" fill="#fff" stroke="var(--z-gf)" stroke-width="1.3"/>
<text x="350" y="209" text-anchor="middle" font-size="9.5" fill="var(--ink)" font-family="ui-monospace,monospace">ULN OUTx</text>
</svg>
</div>
<div>
<p style="margin-top:0">Every fixture in a zone shares two wires: <b>+5V</b> and the zone's <b>return</b> to its ULN output. Wire an LED like this and drop it anywhere on the loop, no order, no polarity chain to keep straight beyond each LED's own <b class="mono">+</b> (anode) toward 5V.</p>
<ul style="margin:8px 0 0; padding-left:18px;">
<li><b>Anode (+, longer leg)</b> → +5V rail</li>
<li><b>Cathode (, flat side)</b> → 220Ω → zone return</li>
<li>One resistor <b>per LED</b>, keeps brightness even if one fails</li>
</ul>
<div class="callout"><b>BRIGHTNESS KNOB</b>, start at 220Ω. Too dim? drop toward 150Ω. Too bright? the sketch's per-zone level also trims it in software. Dollhouse rooms read best low.</div>
</div>
</div>
</section>
</div>
<!-- ============================= PAGE 2 ============================= -->
<div class="page">
<section style="margin-top:0">
<div class="sec-head"><span class="num">3</span><h2>Output map</h2></div>
<table>
<thead><tr><th>Zone</th><th>Arduino</th><th>ULN in</th><th>ULN out (pin)</th><th>Fixtures</th><th>Control</th></tr></thead>
<tbody>
<tr><td><span class="chip z-gf">GF_INT</span></td><td class="c">D3 · PWM</td><td class="c">IN1</td><td class="c">OUT1 · pin18</td><td>living + kitchen ceilings</td><td>dim</td></tr>
<tr><td><span class="chip z-up">UP_INT</span></td><td class="c">D5 · PWM</td><td class="c">IN2</td><td class="c">OUT2 · pin17</td><td>2× bedroom ceiling, attic</td><td>dim</td></tr>
<tr><td><span class="chip z-ext">EXT</span></td><td class="c">D6 · PWM</td><td class="c">IN3</td><td class="c">OUT3 · pin16</td><td>porch A/B, entry, deck, balcony</td><td>dim</td></tr>
<tr><td><span class="chip z-fire">FIRE</span></td><td class="c">D9 · PWM</td><td class="c">IN4</td><td class="c">OUT4 · pin15</td><td>hearth</td><td>flicker</td></tr>
</tbody>
</table>
<p class="caption">ULN2803A: GND = pin 9. COM (pin 10) unused for LEDs. Inputs IN18 = pins 18; outputs OUT18 = pins 1811.</p>
</section>
<div class="grid2" style="margin-top:15px">
<section style="margin-top:0">
<div class="sec-head"><span class="num">4</span><h2>Fixture schedule</h2></div>
<table>
<thead><tr><th>Fixture</th><th>Zone</th><th>Install at</th></tr></thead>
<tbody>
<tr><td>Porch light A</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 89</td></tr>
<tr><td>Porch light B</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 89</td></tr>
<tr><td>Front-door entry</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 89</td></tr>
<tr><td>Side deck / wing</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 89</td></tr>
<tr><td>Fireplace / hearth</td><td><span class="chip z-fire">FIRE</span></td><td class="pic">Pic 10</td></tr>
<tr><td>GF living ceiling</td><td><span class="chip z-gf">GF_INT</span></td><td class="pic">Pic 11 ✦</td></tr>
<tr><td>GF kitchen ceiling</td><td><span class="chip z-gf">GF_INT</span></td><td class="pic">Pic 11 ✦</td></tr>
<tr><td>Balcony wall light</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 1213</td></tr>
<tr><td>2F bedroom ceiling</td><td><span class="chip z-up">UP_INT</span></td><td class="pic">Pic 14 ✦</td></tr>
<tr><td>2F bedroom ceiling</td><td><span class="chip z-up">UP_INT</span></td><td class="pic">Pic 14 ✦</td></tr>
<tr><td>Attic ceiling</td><td><span class="chip z-up">UP_INT</span></td><td class="pic">Pic 1617</td></tr>
<tr><td>Spare, eave / yard</td><td><span class="chip">, </span></td><td class="pic">any</td></tr>
</tbody>
</table>
<div class="callout">
<b>SCENES</b>, button on D2 cycles; auto-fades dark after 20 min idle.
<div class="scenes"><span>Evening</span><span class="arrow"></span><span>All&nbsp;On</span><span class="arrow"></span><span>Night</span><span class="arrow"></span><span>Off</span></div>
</div>
</section>
<section style="margin-top:0">
<div class="sec-head"><span class="num">5</span><h2>Build-order checklist</h2></div>
<ul class="steps">
<li><span class="box"></span><span><span class="pic">Pic 5, base closing</span><span class="what">Mount Nano + ULN driver board + power bank + master switch in the crawlspace. Run a 2-wire loop (+5V + return) for each zone up into the house.</span></span></li>
<li><span class="box"></span><span><span class="pic">Pic 89, GF walls</span><span class="what">Wire the 4 <b class="mono">EXT</b> fixtures (porch A/B, entry, deck) onto the EXT loop through pre-drilled holes.</span></span></li>
<li><span class="box"></span><span><span class="pic">Pic 10, chimney base</span><span class="what">Drop the <b class="mono">FIRE</b> hearth LED into the chimney.</span></span></li>
<li><span class="box"></span><span><span class="pic">Pic 11, GF ceiling</span><span class="what"><span class="crit">✦ wire before glue</span> Glue the 2 <b class="mono">GF_INT</b> LEDs to the panel <em>underside</em>, route to a corner, then set the floor.</span></span></li>
<li><span class="box"></span><span><span class="pic">Pic 1213, 2F walls</span><span class="what">Wire the <b class="mono">EXT</b> balcony light.</span></span></li>
<li><span class="box"></span><span><span class="pic">Pic 14, 2F ceiling</span><span class="what"><span class="crit">✦ wire before glue</span> Glue the 2 <b class="mono">UP_INT</b> bedroom LEDs to the panel <em>underside</em> before it goes down.</span></span></li>
<li><span class="box"></span><span><span class="pic">Pic 1617, roof</span><span class="what">Fix the <b class="mono">UP_INT</b> attic LED to a rafter before closing the roof; dormers double as light wells.</span></span></li>
<li><span class="box"></span><span><span class="pic">Finish</span><span class="what">Route the power-bank charge port to a hidden opening (rear wall / chimney base). Leave a base access hatch.</span></span></li>
</ul>
</section>
</div>
<section>
<div class="sec-head"><span class="num">6</span><h2>Bill of materials</h2><span class="hint">Arduino + LEDs already on hand (struck through)</span></div>
<div class="bom">
<div class="item have"><span class="box"></span><span class="name">Arduino Nano</span><span class="qty">×1</span></div>
<div class="item have"><span class="box"></span><span class="name">Warm-white LEDs</span><span class="qty">×12</span></div>
<div class="item"><span class="box"></span><span class="name">ULN2803A driver (+ DIP socket)</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">220Ω resistors (150Ω to brighten)</span><span class="qty">×14</span></div>
<div class="item"><span class="box"></span><span class="name">Momentary pushbutton</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">Slide switch (master, in 5V line)</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">USB power bank · always-on mode</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">USB-A pigtail / breakout</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">Hookup wire 2630 AWG (R/B/sig)</span><span class="qty">~10m</span></div>
<div class="item"><span class="box"></span><span class="name">Perfboard for driver board</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">Hot glue + sticks</span><span class="qty">, </span></div>
<div class="item"><span class="box"></span><span class="name">Heat-shrink / Kapton tape</span><span class="qty">, </span></div>
<div class="item"><span class="box"></span><span class="name">1000µF cap across 5V (optional)</span><span class="qty">×1</span></div>
<div class="item"><span class="box"></span><span class="name">Drill bits 11.5mm</span><span class="qty">, </span></div>
</div>
<p class="caption">Tools: soldering iron + solder, wire strippers, flush cutters, multimeter (verify each zone before gluing it in).</p>
</section>
<footer>
<span>Toys4play Townhouse · 3mm ply · ~1:12 · Rev B</span>
<span>✦ = can't undo once glued · zones: GF_INT · UP_INT · EXT · FIRE</span>
</footer>
</div>