Introduction: Spatial Synthesizer Kravox! Wireless, Motion- & Touch-Sensing

About: Hi! I make things!

A New Kind of Instrument
I invented Kravox during a research project at Lund University (Sweden) with the aim to give digital musical instrument controllers the feeling of conventional, mechanical instruments. Now I want to make Kravox accessible as a musical experimentation platform for everyone, so I created this detailed Instructable to enable as many people as possible to use this exciting new instrument!


How to Play Kravox

Playing Kravox is as quite straightforward. Just imagine you are playing around with an ordinary object like a broom and the way you touch and move it through space controls how sound is generated. See and hear how to play Kravox in this video.

Step 1: What Is Kravox?

Kravox is a cross-platform compatible, open source digital musical instrument that consists of three components – controller/s, receiver and software.


Controller/s
Up to three wireless controller devices can be connected. Each controller processes orientation- and acceleration data from a digital MPU-6050 gyroscope and touch data from two MPR121 touch sensor boards connected to an Arduino Nano. The controller/s send/s the data to a receiver device via nRF24L01 radio transceiver/s. If more than one controller shall be used, the second and third controller need to get individual addresses assigned. For more information about assigning the address see the info in the DECLARATIONS / NRF24L01 section of the controller code.

Receiver

The receiver passes the data received from the controller/s on via USB to a connected computer, together with data collected from several potentiometers. The provided receiver device code allows communication with up to three controllers, but will also work with only one or two without adjustments.

Software

The data from the receiver is processed in a programme written in Pure Data Vanilla that outputs sound.

Step 2: What We Will Build (incl. Video Tutorial!)

The beauty of Kravox is that it's shape, how it sounds and how it's played can be adjusted. This gave me the opportunity to design an easy-to-replicate Kravox version for this tutorial. Both the video above and this Instructable will show you all necessary steps of how to build fully functional controllers and a receiver from easily available electric components and cardboard.

(In case you are curious: On my youtube-channel you can also find a timelapse of how I made the larger version of Kravox)

Step 3: Components

You will need the following components to build a Kravox controller + receiver station:

  • {1x} 50*24 hole (minimum size) Perfboard,
  • {5x} 40-Pin female headers,
  • {5x} 40-Pin male headers,
  • {5x} 10 kilo-Ohm potentiometers and Knobs for them,
  • {3x} Blue 5mm standard LEDs,
  • {3x} 150 Ohm resistors,
  • {2x} 10 micro-farad capacitors,
  • {2x} 100 nano-farad capacitors,
  • {2x} NRF24L01 radio transceivers,
  • {2x} Arduino nanos,
  • {3x} 220 Ohm resistors,
  • {2x} MPR121 touch sensor boards,
  • {1x} GY-521 MPU 6050 digital gyroscope,
  • {2x} USB-A to USB-C cables,
  • {1x} 4 meters (minimum) of 1 cm wide copper tape,
  • {1x} powerbank,
  • {1x} 7 meters (minimum) wire in many colors and optionally
  • {1x} 0, 2 meters of ø=3mm shrinktube.

Step 4: Tools

You need the tools in the picture to assemble the components:

  • Wire Stripper
  • Pliers
  • Utlity knife
  • Hacksaw
  • Ruler
  • Multimeter
  • Soldering Iron + Solder

Step 5: Cardboard-enclosure Making Material and Tools

Later in the making process you also need some empty cardboard boxes or similar and glue, a glue gun, adhesive tape, one or more clamps and rubber bands to make the enclosures

Step 6: Making the Controller Board

Next I will explain how to make the controller electronics step by step from the parts mentioned above
If in doubt, where to solder in a cable, you can always come back to the circuit diagram and check, if the components will be connected right, once you attach the arduino and sensor-boards to the circuit board we are creating

Step 7: Making the Controller Board - Making the Circuit Board

The first step is to cut the perfboard and female pin-headers to size
and assemble them together with a small and a big capacitor that help increasing the reliability of the radio-transceiver

  • Cut the perfboard with a utility knife
  • Cut the female pin headers with ahacksaw (I put them on a book to level them from the tabletop)
  • Solder in the parts. You can already connect each pin-pair of the two
    long female headers that sit next to each other. For the remaining headers it is enough to simply attach them with a little solder – preferably the pins that will have according to the circuit diagram no connection later anyway. When soldering in the capacitors, pay attention to the polarity of the electrolytic 10-micro-farad capacitor (the bigger one of the two). One side will have a stripe and usually also a shorter leg. That side needs to be connected to ground. The smaller 100nano-farad-capacitor is not polarized and can be soldered in either way

Step 8: Making the Controller Board - LEDs

The second step is to solder in the two LEDs with their current limiting resistors

Pay attention to the polarity of theLED: One side of it is flattened and
will usually also have a shorter leg. That side needs to be connected to ground in step 2.3. The other side we will now connect with a cyan coloured cable to the jack where Arduino pin D3 will later sit when plugged in

Step 9: Making the Controller Board – Power Supply Cables

Next we add all the red and blue power supply cables. Red is for 3.3 Volts and blue for ground (GND)

Step 10: Making the Controller Board – I2C-Connections

In the fourth step it is already getting a little crowded on the board.
The three sensor boards communicate via the I2C-protocol (inter-integrated circuit). That means that they can all be connected to the same two Arduino pins, so we solder in yellow and green cables between them and Arduino-pins A4 and A5. We also add a white cable for the Gyroscope’s interrupt pin connection

Step 11: Making the Controller Board – SPI Connections

The radio transceiver communicates via the SPI-protocol instead (serial
peripheral interface) that requires more connections than I2C, so we add black, grey, brown, purple and orange cables

Step 12: Making the Controller Board – Preparing Components

Now it’s time to prepare the components

Apart from soldering on the male pin headers if they are not
pre-soldered, pay special attention to the touch sensor boards! The cheap models from china have their address pin hardwired to ground without a pulldown-resistor in between, so you need to physically cut this connection on the bottom of the board with a utility knife. Cut between the two solder pads next to where ADD is written. I recommend to use a multimeter to check that no connection is left between the pads afterwards

Step 13: Making the Controller Board – Attaching Components

When all components have their pin headers soldered on and the touch
sensor boards are prepared, you can plug the Arduino Nano, the gyroscope, the two touch sensor boards and the radio transceiver into the controller board:

Step 14: Making the Controller Board – Uploading Code

After double-checking, if everything is wired correctly, the next step is to upload the provided Kravox-Controller code to the Arduino nano, but before you can do so, you will need to install libraries for the gyroscope, the touch sensor boards and the radio transceiver. If you are new to Arduino-libraries, find out how to install them here.

  • The MPU6050 gyroscope requires the libraries "I2Cdev.h" and "MPU6050_6Axis_MotionApps20.h" by Jeff Rowberg that can be downloaded here.
  • The MPR121 touch sensor boards need the "MPR121.h" library by Bare Conductive that can be found here. There exist at least two versions of the library. Make sure to install the version developed by Bare Conductive and not the one developed by Adafruit.
  • The NRF24L01 radio transceiver board requires the libraries "nRF24L01.h" and "RF24.h" by TMRh20 that can be downloaded here. Please note: There also exist at least two versions of those libraries with identical names. Make sure to install those developed by TMRh20 and not the ones by maniacbug.
  • As soon as the libraries are installed you can upload the Kravox-Controller code

Step 15: Optional: Test If the Controller Works

If you would already like to check, if ithe controller is working, you can let it output data from the touch sensors and the gyroscope via the Serial Monitor. For that you need to uncomment the last section of the receiver code before uploading: By deleting the comment marks in the beginning ( /* ) and in the end ( */ ) of it (See pictures)

After uploading the code with that variation, open the Serial Monitor, and set it to a baudrate (data transfer speed) of 115200. Now you should be able to see data from the sensors that changes when you move the controller board and touch the pins of the MPR121-boards that are labeled from 0 to 11.

If nothing works or you get only zeros, check your wiring carefully and compare it to the circuit diagram above. If you get a funny output from the Serial Monitor, check if you have set it to the correct baudrate.

Step 16: Making the Controller Board – Powerbank

Connect your controller board to the powerbank you want to use with it.

If the board (or more precisely the powerbank) does not turn off automatically after some time, your controller board is finished and you can proceed to the receiver-board! Otherwise perform the next step Increasing Power-consumption

Step 17: Making the Controller Board – Increasing Power-consumption...

In principle the controller-board is done, but some powerbanks will automatically turn off after a few seconds when connected to the controller-board as it is right now because it consumes so little energy As a dirty fix we can just add three 220 Ohm resistors in parallel between the 5V and GND pins of the Arduino. Those resistors will dissipate additional energy and transform them into heat, so the controller consumes enough for the power bank to stay on. Don’t worry: even with a small power bank it will still work for days non-stop without recharging Remove the Arduino Nano and solder in the resistors like in the picture

Step 18: The Finished Controller Board

After re-attaching the components the (definitely) finished controller board looks like that

Step 19: Making the Receiver Board

In this part of the tutorial I will show you how to make the receiver board. The process is pretty similar to making the controller board

If you want to check, where a certain cable should be connected, you can refer to this circuit diagram

Step 20: Making the Receiver Board – Making the Circuit Board

