I got the title for this instructable from an audio sample used in the excellent 'Nufonia Must Fall' Album by Kid Koala.

The turntable was made for my son (5 years) who was totally amazed when he saw a turntable for the first time. Ever since he wanted one. Below is an interpretation of a turntable for children without the expensive hardware, mixer, needles, records etc. :-)


plywood (4mm) for knobs/sliders/decoration/disc
fibreboard(18mm) for the table itself
plexiglass (4mm) for the disc/inside disc
an excellent manager at the local fablab.. Dance Danny dance!!

Electronic Components:

1 Arduino Uno
2 potentiometers
2 slider potentiometers
1 rotary encoder

Audio Software:

Javascript + browser
Web audio API

Node Js
+ libraries (socket.io, node-serialport)

Step 1: Turntable and Disc / Record

Model / decoration

The model for the turntable and the decoration for it was done in NodeBox 3 by EMRG.

NodeBox is an open source application for generative design (and much more) that allows to create vector graphics by connecting functions in a modular interface. On top of that it allows to create user nodes (I used one to export the shape to machine readable g code).

The turntable consists of two parts:

1 part was done by using a CNC milling machine. (the structure)
1 part by using a laser cutter (the decoration and the knobs/sliders/disc)

Step 2: Knobs and Decoration

I did a previous instructable on using NodeBox (on how to make fossiles) so I will skip this part mostly. Download it, learn it, use it!

The idea is that the design used (download it below in svg format) is based on measurement of the electronic parts that you have available. I added the ndbx file for personal adjusting.

The decoration part is generative so you can create an infinite amount of different tiles.

Step 3: Electronics

Wiring / electronics

rotary encoder --> analog 1 - 2
potentiometers --> analog 3 - 6

Arduino Playground has all the info you need on connecting potentiometers or a rotary encoder. Mine was a component so I did not use any extra resistors. All build in.. easy.

Sensors connected to the arduino send values over serial (if changed). Something like this for each pot meter:

int sensorValue = analogRead(A3); //read value
Serial.print("s "); // a pointer to call for in js
Serial.println(map(sensorValue, 1023, 0, 20, 0)); // the actual value mapped between a certain range.

The complete code is below.

Step 4: Software


In order to establish communication between the arduino and a browser, you need to install some things.

I followed Tom Igoe's post on setting up the communication. It involves installing node.js and a few extra libraries on top of that. When done you should be able to access your computer’s serial port and read to and write from it in a browser environment.

Below is the server script you need to run (test.js).

To execute in node go to terminal:
node test.js /dev/tty.usbmodem1421 (where /dev/.. stands for the serial port you want to listen to)
it should return:
port open. Data rate: 9600


I used the Web Audio API which "provides a powerful and versatile system for controlling audio on the Web". It works on most recent browsers and you can code it in JavaScript which makes it easy to use.

The audio section has two main audio parts:

1. beats: are controlled by potentiometer 1 (change beat) and is coded as such that it loops.

2. scratches: are controlled by the two slider potentiometers (1 for gain / volume cutoff and 1 for pitch). Samples can be changed by controlling the second dial potentiometer.

Below is the html file with JavaScript code. The audio files are not included. I used some battle records for the beats and scratches. Any audio file will do of course. My son likes playing with recordings of his own voice.

The visualisation is done in a html canvas tag, the locator is a coloured html div tag.

<p>Now my cat could be a DJ too ...</p>
haha better yet with a hamster wheel!

About This Instructable




More by lievn_m:Finger powered record player Creating POV sequences. Making a centipede fossile. 
Add instructable to: