光电管Theremin

Theremin是一种电子乐器,与其他乐器不同:您可以演奏它而无需触摸它。 传感器检测音乐家的手的相对位置:一只手控制频率(音符),另一只手控制振幅(音量)。

我的Theremin版本使用非常规的光电管或光传感器作为控制输出频率的方法。 它越黑(或您的手越靠近传感器),则音调越低。 可以演奏的音符范围可以在代码中进行调整。

建造

这是我构建电路的方式:

代码

如果查看音符的频率表,您会注意到音符越高,频率以增加的速率增加。 为了解决这个问题,我使用了一个数学函数来线性化控制高音符变化频率增加的方程。

如果我不进行线性化处理,小号将很难演奏。 与高音符的范围相比,它们的范围微不足道。

  #include  
 整数BUZZER_PIN = D0; 
int PHOTOCELL_PIN = A0;
  int MIN_LIGHT = 120; 
int MAX_LIGHT = 650;
 整数MIN_FREQ = 261; 
int NUM_NOTES = 25;
 双READ_THRESHOLD = 2; 
双重last_read;
  void setup(){ 
pinMode(BUZZER_PIN,OUTPUT);
pinMode(PHOTOCELL_PIN,INPUT);

last_read = 0.0;
}
 无效循环(){ 
双重读取= map(analogRead(PHOTOCELL_PIN),MIN_LIGHT,MAX_LIGHT,0,NUM_NOTES);

如果(abs(阅读-last_read)<READ_THRESHOLD){
阅读= last_read;
}
last_read =阅读;

双倍频率= MIN_FREQ * pow(2,读数/ 12);

提示音(BUZZER_PIN,圆角(频率));
延迟(125);
}

问题

虽然我确实在其中创建了一个工作版本,但是我制作的版本仍然存在问题。 有时它会在两个音符之间摇摆,并且很难演奏您想要演奏的音符。

总体而言,它展示了Theremin的工作原理,并且是一个很好的涉及音乐的项目。