В теме про дешёвые diy киты я кидал запрос про модули, которых не существует. Пришлось делать самому Надеюсь, это даст старт новому обсуждению и интересным проектам, поскольку возможности Ардуины безграничны.
Началось с того, что мне потребовался CV для Minilogue - простые LFO и S&H. Как оказалось, заводских компактных модулей не существует - они все под рэки, да под кейсы. Громоздкие, да ещё и с сетевым питанием...
Погуглив разные diy решения, я собрал компактный CV модуль с usb питанием, но при этом выходом вплоть до +-15в и выше! За основу была взята Arduino ESP - WROOM - 32 с двумя встроенными dac на борту. К сожалению, они только 8 битные*, но иного под руками не оказалось. С выхода ардуины сигнал идёт на буфер со смещением для симметрии и усилителем на микросхемах 074 и 072. Ну и самое волшебство - питание аналоговой части сделано на модифицированном блоке MT3608, который я превратил в двуполярный. Таким образом, питаясь от простого однополярного usb 5в можно шевелить CV со значительно бОльшим размахом, да ещё и в обе стороны. Меня прям распирает от гордости за это решение, хахаха. Если кто-то возьмётся за серийное производство подобных супер компактных решений по аналогии с pocket operator, он войдёт в историю
В качестве программной части я использовал библиотеку controlVoltage. Код сделан на основе примеров автора библиотеки и выглядит вот так:
Схема цифровой части типичная для проектов на Ардуино: переменные резисторы 10к включены между + и - 3.3в. Движки резисторов идут к контактам 36 и 39 (как видно из кода), а выходы с dac - это контакты 25 и 26.
Я не рисовал полную схему, потому что проект простой. С макетного бутерброда я его на коленке перепаял на макетную плату.
С выхода платы ESP сигнал идёт на буфер и усилитель со смещением по постоянному току. Смещение нужно для того, чтобы получить симметричную волну.
Схема аналоговой части есть в онлайн симуляторе, по ссылке можно посмотреть номиналы и покрутить регулировки: https://tinyurl.com/26g8p3jb
Переменный резистор сверху регулирует уровень выхода. Переменный резистор слева - регулировка симметрии на выходе. Оба этих резистора - точные многооборотники, которые размещены на плате. Резистор справа на 10к - пот громкости lfo. Он размещён на передней панели.
Поскольку у меня два lfo, эта часть схемы собрана два раза. Итого, 6 операционных усилителей в двух корпусах: 1 микросхема tl074 и одна tl072. Стабилитроны на 5.1в, предохраняют выход от перенапряжения, если что-то пойдёт не так.
Питание - модифицированный MT3608, к которому добавлен блок, формирующий отрицательное напряжение. Обведён красным. В моих тестах 14в (+-7в) оказалось оптимальным напряжением, чтобы получить p-p 10в без искажений. Я использовал буквально первые попавшиеся диоды Шоттки - это не критично.
Модуль питается от 5в пина Ардуины.
Проектировкой монтажа я не занимался, было лениво. Получилось не очень красиво - но кому не всё равно, что там внутри этой коробки?
Ну и внешний вид на столе, чтоб оценить компактность, из-за которой всё затевалось
Если интересен бюджет:
Модуль Ардуино ESP32 - 460р
Корпус - 360р
Макетная плата - 370р
Модуль питания MT3608 - 208р
Потенциометры и разъёмы ~ 500р
Остальные детали ~ 500р (вся мелочёвка у меня уже была)
Итого: 2 398р, если брать быстро с Озона или Чип-Дипа, или 1 199р, если всё заказывать с Али экспресса.
*чем плох 8 битный модуль? Посмотрите на осциллограмму. На медленной lfo эта ступенька слышна. Для моего lo-fi модуля это не проблема, но если нужно что-то более чистое и точное, лучше рассмотреть ардуино с 12 битным цап, встроенным или внешним, не важно.
Полезные ссылки:
Видосы с канала автора библиотеки controlVoltage
Большой канал с кучей модулей и схем на ардуино: https://www.youtube.com/@HAGIWO/videos
Звуковые тесты, куда ж без них
Правда, я не знаю, как lfo красиво протестировать, попробовал приблизиться к уровню -Julian-.
Первый файл в тесте - вся суть. Буквально wow & flutter в коробке Для сравнения есть повтор без модуляции.
Началось с того, что мне потребовался CV для Minilogue - простые LFO и S&H. Как оказалось, заводских компактных модулей не существует - они все под рэки, да под кейсы. Громоздкие, да ещё и с сетевым питанием...
Погуглив разные diy решения, я собрал компактный CV модуль с usb питанием, но при этом выходом вплоть до +-15в и выше! За основу была взята Arduino ESP - WROOM - 32 с двумя встроенными dac на борту. К сожалению, они только 8 битные*, но иного под руками не оказалось. С выхода ардуины сигнал идёт на буфер со смещением для симметрии и усилителем на микросхемах 074 и 072. Ну и самое волшебство - питание аналоговой части сделано на модифицированном блоке MT3608, который я превратил в двуполярный. Таким образом, питаясь от простого однополярного usb 5в можно шевелить CV со значительно бОльшим размахом, да ещё и в обе стороны. Меня прям распирает от гордости за это решение, хахаха. Если кто-то возьмётся за серийное производство подобных супер компактных решений по аналогии с pocket operator, он войдёт в историю
В качестве программной части я использовал библиотеку controlVoltage. Код сделан на основе примеров автора библиотеки и выглядит вот так:
C:
#include <controlVoltage.h>
const int potPin1 = 36; // pin3
const int potPin2 = 39; // pin4
controlVoltage chan1 = controlVoltage(); //quantized CV
LFO lfo1 = LFO(TRI, 32, 255); //waveform, freq (Hz), amplitude
const byte dac1 = 25;
const byte dac2 = 26;
void setup(){
Serial.begin(115200); // initialize serial interface for print()
chan1.bitDepth( 8 );
lfo1.bitDepth( 8 );
}
uint16_t getAnalogValue(const uint8_t AAnalogPin) { //average value, pot anti-drift function
uint16_t result = 0;
for (uint8_t i=0; i<16; i++) result+=analogRead(AAnalogPin);
return ((result) >> 4);
}
void loop(){
chan1.loop();
lfo1.loop();
// Reading and mapping potentiometer value
int potValue1 = map(getAnalogValue(potPin1), 0, 4095, 80, 1000); // return 0-100
int potValue2 = map(getAnalogValue(potPin2), 0, 4095, 2, 100); // return 0-100
//write random value to chan1 CV
//and LFO to lfo1
static uint32_t controlTimer = 0;
float interval = pow(potValue1, 2)/2000;
if(millis()-controlTimer>interval){
controlTimer=millis();
randomSeed(analogRead(15));
chan1.cv(random(255));
}
static uint32_t controlTimer2 = 0;
int interval2 = 100;
if(millis()-controlTimer2>interval2){
controlTimer2=millis();
if(1){
//here we will change the frequency of our LFO
float freq = pow(potValue2, 1.5)/20;
lfo1.freq( freq );
}
if(1){
//here we will change the shape of our waveforms
static int state = 4;
if(state == 0) lfo1.waveform = TRI;
else if(state == 1) lfo1.waveform = RAMP;
else if(state == 2) lfo1.waveform = SAW;
else if(state == 3) lfo1.waveform = SQUARE;
else if(state == 4) lfo1.waveform = SINE;
if( state >= 5 ) state = 0;
}
}
//monitor output at signal rate
static uint32_t signalTimer = 0;
int signalInterval = 1;
if(millis()-signalTimer >= signalInterval){
uint16_t cvVal = chan1.get();
uint16_t lfoVal = lfo1.get();
dacWrite(DAC1, cvVal );
dacWrite(DAC2, lfoVal );
signalTimer = millis();
Serial.print("quant:");
Serial.print( cvVal);
Serial.print(",");
Serial.print("env:");
Serial.println( lfoVal );
}
}
Схема цифровой части типичная для проектов на Ардуино: переменные резисторы 10к включены между + и - 3.3в. Движки резисторов идут к контактам 36 и 39 (как видно из кода), а выходы с dac - это контакты 25 и 26.
Я не рисовал полную схему, потому что проект простой. С макетного бутерброда я его на коленке перепаял на макетную плату.
С выхода платы ESP сигнал идёт на буфер и усилитель со смещением по постоянному току. Смещение нужно для того, чтобы получить симметричную волну.
Схема аналоговой части есть в онлайн симуляторе, по ссылке можно посмотреть номиналы и покрутить регулировки: https://tinyurl.com/26g8p3jb
Переменный резистор сверху регулирует уровень выхода. Переменный резистор слева - регулировка симметрии на выходе. Оба этих резистора - точные многооборотники, которые размещены на плате. Резистор справа на 10к - пот громкости lfo. Он размещён на передней панели.
Поскольку у меня два lfo, эта часть схемы собрана два раза. Итого, 6 операционных усилителей в двух корпусах: 1 микросхема tl074 и одна tl072. Стабилитроны на 5.1в, предохраняют выход от перенапряжения, если что-то пойдёт не так.
Питание - модифицированный MT3608, к которому добавлен блок, формирующий отрицательное напряжение. Обведён красным. В моих тестах 14в (+-7в) оказалось оптимальным напряжением, чтобы получить p-p 10в без искажений. Я использовал буквально первые попавшиеся диоды Шоттки - это не критично.
Модуль питается от 5в пина Ардуины.
Проектировкой монтажа я не занимался, было лениво. Получилось не очень красиво - но кому не всё равно, что там внутри этой коробки?
Ну и внешний вид на столе, чтоб оценить компактность, из-за которой всё затевалось
Если интересен бюджет:
Модуль Ардуино ESP32 - 460р
Корпус - 360р
Макетная плата - 370р
Модуль питания MT3608 - 208р
Потенциометры и разъёмы ~ 500р
Остальные детали ~ 500р (вся мелочёвка у меня уже была)
Итого: 2 398р, если брать быстро с Озона или Чип-Дипа, или 1 199р, если всё заказывать с Али экспресса.
*чем плох 8 битный модуль? Посмотрите на осциллограмму. На медленной lfo эта ступенька слышна. Для моего lo-fi модуля это не проблема, но если нужно что-то более чистое и точное, лучше рассмотреть ардуино с 12 битным цап, встроенным или внешним, не важно.
Полезные ссылки:
Видосы с канала автора библиотеки controlVoltage
Большой канал с кучей модулей и схем на ардуино: https://www.youtube.com/@HAGIWO/videos
Звуковые тесты, куда ж без них
Правда, я не знаю, как lfo красиво протестировать, попробовал приблизиться к уровню -Julian-.
Первый файл в тесте - вся суть. Буквально wow & flutter в коробке Для сравнения есть повтор без модуляции.
Вложения
Последнее редактирование: