DART San Diego

An Opensource controller designed for educational workshops.

The Dart San Diego is very simple to realize, since it is not necessary to use the welder during the assembly, in this way there will be more time to concentrate on the fundamental concepts on the use of the DART framework. This project can also be tackled by those with no experience in embedded electronics and programming.

Main topics of the workshop:

  • the DART framwork – everything you need to give life to a controller.
  • Arduino basics – sketch upload, input and output processing.
  • Basic notions on the MIDI protocol – the grammar of electronic music, applied to the use of buttons, potentiometers and LEDs.
  • Emulation of HID devices – keystrokes, mouse controls, use the joystick for videogames.
  • Operation of an endless encoder – emulation of a mousewheel and a scrach wheel for djs


Components full list:

  • 1x Arduino Leonardo board.
  • 1x micro USB cable –  lenght 50cm
  • 1x half size breadboard
  • 1x Arcade pushbutton // obsf-24.
  • 1x mini joystick with button
  • 1x SPDT switch – for page switching
  • 1x slide potentiometer + cap
  • 1x endless encoder + knob + M9x0.75 nuts//  Alps EC12E2430803.
  • 2x leds + panel mount kit
  • 2x 220 ohm resistors for LEDs
  • 2x 680kresistors for touchsensors
  • 4x M3 spacers 40mm
  • 3x M3 spacers for joystick mount
  • 6X M3 washers 3×7
  • 9x M3 screws 10mm- flat head type.


the enclosure was designed to be easily laser-cut in any digital laboratory using 3mm thick plexiglass material.  The box consists of a lower part, which will house the Arduino board and the breadboard for the connections, and an upper panel that will house all the modifiers. 3mm thick rubber pads are used for the lower part of the box.

It is possible to download the DXF file to perform the cutting operation on a laser cutter machine:

During the assembling of the controller, the upper panel can be fitted in a vertical position, this will greatly facilitate the operations even to people without a strong experience as makers…

Preparing the MODIFIERS

The modifiers that will be used during the exercises are prepared in advance, to avoid using the welder to non-experts. the cable attachment points are reinforced with heat-shrink sheaths.

STEP1 – Connecting a BUTTON and a POT


  • Connect a button and a potentiometer (rotary or slide pots can be used) to the Arduino Leonardo board as shown in the image.
  • Upload the Dart_Sketch.
  • Use the Dart_Editor to monitor the MIDI activity produced by pressing the button and moving the slider.
  • The system in now working in AUTODETECT mode: the button is recognized and is assigned to a specific NOTE message (a NOTE message 64 on channel 1), the pot is recognized and is assigned to a CC message…


Step 2 – first EDITOR configuration.

After getting to know the system in Autodetect mode and seeing how the editor works, let’s move on to the first configuration…

    • load the NoMobo_preset_full.csv preset on the Dart_Editor.
    • the A0 item will give us acces to the button settings.
    • the A1 item will give us acces to the pot settings.
    • Let’s assign a NOTE message of our choice to the button and a CC message to the pot, paying attention to the MODE selector setting
    • click SEND ALL to upload the whole preset, click send this to upload the setting of a single item.
    • Remember to SAVE your preset anytime you make a new setting!


Once a preset has been loaded into memory, the Autodetect function will be deactivated, so if we connect a button to an input that has not been configured using an editor, nothing will happen.
to reactivate the Autodetect function you can use the preset called Eraser.csv (you can find it in the package previously downloaded).

Step 3 – the PAGE switch

  • Connect the toggle switch to the A5 pin, as shown in the image.
  • Use the Dart_Editor to configure the A5 input.
  • Set the MODE selector to “PAGE SWITCH”, as shown below, and click SEND THIS…

  • the toggle switch is now controlling the PAGE function.
  • it is also sending a Note message n.50 con channel 1.
  • move the lever and look at the MIDI monitor to verify the settings.

Thanks to the PAGE function it is possible to have access to two different configurations of our controller. It will be like having two independent controllers 🙂

So, now we’re going to configure the button and the potentiometer on the second page, by clicking on “PAGE 2” button on top left of the Editor screen.



  • complete the settings for A0 and A1 items, like shown in the screenshoots.
  • in these examples we have assigned an HID message “A” to the button and a Pitch Bend message to the pot.
  • click SEND ALL
  • Once the upload process is complete it is possible to take some time to get familiar with the PAGE switch function:
    • with the PAGE switch in position 1, the button and the pot are controlling the setting that we uploaded on the Step 1 section of this guide.
    • with the PAGE switch in position 2, the button is controlling a key message “A” that can be checked thanks to the Monitor section of the editor, or thru a common text editor, while the potentiometer is controlling a Pitch Bend message.
  • SAVE your preset before closing the Editor


At this point it is good to explore freely the possible configurations to assign to a button. Some tips:

  • it is possible to add HotKeys to our key message “A”, so it is posible to compose complex keystrokes like CONTROL+SHIFT+”s” that are often used to recall secondary commands in CAD software.
    • Remember that MIDI output is stopped while HID emulation is active on a button.
  • it is possible to explore the TOGGLE mode for buttons, that will make a button act like a toggle switch.
  • it is possible to assign HYPERCURVE or CENTERCURVE mode to the pot.
  • another useful exercise is to find a way to map MIDI messages on a program. It is very useful to have a good grasp of all the settings that can gradually be performed, and the best way to get it is to do so many tests!


Step 4 – adding LED output

The LEDs can be connected directly to the Arduino board on the digital pins D4, D5, D6, D10, D11, D12.

For educational workshops it is higly suggested to solder the potection resistors (220 ohm or more) directly whit the connection cable:

Use the Dart_Editor to assign a LED output to an item and click SEND THIS.

Use the preset that you saved during the previous steps of this guide.


