For those who’d rather watch video than read blogs, I posted to YouTube about this… but honestly, I write better than I video.
I found my Gakken SX-150 in the basement a while ago. That little cheap synth has a VCO, a VCF, an envelope generator for both the VCO and the VCA, and an LFO that also modulates the VCO. What it doesn’t have is a keyboard, or a MIDI port, or a control voltage input. Instead it has a ribbon controller: a strip of resistive material and a stylus you press against it to control the VCO frequency. I use the word “control” loosely. You probably don’t want to try to play melodies on this thing. On the other hand, you can glissando like no one’s business and make all sorts of noises you can’t get with a keyboard. Ribbon controllers go way back; Moog was making them by the early 1970s. So I figured, why not make one for my Moog?
There’s lots on the Internet about DIY ribbon controllers. People have made the ribbons out of videotape, electronics anti-static bags, and lord knows what else. I’m not sitting on a stash of surplus VHS cassettes or electronics packaging, though, and honestly I’d rather spend $20 on a commercial solution that’s still an order of magnitude cheaper than a ready-made synth controller: a SoftPot. This is a conductive strip and a resistive strip separated by a gap. There are contacts connected to both ends of the resistive strip and to the conductive strip, which functions analogously to a potentiometer’s wiper when you touch it and it contacts the resistive strip. You can order SoftPots from SparkFun and Mouser; they come in lengths from 12.5 mm to 1000 mm. I bought a 500 mm one.
It might seem simple to make this into a controller, if you want a control voltage output. (MIDI is harder, but the MIDI protocol is built around the idea of playing notes from the 12-note equally tempered scale. You can work around that, mostly, but CV is more naturally suited to a ribbon controller than MIDI is.) Hook up +5V to one end of the resistive strip and ground to the other, and use the voltage from the wiper to ground.It’s acting as a voltage divider and the wiper voltage varies from 0 to +5V as you move your finger from one end to the other. It should be linearly related to the position on the ribbon.
There are a couple of problems with this, though. First is, all it gives you is CV. But if you have an old CV synth its keyboard actually produces two outputs: a control voltage, saying which key is being pressed, and a gate, saying whether a key is being pressed. You can use the CV to control the VCO, and the gate to trigger the envelope generator. Likewise you’d like to get a gate signal from the SoftPot that turns on when you touch it and off when you lift your finger.
But that leads to the second problem. Unlike a conventional potentiometer, whose wiper stays put when you take your hand off the knob, the SoftPot’s wiper disconnects itself. You’d then have a floating contact with no well-defined voltage difference to ground.This isn’t a good thing.
A way to deal with the floating wiper is to use a pullup resistor. Connect one end of the SoftPot to ground but connect +5V not to the other end, but to a fixed resistor, the other end of which connects to the wiper.Now it’s part of the resistive strip plus the fixed resistor that forms the voltage divider. When you’re touching the ribbon the wiper voltage runs from 0 to something less than +5V, depending on the relative resistances of the pullup and the SoftPot. When you take your finger off and the wiper disconnects from the resistive strip, it’s still connected to the pullup and its voltage goes to +5V.
That gives you a way to tell whether the SoftPot is being touched or not, so you can make a gate. Then you need to take the wiper voltage when the ribbon is being touched and scale it up to 0 to +5V for your CV. Actually it’s not just scaling, because with the fixed resistor the wiper voltage is no longer linear in the position. So you would need to linearize it. If you’re John Simonton you can do that in electronics, but one Chip Audette a couple years ago chose to do it in software instead. In a couple of blog posts (1, 2) Audette wrote about making a ribbon controller out of a SoftPot. I’m following that method, mostly.
Audette connects the wiper to an analog input on an Arduino microcontroller board. The Arduino has builtin pullup resistors you can enable, so that’s taken care of. So is conversion from analog to digital, with the Arduino’s ADC producing a digitized number for the microcontroller to ponder. Audette’s software (nicely provided on GitHub) checks whether the number is the maximum value, which means the gate should be closed, or less, which means the gate should be open and the number should be linearized, scaled, and sent out over a serial output pin to a separate DAC chip (the Arduino does ADC but not DAC) to create the CV. Actually the IC has two DACs on it so the same number is sent to both, to produce two CVs. Then one can be used to drive a VCO while the other goes to the VCF to make its cutoff frequency track. The gate output just comes directly off one of the Arduino’s digital output pins. The whole circuit consist of just a few jacks for the input and output cables, two capacitors, the DAC chip, and the Arduino. Simple. And it’s been a few years since I’ve done any electronics, so simple is good. Also a few years since I’ve used an Arduino, but I’ve got that set up on my new computer and working.
A couple of minor differences in what I’m doing. Audette used two output jacks, a mono jack for one CV and a stereo jack for both the other CV and the gate. The 2-conductor cable would need to be split at the synth end to two mono plugs. I’m just going to use three mono jacks and three cables. Also, Audette used an Arduino Micro. I don’t have one of those; I have an Arduino Uno and several Arduino-compatible boards from SparkFun, two RedBoards and some Pro Minis. The latter seems the best choice to me, but it’s a little different from the Micro. It doesn’t have the six pin serial header, for one thing, but I understand that doesn’t matter at all. The header is just a different way to connect to pins available, on the Micro and on the Pro Mini, on the board edge. More potentially annoying, the Pro Mini has no USB port. To upload a program to it, you have to use a USB-to-serial interface. Of which I have two (for some reason), so not a problem, except that the Pro Mini I intend to use is a 5V board and both the USB-to-serial boards I have are 3.3V. Ideally one should use a 5V version to connect to the 5V Arduino. But I’ve read that usually a 3.3V USB-to-serial will work just fine with a 5V Arduino. So I’ll try it. If it doesn’t work, slight delay while I acquire a third USB-to-serial, this time a 5V one. If it does, full speed ahead on a prototype circuit, and if that works and I like it, on from there to a permanent version.