Introduction: Finger Powered Record Player
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!!
1 Arduino Uno
2 slider potentiometers
1 rotary encoder
Web audio API
+ 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
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
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.
The visualisation is done in a html canvas tag, the locator is a coloured html div tag.