As-built: brushed-aluminium/stainless case + 9V DC pedal jack (pedalboard-ready)
- Case: reskin the enclosure as a brushed-aluminium / stainless faceplate (metal sheen + brushed grain, chrome corner screws, dark engraved legends) instead of 3D-printed matte. The on-faceplate captions switch to the dark legend colour for contrast; I/O-strip labels stay light (they're on the dark recessed bay). BOM enclosure → die-cast aluminium (Hammond 1590-style) / folded stainless. - Power: add a standard 9 V DC pedal jack (2.1 mm centre-negative) so it drops straight onto a pedalboard, alongside USB-C (which still powers it on a desk and carries config). BOM adds the jack + 9 V→5 V buck + reverse-polarity protection. Total ≈ $59. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
504ea14dba
commit
831e74a584
1 changed files with 22 additions and 16 deletions
|
|
@ -19,7 +19,9 @@
|
||||||
• rear I/O: external trigger in (footswitch), a 1/4" instrument pass-through
|
• rear I/O: external trigger in (footswitch), a 1/4" instrument pass-through
|
||||||
with the click mixed in the ANALOG domain (DAC → summing op-amp → balanced
|
with the click mixed in the ANALOG domain (DAC → summing op-amp → balanced
|
||||||
line driver), a shared 1/4" balanced-TRS main out, plus an analog monitor
|
line driver), a shared 1/4" balanced-TRS main out, plus an analog monitor
|
||||||
amp + speaker, USB-C and a PWR LED, in a compact matte case.
|
amp + speaker. Powered from a standard 9 V DC pedal jack (2.1 mm centre-
|
||||||
|
negative, pedalboard-friendly) or USB-C (also carries config), in a brushed
|
||||||
|
aluminium / stainless enclosure.
|
||||||
A rough bill of materials for all of this is shown below the loader on the page.
|
A rough bill of materials for all of this is shown below the loader on the page.
|
||||||
Compare with the idealized /player.html. One file, no deps; shares src/engine.js.
|
Compare with the idealized /player.html. One file, no deps; shares src/engine.js.
|
||||||
-->
|
-->
|
||||||
|
|
@ -38,8 +40,9 @@
|
||||||
--bg1:#12151c; --bg2:#05070a;
|
--bg1:#12151c; --bg2:#05070a;
|
||||||
--txt:#c7d0db; --muted:#7f8b9a; --link:#6cb6ff;
|
--txt:#c7d0db; --muted:#7f8b9a; --link:#6cb6ff;
|
||||||
--panel-bg:#171b22; --panel-bd:#2a313c; --field-bg:#0e1116; --field-bd:#222a36;
|
--panel-bg:#171b22; --panel-bd:#2a313c; --field-bg:#0e1116; --field-bd:#222a36;
|
||||||
/* device — fixed matte hardware in both themes */
|
/* device — brushed-aluminium / stainless faceplate (fixed in both themes);
|
||||||
--case:#22262e; --case2:#15181d; --device-bd:#0b0d11; --silk:#9aa6b2;
|
--silk is the dark engraved legend colour on the metal */
|
||||||
|
--case:#a9afb7; --case2:#878e98; --device-bd:#5a616b; --silk:#2f343b;
|
||||||
--pcb:#0d2620; --oled-bezel:#04060a; --metal:#3a424e;
|
--pcb:#0d2620; --oled-bezel:#04060a; --metal:#3a424e;
|
||||||
}
|
}
|
||||||
:root[data-theme="light"]{
|
:root[data-theme="light"]{
|
||||||
|
|
@ -61,17 +64,17 @@
|
||||||
padding:3px 9px; font-size:14px; line-height:1; cursor:pointer }
|
padding:3px 9px; font-size:14px; line-height:1; cursor:pointer }
|
||||||
.tbtn:hover{ color:var(--txt) }
|
.tbtn:hover{ color:var(--txt) }
|
||||||
|
|
||||||
/* ---- the device: matte 3D-printed case ---- */
|
/* ---- the device: brushed-aluminium / stainless faceplate ---- */
|
||||||
.device{
|
.device{
|
||||||
width:100%; max-width:380px; position:relative;
|
width:100%; max-width:380px; position:relative;
|
||||||
background:
|
background:
|
||||||
repeating-linear-gradient(115deg, rgba(255,255,255,.012) 0 2px, transparent 2px 4px),
|
repeating-linear-gradient(90deg, rgba(255,255,255,.07) 0 1px, rgba(0,0,0,.05) 1px 3px), /* brushed grain */
|
||||||
linear-gradient(180deg, var(--case), var(--case2));
|
linear-gradient(158deg, #bcc2ca 0%, #969da7 46%, #aeb4bd 60%, #848b95 100%); /* metal sheen */
|
||||||
border:1px solid var(--device-bd); border-radius:18px; padding:16px 14px 14px;
|
border:1px solid var(--device-bd); border-radius:13px; padding:16px 14px 14px;
|
||||||
box-shadow:0 24px 55px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.05), inset 0 -2px 10px rgba(0,0,0,.6);
|
box-shadow:0 22px 50px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.55), inset 0 -2px 8px rgba(0,0,0,.28);
|
||||||
}
|
}
|
||||||
.device::before, .device::after, .device .screw{ content:""; position:absolute; width:10px; height:10px; border-radius:50%;
|
.device::before, .device::after, .device .screw{ content:""; position:absolute; width:10px; height:10px; border-radius:50%;
|
||||||
background:radial-gradient(circle at 35% 30%, #5a626e, #1a1e24 70%); box-shadow:inset 0 0 2px #000, 0 1px 1px rgba(0,0,0,.5); }
|
background:radial-gradient(circle at 36% 30%, #f0f2f5, #8b929b 60%, #5b626b 100%); box-shadow:inset 0 0 2px rgba(0,0,0,.4), 0 1px 1px rgba(0,0,0,.3); }
|
||||||
.device::before{ top:12px; left:12px } .device::after{ top:12px; right:12px }
|
.device::before{ top:12px; left:12px } .device::after{ top:12px; right:12px }
|
||||||
.screw.bl{ bottom:12px; left:12px } .screw.br{ bottom:12px; right:12px }
|
.screw.bl{ bottom:12px; left:12px } .screw.br{ bottom:12px; right:12px }
|
||||||
|
|
||||||
|
|
@ -88,10 +91,10 @@
|
||||||
box-shadow:inset 0 0 0 2px #15181d, inset 0 0 0 3px #000, 0 3px 9px rgba(0,0,0,.55) }
|
box-shadow:inset 0 0 0 2px #15181d, inset 0 0 0 3px #000, 0 3px 9px rgba(0,0,0,.55) }
|
||||||
#tft{ display:block; width:320px; height:240px; max-width:100%; border-radius:4px; background:#06080c;
|
#tft{ display:block; width:320px; height:240px; max-width:100%; border-radius:4px; background:#06080c;
|
||||||
box-shadow:0 0 0 1px #000, inset 0 0 18px rgba(0,0,0,.45) }
|
box-shadow:0 0 0 1px #000, inset 0 0 18px rgba(0,0,0,.45) }
|
||||||
.tft-cap{ text-align:center; font-size:10px; color:var(--muted); margin-top:7px; letter-spacing:.02em }
|
.tft-cap{ text-align:center; font-size:10px; color:var(--silk); opacity:.8; margin-top:7px; letter-spacing:.02em }
|
||||||
|
|
||||||
/* small caption under the screen / I/O (the beat indicator lives on the TFT now) */
|
/* small caption under the screen / I/O (the beat indicator lives on the TFT now) */
|
||||||
.ledbar-cap{ text-align:center; font-size:10px; color:var(--muted); margin:2px 0 0; letter-spacing:.02em }
|
.ledbar-cap{ text-align:center; font-size:10px; color:var(--silk); opacity:.8; margin:2px 0 0; letter-spacing:.02em }
|
||||||
|
|
||||||
/* side-by-side: player on the left, BOM on the right (stacks when narrow) */
|
/* side-by-side: player on the left, BOM on the right (stacks when narrow) */
|
||||||
.cols{ display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:center; gap:18px; width:100% }
|
.cols{ display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:center; gap:18px; width:100% }
|
||||||
|
|
@ -134,8 +137,9 @@
|
||||||
.jack{ flex:1; display:flex; flex-direction:column; align-items:center; gap:5px }
|
.jack{ flex:1; display:flex; flex-direction:column; align-items:center; gap:5px }
|
||||||
.jack i{ width:20px; height:20px; border-radius:50%; background:radial-gradient(circle at 40% 34%, #333a44, #07090c 72%);
|
.jack i{ width:20px; height:20px; border-radius:50%; background:radial-gradient(circle at 40% 34%, #333a44, #07090c 72%);
|
||||||
border:2px solid #5b6470; box-shadow:inset 0 0 4px #000 }
|
border:2px solid #5b6470; box-shadow:inset 0 0 4px #000 }
|
||||||
.jack b{ font-size:7.5px; font-weight:700; color:var(--silk); letter-spacing:.05em; text-transform:uppercase; opacity:.85; text-align:center; line-height:1.3 }
|
.jack b{ font-size:7.5px; font-weight:700; color:#8f9aa6; letter-spacing:.05em; text-transform:uppercase; opacity:.9; text-align:center; line-height:1.3 }
|
||||||
.jack.usb i{ width:24px; height:10px; border-radius:4px; border:2px solid #5b6470; background:#07090c; margin-top:5px }
|
.jack.usb i{ width:24px; height:10px; border-radius:4px; border:2px solid #5b6470; background:#07090c; margin-top:5px }
|
||||||
|
.jack.dc i{ background:radial-gradient(circle, #6b7480 0 2.5px, #0a0d11 3.5px 72%) } /* DC barrel: centre pin */
|
||||||
|
|
||||||
/* ---- load panel (same as the other pages) ---- */
|
/* ---- load panel (same as the other pages) ---- */
|
||||||
.panel{ width:100%; max-width:380px; background:var(--panel-bg); border:1px solid var(--panel-bd); border-radius:14px; padding:16px }
|
.panel{ width:100%; max-width:380px; background:var(--panel-bg); border:1px solid var(--panel-bd); border-radius:14px; padding:16px }
|
||||||
|
|
@ -211,9 +215,10 @@
|
||||||
<div class="jack" title="External trigger in — footswitch to start/stop or tap tempo"><i></i><b>Trig In</b></div>
|
<div class="jack" title="External trigger in — footswitch to start/stop or tap tempo"><i></i><b>Trig In</b></div>
|
||||||
<div class="jack" title="Instrument in — 1/4" pass-through; the click is mixed into your signal"><i></i><b>Inst In</b></div>
|
<div class="jack" title="Instrument in — 1/4" pass-through; the click is mixed into your signal"><i></i><b>Inst In</b></div>
|
||||||
<div class="jack" title="Main out — 1/4" balanced TRS (instrument + click); the shared output plug"><i></i><b>Out TRS</b></div>
|
<div class="jack" title="Main out — 1/4" balanced TRS (instrument + click); the shared output plug"><i></i><b>Out TRS</b></div>
|
||||||
|
<div class="jack dc" title="9 V DC in — standard 2.1 mm centre-negative pedal power; drop it on your pedalboard"><i></i><b>9V DC</b></div>
|
||||||
<div class="jack usb" title="USB-C — power & set-list transfer"><i></i><b>USB-C</b></div>
|
<div class="jack usb" title="USB-C — power & set-list transfer"><i></i><b>USB-C</b></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ledbar-cap">Trig in · 1/4″ inst pass‑through (click injected) · shared 1/4″ balanced‑TRS out</div>
|
<div class="ledbar-cap">Trig in · 1/4″ inst pass‑through (click injected) · shared 1/4″ balanced‑TRS out · 9 V DC or USB‑C power</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ===================== LOAD CONFIG ===================== -->
|
<!-- ===================== LOAD CONFIG ===================== -->
|
||||||
|
|
@ -236,7 +241,7 @@
|
||||||
<!-- ===================== BILL OF MATERIALS ===================== -->
|
<!-- ===================== BILL OF MATERIALS ===================== -->
|
||||||
<div class="panel bom-panel">
|
<div class="panel bom-panel">
|
||||||
<h2>Bill of materials</h2>
|
<h2>Bill of materials</h2>
|
||||||
<p class="sub">Rough parts list for the device above — a USB‑C‑powered RP2040 build with analog click injection.
|
<p class="sub">Rough parts list for the device above — a pedalboard‑friendly RP2040 build (9 V DC or USB‑C) with analog click injection.
|
||||||
Ballpark one-off prices (USD); cheaper at volume.</p>
|
Ballpark one-off prices (USD); cheaper at volume.</p>
|
||||||
<table class="bom">
|
<table class="bom">
|
||||||
<thead><tr><th>Part</th><th class="q">Qty</th><th class="c">~$</th></tr></thead>
|
<thead><tr><th>Part</th><th class="q">Qty</th><th class="c">~$</th></tr></thead>
|
||||||
|
|
@ -256,11 +261,12 @@
|
||||||
<tr class="grp"><td colspan="3">Connectors & power</td></tr>
|
<tr class="grp"><td colspan="3">Connectors & power</td></tr>
|
||||||
<tr><td class="part">1/4″ jack <span class="spec">— Inst In (TS) · Out (TRS) · Trig In (TS)</span></td><td class="q">3</td><td class="c">3</td></tr>
|
<tr><td class="part">1/4″ jack <span class="spec">— Inst In (TS) · Out (TRS) · Trig In (TS)</span></td><td class="q">3</td><td class="c">3</td></tr>
|
||||||
<tr><td class="part">USB‑C bus power (5 V) + PWR LED <span class="spec">— same port carries config; no battery</span></td><td class="q">1</td><td class="c">1</td></tr>
|
<tr><td class="part">USB‑C bus power (5 V) + PWR LED <span class="spec">— same port carries config; no battery</span></td><td class="q">1</td><td class="c">1</td></tr>
|
||||||
|
<tr><td class="part">9 V DC pedal jack (2.1 mm centre‑neg) + 9 V→5 V buck + reverse‑polarity protect <span class="spec">— pedalboard power</span></td><td class="q">1</td><td class="c">3</td></tr>
|
||||||
<tr class="grp"><td colspan="3">Build</td></tr>
|
<tr class="grp"><td colspan="3">Build</td></tr>
|
||||||
<tr><td class="part">Custom PCB (or perfboard)</td><td class="q">1</td><td class="c">5</td></tr>
|
<tr><td class="part">Custom PCB (or perfboard)</td><td class="q">1</td><td class="c">5</td></tr>
|
||||||
<tr><td class="part">Passives, headers, wire <span class="spec">— R/C for the analog stage + decoupling</span></td><td class="q">—</td><td class="c">3</td></tr>
|
<tr><td class="part">Passives, headers, wire <span class="spec">— R/C for the analog stage + decoupling</span></td><td class="q">—</td><td class="c">3</td></tr>
|
||||||
<tr><td class="part">3D‑printed enclosure + screws / standoffs</td><td class="q">1</td><td class="c">5</td></tr>
|
<tr><td class="part">Die‑cast aluminium enclosure (Hammond 1590‑style) — or folded stainless <span class="spec">— pedal‑grade</span></td><td class="q">1</td><td class="c">12</td></tr>
|
||||||
<tr class="total"><td>Total (one‑off)</td><td class="q"></td><td class="c">≈ $49</td></tr>
|
<tr class="total"><td>Total (one‑off)</td><td class="q"></td><td class="c">≈ $59</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p class="sub" style="margin-top:12px">Audio is summed in the <b>analog domain</b>: the DAC's click is mixed with a high‑impedance
|
<p class="sub" style="margin-top:12px">Audio is summed in the <b>analog domain</b>: the DAC's click is mixed with a high‑impedance
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue