Code files and resources for the Soldered workshop on building a custom MIDI controller using Arduino/Dasduino boards and sensors! This workshop is being done at TearDown 2025!
To participate in this workshop, it's mandatory to bring the following
- Laptop Computer - To write, compile and upload Arduino code from
- Headphones - So that we don't all hear each other's synthesizer playing at the same time :)
-
Arduino IDE: Download from https://www.arduino.cc/en/software. Required for uploading code to your Arduino/Dasduino board.
-
Board Definitions: Dasduino Board Definitions for Arduino IDE, install
Dasduino CONNECT
board. -
Synthesizer (All Platforms): Surge XT Synthesizer (or any other DAW/Synth that accepts MIDI input) Surge XT is free, open-source, and works well standalone, no DAW required.
- LoopMIDI by Tobias Erichsen, for creating virtual MIDI ports
- Hairless MIDI Serial Bridge, for bridging Serial to MIDI
- Hairless MIDI Serial Bridge: projectgus.github.io/hairless-midiserial, for Serial-to-MIDI bridging
- Audio MIDI Setup (built-in, use IAC Driver to create virtual MIDI ports)
ttymidi
, for Serial-to-MIDI bridging via ALSA- ALSA Utilities (
aconnect
), to route MIDI ports - (Optional)
timidity
, for acting as a software synth if DAW support is limited
-
Install LoopMIDI and run it.
-
Create a new virtual MIDI port (e.g.,
Dasduino MIDI
). -
Install and launch Hairless MIDI Serial Bridge.
-
In Hairless:
- Select your Arduino/Dasduino's serial port (e.g.,
COM3
) under Serial port. - Select your LoopMIDI port (e.g.,
Dasduino MIDI
) under MIDI Out. - Enable Serial<->MIDI Bridge On.
- Select your Arduino/Dasduino's serial port (e.g.,
-
Open your synthesizer/DAW (e.g., Surge XT), and select
Dasduino MIDI
as MIDI input.
-
Download and install Hairless MIDI Serial Bridge.
- Note: You may need to allow Hairless under System Preferences > Security & Privacy if macOS blocks it.
-
macOS has built-in support for virtual MIDI ports via Audio MIDI Setup:
- Open Audio MIDI Setup (Applications > Utilities).
- Open MIDI Studio (from the Window menu).
- Double-click IAC Driver and enable the “Device is online” checkbox.
- Create a new port (e.g.,
Dasduino MIDI
) if one doesn’t already exist.
-
Launch Hairless:
- Select your Arduino/Dasduino's serial port under Serial port.
- Select the IAC port (e.g.,
Dasduino MIDI
) under MIDI Out. - Enable Serial<->MIDI Bridge On.
-
Open your DAW or synth (e.g., Surge XT) and enable the IAC port (
Dasduino MIDI
) as MIDI input.
Thanks to j3d1n4 for the original Linux instructions!
You can use ttymidi
and ALSA tools instead of LoopMIDI and Hairless:
-
Identify your Arduino/Dasduino serial port (e.g.,
/dev/ttyACM0
). -
Run
ttymidi
with appropriate options:ttymidi -s /dev/ttyACM0 -b 115200 -v
-
This creates a virtual ALSA MIDI port. Check available ports with:
aconnect -l
-
Connect the
ttymidi
port to your DAW/synth input:aconnect <ttymidi_client>:<port> <synth_client>:<port>
Replace client and port numbers with those from
aconnect -l
. -
Alternatively, pipe into
timidity
to act as a MIDI synth:ttymidi -s /dev/ttyACM0 -b 115200 | timidity -iA -B2,8
- Connect your Arduino/Dasduino board to your computer via USB.
- Open the relevant example sketch from the
/examples
folder in this repository. - Modify the sketch if necessary (e.g., change the button pin number if it's not connected to the default pin specified in the example). Upload the sketch to your board.
- Set up MIDI routing:
- Launch LoopMIDI and create a new virtual MIDI port (e.g., "Dasduino MIDI").
- Launch Hairless MIDI Serial Bridge. Select your Arduino/Dasduino's serial port under "Serial port" and select the LoopMIDI port you created (e.g., "Dasduino MIDI") under "MIDI Out". Ensure the "Serial<->MIDI Bridge On" toggle is enabled.
- Open your synthesizer or Digital Audio Workstation (DAW), such as Surge XT. Go to its audio/MIDI settings and enable the virtual MIDI port ("Dasduino MIDI") as a MIDI input device.
- Press the button connected to your Arduino/Dasduino. You should now hear sound from your synthesizer, triggered by the MIDI note sent from the board!
For Linux users, ttymidi
can be used as an alternative to LoopMIDI and Hairless MIDI:
- Identify your Arduino/Dasduino's serial port (e.g.,
/dev/ttyACM0
). - Run
ttymidi
in a terminal, specifying the port and baud rate (matching your Arduino sketch, typically 9600 or 115200):ttymidi -s /dev/ttyACM0 -b 115200 -v
- This creates an ALSA MIDI port. You can list available ports with
aconnect -l
. - Connect the
ttymidi
output port to your synthesizer/DAW's input port usingaconnect
:(Replace client and port numbers accordingly)aconnect <ttymidi_client>:<port> <synth_client>:<port>
- Alternatively, you can use a program like
timidity
in ALSA server mode, which some DAWs like Surge XT can connect to directly:ttymidi -s /dev/ttyACM0 -b 115200 | timidity -iA -B2,8
Here's a neatly formatted set of instructions for setting up the Serial to MIDI bridge on macOS and Linux, just like the Windows section, with proper credit for the Linux instructions:
Let me know if you'd like this formatted as Markdown for the actual README.
(Thanks to j3d1n4 for the initial Linux pointers!)
At Soldered, we design and manufacture a wide selection of electronic products to help you turn your ideas into acts and bring you one step closer to your final project. Our products are intented for makers and crafted in-house by our experienced team in Osijek, Croatia. We believe that sharing is a crucial element for improvement and innovation, and we work hard to stay connected with all our makers regardless of their skill or experience level. Therefore, all our products are open-source. Finally, we always have your back. If you face any problem concerning either your shopping experience or your electronics project, our team will help you deal with it, offering efficient customer service and cost-free technical support anytime. Some of those might be useful for you:
And thank you from your fellow makers at Soldered Electronics.