The Artemis Synthesizer was created as a kit for Boston University’s Artemis Project. This project aims to teach female rising high school freshmen about computer science with hands-on activities. [Chris] based the kit on a ATMEGA328P microcontroller and a MCP4921 digital to analog converter. It can be used in a keyboard mode, where the buttons toggle various notes of the scale, or in a sequencer mode, where the buttons are used to toggle pre-programmed sequences.
[Chris] wanted the kit to be usable by the students after the workshop, so he used an optical link dubbed the “Optoloader” to program new sequences and waveforms into the device. A web based application allows for waveforms and sequences to be built in the browser, then programmed by holding a phototransistor up to a blinking square. The square flashes black and white corresponding to a Biphase Mark Code encoded message. This is decoded by the microcontroller on the synthesizer and stored in memory. As a result, no special hardware is needed to play new waveforms and sequences.
[Chris] has a thorough write up for the project, including feedback surveys from the students. He plans to add more specific information about the Optoloader in the future.
Check out a video of the kit in action after the break.
I was going to leave some comment about having such a tough time getting a girlfriend he’s now trying high school freshman, but then I thought the better of it…
Very impressive project!
I wonder how well the transfer speed could be scaled up. Limiting factor would probably be the monitor refresh rate. A native application that can wait for VSync could probably be a bit faster, but even then the max transfer rate would still be a few bytes per second.
considering it has been around in a watch for quite sometime its apparently not feasible for large amounts of data even in a refined state but still seems a lot more convenient to me i wish more things upgraded/expanded like this… perhaps people have seizures from tech like this
So it does not scale super well with javascript. You introduce a lot of clock jitter, to the point where differentiating your transitions becomes very very difficult. However, you could go rather fast over a direct optical link, or possibly even if you had control of the display directly.
One major application I can think of is iPhone/Android to embedded device programming/transmission. I believe the Electric Imp uses some similar technology.
For the amount of data transferred here, the javascript code is probably fast enough already. Limiting factor will stay the monitor refresh rate, which is really low.
An Android/iPhone already has a camera, which would make other methods much more feasible.
But for sending a little data to a mcu, it is a very good idea. It just won’t scale up well because of the monitor.
It used to be so that a few generations back almost all laptops came with an IR port, so at least there we could reach modem-era speeds.
But if i have to get one for my pc, i might as well just plug in the uart or usb or jtag or whatever.
Speed could go up when using multiple channels, but even with 8 photocells and a 60Hz encoding clock it would still only be a few dozen bytes per second.
Or you could use 4 or more light levels and get same speedup with one chanel.A duall chanel with 8 levels would give you ~6x the bandwidth.Maybe i should go to my bench….
@dmcbeing: Good idea. How about two analog (intensity) channels, real and complex, and do some QAM.
thinking about it further, it’s useless, the monitor refresh rate is just too low. Even 8 channels with 4 levels will still not get you even 100 bytes / sec. Better to go with sound then as the rate is much much higher.
That was my thought as well. From an old MIDI dog, the “wav file thru mini or micro audio jack should do the jerb quite well, although I do like his blinky screen method too. Like others have pointed out, it can be a little unstable. Overall nice job on the build and hope this gets more ladies into science.
@Bill I also thought about that. My boss was really keen on the lights and I recently implemented Biphase Mark Code for a Fiber Optic Link for a CMS test rig, so I took that knowledge and tried to apply it in this cool way. I want to do more work with it, but I have been swamped.
I have a programmable guitar pedal I want to make that I really want to use an audio jack to program it… Or interconnect pre-written blocks in cool ways, or something.
@cj Good deal. It does give it a neato factor as well as the boss thing ;)
With the pedals, I can tell ya to keep with your current config (in a way) and go with a normal looking 1/4″ tip and have a tiny led and in the other end the receiver for an opto-isolated data line to avoid ground hum. Could be a neat overall package-guitar2.0 or some such. Again, I borrow this from midi. I dunno you may have some bluetooth dev pedal thingies- I’m just typethinking out loud :) Best to ya.
I love the way you handle programming. No cables required! All you need is a display and javascript.
A better way than the optical link might be to use the soundcard. Even just with a mic on board, and PC speakers, you should be able to get a few hundred bps, much faster than 60-80Hz refresh rate of a monitor.