Dark Board

Insights about our own "bread board"
Universal, Flexible, Dark - building a controller is fun

available now

The idea behind Dark Board

Honestly, it happened by accident : )) … when we created our Dark Fader controller we needed a PCB (Printed Circuit Board) first. We created one and it worked well. But we asked ourselves: “Why not build a universal PCB, which can be used for any Teensy based controller?”.

So we started again and created Dark Board with simple but effective routing. We added all the components that are usually missing on the typical bread board on the market (e.g. full sized USB connector, USB hub on board, additional IC’s like the MCP23017, I/O resistors, Teensy 3.2-3.6, I2C bus etc.).

We designed a bus structure that allows you to connect any control elements easily and flexibly. Each control has its own connector, no longer any wires between the mounted controls below the panels needed.

We like it … and use it internally for all of our controllers.

Combine your ideas with our board

In case you want to build your own Teensy MIDI controller with your own software and are searching for a PCB, then the Dark Board could be of interest for you.

The Dark Board is made by a professional PCB vendor to our specifications. It is in high quality and we use the same board for our controllers.

We cannot offer to solder the components for you, because the quality control would be complicated as you will code and upload your Arduino software later, and only you know which controls you want to connect. But we hope you like the PCB itself.

Interested in this ‘powerful bread board’? … then Contact us, you are very welcome.

Here’s a link to a cool project built from one of our users/friends: Making an RGB Controller for 3D software applications (Jay Taoko, Canada)

Projected Retail Price (this may change in future)

Dark Board: 49

Dark Board is the PCB only (without any components), made for folks who can and want to solder themselves and then insert their own Teensy CPU.

In case you need any components (USB connector, control pin stripes, any IC’s hub/MCP), let us know. Same with the chassis, we could offer you the same case (with milled front/back panel) which we use for our controller, matches perfect to the board, but we assume you want to build larger controller ; ).

The quality of Dark Board is excellent.

Current delivery time: should be in stock, if not, worst case: 2 weeks.

Technical SpecificationS

Board Specification

  • Factory made PCB (Printed Circuit Board), 2 layers
  • Solder mask: black glossy, Silkscreen printing: white 
  • Surface finish (all contacts): immersion gold allows smooth soldering
  • Dimension: 201 x 63 x 1.6 mm

Teensy Compatibility

  • Dark Board supports Teensy USB-based microcontroller development system, 32 Bit Arduino technology
  • Supported Teensy:
    Teensy 3.2 (72 MHz Cortex-M4, 3.3V, 5V tolerant)
    Teensy LC (48 MHz Cortex-M0+, 3.3V)
    Teensy 3.5 (120 MHz Cortex-M4F, 3.3V, 5V tolerant)
    Teensy 3.6 (180 MHz Cortex-M4F, 3.3V)
    Teensy 4.0 (600 MHz Cortex-M7, 3.3V)
    Teensy 4.1 (600 MHz Cortex-M7, 3.3V)

Electrical specification, power consumption

  • All components (Teensy/MCP etc..) are self powered via USB Input 5V (Power Plug-In DC connector not mandatory)
  • Teensy work in Vcc 3.3 mode, I2C bus and MCP with Vcc 5V
  • Power consumption depends on inserted IC’s and connected control elements, typical consumption (including Teensy 3.2, MCP and USB hub IC): less 80mA (this low value allows e.g. usage on iOS without hub)


  • USB B Input (USB full size connector). Caution: you need to solder 2 thin wires between the Teensy USB backside pads to and Dark Board before soldering the Teensy on board
  • USB B Input can also be used during Arduino coding and uploading mode 
  • Optional: USB A Output (usb full size connector, hub mandatory)
  • Optional: Power Plug-In DC (5V, 5.5/2.5mm DC, + polarity inside), powers the board with all components incl. USB Out

Available I/O CHANNELS

  • Teensy 3.2: 23 I/O (14 Digital + 7 Digital/Analog + 2 Analog)
  • Teensy 3.5/3.6: adding 15 I/O more (7 D + 6 D/A + 2 Analog)
  • MCP 23017: adding 16 I/O (16 Digital I/O)
  • Max. I/O channel (using Teensy 3.5/3.6 & MCP): 37 Digital, 13 Digital/Analog, 4 Analog
  • Max. amount I/O in total (using Teensy 3.5/3.6 & MCP): 23+15+16 = 54

