цифровая электроника
вычислительная техника
встраиваемые системы

 

Простой терменвокс на Arduino своими руками

Автор: Mike(admin) от 2-10-2020, 05:35

Терменвокс – единственный музыкальный инструмент, на котором вы можете играть, не касаясь его. Терменвокс был одним из самых первых электронных инструментов. Он был изобретен в России примерно в 1919 году Львом Терменом. Первый терменвокс состоял из корпуса в форме коробки с двумя антеннами: одна представляет собой прямую вертикальную штангу, которая регулирует высоту звука, другая – горизонтальная петля в форме, напоминающей трость, регулирует громкость. Высота и громкость ноты меняются с изменением расстояния рук до антенн, которые генерируют электромагнитное поле.


Простой терменвокс на Arduino своими руками

Хотя оригинальные терменвоксы стоят не дешево, можно сделать свое подобное устройство на цифровой основе с похожим принципом действия. И для этого мы используем плату Arduino, динамик и светочувствительный резистор (LDR).


Мы создадим установку импульсной модуляции, которая использует LDR в качестве датчика для регистрации интенсивности света, в соответствии с которым она будет модулировать звук.


Простой терменвокс на Arduino своими руками

Для воспроизведения звука использовалась библиотека Mozzi (sensorium.github.io/Mozzi), которая в основном представляет собой аудиотеку MIDI для платформы Arduino. Просто скачайте и распакуйте ее в папку библиотек library, и это все, что вам нужно будет сделать относительно нее.


Простой терменвокс на Arduino своими руками

Простой терменвокс на Arduino своими руками

В данном случае мы использовали динамик на 8 Ом, подключенный к аудио-усилителю PAM8403, что здесь очень важно, потому что вывод Arduino не может выводить громкие звуки из-за низкого прямого тока. Впрочем, если у вас нет усилителя или вам не нужны громкие звуки, тогда не волнуйтесь, просто подключите динамик напрямую с конденсатором последовательно или сделайте свой собственный усилитель с транзистором NPN.


Простой терменвокс на Arduino своими руками

Вот схема без усилителя:


Простой терменвокс на Arduino своими руками

А вот полная схема с усилителем:


Простой терменвокс на Arduino своими руками

Теперь просто подключите выход динамика к выводу D9 вашего Arduino.


Простой терменвокс на Arduino своими руками

Один конец LDR подключите к выводу A0 с сопротивлением 10 кОм последовательно с землей, другой конец LDR к линии питания 5 В. Теперь можно загружать код в Arduino.



#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/sin2048_int8.h>
#include <RollingAverage.h>
#include <ControlDelay.h>

#define INPUT_PIN 0

unsigned int echo_cells_1 = 32;
unsigned int echo_cells_2 = 60;
unsigned int echo_cells_3 = 127;

#define CONTROL_RATE 64
ControlDelay <128, int> kDelay;

Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin0(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin1(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin2(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin3(SIN2048_DATA);

RollingAverage <int, 32> kAverage;
int averaged;

void setup(){
  kDelay.set(echo_cells_1);
  startMozzi();
}


void updateControl(){
  int bumpy_input = mozziAnalogRead(INPUT_PIN);
  averaged = kAverage.next(bumpy_input);
  aSin0.setFreq(averaged);
  aSin1.setFreq(kDelay.next(averaged));
  aSin2.setFreq(kDelay.read(echo_cells_2));
  aSin3.setFreq(kDelay.read(echo_cells_3));
}

int updateAudio(){
  return 3*((int)aSin0.next()+aSin1.next()+(aSin2.next()>>1)
    +(aSin3.next()>>2)) >>3;
}

void loop(){
  audioHook();
}

Эта установка модулирует звук в соответствии с интенсивностью света, поэтому мы использовали лампу в качестве источника света, чтобы изменить интенсивность света с целью получения разных звуков.


Простой терменвокс на Arduino своими руками



© digitrode.ru


Теги: Arduino, терменвокс




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий