Programmable Wrist Synth Pushes The Envelope

Synths are a ton of fun no matter how good or bad they sound. Really, there are no bad-sounding ones, it’s just that some are more annoying to listen than others to if you’re not the one making the beep boops. [Clem] had built a tiny LDR-based synth into a watch case a few years back and took it to many a Maker Faire, where it delighted and annoyed until it ultimately broke.

Naturally, it was time to make a new version that’s more capable. Whereas the first one was Atari-punk-console-meets-light-Theremin, this one has a bunch of inputs and can be programmed on the fly to record and play back bendable tones. It’s driven by an Arduino MKR, and the inputs are managed by an impressively squash bug-wired shift register. [Clem] used beefy switches this time in the hopes that this one will last longer. We think the slide pots are a great touch, as are the candy-colored knobs printed in PMMA.

Our favorite part is that [Clem] took advantage of the random states the microcontroller pins are in when it’s first powered on. If you don’t want to program any notes, you can use the ones generated at boot and just play around with those. Be sure to check out the build video after the break.

We’ve seen our share of synths, but few as delicious-looking as KELPIE from this year’s Hackaday Prize.

7 thoughts on “Programmable Wrist Synth Pushes The Envelope

  1. One thing I’d comment on regarding the code shown in the video…

    The pin declarations all seemed to be done as variables with pre-defined values. Unless these are likely to change during operation this is a bad idea for two reasons:

    1. Each “int” is 2 bytes taken away from other parts of your program
    2. The compiler can’t assume that the value will not change, and so has to fetch the value of that variable and store it each time it is needed. (Since the variables are not “volatile”, the compiler may make some assumptions, but you’re at the mercy of the optimiser.)

    #define is a much better solution for Havard-architecture systems like AVR. (On more generic Von Neumann systems, you can meet half-way by declaring as “const int”, but #define is still better for this use-case.)

    The pre-processor will basically replace all occurances of your macro with whatever value you defined, meaning the compiler sees a literal constant, and will generate the code accordingly. This will also free up the RAM that is otherwise being used to store “constants”.

    1. Hi, I usually tend to use the same ways people see in arduino tutorials so everything is clear to the average viewer.
      surely there are better wys to do this, not sure how changing to #define would alter the inner workings on the SAMD used.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.