USB hub Extension Slot

  • Insert optionally a 2-channel USB micro hub if needed
  • Hub allows to add an USB Out connector at backside to connect additional controller in daisy chain
  • 2 jumper bridge connector to enable/disable USB hub option


  • Areas to connect external controls (buttons, pots, faders, encoder, LED etc.)
  • 2.54mm (1/10″) grid size for common male pin stripes on board, plug in control elements via female Pin Headers (e.g. DuPont 2.5, JST-EH etc.)
  • Flexible bus structure, each control element gets its own slot row. Teensy rows: Vcc 3.3V – GND – Teensy I/O – R-Teensy I/O (via optional resistor). MCP rows: GND – Digital I/O – R DI/O (via optional resistor on port A)
  • Each row is labeled with I/O description in sketch (e.g. ‘A10’) 
  • 3 areas: Teensy 3.2 (23), Teensy 3.5/3.6 add-on (15), MCP (16)


  • RC SMD pads make the control element slots even more flexible: allowing to add optionally resistors (R) and capacitors (C) to any control element(s)
  • Example use cases: 1) add R as serial resistor for LEDs, 2) add R+C to build a LPF (low pass filter) to smooth and stabilize analog control signals
  • Location: next to each control element slot, two pads on front side for R (resistor), two on back side for C (capacitors) 
  • Circuit Front side: R works as serial resistor between Teensy (and MCP) I/O pins and the control element (enables R-Teensy pin in the control slots)
  • Circuit Back Side: C connects Teensy I/O to a pull down GND capacitor
  • RC slot size: SMD 1206 (3.2 mm × 1.6 mm) 

MCP 23017 Extension SLOT

  • Insert optionally a MCP23017 (16-Bit Expander, I2C bus) to add 16 additional Digital I/0 channels. Typical use case: extend the amount of the Teensy I/O’s allowing to connect more knobs or LED’s
  • MCP 23017 is connected via internal I2C bus (addr.0)
  • MCP 23017 is self powered via USB Input 5V 

I2C BUS Connector Slot

  • I2C offers powerful options to connect build complex controller with minimum wiring effort. Example: add multiple amount of encoder with 2 wires only or connecting additional printed circuit boards via I2C
  • Dark Board offers one I2C slot with Teensy 3.2, offering two I2C slots using Teensy 3.5/3.6 (not supported for Tennsy 4.1)
  • I2C slot connector includes 5V (I2C Vcc) and 3.3V (Teensy Vcc) and 1 IRQ DAI/O pin to allow IRQ via I2C controller (useful e.g. for encoder)
  • Dark Board offers SMD solder pads to pull-up both I2C busses with 4.7 K SMD resistors (size 1206) to I2C Vcc (5V)


  • Free for usage area (23×14 pin matrix) at PCB bottom to support user specific enhancements
  • All pads in matrix are separated (no connection, no trails) to allow highest flexibility in usage
  • Typical usage: add user specific circuits on the board, or adding additional components (e.g. I2C devices, multiplexer, dip switch arrays, trimmer pots, additional MCP etc.)

TIps & Tricks for you

Control Element Slots Circuit:

How to connect Controls:

What we learned when we builT our first controller

Teensy 3.2 should cover most use cases

We use the Teensy 3.2, powerful, cheap and with low power consumption (I cannot comment on the Teensy LC as i never used before). If we would need more Digital I/O we would insert an MCP30107 into Dark Board (MCP cost less 2€). Using an 3.5 or 3.6 would be our choice if more Analog I/O requested or in case we would need the additional features (e.g. SD card reader, additional pins, Vin protection, higher performance etc.). We never tested 4.0 and 4.1, but the pin compatibility allows to use both with Dark Board too

Teensy 3.5 vs. 3.6

There are many details that are different between 3.5 and 3.6, check links below for further details. In most cases the 3.6 is the better option, examples: 3.6 offers touch read pins (similar 3.2), 3.5 does not. Don't worry about the missing 5V tolerance for Digital IN in 3.6/4.0/4.1, using the Vcc 3.3V for your controls (all listed Teensy support Power IN Vcc with 5V). Links for some more details and differences between Teensy models::

Is the MCP23017 mandatory ?

No. Insert and solder an MCP if you need 16 Digital I/O more, the slot is an optional extension slot. You can solder at any later time. Advanced tip: in case you would need even more than one MCP, quite easy: use the user bread board area for a 2nd MCP, connect with the I2C contacts and choose any address between 1 and 7. The onboard MCP is connected same way (with address 0). Programming the MCP pins is similar flexible as native Teensy/Arduino pins, examples:
Datasheet: https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf


Prepare the slots: Solder male pin strips into the board (e.g. DuPont 2.5). Either solder all stripes (4 x 23 for Teensy 3.2 and 2/3x16 if you use an MCP) or only the pins you need. Tip: in case you need fewer controls: think about locked professional connector, we use the JST EH or XH (but you can use them only if you do not need each row, as they need space for 2 rows).
Connect your elements with female header wires (use the printed labels to link to your sketch). It doesn't matter which Teensy I/O pin you use as long you consider that not each pin supports Digital and Analog input: The label printing on Dark Board helps: Dxy pins are Digital In/Out only, Axy are Analog In only, Dxy/Axy support both.
Control types in a nutshell: Buttons/knobs need 1 I/O with 2 pins (Digital In, GND), pots/faders 1 I/O with 3 pins (Analog In, GND, Vcc3.3), push encoder 3 I/O with 4 pins (3xDigital In, GND). Single LED 1 I/O with 2 pins (Digital Out, GND), dual bi-colored LED 2 I/O with 2 pins (2xDigital Out).
Each control slot row have same structure: The 3rd pin (called Teensy) is the I/O pin. If you add R/C elements then use the 4th pin instead (called R-Teensy). Using an MCP: The I/O pin is labeled DIO (Digital only), the R/C pin is labeled R-DIO.
See circuit & control examples illustrations.

