316 lines
25 KiB
HTML
316 lines
25 KiB
HTML
<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 IN1–8 = pins 1–8; outputs OUT1–8 = pins 18–11.</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 8–9</td></tr>
|
||
<tr><td>Porch light B</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 8–9</td></tr>
|
||
<tr><td>Front-door entry</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 8–9</td></tr>
|
||
<tr><td>Side deck / wing</td><td><span class="chip z-ext">EXT</span></td><td class="pic">Pic 8–9</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 12–13</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 16–17</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 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 8–9, 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 12–13, 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 16–17, 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 26–30 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 1–1.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>
|