A programmable MIDI Controller
- Teensy 4.0
- Adafruit SSD1306 128x32 display
- 8 pushbuttons (from Anchor Electronics)
- A rotary encoder
- 3D-printed enclosure, buttons caps, and rotary wheel
The enclosure was designed with Solvespace, a parametric 3D CAD tool. The button pads and dial were designed with OpenSCAD.
Install Arduino 2.0+.
Follow these instructions to install the Teensyduino add-on. (board manager url)
Then to use the Teensy 4.0 board, in the Arduino menu select Tools -> Board -> Teensy -> Teensy 4.0
.
To use the SSD1306 display, these libraries need to be installed in Arduino. For newer versions, just search for and install the display type in the Arduino library manager ("Adafruit SSD1306"
for this project), and the required dependencies (notably Adafruit GFX Library & Adafruit BusIO Library) will be installed with it.
Clone these repositories:
To enable MIDI device support for the Teensy, select Tools -> USB Type -> MIDI
in the Arduino menu. Then the project should build successfully. To upload to a board, select the appropriate port.
Objects for Pure Data are located in /PureData.
The enclosure had several issues, most of which would be fixed in a second revision. I haven't done this yet, partially due to the difficulty and cost of printing another revision.
- Material - The 3D-printed material is a bit too brittle for this application.
- Height - The enclosure is unnecessarily tall, due to my poor planning. I think it gives the device a clunky 70s feel.
- Support columns - I didn't properly attach these to the base in Solvespace, so most of them separated after printing.
- Button travel - The button switches I used have too much travel for this application. I was determined to use these particular switches for some inexplicable reason.
- Access to reset - The access to the reset button requires disassembling the enclosure, which is not ideal when making mistakes while developing code for the device.
- Piece fit - I made an error in Solvespace when designing the fit mechanism for the top and bottom pieces, so I had to use screws to attach the pieces. This makes the device more fragile.
- USB port - I didn't account for the USB port in my enclosure design, so I had to drill/route a hole for it.
- Size - The screen size is too small. The positive benefit of this is that it provided a constraint that required some creativity to overcome with some of the modes. It was an interesting challenge to fit the right details on the available screen real estate.
- Asymmetry - I didn't pay close attention to the screen asymmetry when designing the enclosure cutout for it. The screen sits to one side of the cutout.
- Screen fit - I mis-measured the mounting layout for the screen, so the resulting mount on the enclosure is the wrong size, and so the mounted screen causes the enclosure to bow out a little.
- Screen connectors - I didn't properly account for the screen's header pins and connectors header pin connectors when laying out the enclosure, so I had to refit them, and cut out a section of my stripboard to accommodate.