How many control elements can be connected ?

A lot .. in maximum 54 I/O (using Teensy 3.6 and one MCP). Let's calculate an example: 8 knobs + 4 encoders + 12 LED's + 4 pots + 2 faders -> need: 8+4*3+12+0+0=22 DI/O and 4+2=6 AI/O. Teensy 3.2 together with the MCP can cover this, even no 3.5/3.6 needed... but before counting any maximum (and theoretical) max values... read next (I2C idea):

Think about the I2C idea

Before you start to connect dozens of elements and get lost in cluttered wiring, think about the powerful I2Coptions. I2C components can be connected via same i2C bus. Example: instead of adding 8 encoders with in total 32 wires, connect them with 4 wires only, see here: https://hackaday.io/project/122039-i2c-encoder-v2.

Structure your controller

A more advanced tip: complex controllers could be structured into logical areas. We used this powerful approach in our current Dark Wheel project. The elements (buttons, LED etc) are located on a 2nd carrier PCB, added several MCP there... and then connect this PCB to the Dark Board via I2C slot. Works great.

Connecting led elements

LED are power consuming components!. 3 LED's with 20mA need more power than the whole Teensy, or one LED needs same as the whole USB hub chip. We want to keep the total power as low as possible always, to allow using the controller on iOS devices without hub (150mA is our critical maximum).
Tip: Do not calculate your series resistors with 20mA, try 10mA or even less (5mA), the brightness is quite similar. And think about to use the MCP I/O for LED (because Teensy max output is limited to 250 mA). Do NOT connect any LED without series resistors to Dark Board, you always have to add a resistors. Add the resistor to the LED wire or even easier: use the RC slots on Dark Board.
Try the typical 220-330 Ohm values (of 5V calculation) also with the Teensy Vcc 3.3 V (this reduces to 5-10 mA with good brightness). Try 680Ohm or even 1KOhm on the MCP I/O (5V) - it is worth to test it!

How to use the RC slots

RC slots allow to add resistors (R) or capacitors (C) to any Teensy I/O pin. It is optional, use it for the I/O pins you need. Solder the R and C on the SMD pads right next of the control slots. The SMD size 1206 standard is not too small, so manual soldering should not be a problem. Two pads on front side for R, and two pads on back side for C. What is the benefit of adding R or C ? - two examples:
1) Connecting LED is much easier now. Any R inside wires or close to the LED are no longer needed. Adding a smd resistor on board allows to connect the LED directly (use GND + R-Teensy pins instead GND + Teensy).
2) Advanced use case: If you add R and C you get a LPF (low pass filter) to the I/O pin. This will de-bounce connected buttons. You may not need this (de-bouncing via software works well), but latest when you struggle with noise on Analog inputs (using fader/pots) an LPF may help a lot. We still use software smoothing algorithm in our sketches, but the LPF makes them much more efficient. Test it once! - try a typical value (R: 1KOhm, C: 100nF), you might be surprised how efficient it works on noising pots.

How to add the usb hub

Soldering the USB hub may take some experience. The slots are in 1.5mm grid (similar SMD). You can use the board without a hub, and add a hub later on. With 2 jumper header on the board you enable the Teensy to work with or without hub.

How to connect the Teensy to the full size Usb In

A weak point of the Teensy is the missing USB In contacts via outer bread board pin holes. But we wanted to connect a full sized USB B connector (for coding AND operation). How to do it?. Fortunately there are 2 pin pads available on the Teensy backside. Idea: we added 2 pin holes on Dark Board close to the two Teensy pads. You have to solder 2 thin wires to the Teensy pads and put them trough the 2 boards holes BEFORE soldering the Teensy into Dark Board!. Tip: use thin wires (e.g. 3 wrapped cable strands), this protects the pads and makes soldering easy. Instruction see here.

Which components are needed, which are optional?

Mandatory: Teensy only (soldered via male pin stripes). Typically also used: USB B In, 2 thin wires (to connect Teensy with USB), 2 jumper heads (for bridging missed USB hub), male pin stripes to connect your control elements. Even the USB connectors are optional (in case you still want to use the micro USB connector onside of Teensy).
Add the pull up resistors (4.7K) if you want to use the I2C bus.
All other elements are optional and can be soldered later.