The first step is again to cut the perfboard and female pin-headers to size and assemble them together with a small and a big capacitor that help increasing the reliability of the radio-transceiver. The lowest female pin header is intentionally left longer than necessary, so you can potentially use it for other projects like an Arduino granular Synth later. You can compare this step with the first making-the-controller-board step for more info

Step 21: Making the Receiver Board – Power Supply Cables

Next we add all the red and blue power supply cables. Red is for 3.3 Volts and blue for ground (GND)

Step 22: Making the Receiver Board – SPI Communication

Soldering in the Cables for SPI communication:

Step 23: Making the Receiver Board – Attaching the Components

The receiver board is finished now, but before we can upload the Kravox-Receiver code to the Arduino Nano, we first need to make an interface for the receiver

Step 24: Making the Receiver Interface

In this part of the tutorial I show you how to make an interface with 4 potentiometers and an LED for the receiver. The interface is wired as in the first picture and will be plugged into the receiver board as can be seen in the second picture.

Step 25: Making the Receiver Interface – Connecting the Potentiometers

Proceed like this: First take a cable strand of 8 cables and solder 5 of them to the middle pins of the potentiometers. Preferably use the same colors as in the diagram to not get confused

Step 26: Making the Receiver Interface – Perfboard

Next, cut a 2 * 17 hole wide perfboard and a 17 pin male pin header to size

Step 27: Making the Receiver Interface – Making the Plug

Attach the cables and the pin header to the board. Pay attention to the circuit diagram above to make sure, that you connect the cables in the right places

Step 28: Making the Receiver Interface – LED

Now connect one side of all the potentiometers with blue ground-connection-cables (and maybe use slightly longer cables than I did). Also add the blue LED with it's current limiting 150 Ohm resistor. Again pay attention to the LED's polarity (compare to the second step of making the controller board)

Step 29: Making the Receiver Interface – +5V-connections

Next connect the other side of all potentiometers with green 5V-connection-cables (and maybe use slightly longer cables than I did)

Step 30: The Finished Receiver Interface

The finished interface should look similar to this (picture 1) and can be plugged into the receiver board like that (picture 2)

Step 31: Uploading the Receiver Code

Now you can also upload the Kravox Receiver code to the receiver's Arduino Nano.

If you want to see if it is working and receiving data from the controller, you can again make a slight adjustment to the code before uploading. By default the Receiver will output it's data in a format that can be interpreted by pure data, but will not show useful information on the Serial Monitor. However you can change this behaviour in the code by commenting (adding // in front of) the line that says:

#define WRITE_AS_BYTES