By applying this configuration, the digital pin D4 will be controlled by the button that is connected to the A0 pin.

The LED connected to the D4 output pin of the Arduino will provide a visual feedback of the activity on the buttons and will also light up to give a visual feedback on incoming MIDI signals: by clicking on the A0 item, on the Editor screen, a message will be sent out to the Arduino and the LED connected to D4 will light up.

A useful exercise can be to assign the LED output of the A0 button to a different pin output. You will need to move the LED to the new pin you selected …

Step 5 – connecting a JOYSTICK

We will use a type of joystick widely used in the world of prototyping and DIY. It is very easy to find in online electronics stores, and in addition to the analogue control of the X and Y axes, obtained by using two potentiometers, we will also have a button available. The pins to connect it are named as follows:

  1. GND // gorunding connection, –
  2. 5v  // power, +
  3. VR-X // X axis potentiometer, JX
  4. VR-Y  // Y axis potentiometer, JY
  5. SW  // button switch, JB

Let’s connect it diretcly to the Arduino analog inputs…

We have already learned how to configure buttons and potentiometers.

In the case of the Joystick, all we have to do is configure the X and Y axes (connected on inputs A2 and A3) as potentiometers, setting the MODE selector to “POT”,

and the button (connected to input A4) as a button, setting the MODE selector on “BUTTON”. all other settings can be changed at will for now …

it is useful to remember that these settings can vary between PAGE1 and PAGE2 and that experimenting freely is the best way to master this system 🙂

Step 6 – MOUSE and ARROWS emulation.

To activate the HID emulation on the joystick, select the “M” item, and set the “1” value on the “mouse / arrows” selector.

By selecting the value “2” the emulation will be set in Arrows mode, wich is more suitable for videogames 🙂

About the CIRCUIT POSITION values….

In mouse emulation example, the “X circuit pos” and “Y circuit pos” selectors have been set to 17 and 23, because these values represent the circuit position of the X and Y joystick axes, connected to A2 and A3 inputs of the Arduino board.

The circuit position of any item on the editor screen can be read of changed thru the DRAW mode.

for the simple examples on this page it is sufficient to remember that the entry memorypositions are:

  • A0 1
  • A1 – 9
  • A2 – 17
  • A3 – 25
  • A4 – 33
  • A5 – 41

the reason for this particular numbering was better explained on the NoMobo page

Step 7 – ENCODER


Although it looks like a potentiometer, the rotary encoder works completely differently. Internally it consists of two on / off contacts, as if two buttons were contained inside it, and it can turn endlessly.

We connect our encoder to Arduino’s D2 and D3 inputs, which thanks to the Interrupt functionality, can perform high priority readings. The central pin of the encoder will be connected to GND.

Remember that the encoder should never be connected to the + 5v line.



Select the pentagonal item “ENC”, and set the “spin mode” selector to the value 2. In this way the encoder will be able to emulate a potentiometer, adjusting the output values ​​from a minimum of 0 to a maximum of 127. To do this test, as illustrated, we recommend setting the encoder to Type = CC, Speed ​​= 16.

Emulation of a Jog Wheel

The most common and best known application of an endless encoder is the mouse wheel, thanks to which we can scroll a web page or a document, infinitely down or infinitely high.

Let’s turn bak to the “M” item, wich controls the mouse and arrows emulation.

The “mousewheel” selector has been set to 59, wich is the memoryposition of the “ENC” item.

Now the encoder is capabe of emulating the mousewheel scrolling.

The Speed factor can be regulated by selelecting the “ENC” item.

Emulation of a DJ turntable…

Let’s select the “ENC” item and assign the value “1” to the “spin mode” selector.

The encoder is now working in ENDLESS MODE, as we can see in the monitor section.

The Speed value has no effect in endless mode.

A dense series of messages with maximum value (127) is issued by turning the encoder clockwise. in the same way, a dense series of messages with minimum value (0) is issued by turning the encoder counterclockwise.

This is the typical operating mode of a digital DJ Jog Wheel, which can be used with the most popular DJ software on the market. For our example we will use Traktor Dj of Native Instruments.

So let’s map the encoder to a Jog Turn control in Traktor…

In the Traktor’s “controller manager” tab we have assigned the CC message 80 to the “jog-turn” parameter.

Pay attenction, the “Enc-mode” selector must be set to 3fh/41h .

It is now possible to scratch our favourite samples or audio tracks or adjust their timing while they are playing 🙂

Step 8 – MORE INPUTS! – Using the mutiplexers.

In this example, a 4051 multiplexer is used to multiply the input capability of the A4 analog in of the Arduino.

The newly added inputs can be configured by addong new items to our previous preset, using the DRAW mode.

Care must be taken to correctly set the memoryposition of the items, it has been indicated with blue circles in the illustration above.

More infos about how to chain more 4051 multiplexers can be found in the DartMobo usage page

To enable the Mutiplexing, the “nomobo” selector must be set to “0” in th General (G) item settings.

The multiplexing will also be enabled for LED output, it means that LEDs, if used, have to be connected thru 595 shifters.

For those who want to use multiplexers and want to simultaneously connect three LEDs directly to the Arduino board, it is possible to set the “nomobo” selector to 2 (in the “G” item), in this way three LEDs can be connected to the digital pins D10 D11 D12.

The example preset, which we used for the illustration, is called SanDiego_MULTIPLEXING_test.csv


Step 9 – The touchsensors

The TOUCH SENSOR circuit is composed of a simple 680k resistor and it allows you to connect conductive elements, especially metal surfaces, directly to the DART controller, making them work like buttons.

Select the items “T1” and “T2” to access the touchsensors settings.

Set sensitivity to 70.

All the settings details and the relations between encoders and touchsensors are discussed in the Touchsensors DIY guide.


to be continued…