Skip to the content
2 layers100 × 100 mmStylus synth, the printed circuit board in 3D

A small synthesizer played with a stylus or a probe (such as a multimeter one). It has 20 copper pads on the PCB acting as a keyboard, a speaker and a headphone jack.

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
51
Nets
55
Pads
154
Tracks, vias
253, 11
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Oct 2026
Updated
24 Oct 2026

Overview

Stylus synth is an open-source printed circuit board by atomicra1n, from the atomicra1n/stylus-synth repository on GitHub. It is a 2-layer board of 100 × 100 mm with 51 parts on 55 nets, routed with 253 tracks and 11 vias.

It is built around the LM386. Its parts include 29 resistors, 10 capacitors, 4 connectors, 2 ICs and 2 switches. It belongs with the audio and music boards of this library.

Main components

1

README

README.md

Stylus Synthesizer

A small synthesizer played with a stylus or a probe (such as a multimeter one). It has 20 copper pads on the PCB acting as a keyboard, a speaker and a headphone jack. Controlled by an RP2040-Zero featuring an analog vactrol circuit.

image image image

Features

  • 20 note keyboard (note C to G) from exposed copper pads, playable with a conductive stylus
  • Notes fade out naturally when the stylus is lifted (thanks to the Vactrol circuit, LED + photoresistor)
  • Volume and decay knobs
  • Octave button and waveform button (supports square wave, saw wave and triangle wave)
  • Speaker and a headphone jack that automatically turns the speaker off when headphones are plugged in
  • Can also act as a USB MIDI controller
  • Fully through-hole, easy to solder

Motivation

Week 3 of Hack Club's Half Life was all about music. I remembered an interesting musical instrument from the 60s, which had small metal pads that would play notes when touched with a stylus (the Stylophone), so I decided to make my own smaller version. I also added a small vactrol circuit to make it sound more natural instead of notes cutting off.

Functionality

  • The keyboard has a chain of 21 1 kiloohm resistors between ground and 3.3 volts. Each pad is between two resistors, so it has a different voltage than the rest. The stylus goes into an ADC pin of the RP2040, so it can easily tell all 20 pads apart with just one pin.
  • The RP2040 produces sound as a fast PWM on the GP0 pin, so there are two low-pass filters (1 kiloohm resistor + 10 nanoFarad capacitor each) that smooth it into a waveform
  • The vactrol circuit is simply a green LED shining on a photoresistor. They are sealed together with black heat-shrink. Together they make a filter that opens when the LED is on, and when the stylus lifts, the LED fades and the photoresistor slowly recovers in the dark. This means the note slowly gets quieter and more dull. If it doesn't work right, there is a jumper to bypass the vactrol circuit.
  • A 10 microFarad capacitor removes 1.65V DC from the PWM and two 100 kiloohm resistors make the signal smaller for the amplifier. There is a 10 kiloohm potentiometer for volume.
  • The LM386 amp increases the signal 20 times and runs off 5V from the USB.
  • The headphone jack has a switch inside. Because the speaker goes through said switch, it turns off when the headphones plug in.

How it was made

Everything was designed in KiCad. As I couldn't check my work gradually, I ran simulations in Falstad to check values for the PWM and vactrol. Some issues that arised:

  • The RP2040-Zero had no footprint, so I had to make my own, which was a bit tricky due to spacing between pins.
  • The headphone jack I originally found on GM Electronic had no datasheet so I had no clue what the pinout was. I needed to switch to the ST-214C which did have one.
  • The datasheet I found for the potentiometers had a very blurry drawing which was hard to understand, so I had to make it out with quite the difficulty. I figured out the potentiometers seemingly mount sideways, meaning the knobs stick out the back edge. I also needed to watch the pin order, otherwise the knobs would turn the wrong way.
  • I originally planned to add resistors in series with the headphone jack to make the headphones a bit quieter, but figured out that the resistors would also end up in the speaker path and make it way too quiet. So I made it that the volume knob controls both.
  • I originally routed the amp input too long around the board which would introduce a lot of noise (the amp boosts all signal 20 times).

Tech stack

  • KiCad for the schematic and PCB
  • Falstad for simulating the PWM and vactrol paths
  • CircuitPython and synthio library for the firmware
  • JLCPCB for board manufacturing, GM Electronic for components

Repo layout

  • pcb/ contains all the KiCad work (PCB, schematic, symbols, footprints...)
  • pcb/gerbers contains the gerber and drill files
  • firmware/ contains the CircuitPython firmware
  • images/ contains renders, schematic, PCB layout and Falstad simulations
  • BOM.csv contains the bill of materials

Bill of materials

PartQtySourceUnitTotal
CREATALL RP2040-Zero1GM Electronic$5.50$5.50
LM386N-1 amplifier1GM Electronic$1.40$1.40
DIL08PZ Socket1GM Electronic$0.40$0.40
Speaker (PSR-29N08S)1GM Electronic$0.85$0.85
Potentiometer (PC1621NBK010)2GM Electronic$1.00$2.00
KN32 knob2GM Electronic$0.70$1.40
ST-214C 3.5mm jack1GM Electronic$0.55$0.55
TS6601 button2GM Electronic$0.11$0.22
S140C 1x40 pin header1GM Electronic$0.40$0.40
2 layer 100x100 mm PCB (5 pieces)1JLCPCB$4.00$4.00
Black heat-shrink tubing CHS21-6.41GM Electronic$0.55$0.55
Resistor 1 kiloohm 1% 020723GM Electronic$0.09$2.07
Resistor 1 Megaohm 1% 020710GM Electronic$0.09$0.90
Resistor 100 kiloohm 1% 020710GM Electronic$0.09$0.90
Resistor 10 ohm 1% 020710GM Electronic$0.09$0.90
Resistor 330 ohm 1% 020710GM Electronic$0.09$0.90
Capacitor 220 microFarad 25V5GM Electronic$0.04$0.20
Capacitor 10 microFarad 16V6GM Electronic$0.13$0.78
Capacitor 100 nanofarad3GM Electronic$0.25$0.75
Capacitor 10 nanofarad5GM Electronic$0.16$0.80
Capacitor 47 nanofarad6GM Electronic$0.13$0.78
Green LED 5mm L-53SGC2GM Electronic$0.15$0.30
Photoresistor LDR55161GM Electronic$0.33$0.33
Jumper cap1GM Electronic$0.10$0.10
Stranded wire 0.5mm2, pack of 5m5GM Electronic$0.15$0.75
Parts subtotal$27.73
Shipping (estimate)$10.00
Total$37.73

The stylus is intentionally missing from the BOM. You can solder a multimeter probe or similar and it should work just fine. The total is over the 30$ budget of tier 1 funding, I will cover the rest out of pocket.

Assembly

  • Order the PCB from JLCPCB using the gerber files and order the components from any electronic store or GM Electronic if you're Czech.
  • Begin with the resistors. Keep in mind all resistors in the resistor ladder (above the keyboard) are 1 kiloohm.
  • Solder the ceramic capacitors, the DIP-8 socket, the buttons and pin headers.
  • Solder the electrolytic capacitors (be very careful about the polarity, longer leg goes into +!)
  • Solder the potentiometers and headphone jack on the back edge
  • Solder the RP2040-Zero onto the pin headers. The USB should face the back edge.
  • Put the LM386 amp in the socket matching the silkscreen.
  • For the vactrol, try to bend the LED and photoresistor to make them face each other. Slide heat-shrink over both and shrink it to avoid any light getting in from outside.
  • Solder two wires from the speaker to the SPEAKER pads.
  • Solder the stylus wire (your multimeter probe or similar) to the STYLUS pad.
  • Put the jumper on JP1 pin 2 and 3. This turns the vactrol on. If it sounds weird, you can move it to 1-2 and it will be bypassed.

Firmware

  • Download CircuitPython for the Waveshare RP2040-Zero here.
  • Hold the BOOT button on the RP2040, plug in the USB and drag the .uf2 file onto the drive that should show up in your system.
  • When the CIRCUITPY drive shows up in your system, copy over firmware/code.py onto it.

Controls

  • Touch a pad with the stylus to play it or slide between pads to change notes.
  • VOLUME knob controls the volume, DECAY controls notes fading.
  • OCTAVE button switches between -1, 0 and 1 octave.
  • WAVE button toggles square, saw or triangle wave.

AI disclosure

LLMs (Claude Opus 5.5) was used to get feedback on the PCB schematic and routing, review parts of it and help with fixing bugs. It was also used for other tedious but simple tasks, such as adding the BOM to this README. AI was not used in writing the README, Journal or other parts of the project.


Built for Hack Club Half Life Week 3 (Music).

Parts

51
QtyValueFootprintReferences
231kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R23, R24 +7
310nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC2, C3, C4
2100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR27, R28
2100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1, C6
210kstylus-synth:Pot_WH148_RightAngleRV1, RV2
210uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC5, C8
2220uFCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC7, C9
110Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR29
11MResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR22
1330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR25
147nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC10
1Green 5mmLED_THT:LED_D5.0mmD1
1LDR5516OptoDevice:R_LDR_5.1x4.3mm_P3.4mm_VerticalR26
1LM386Package_DIP:DIP-8_W7.62mm_SocketU2
1OCTAVEButton_Switch_THT:SW_PUSH_6mmSW1
1SPEAKERConnector_Wire:SolderWire-0.5sqmm_1x02_P4.6mm_D0.9mm_OD2.1mm_ReliefJ4
1ST-214Cstylus-synth:Jack_3.5mm_ST-214CJ3
1STYLUSConnector_Wire:SolderWire-0.5sqmm_1x01_D0.9mm_OD2.1mm_ReliefJ1
1STYLUS_PADSstylus-synth:StylusPads_20x4.5mmJ2
1VACTROL_BYPASSConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP1
1WAVEButton_Switch_THT:SW_PUSH_6mmSW2
1~stylus-synth:RP2040-ZeroU1

Similar boards

  • 2 layers152 × 88 mmRFBitBangSMT, the printed circuit board in 3D

    RFBitBangSMT

    profdc9/RFBitBanger

    A QRP digital transceiver created from readily available parts for off-the-grid maintenance

    271 parts222
  • 2 layers90 × 140 mmDrumkid, the printed circuit board in 3D

    Drumkid

    mattybrad/drumkid

    Version 4 was the first successful working design, with full code, schematics, Gerbers, etc available on GitHub.

    70 parts137
  • 2 layersLM80C R6, the printed circuit board in 3D

    LM80C R6

    leomil72/LM80C

    A Z80-based homebrew computer withTMS9918, AY-3-8910, Z80 CTC, Z80 PIO, and Z80 SIO

    153 parts123GPL-3.0
  • 2 layers145.3 × 44.5 mmScout, the printed circuit board in 3D

    Scout

    oskitone/scout

    3D-printed, Arduino-compatible, 17-key mono synth. Squeeeee!

    48 parts114
  • 2 layers184 × 114.8 mmPoly555, the printed circuit board in 3D

    Poly555

    oskitone/poly555

    The POLY555 is a polyphonic, analog, square wave synth based on the 555 timer chip.

    262 parts93
  • 4 layers223.3 × 120.1 mmISA FPGA v2, the printed circuit board in 3D

    ISA FPGA v2

    robfinch/Cores

    Cores ===== RTF's Cores Use at your own risk. Welcome to my galaxy of cores. Contained in the directories are IP cores, source code for digital circuits.

    132 parts78
  • 2 layers101.6 × 137.4 mmOpenxcvr, the printed circuit board in 3D

    Openxcvr

    dawsonjon/OpenXcvr

    Cost Effective HF transceiver based on max1000 FPGA module

    155 parts38MIT
  • 2 layers104.1 × 73.7 mmIsa opl2, the printed circuit board in 3D

    Isa opl2

    skiselev/isa-opl2

    ISA OPL2 Card

    61 parts36

Questions

How big is the Stylus synth PCB?

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

What parts does the Stylus synth use?

51 parts, built around the LM386. 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 Stylus synth KiCad files?

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

Can I use the Stylus synth design in my own project?

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