
OpenDeck r3.0.1
shanteacontrols/OpenDeck
A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.

A full fledged DAW in TUI and GUI flavors: Run it in the terminal or run it as a desktop app (Desktop App Coming Soon..maybe)
Deck is an open-source printed circuit board by joshjetson, from the joshjetson/phosphor repository on GitHub, published under the MIT licence. It is a 2-layer board of 296 × 234 mm with 281 parts on 186 nets, routed with 4,032 tracks and 1,063 vias.
It is built around the 74AHCT125D, 74HC165D and 74HC4067D, with the SK6812MINI-E among its other parts. Its parts include 79 capacitors, 42 diodes, 33 switches, 19 resistors and 15 ICs.
The circuit board for the Phosphor Deck: every knob, button, fader and pad on
top, and the electronics that read them underneath. It is the board drawn on
the schematics, and it runs the firmware in ../../firmware.
Rev A has not been made yet. It passes KiCad's design-rule check with no errors and no unconnected pins, but nobody has held one. Build the breadboard test in the firmware's README before ordering.
Everything is in fab/:
gerbers.zip — the board itself: two copper layers, 296 × 234 mm, 1.6 mm.bom.csv — every part, grouped, with the part to buy where there is one.positions-bottom.csv — where each surface-mount part goes, for a house
that assembles the underside.jlc-bom.csv and jlc-cpl.csv — the same parts and places in the exact
form JLCPCB asks for, with their LCSC part numbers.The board is laid out so that a board house only has to assemble one side: every surface-mount part (chips, resistors, capacitors, LEDs, the Pico 2) is on the bottom. Everything on top is through-hole and soldered by hand: 61 switches, 10 knobs, 8 faders, the 16 pad sensors' tabs and the pedal header.
JLCPCB makes the board and solders every part on the underside for you. You then solder the top parts by hand.
Upload the board. On jlcpcb.com, choose Order now and add
fab/gerbers.zip. It reads the size (296 × 234 mm) and the two layers by
itself.
Choose the board options. Layers 2, thickness 1.6 mm, FR-4. Five boards is the smallest order. Green is the cheapest colour; any colour works. For the surface finish, lead-free HASL is fine; ENIG costs more and gives flatter pads. Leave the rest as it is.
Turn on PCB Assembly. Choose:
Upload the two parts files: fab/jlc-bom.csv as the BOM and
fab/jlc-cpl.csv as the CPL (the placement file). Every line should
match a part. If one is out of stock, pick a part with the same value,
rating and size, or wait.
Check the placement preview. It shows each part on the board, seen from underneath. The files already turn each part the way JLC's drawings need, but look at each kind once:
The small resistors and capacitors can sit either way round. If a part
is wrong, select it and turn it in the preview, or change its Rotation
in jlc-cpl.csv and upload it again.
Solder the top by hand when the boards arrive: the 61 switches, 10 knobs, 8 faders, the 16 pad sensors' tabs and the pedal header. If you left the Pico 2 off the order (mark it do not place on the parts page), solder it underneath by its edge pads.
The board is larger than 650 cm², so JLC adds a large-board fee to the assembly. Basic parts need no loading fee in an Economic order; in a Standard order every kind of part has a small one.
The board is generated, not drawn: generate.py places every part from the
panel drawing and wires it from firmware/deck-layout.json, Phosphor's own
control table, so the board, the firmware and the app share one table.
route.sh runs the lot — placement, routing with Freerouting, ground pours,
the design-rule check, and the files in fab/:
KICAD=/Applications/KiCad/KiCad.app \
FREEROUTING=freerouting-2.4.1.jar \
JAVA=<a Java 25 runtime>/bin/java \
./route.shIt needs KiCad 10 and Freerouting 2.4, which needs Java 25. Routing takes
about five minutes a try. The router's result varies a little from run to
run and now and then leaves a connection unrouted, so the script tries up to
three times and writes fab/ only from a board with no errors and nothing
unconnected; drc.rpt is the check that board passed. A ground fill covers
both sides, tied together by stitching vias wherever one fits.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 57 | 100n | C_0603_1608Metric | C1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +41 |
| 42 | SK6812MINI-E | LED_SK6812MINI-E_3.2x2.8mm_P1.5mm_ReverseMount | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +26 |
| 23 | 4x10k | R_Array_Convex_4x0603 | RN1, RN2, RN10, RN11, RN12, RN13, RN14, RN15, RN16, RN17, RN18, RN19, RN20, RN21, RN22, RN23 +7 |
| 20 | 10n | C_0603_1608Metric | C55, C56, C57, C58, C59, C60, C61, C62, C63, C64, C65, C66, C67, C68, C69, C70 +4 |
| 16 | 10k | R_0603_1608Metric | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16 |
| 12 | 74HC165 | SOIC-16_3.9x9.9mm_P1.27mm | U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12 |
| 6 | M3 | MountingHole_3.2mm_M3 | H1, H2, H3, H4, H5, H6 |
| 2 | 74HC4067 | SOIC-24W_7.5x15.4mm_P1.27mm | U13, U14 |
| 2 | LOOP | SW_PUSH_6mm | SW5, SW13 |
| 1 | 1-16 | SW_PUSH_6mm | SW60 |
| 1 | 1000u 10V | CP_Elec_8x10 | C79 |
| 1 | 100k | R_0603_1608Metric | R18 |
| 1 | 10u | C_0805_2012Metric | C77 |
| 1 | 17-32 | SW_PUSH_6mm | SW61 |
| 1 | 1k | R_0603_1608Metric | R17 |
| 1 | 330 | R_0603_1608Metric | R19 |
| 1 | 74AHCT125 | SOIC-14_3.9x8.7mm_P1.27mm | U16 |
| 1 | ACTION 1 | SW_PUSH_6mm | SW33 |
| 1 | ACTION 2 | SW_PUSH_6mm | SW35 |
| 1 | ACTION 3 | SW_PUSH_6mm | SW37 |
| 1 | ACTION 4 | SW_PUSH_6mm | SW39 |
| 1 | ACTION 5 | SW_PUSH_6mm | SW41 |
| 1 | ACTION 6 | SW_PUSH_6mm | SW43 |
| 1 | ACTION 7 | SW_PUSH_6mm | SW45 |
| 1 | ACTION 8 | SW_PUSH_6mm | SW47 |
| 1 | ARM | SW_PUSH_6mm | SW55 |
| 1 | BACK | SW_PUSH_6mm | SW16 |
| 1 | BROWSE | SW_PUSH_6mm | SW17 |
| 1 | CLICK | SW_PUSH_6mm | SW6 |
| 1 | COPY | SW_PUSH_6mm | SW27 |
| 1 | COUNT IN | SW_PUSH_6mm | SW7 |
| 1 | DELETE | SW_PUSH_6mm | SW29 |
| 1 | DOWN | SW_PUSH_6mm | SW22 |
| 1 | DUPLICATE | SW_PUSH_6mm | SW30 |
| 1 | FADER 1 | Potentiometer_Bourns_PTA4543_Single_Slide | RV1 |
| 1 | FADER 2 | Potentiometer_Bourns_PTA4543_Single_Slide | RV2 |
| 1 | FADER 3 | Potentiometer_Bourns_PTA4543_Single_Slide | RV3 |
| 1 | FADER 4 | Potentiometer_Bourns_PTA4543_Single_Slide | RV4 |
| 1 | FADER 5 | Potentiometer_Bourns_PTA4543_Single_Slide | RV5 |
| 1 | FADER 6 | Potentiometer_Bourns_PTA4543_Single_Slide | RV6 |
| 1 | FADER 7 | Potentiometer_Bourns_PTA4543_Single_Slide | RV7 |
| 1 | FADER 8 | Potentiometer_Bourns_PTA4543_Single_Slide | RV8 |
| 1 | FUNCTION | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC1 |
| 1 | GRID | SW_PUSH_6mm | SW11 |
| 1 | KNOB 1 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC3 |
| 1 | KNOB 2 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC4 |
| 1 | KNOB 3 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC5 |
| 1 | KNOB 4 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC6 |
| 1 | KNOB 5 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC7 |
| 1 | KNOB 6 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC8 |
| 1 | KNOB 7 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC9 |
| 1 | KNOB 8 | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC10 |
| 1 | LAST | SW_PUSH_6mm | SW14 |
| 1 | LEFT | SW_PUSH_6mm | SW20 |
| 1 | LOCK | SW_PUSH_6mm | SW15 |
| 1 | MASTER | SW_PUSH_6mm | SW12 |
| 1 | MENU | SW_PUSH_6mm | SW19 |
| 1 | MUTE | SW_PUSH_6mm | SW53 |
| 1 | MY PAGE | SW_PUSH_6mm | SW51 |
| 1 | NAVIGATE | RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | ENC2 |
| 1 | NEW | SW_PUSH_6mm | SW32 |
| 1 | OVERDUB | SW_PUSH_6mm | SW4 |
| 1 | PAD 1 | PinHeader_1x02_P2.54mm_Vertical | FSR1 |
| 1 | PAD 10 | PinHeader_1x02_P2.54mm_Vertical | FSR10 |
| 1 | PAD 11 | PinHeader_1x02_P2.54mm_Vertical | FSR11 |
| 1 | PAD 12 | PinHeader_1x02_P2.54mm_Vertical | FSR12 |
| 1 | PAD 13 | PinHeader_1x02_P2.54mm_Vertical | FSR13 |
| 1 | PAD 14 | PinHeader_1x02_P2.54mm_Vertical | FSR14 |
| 1 | PAD 15 | PinHeader_1x02_P2.54mm_Vertical | FSR15 |
| 1 | PAD 16 | PinHeader_1x02_P2.54mm_Vertical | FSR16 |
| 1 | PAD 2 | PinHeader_1x02_P2.54mm_Vertical | FSR2 |
| 1 | PAD 3 | PinHeader_1x02_P2.54mm_Vertical | FSR3 |
| 1 | PAD 4 | PinHeader_1x02_P2.54mm_Vertical | FSR4 |
| 1 | PAD 5 | PinHeader_1x02_P2.54mm_Vertical | FSR5 |
| 1 | PAD 6 | PinHeader_1x02_P2.54mm_Vertical | FSR6 |
| 1 | PAD 7 | PinHeader_1x02_P2.54mm_Vertical | FSR7 |
| 1 | PAD 8 | PinHeader_1x02_P2.54mm_Vertical | FSR8 |
| 1 | PAD 9 | PinHeader_1x02_P2.54mm_Vertical | FSR9 |
| 1 | PADS ▲ | SW_PUSH_6mm | SW58 |
| 1 | PADS ▼ | SW_PUSH_6mm | SW59 |
The 251 most common of 281 parts.
It measures 296 × 234 mm and has 2 copper layers, 1.6 mm thick.
281 parts, built around the 74AHCT125D, 74HC165D, 74HC4067D and SK6812MINI-E. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the joshjetson/phosphor repository on GitHub, at the commit this page was made from: the board is hardware/deck-pcb/deck.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

shanteacontrols/OpenDeck
A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.


byungyoonc/TrueStrike42
TrueStrike42 is a columnar staggered unibody split keyboard designed to maximize performance and minimize finger fatigue.

Broccoliux/Broccoli-board
A fully custom 100% mechanical keyboard with a custom black PCB, hot-swap clicky switches, and full RGB where every internal component is hand soldered and nothing is by assemble.

byungyoonc/TrueStrike56
TrueStrike56 is a columnar staggered unibody split hall effect keyboard with popular 4x6_4 layout.


HashirX-ux/Nexus
A customizable mechanical macropad for productivity, shortcuts, and macros. Built with QMK firmware support.

atoomnetmarc/n-teller-xl-diy
n-teller-xl-diy is an IoT device that displays the number of checked in participants and visitors at the hackerspace called Revelation Space (or RevSpace).