Skip to the content
PCBKitNew board
2 layers60 × 51 mmIo patchbox, the printed circuit board in 3D

ESP32-S3-based 3-channel sensor-to-actor controller for interactive art therapy, featuring automatic sensor detection and proportional PWM output.

Size
60 × 51 mm
Copper layers
2
Thickness
1.6 mm
Parts
22
Nets
30
Pads
69
Tracks, vias
210, 24
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
2 Jul 2026
Updated
9 Jul 2026

Overview

Io patchbox is an open-source printed circuit board by wistoff, from the wistoff/io-patchbox repository on GitHub. It is a 2-layer board of 60 × 51 mm with 22 parts on 30 nets, routed with 210 tracks and 24 vias.

It is built around the PJ-320A. Its parts include 6 ICs, 3 resistors, 3 diodes, 3 transistors and 2 connectors. It belongs with the sensors and measurement boards of this library.

Main components

1

README

README.md

I/O Patchbox

A 3-channel sensor-to-actor controller designed for Manou Wistoff's approach to phygitale Kunsttherapie, part of her master thesis at Alanus Kunsthochschule.

Building on the concept of phygitale Kunsttherapie, the I/O Patchbox makes the digital tangible by bringing interactive electronics into the physical space. Interactive electronic components become material in the art therapy process, just like clay, paint, or fabric. Through process-oriented creating (Tinkering), clients combine classical crafting materials with sensors and actors connected through the I/O Patchbox, resulting in interactive artworks.

The I/O Patchbox is built on an ESP32-S3 Mini with a custom carrier PCB. Each channel auto-detects its sensor type at boot (ultrasonic HC-SR04 or capacitive touch) and drives an output (LED, motor) proportionally via PWM through a low-side NPN transistor stage.

I/O Patchbox in action

LED output Fan output

How it works

  • 3 sensor inputs (TRRS jacks) carrying power, trigger, echo, and ground
  • 3 actor outputs (TRRS jacks) with 5V PWM low-side switch (2N2222 + flyback diode), load adapted in cable
  • Mode switch to enable/disable all outputs and trigger recalibration
  • Auto-detect probes each channel for ultrasonic echoes and falls back to touch if none are found
  • Ultrasonic: brightness inversely proportional to distance (0-60 cm)
  • Touch: brightness proportional to capacitive contact, with adaptive baseline and asymmetric smoothing

Project structure

text
i-o-patchbox/
├── firmware/
│   ├── esp32s3-mini/            # current target (LOLIN ESP32-S3 Mini)
│   │   ├── src/main.cpp
│   │   ├── platformio.ini
│   │   └── PINOUT.md
│   └── esp32-wroom-dev-board/   # earlier prototype (ESP32 WROOM DevKit)
│       ├── src/main.cpp
│       ├── platformio.ini
│       └── PINOUT.md
├── hardware/                    # KiCad 10 PCB project
│   ├── pcb.kicad_sch             # schematic
│   ├── pcb.kicad_pcb             # board layout (single-sided, home-etched)
│   ├── pcb.kicad_pro             # project file
│   ├── libs/PJ-320A/             # TRRS jack symbol + footprint library
│   ├── gerber/                   # fabrication outputs
│   ├── exports/                  # SVG renders, drill maps
│   ├── backups/                  # KiCad auto-backups
│   └── schaltplan.pdf            # schematic export
└── enclosure/                   # 3D-printable cases (OBJ)
    ├── cable-plug.obj            # cable strain relief (used by all sensors and actors)
    ├── patchbox/                 # main device enclosure
    │   ├── top.obj
    │   ├── bottom.obj

Pin assignment (ESP32-S3 Mini)

ChannelTrigger / TouchEchoActor
1GP1GP7GP10
2GP2GP8GP11
3GP3GP9GP12
Switch--GP13

Sensors

All sensors connect via 4-pole TRRS jacks (PJ-320D). Wiring: Tip = +5V, Ring1 = TRIG, Ring2 = ECHO, Sleeve = GND.

Each channel auto-detects its sensor type at startup by probing for ultrasonic echoes. If none are found, it falls back to capacitive touch.

TypePartHow it works
UltrasonicHC-SR04Distance sensor (2-60 cm). All 4 TRRS conductors used. Output brightness is inversely proportional to distance.
Capacitive touchBare wire / crocodile cableConnects to the ECHO pin (Ring2) only. Touch value increases on contact (ESP32-S3 behavior). Adaptive baseline with asymmetric smoothing. Slow ramp-up absorbs motor-stop noise while fast ramp-down keeps release responsive. Recalibrates each time the switch is toggled on.