and uncommenting (removing // in front of) the line that says:

// #define PRINT_VIA_SERIAL_MONITOR

You can see a Kravox data logging demonstration (including a description how to alter the code) in the video above

Step 32: Making the Controller Interface + Enclosure

Like the receiver, the controller also gets an interface – a touch interface that we will make from copper tape

Step 33: Making the Controller Interface + Enclosure – Components

As we directly want to attach the touch interface to the controller's enclosure, you should already have the (non-conductive) material at hand that you want to make the enclosure from. I used empty boxes that cling film and plastic bags came in

Step 34: Making the Controller Interface + Enclosure – Marking

Start making the controller interface by marking where you want to attach the touch electrodes. Please note that they must not touch or overlap each other

Step 35: Making the Controller Interface + Enclosure – Electrodes

Next, cut the 24 copper electrodes to size and attach them to the enclosure

Step 36: Making the Controller Interface + Enclosure – Plug

Now we can make the plug. For that cut a 2 * 24 hole wide perfboard and a24 pin male header to size and solder 24 cables to it. The cables in the middle should be at least 10 cm long. To the outside add the width of your electrodes plus the spacing in between for each cable. If for example you use 1 cm wide copper tape and leave 3 mm between the electrodes, your cable length should increase by 1.3 cm like this 10 / 11.3 / 12.6 / 13.9 / 15.2...

Then solder the other ends of the cables to the electrodes

Finish the interface by covering the copper surface with non-conductive adhesive tape

Step 37: Making the Controller Interface + Enclosure – Fold a Box

Next fold the interface into a box and glue it

Step 38: Making the Controller Interface + Enclosure – 2nd Box

Glue a smaller box to the box we made in the previous step. It later will contain the powerbank

Step 39: Making the Controller Interface + Enclosure – Prepare the Controller-board

Cover the back of the controller board with some leftover cardboard or other slightly thicker non-conductive material

Step 40: Making the Controller Interface + Enclosure – LED-Cutouts

Cut out holes for the LEDs and glue them and the powerbank (yellow object in the picture) in place. Make sure to place the powerbank in a way that you can still plug in and remove the USB-cable because that is how you turn your controller on and off. Also connect the touch-interface to the controller board and put it in the box. Most likely it will not move much, so you do not need to glue it in

Step 41: Making the Controller Interface + Enclosure – USB Cable

Make a cut out for the USB-A to USB-C cable at the junction of the two boxes, pull it through and connect it to the Arduino Nano

Step 42: The Finished Controller

Now the Controller is done!
You can close it with some rubber bands. If you later have problems with the sensors recognizing touch when there is none, try to put some non-conductive material like clingfilm or the like between the touch sensitive enclosure and the board and meandering cables. Also make sure to connect the powerbank when the touch sensitive part of the enclosure does not touch your hands or anything else (see the end of the instructable for explanation)

Step 43: Making the Receiver Enclosure

In the next part of the instructable we will make an enclosure for the receiver as well. You will need another cardboard box (I chose one that contained a bluetooth transceiver before – fitting huh?) and some knobs for the potentiometers

Step 44: Making the Receiver Enclosure – Cutouts

First cut out some circular holes for the potentiometers the LED. Also mak a cut out where you want to connect the USB-Cable to the Arduino Nano

Step 45: Making the Receiver Enclosure – Glue in Receiver-board

Glue the Receiver board in. Make shure that the USB-C Jack of the Arduino Nano is aligned with the hole that you cut out for the cable connection in the step before

Step 46: Making the Receiver Enclosure – Install Potentiometers + LED

Next glue in the LED and screw in all the potentiometers. The order how to put them in is the same as in the circuit diagram above

Step 47: Making the Receiver Enclosure – Knobs

Attach the knobs

Step 48: The Finished Receiver Enclosure

Step 49: Connecting the Receiver to Pure Data – Externals

Now that all the hardware is finished, it's time to play some music with it! For that you need software that you can connect the hardware to. For Kravox that software is Pure Data Vanilla that you can download here for free

After installing Pure Data to your computer, start it and open the Kravox.pd file from the attachments. Please note that it needs to be saved on your computer in the same place as the drumsamples folder it comes with - otherwise Pure Data cannot find the samples

As soon as the Kravox.pd software interface has opened, look for a blue-info box (see picture) and install the four so-called externals that are listed in the box. Installing them is straightforward: Just click on "help" in the Pure Data Menu, choose "Find additional objects on the internet" (might be phrased slightly different), search for "comport", "zexy", "freeverb" and "arraysize" one by one and install the most recent version. Now the four objects labeled, comport, repack, freeverb and arraysize should have a solid outline like in the picture below. You might need to restart Pure Data for that though

Step 50: Connecting the Receiver to Pure Data – Choosing the Right USB-Port

After installing the necessary externals you can connect the Receiver Box via USB. If you altered the code in Part 4 to use the Receiver with the Arduino Serial Monitor you need to undo this change first and upload the original code to the receiver's Arduino Nano before connecting and close the Arduino Serial Monitor, so the receiver is not busy trying to talk to it.

Now have a look at Pure Data's log / info window. If you see a rapidly updating data stream that's great because it means that pure data has already found the receiver, but most likely it will instead show you a red message like the one in the first picture that refreshes every other moment

The red message might be a little different, but the result is the same:
Pure Data did not yet succeed to connect to your receiver. That is because the program needs to be told, which USB port to listen to. USB-ports are sometimes a bit of a funny thing though: On a 2014 macbook Pro, Pure Data recognizes both USB ports as Serial Port 3, no matter to which you connect the receiver. In Milan I used Kravox with a Lenovo Yoga Pad with only one working USB-Port, that needed to be contacted as Serial Port 6, and recently installed it to another Windows Notebook with two USB-Ports, that wished to be addressed as Serial Ports 8 and 9... So my advice is just to try which number works with your USB-Port. For that I created a simple dialog as part of the Kravox.pd interface (See second picture), where you can just click through the numbers until one works. You can also try the "Show available ports" and "Show connected USB-devices" buttons – Sometimes, but not very often that also provides useful information. However it takes a while until you get a response in the info window

You will notice that you have found the right port number and that a
connection has been established when the info window shows a data stream like this that updates rapidly (See third window)

Step 51: Connecting the Receiver to Pure Data – Turning on the Controller

Very good so far! Click save, so Pure Data will attempt to connect to this port the next time it opens automatically.

However we still need to turn the controller on. If you performed the optional step while making the controller-board and uncommented the last section of the Kravox Controller code to connect the controller to the Serial Monitor you should upload the original Version again now.

Connect the controller board to the powerbank. When you do this, the touch-interface-enclosure around the the board should be closed and the touch sensitive part of the enclosure should not touch your hands or anything else, as the touch sensors sense their environment when powered up and assume it to be the untouched state

Step 52: You Are Done!

Congratulations – You are done!
Have much fun playing Kravox!