Design of the Controller

A project log for Turnado Hardware MIDI Controller

The development of a dedicated hardware MIDI controller for the Turnado audio FX software plugin.

Liam LaceyLiam Lacey 09/02/2018 at 10:250 Comments

Since my last log I've been busy coming up with the design of the device, in regards to both the layout of controls on the panel as well as the exact control components and microcontroller to use. In this log I'll describe and explain both of these aspects.

Here is a rough 2D sketch of the desired layout of the panel, where all dark grey item are controls (or an LCD in regards to the rectangle component):

Here's a description of each section:

1 - 8

Each of these sections are for controlling each of Turnado's 8 knobs, where each contain a pair of controls - a switched rotary encoder (top) and a single-axis bi-directional thumb joystick (bottom). Both controls are used to control the same software parameter, but together they provide a more intuitive and useful method of control.

The idea is that the pair of controls work together in the following way - you use the encoder to set a 'static' value, and then you use the joystick to 'momentarily' change the value relative to the 'static' value. For example, if you use the encoder to set the parameter value to 64, you can then move the joystick up to change the value between 64 and 127, or down for values 64 to 0. To understand the reasons behind this type of control and interactivity, please see the 'Control Types and Physical Interaction' section of my last log. The push-switch of the encoder will be used as a quick way to reset the parameter value to 0.

I've decided to use a thumb joystick as the momentary bi-directional control as this appears to be the only affordable, commonly-available and compact control/component of this type. However even thumb joysticks aren't completely perfect for this design, as they are dual-axis when I only need a single axis; however I'm just going to leave the second axis disconnected and see if there is a way I can physical disable it (so that the joystick will only move in the vertical axis). These controls also usually come with a push-switch, but again I'll just leave this disconnected here. Ideally I would have liked to use miniature springed wheel lever controls, such as the pitch-bend wheels you find on most MIDI keyboards, however there doesn't seem to be any off-the-shelf versions of these and the one's I did find were too big.

I've decided to use rotary encoders rather than potentiometers, primarily so that the controller will always adjust Turnado's parameter values based on their current values. Encoders essentially just increment or decrement a value, however as potentiometers set an absolute value they could be problematic here.  For example, when changing Turnado's preset the software parameter values will likely change - in this situation potentiometers would now be out-of-sync with the software and any adjustments to them will cause the parameters to jump back to the previous preset's value. A couple of other advantages of using encoders - they can include a push switch, which I'll be using for this device; and encoders allow the implementation of acceleration, where the faster you turn it the greater the value change will be. The only disadvantage of using rotary encoders compared to potentiometers is that, as they are endless (they will turn continuousness), they can't visually display the currently value of the parameter they're controlling; however one of the primary reasons of including an LCD on the device is to display these values (see 'LCD' section below for more info).


This section is for controlling the Dictator Mode fader of Turnado in the exact same way as that of Turnado's 8 knobs (see above).


This is a non-switched rotary encoder for controlling Turnado's dry/wet mix parameter. See the '1 - 8' section above for reason behind using a rotary encoder here.


This is a momentary push-button for triggering Turnado's 'random' button that creates a random preset.

Preset Up/Down

This is a pair of momentary push-buttons for changing Turnado's loaded preset.

LCD (and Ctrl/Param/Value Controls)

The LCD will be used for two main things:

  1. To display the current values of Turnado parameters
  2. To configure device settings

As none of the device's controls are able to visually display the current values of the parameters that they are controlling themselves, using an LCD seems to be the best way to do this. The LCD will display the realtime values of Turnado's 8 knobs, dictator fader, and dry/wet mix; based on either the device's control values or MIDI-in values from Turnado itself.

The LCD will also be used to configure the controller's settings, such as MIDI channel and control MIDI CC numbers. To do this it will display a menu of options that will be navigated and set using three rotary encoders:

  1. Ctrl - selects the control you want to configure
  2. Param - selects the parameter you want to set
  3. Value - selects the value you want to set

The Ctrl encoder will be switched to offer a quick way of viewing the menu, but the other two encoders will be non-switched.

The exact LCD I am most likely going to use is a 2.4" 320x240 TFT LCD with a ILI9341 controller chip, which can be used with a Teensy-optimised Adafruit_ILI9341 library.


I have laid out the controls as such for the following key reasons:


As mentioned in my last log, I want to use a Teensy microcontroller. In order to connect all needed controls without having to use multiplexers I'm going to need to use the top-of-the-range Teensy 3.6

The above set of controls and components require the following I/O to/from the Teensy board: