Therething (theremin-type-thing) Project
- Owner: BuildBrighton
- Start date: 01/10/2009
- Completion date: 30/10/2009
Version 2.0 wishlist
We're currently planning the next version of the therething. Planning/wishlist/etc are here Therething/V2 plan
- User Interface Design: Toby Cole
- Circuit Design and Construction: James Grant
- Software: James Grant & Toby Cole
- Enclosure Design and Construction : Steve Carpenter
- Other Important Contributions : BuildBrighton
We were asked by Playgroup, local club promoters, to provide a 'sweetner' to perusade electronica djs [Evil Nine] to take part in an event they are promoting. This item was to be a Theremin. We designed and build a theremin type thing, which was officially presented to Evil Nine on 30th October 2009 at The Komedia (where we also hosted the pre-party from 6-10pm).
A few group members have already worked on MIDI projects and have discussed the idea of building a theremin-type machine with midi output. The analogue signal used to drive the oscillator/speaker on the original could be sampled to give a digital value within a specific range, which in turn can be used to generate a midi "note on/off" signal. The idea of using ultrasonic range finders in place of the theremin's antenna has also been thrown around. This would mean that the end result would be an instrument that plays like a theremin (non-contact) but is actually a completely different beast altogether.
We ended up choosing the un-theremin option, going for a pure midi controller.
How the BuildBrighton Theremin works
Ultrasonic sensors are used to return a distance value, from the sensor to the player's hand. This value is converted by an Arduino or other microcontroller into a MIDI key value and is output at the correct baud rate (31,250 bps) onto a serial pin. Since MIDI needs a signal to turn off a key pitch as well as a signal to turn it on, two MIDI signals are sent - one to turn off the previous note and one to activate the required note. The new note-on message is sent BEFORE the previous note is turned off. This is to allow for a slide/portamento effect, making it sound more theremin-like on certain synths.
Volume is controlled using a similar approach, using an ultrasonic transducer that is pointing away from the note-generating sensor (to avoid cross-talk or interference).
Slides from Toby's Talk
User Interface Planning
- Note Settings
- Scale [None, Major, Minor, …]
- Root [C, C#, …]
- Octave [-2, -1, 0, 1, 2, 3]
- Range [1 octave, 2 octaves, 3 octaves]
- Controller Settings
- CC Number [0 - 127]
- Invert Range [On, Off]
- CC Number [0 - 127]
- Invert Range [On, Off]
- MIDI Channel [1 - 16]
The circuit for the theremin is very simple. Most pins on the arduino go straight to the sensor / button / LED / Port. The only extra components are three capacitors for debouncing the rotary encoder, some current limiting resistors, a trim pot for the display contrast and the power supply.
Parts list has been added to a separate page: Therething/parts list
The code for therething is now hosted on github under the Apache 2.0 license:
Code for generating MIDI note scales from a base note and the note intervals (in semitones). theremin_arduino_scale_test.pde
User interface code
Menu interface for the LCD display controlling global variables that could be picked up by the sensor code. Theremin_UI.pde
'Ionian Mode','2212221' 'Dorian Mode','2122212' 'Phrygian Mode ','1222122' 'Lydian Mode','2221221' 'Mixolydian','2212212' 'Aeolian Mode','2122122' 'Locrian Mode','1221222' 'Major Scale','2212221' 'Harmonic Minor','2122131' 'Asc. Melodic Minor','2122221' 'Des. Melodic Minor','2122122' 'Natural Minor','2122122' 'Lydian Diminished','2131221' 'Lydian Augmented','2222121' 'Lydian b7','2221212' 'Locrian #2','2121222' 'Super Locrian','1212222' 'Whole Tone','2222222' 'Whole-Half Diminished','21212121' 'Half-Whole Diminished','12121212' 'Augmented','313131' 'Hindu','2212131' 'Major Pentatonic','22323' 'Minor Pentatonic','32232' 'Blues Scale','32232' 'Major Triad','2212221' '(add 9)','2212221' 'SUS','2212221' '(b5)','2211321' '+ (augmented)','2213121' '6','2212221' 'M7(b5),M9(#11)','2221221' 'M7,9,13','2221221' 'M7+,M9+','2213121' 'M13(#11)','2221221' 'Minor Triad','2122212' '(add 9)','2122212' 'm6','2122212' 'o7 (diminished)','2121212' 'm7(b5)','1221222' 'm7,9,11,13','2122212' 'm(M7),m9(M7)','2122221' '7,7sus,9,11,13','2212212' 'IV/V (Ex. F/G)','2221221' '7(b5),9(#11),13(#11)','2221212' '7(b9),11(b9),13(b9)','1312212' '7(#9),13(#9)','3112212' '7(b9#9)','1222212' '7(b9b5),7(b9#11)','1311312' '7+,9+','2213112' '7+(#9)','1313112' '7+(b9)','1313112' '13(b9#11)','1321212'
Links to source materials/ideas
- How to Build a Theremin Circuit diagrams and discussion on building a true analogue theremin.
- USB-to-MIDI connection cable You'll need these for testing on a PC if you don't have a gameport!