Гитарная педаль на Arduino Uno – pedalSHIELD UNO
pedalSHIELD UNO – это программируемая гитарная педаль на Arduino UNO. С ней вы можете создавать свои собственные эффекты и цифровые звуки.
О проекте
pedalSHIELD UNO – это lo-fi программируемая гитарная педаль, которая работает с платами Arduino UNO / Genuino UNO. Это Open Source & Open Hardware проект для гитаристов, хакеров и программистов, которые хотят узнать о цифровой обработке сигналов, эффектах, синтезаторах и прочих экспериментах без глубоких знаний о DSP, электронике или низкоуровневом программировании.
Вы можете запрограммировать свои собственные эффекты на C/C++ или использовать готовые эффекты с форума.
Как работает схема?
Плата расширения состоит из трех частей:
- входной каскад: усиливает и фильтрует сигнал с гитары, что делает его готовым для аналого-цифрового преобразователя Arduino Uno;
- плата Arduino: использует оцифрованный сигнал с АЦП и выполняет всю цифровую обработку сигнала (DSP),создавая эффекты (distortion, fuzz, громкость, метроном...);
- выходной каскад: после создания новой формы сигнал поступает с цифровых выходов Arduino (два объединенных ШИМ выхода) и подготавливается к отправке на следующую педаль или гитарный усилитель.
Технические параметры
- На базе Arduino / Genuino UNO (16 МГц, 2 KB RAM).
- Аналоговые каскады на операционном усилителе «rail-to-rail» TL972.
- АЦП: 10 бит.
- Выходной каскад: 16 бит (2 x 8 бит ШИМ, работающих параллельно).
- Интерфейс:
- 2 настраиваемые кнопки;
- 1 настраиваемый переключатель;
- 1 программируемый синий светодиод;
- ножной переключатель обхода.
- Разъемы:
- входной разъем, TRS 1/4" (1/4 джек), несимметричный, Zвх = 0,5 МОм;
- выходной разъем, TRS 1/4" (1/4 джек), несимметричный, Zвых = 0,1 Ом;
- Источник питания: питание берется с платы Arduino Uno.
Готовые примеры эффектов
- Clean/Transparent
- Volume/Booster
- Distortion
- Fuzz Distortion
- Bit-Crusher
- Daft Punk Octaver
- Signal Generator
- Metronome
- Delay
- Tremolo
Как программировать педаль?
Идея состоит в том, чтобы сделать программирование максимальным простым, плата программируется на C/C++ с использованием стандартных функций и среды разработки Arduino. Все инструменты и программы являются бесплатными / с открытым исходным кодом.
Ниже показана связь интерфейсов гитарной педали (вход/выход, элементы управления) с выводами платы Arduino Uno.
Необходимы базовые знания C. Лучший способ проиллюстрировать, как программировать педаль – это показать простой пример педали с эффектом Volume/Booster.
Педаль Громкость/Booster
Структурная схема программы выглядит так:
Реально используемый код выглядит так:
// CC-by-www.Electrosmash.com
// Based on OpenMusicLabs previous works.
// pedalshield_uno_booster.ino: нажатие кнопки 1 или кнопки 2 увеличивает или уменьшает громкость.
// определение аппаратных ресурсов.
#define LED 13
#define FOOTSWITCH 12
#define TOGGLE 2
#define PUSHBUTTON_1 A5
#define PUSHBUTTON_2 A4
// определение выходных параметров ШИМ
#define PWM_FREQ 0x00FF // частота ШИМ - 31.3 кГц
#define PWM_MODE 0 // Fast (1) или Phase Correct (0)
#define PWM_QTY 2 // 2 ШИМ параллельно
// другие переменные
int input, vol_variable=512;
int counter=0;
unsigned int ADC_low, ADC_high;
void setup()
{ // настройка входов/ выходов и подтягивающих резисторов
pinMode(FOOTSWITCH, INPUT_PULLUP);
pinMode(TOGGLE, INPUT_PULLUP);
pinMode(PUSHBUTTON_1, INPUT_PULLUP);
pinMode(PUSHBUTTON_2, INPUT_PULLUP);
pinMode(LED, OUTPUT);
// Настройка АЦП - настроен для чтения автоматически.
ADMUX = 0x60; // левое выравнивание, adc0, внутренний vcc
ADCSRA = 0xe5; // включить adc, ck/32, автозапуск
ADCSRB = 0x07; // захват t1 для запуска
DIDR0 = 0x01; // выключить цифровые входы для adc0
// настройка ШИМ
TCCR1A = (((PWM_QTY - 1) << 5) | 0x80 | (PWM_MODE << 1));
TCCR1B = ((PWM_MODE << 3) | 0x11); // ck/1
TIMSK1 = 0x20;
ICR1H = (PWM_FREQ >> 8);
ICR1L = (PWM_FREQ & 0xff);
DDRB |= ((PWM_QTY << 1) | 0x02); // включить выходы
sei(); // включить прерывания - на самом деле с arduino необязательно
}
void loop()
{
// Включить светодиод, если эффект включен.
if (digitalRead(FOOTSWITCH))
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
//здесь больше ничего нет, всё происходит в прерывании Timer 1.
}
ISR(TIMER1_CAPT_vect) // прерывание Timer 1
{
// прочитать данные входного сигнала АЦП: 2 байта, старший и младший
ADC_low = ADCL; // младший байт должен быть прочитан первым
ADC_high = ADCH;
// собрать входной сэмпл, сложив младший и старший байты АЦП
input = ((ADC_high << 8) | ADC_low) + 0x8000; // получить знаковое 16-битн. значение
// проверить кнопки:
counter++; // для экономии ресурсов кнопки проверяются каждый 100-ый раз
if(counter==100)
{
counter=0;
if (!digitalRead(PUSHBUTTON_1))
{
if (vol_variable<1024)
vol_variable=vol_variable+1; // увеличить громкость
}
if (!digitalRead(PUSHBUTTON_2))
{
if (vol_variable>0)
vol_variable=vol_variable-1; // уменьшить громкость
}
}
// амплитуда сигнала изменена по переменной vol_variable, используя функцию Arduino map
input = map(input, 0, 1024, 0, vol_variable);
// записать выходной ШИМ сигнал
OCR1AL = ((input + 0x8000) >> 8); // преобразовать в беззнаковый формат, отправить старший байт
OCR1BL = input; // отправить младший байт
}
Аппаратная конструкция pedalSHIELD UNO
Весь проект педали с открытыми исходниками, разработка была выполнена с помощью KiCad, бесплатного открытого инструмента проектирования электроники. Все файлы проекта, схемы и перечни элементов являются общедоступными. Схема может быть разбита на 5 простых блоков: источник питания, входной каскад, выходной каскад, пользовательский интерфейс и разъемы Arduino.
Принцип действия прост; 1 операционный усилитель готовит сигнал для оцифровки, а другой операционный усилитель принимает сигнал с микроконтроллера Arduino UNO. Один АЦП используется для считывания сигнала гитары, и два ШИМ сигнала используются для генерации выходного сигнала.
- Входной каскад: для лучшего захвата сигнал гитары усиливается с помощью первого операционного усилителя. Потенциометр VR1 регулирует коэффициент усиления этого усилителя от 1 до 21 так, чтобы уровень с гитары мог быть оптимизирован для оцифровки. Сигнал проходит через 3 фильтра нижних частот (сформированных из R3 и C2, R5 и C4, R6 и C5), которые устраняют избыток высших гармоник, которые могут создавать наложение во время выборки сигнала аналого-цифровым преобразователем (fср = 5 кГц).
- Выходной каскад: использует фильтр нижних частот Саллена-Ки третьего порядка, который устраняет гармоники выше 5 кГц. Два ШИМ сигнала используются параллельно, увеличивая разрядность (2 x 8 бит).
- Источник питания: для питания операционного усилителя «rail-to-rail» педаль использует +5В от Arduino Uno, что обеспечивает простоту конструкции и максимальное раскачивание сигнала без обрезки. Резисторный делитель R7 и R8 создает 2,5 В для виртуальной земли, а конденсатор C6 удаляет пульсации на линии питания.
- Пользовательский интерфейс: музыкант может использовать 2 настраиваемые кнопки, 1 настраиваемый переключатель, ножной обходной переключатель 3PDT и программируемый светодиод.
- Разъемы Arduino Uno: штыревые разъемы соединяют плату расширения с Arduino Uno, передавая сигналы и напряжение питания.
Список компонентов
Это компоненты сквозного монтажа, которые легко найти.
Позиционное обозначение | Количество | Наименование/номинал | Описание | Номер детали |
---|---|---|---|---|
Конденсаторы | ||||
C5,C2, C7, C8, C9 | 5 | 6,8 нФ | керамический конденсатор | SR211C682MARTR1 |
C3, C6, C10 | 3 | 4,7 мкФ | электролитический конденсатор | ECE-A1EKA4R7 |
C1, C11 | 2 | 100 нФ | керамический конденсатор | SR211C104KARTR1 |
C4 | 1 | 270 пФ | керамический конденсатор | D271K20Y5PH63L6R |
Резисторы | ||||
R12,R13, R10, R9, R6, R4, R3 | 7 | 4,7 кОм | Резистор, 1%, 0,25 Вт | MFR-25FRF52-4K7 |
R5, R7, R8, | 3 | 100 кОм | Резистор, 1%, 0,25 Вт | MFR-25FRF52-100K |
R1, R2 | 2 | 1 МОм | Резистор, 1%, 0,25 Вт | MFR-25FRF52-1M |
R11 | 1 | 1,2 МОм | Резистор, 1%, 0,25 Вт | MFR-25FRF52-1M2 |
Прочее | ||||
RV1 | 1 | 500 кОм | Подстроечный потенциометр | 3319W-1-504 |
D1 | 1 | Светодиод 3 мм, синий | Синий светодиод 3 мм | SSL-LX3044USBC |
U1 | 1 | TL972 DIP8 | Операционный усилитель «rail-to-rail» | 595-TL972IP |
Панель для микросхемы | 1 | Панель DIP8 | Панель DIP8 | 1-2199298-2 |
SW1 | 1 | 3DPT ножной переключатель | 3PDT ножной переключатель | 107-SF17020F-32-21RL |
SW2 | 1 | Тумблер | SPDT тумблер | 612-100-A1111 |
SW3, SW4 | 2 | Кнопка | кнопка вкл/выкл | 103-1013-EVX |
Conn1,2,3,4 | 1 | Разъем 40-выводный | Штыревой разъем с шагом 2,54 | 710-61304011121 |
J1, J2 | 2 | TRS 1/4" (1/4 джек аудио) | Стерео джек 6,35 мм | NMJ6HCD2 |
Печатная плата
Хотя разработчики и утверждают, что это полностью открытый проект, но упорно не желают делиться файлами разводки печатной платы для какой-либо САПР (например, для того же KiCad, в формате которого они предоставляют принципиальную схему).
Поэтому для изготовления педали есть три варианта:
- заказать у разработчиков либо только печатную плату, либо весь набор для сборки педали (ссылка на сайт разработчиков будет в конце статьи);
- изготовить печатную плату по экспортированному в pdf-файл трафарету (предоставлен разработчиками) с помощью «лазерно-утюжной» технологии; ссылки для скачивания архивов с проектом в KiCad и трафаретами печатной платы будут приведены ниже;
- развести печатную плату в удобной для вас САПР и под компоненты, которые вы предпочитаете, или которые у вас есть в наличии (и, возможно, поделиться результатами с остальными ;-) ).
Часто задаваемые вопросы (FAQ)
pedalSHIELD Uno совместима со всеми платами Arduino?
Нет, только с Arduino Uno и Genuino Uno.
pedalSHIELD Uno подходит для басистов?
Да, но вам необходимо заменить 2 конденсатора (C1 и C11) с 0,1 мкФ на 0,47 мкФ, чтобы пропускать через схему более низкие частоты.
Могу я включить наушники напрямую в pedalSHIELD Uno?
Нет, pedalSHIELD Uno – это не усилитель. Её необходимо включть в гитарный усилитель или в педаль мультиэффектов (например, Line 6 pods и т.п.).
Вот и всё! Делитесь впечатлениями и результатами сборки!