Featured Posts

PComp | Week 4 | Theremin v.2

October 3, 2017

 Final draft of the week: testing hand positions and notes. Also, trying to play the Do-Re-Mi song.

 

For this week, I wanted to improve on the Theremin prototype I created last week. There are several things I wanted to refine:

  1. Filter and map input from the IR sensor properly, resulting in more stable pitch output.

  2. Create a volume knob because the default volume is way too noisy.

  3. Make it so I could play a song with the prototype.

 

I started with googling how to control the volume of the speaker output.

 

There wasn't a built-in function, but Connor Nishijima found a hack which involves PWM in a frequency beyond our hearing capability, so that the speaker can sound quieter / louder.

 

I used his library and a potentiometer to make the volume controls.

 

potVal = analogRead(potPin);

 

volume = map(potVal, 0, 1023, 0, 300);

 

vol.tone(speakerPin, melody[average-1], volume);

 

 

 

Next up is to smoothen the input of IR sensor.

 

The input values were very unstable. My idea then was to take the average values instead of individual ones. I achieve this using the following function:

 

//map the IR raw values to pitch[0] (middle C) to pitch [5] (A4)

pitch = map(distance, 150, 550, 0, 5);

 

//smoothen pitch values
  total = total - readings[readIndex];
  readings[readIndex] = pitch;
  total = total + readings[readIndex];
  readIndex = readIndex +1;

  if(readIndex >= numReadings) {
    readIndex = 0;
  }

 

  average = total / numReadings;
  delay(5);

 

This particular line

 

//map the IR raw values to pitch[0] (middle C) to pitch [5] (A4)

pitch = map(distance, 150, 550, 0, 5);

 

Was really hard to nail. It took me a lot of trial and error to get the correct values mapped.

 

I tried mapping IR values to actual sound frequency, so that I could get smooth glissando sound like real theremin, but the output was too unstable. And even with the values mapped to a discreet array of notes, I could only get 4 stable notes from moving my hand away/closer to the IR sensor.

 

I think it's because the distance to output relationship is an exponential instead of linear one.

 

I had to resort to making a switch button into an octave / note switch, in order for me to get full 8 notes, from C4 to C5.

 

 

 

And the end result is unfortunately still far from real theremin sound. I want smooth glissando sound and the ability to mimic vibrato.


Note to self for next iteration:

  • Consider using other sensors, maybe stretch sensor to get more stable output

  • Try using another value-smoothing algorithm

  • Have another sensor as vibrato control

  • Consider using mp3 shield to output less-annoying sounds

 

 

 

Share on Facebook
Share on Twitter
Please reload

Related Posts
Please reload

Generative Music | Latent Space Sequencer

December 13, 2018

1/10
Please reload

Recent Posts
Please reload

Search By Tags