My BLE MIDI Robot Xylophone is, as its name implies, a robot instrument. It uses 30 mini solenoids to strike the xylophone (technically, it’s a glockenspiel)’s keys. The solenoids are triggered by MIDI data that is received over Bluetooth Low Energy (BLE). The code is written in CircuitPython, which has libraries for BLE MIDI for use with Adafruit’s nRF52840 boards (this project utilizes the ItsyBitsy nRF52840).
The main purpose of this robotic xylophone is to play music with the instrument that would not be possible with the standard human method. Mallet instruments can be limited in the music that can be played on them; traditionally, a player uses two mallets to play with a maximum of two-note polyphony, or two notes at a time. More advanced players can use 4 mallets, but this is still limited to only four notes at a time. My robotic modification allows for music to be played on the xylophone that goes well beyond that. Technically, all 30 notes could be played at the same time, although it might not sound very good.
In this project you’ll see how you can build complex robotic instruments that are controlled wirelessly with BLE MIDI. If you’d like to build your own, a fully detailed, step-by-step build guide is available on Adafruit’s Learning platform.
WHAT IS BLE MIDI?
BLE MIDI is a wireless protocol that allows an instrument to receive command data. It’s great for a large build, like this xylophone, since you can set up the instrument where it fits comfortably, rather than having to be close enough to your computer to be physically connected for data or power. This gives you a lot more freedom, especially for setting up an ideal recording situation with microphones.
BLE MIDI also requires less hardware. Previously to use MIDI you would possibly need an audio interface with MIDI ports. Now, however, most computers have BLE built in, or you can get a cheap BLE USB dongle that’s plug-and-play. Once you set up your BLE MIDI device, your software will recognize it as a MIDI device just like a standard USB or 5-DIN connected device.