A zine which explains what cVert is, what it’s for and what it does is available here.
Disclaimer: Don’t play with radioisotopes unless you’re completely sure what you’re doing. I’m not responsible if you decide to mess with a dangerous material without taking the proper precautions. Background radiation in most areas will give you a sufficient amount of counts to make cVert a useful tool without introducing extra radioactive material.
cVert is the result of an idea I’ve been kicking around for years, and took a few months of work to bring to fruition. The idea was to use a Geiger counter as a true random number generator to give a non-deterministic input for computer art or music. The result is a MIDI controller with a large amount of control removed - it plays a random musical note every time a radioactive decay is detected.
The idea of using radioactive decay to generate random numbers is not especially novel. Geiger-Müller tubes have been used to provide random numbers for many years in hardware random number generators. These are generally used to provide a greater level of security in cryptography, where true randomness is important and pseudorandomness would not be adequate.
cVert is an attempt to take the technique of detecting radioactive decay and apply it to an arts context, by designing an accessible, low-cost and open-source MIDI device. MIDI was chosen primarily because it enables cVert to play nicely with a wide range of software; natively it can communicate with Pure Data, Max/MSP etc. as well as any DAW, but it can also be used with environments such as Processing or openFrameworks via the correct libraries.
Clearly it’s not necessary to use a Geiger-Müller tube for the purposes of generative art or music, but it is really cool.
Using the stock firmware, cVert provides the following functions:
- Hardware and USB MIDI
- 5V clock output to sync external synthesisers
- Built-in western scales to select random notes from
- Selectable octave range for random notes
- Selectable note velocity range
- 32 step sequencer with selectable tempo and notes per beat
- Case lights with adjustable brightness
cVert is based around an Arduino Pro Micro, which acts as a generic USB MIDI device and thus does not require special drivers on most operating systems. A custom circuit board breaks out the required connections for the Arduino, although this is not explicitly required. I have some spare boards left over from my build if you’re thinking of making one yourself - feel free to email and ask for one.
The Geiger counter module is a generic single board design, available from the usual Chinese drop shipping websites for <£40 including the tube. The design claims to be open source, but I’ve had a hard time finding any source files for it apart from one schematic. The tube (a J305BY) can detect Gamma and Beta radiation and seems to be reasonably sensitive, or at least enough for this purpose - I wouldn’t use it for building an actual serious Geiger counter. I’ve had some success detecting the radiation from an Americium sample taken from a smoke detector. Whilst this is mostly alpha radiation and thus probably doesn’t even reach the tube, some isotopes of Americium emit weak gamma radiation, and some of its decay products emit beta radation.
The UI is via a 4x20 I2C LCD screen, a rotary encoder and a push button. This was done to keep the interface simple and uncluttered, whilst not compromising on the flexibility of the controller. The push button is illuminated as a visual indication of when a note is playing.
A summary schematic of cVert is below.
The case for cVert is a 3D printed main body, with laser cut acrylic inserts for a top and front panel. This makes the Geiger tube a more visible feature. The top panel is edge lit by white LEDs, which are adjustable through the UI menu. The panel attaches via M3 bolts and brass threaded inserts.
I opted to sand, fill and paint my case to hide the layer lines and achieve a cleaner look when finished. The top panel was back painted with black spray paint to hide the internals - this is of course completely optional and I would probably not opt to do this if I built another.
To generate random numbers from the radioactive decay counts, a counter is used. The counter runs continuously, increasing by 1 for every cycle of the main loop. The Geiger counter triggers an interrupt which grabs the current value of the counter and uses it to select a note in the desired range. The same technique is used to generate note velocities, which are constrained to the user selected range.
The software for cVert is workable, but far from optimised. Squeezing all of the required features into the small memory of the ATmega32u4 pushed the limits of my programming expertise (I’m not a programmer at all), so I’m fully open to pull requests that would optimise it or add extra features. Alternatively, the software could be used with the Teensy platform to provide more capacity for extra features - this would mean a PCB redesign etc.
Instructions can be found in the acccompanying zine, along with some examples of cVert generated art.
All code, part files, schematics, gerbers and everything else can be found on GitHub.