Гитарная педаль на Arduino Uno – pedalSHIELD UNO

Добавлено27 ноября 2018 в 07:42

pedalSHIELD UNO – это программируемая гитарная педаль на Arduino UNO. С ней вы можете создавать свои собственные эффекты и цифровые звуки.

Гитарная педаль на Arduino Uno – pedalSHIELD UNO
Гитарная педаль на Arduino Uno – pedalSHIELD UNO

О проекте

pedalSHIELD UNO – это lo-fi программируемая гитарная педаль, которая работает с платами Arduino UNO / Genuino UNO. Это Open Source & Open Hardware проект для гитаристов, хакеров и программистов, которые хотят узнать о цифровой обработке сигналов, эффектах, синтезаторах и прочих экспериментах без глубоких знаний о DSP, электронике или низкоуровневом программировании.

Вы можете запрограммировать свои собственные эффекты на C/C++ или использовать готовые эффекты с форума.

Программируемая гитарная педаль Arduino pedalSHIELD UNO
Программируемая гитарная педаль Arduino pedalSHIELD UNO

Как работает схема?

Плата расширения состоит из трех частей:

  • входной каскад: усиливает и фильтрует сигнал с гитары, что делает его готовым для аналого-цифрового преобразователя 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.

Связь интерфейсов платы расширения гитарной педали с Arduino Uno
Связь интерфейсов платы расширения гитарной педали с 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.

Программируемая гитарная педаль Arduino pedalSHIELD UNO. Схема электрическая принципиальная
Программируемая гитарная педаль Arduino pedalSHIELD UNO. Схема электрическая принципиальная

Принцип действия прост; 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, передавая сигналы и напряжение питания.

Список компонентов

Это компоненты сквозного монтажа, которые легко найти.

Список компонентов программируемой гитарной педали pedalSHIELD 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, в формате которого они предоставляют принципиальную схему).

Поэтому для изготовления педали есть три варианта:

  1. заказать у разработчиков либо только печатную плату, либо весь набор для сборки педали (ссылка на сайт разработчиков будет в конце статьи);
  2. изготовить печатную плату по экспортированному в pdf-файл трафарету (предоставлен разработчиками) с помощью «лазерно-утюжной» технологии; ссылки для скачивания архивов с проектом в KiCad и трафаретами печатной платы будут приведены ниже;
  3. развести печатную плату в удобной для вас САПР и под компоненты, которые вы предпочитаете, или которые у вас есть в наличии (и, возможно, поделиться результатами с остальными ;-) ).
Внешний вид печатной платы pedalSHIELD UNO и расположение компонентов
Внешний вид печатной платы pedalSHIELD UNO и расположение компонентов

Часто задаваемые вопросы (FAQ)

pedalSHIELD Uno совместима со всеми платами Arduino?

Нет, только с Arduino Uno и Genuino Uno.

pedalSHIELD Uno подходит для басистов?

Да, но вам необходимо заменить 2 конденсатора (C1 и C11) с 0,1 мкФ на 0,47 мкФ, чтобы пропускать через схему более низкие частоты.

Могу я включить наушники напрямую в pedalSHIELD Uno?

Нет, pedalSHIELD Uno – это не усилитель. Её необходимо включть в гитарный усилитель или в педаль мультиэффектов (например, Line 6 pods и т.п.).

Вот и всё! Делитесь впечатлениями и результатами сборки!

Теги

ADC / АЦП (аналого-цифровой преобразователь)ArduinoArduino ShieldArduino UnoDAC / ЦАП (цифро-аналоговый преобразователь)DSP / ЦОС (цифровая обработка сигналов)PWM / ШИМ (широтно-импульсная модуляция)Гитарная педальПлата расширенияЭлектрическая бас-гитараЭлектрогитара