Actors

All actors connect via TRRS jacks. Wiring: Tip = +5V (always on), Sleeve = transistor collector (PWM-switched ground). Ring1/Ring2 unused.

The board provides a generic 5V PWM low-side driver per channel (2N2222 + 330R base resistor + 1N4007 flyback diode). The load type is adapted in the device cable with a series resistor, so no board changes are needed to swap between LEDs and motors.

LoadCable resistorNotes
LED (red/yellow)150R series~20 mA at 5V, polarity matters (anode to Tip)
LED (green/blue/white)100R seriesHigher Vf, ~18 mA
5V motornoneDirect connection, bare cable
3V vibration motornoneRuns off 5V directly, no series resistor

PWM runs at 25 kHz (inaudible for motors), 8-bit resolution (0-255).

Building firmware

Requires PlatformIO.

sh
cd firmware/esp32s3-mini
pio run -t upload
pio device monitor

Hardware

Single-sided carrier PCB designed in KiCad 10 for home etching (toner transfer). All copper on F.Cu, SMD TRRS jacks, THT passives soldered from the top side.

Etched PCB

Key components: 3x PJ-320D TRRS jacks (sensor), 3x PJ-320D (actor), 3x 2N2222 NPN transistors, 3x 330R base resistors, 3x 1N4007 flyback diodes.

Parts

22
QtyValueFootprintReferences
6PJ-320APJ-320A_Library:PJ-320D_SMD_remapU2, U3, U4, U5, U6, U7
31N4007Diode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD1, D2, D3
32N2222Package_TO_SOT_THT:TO-92_Inline_WideQ1, Q2, Q3
3RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R2, R3
2Conn_01x11Connector_PinHeader_2.54mm:PinHeader_1x09_P2.54mm_VerticalJ1, J2
1SW_SPSTConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalSW1

The 18 most common of 22 parts.

Questions

How big is the Io patchbox PCB?

It measures 60 × 51 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Io patchbox use?

22 parts, built around the PJ-320A. 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.

Where can I download the Io patchbox KiCad files?

From the wistoff/io-patchbox repository on GitHub, at the commit this page was made from: the board is hardware/pcb.kicad_pcb and its schematic hardware/pcb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Io patchbox design in my own project?

Its repository states no licence, so its author keeps all rights: ask wistoff before reusing the design.

Similar boards

  • 2 layers208.8 × 396.9 mmFerris, the printed circuit board in 3D

    Ferris

    pierrechevalier83/ferris

    A low profile split keyboard designed to satisfy one single use case elegantly

    145 parts1.3k
  • 2 layers22.8 × 36 mmDigirig mobile, the printed circuit board in 3D

    Digirig mobile

    softcomplex/Digirig-Mobile

    Integrated digital modes interface for amateur radio

    64 parts133GPL-3.0
  • 2 layers182.8 × 169.2 mmErgoMaxReversible, the printed circuit board in 3D

    ErgoMaxReversible

    LouWii/ErgoMax

    Custom ergo split keyboard project, based on ErgoDox, with hot swap sockets

    106 parts124
  • 2 layers200 × 96 mmTouchtone555, the printed circuit board in 3D

    Touchtone555

    DarcyJProjects/touchtone555

    An open-source DIY, NE555-based analogue synthesizer - play notes with a stylus

    73 parts33
  • 2 layers40 × 22.8 mmDigiport-891, the printed circuit board in 3D

    Digiport-891

    BD5HLI/DigiPort

    集成USB口和声卡的业余电台数据模式接口盒子

    45 parts15GPL-3.0
  • 2 layers76.2 × 146.6 mmMysteripad pcb, the printed circuit board in 3D

    Mysteripad pcb

    piit79/mysteripad

    A through-hole mechanical numpad with an extra row to match the Mysterium keyboard

    74 parts12GPL-3.0
  • 2 layers114.3 × 156 mm3DotDash, the printed circuit board in 3D

    3DotDash

    aydenvis/Ortho-Minidox-Choch-Switches

    56 parts9
  • 2 layers50 × 40 mmForceKey v1.0, the printed circuit board in 3D

    ForceKey v1.0

    fred-corp/ForceKey

    a force sensitive morse paddle key

    38 parts7CC-BY-SA-4.0