Синтезатор на ардуино своими руками

Добавил пользователь Alex
Обновлено: 05.10.2024

Привет! В предыдущих уроках мы рассмотрели возможности Ардуино по воспроизведению звука. Поэтому, сегодня используем эти возможности, чтобы создать проект настоящего пианино на Ардуино.

Содержание

  • Для выполнения этого урока нам понадобятся
  • Корпус из Лего
  • Программа и схема пианино
  • Полный текст программы
  • Пианино на Ардуино
  • Где купить

Мы уже использовали функцию tone() в уроках. Пожалуйста, посмотрите ее, если уже забыли или пропустили. потому что, сейчас мы будем использовать ее в проекте пианино.

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 7 кнопки
  • 8 резисторов номиналом 10 кОм
  • 1 резистор номиналом 150 Ом
  • Динамик 8 Ом
  • Лего
  • Кабель USB

Корпус из Лего

Прежде всего, возьмем конструктор лего для создания корпуса и каркаса для всего проекта. На этот раз конструктора понадобится много. Потому что, мы хотим подключить 7 клавиш для пианино, и нам придется спрятать в корпус макетную плату целиком.

В уроке посвященном подключению динамика к Ардуино мы уже рассматривали программу и схему подключения деталей. В этот раз схема будет почти такой же. Мы только добавим несколько кнопок. Программа же будет почти идентичной.

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

Программа и схема пианино

Прежде всего, подключим динамик через сопротивление к 9 контакту ардуино. Все кнопки соответственно подключим к контактам со 2 по 8. Второй контакт кнопки подключим к шине 5 вольт. И еще один контакт подключим к земле последовательно с сопротивлением.

Внесем небольшие изменения в программу по сравнению с предыдущим уроком так, чтобы на функцию tone() передавалась определенная частота, если нажата соответствующая кнопка.

while (digitalRead(BUTTON_A))
tone(SPEAKER, NOTE_A);

Кроме того, не забудем объявить все необходимые константы и переменные.

const int SPEAKER=9; //Динамик на 9 пине

const int BUTTON_C=8;
const int BUTTON_D=7;
const int BUTTON_E=6;
const int BUTTON_F=5;
const int BUTTON_G=4;
const int BUTTON_A=3;
const int BUTTON_B=2;

Полный текст программы

const int SPEAKER=9; //Динамик на 9 пине

const int BUTTON_C=8;
const int BUTTON_D=7;
const int BUTTON_E=6;
const int BUTTON_F=5;
const int BUTTON_G=4;
const int BUTTON_A=3;
const int BUTTON_B=2;

void loop()while (digitalRead(BUTTON_C))
tone(SPEAKER, NOTE_C);
while(digitalRead(BUTTON_D))
tone(SPEAKER, NOTE_D);
while(digitalRead(BUTTON_E))
tone(SPEAKER, NOTE_E);
while(digitalRead(BUTTON_G))
tone(SPEAKER, NOTE_G);
while(digitalRead(BUTTON_A))
tone(SPEAKER, NOTE_A);
while(digitalRead(BUTTON_B))
tone(SPEAKER, NOTE_B);
while(digitalRead(BUTTON_F))
tone(SPEAKER, NOTE_F);

noTone(SPEAKER); //Если ни одна кнопка не нажата
>

Пианино на Ардуино

Теперь постараемся сделать корпус для нашей схемы. В результате, получим нечто похожее на настоящее пианино. На макетной плате у нас получилось большое количество проводов, которые нужно спрятать. Кроме того, необходимо убрать плату Ардуино внутрь корпуса. Но, с другой стороны, оставить место для динамика.

Безусловно, мы не сможем получить звук как у настоящего пианино, но результат все равно завораживающий.

Спасибо, что дочитали статью до конца.

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

andriano аватар

Вообще-то планировал начать публикацию этого проекта немного позже, но раз у участников форума возникли вопросы, несколько подкорректирую свои планы. Тем более что уже начинают появляться некоторые результаты, в том числе и отрицательные. А с точки зрения обмена опытом отрицательные результаты даже более важны, чем положительные, т.к. показывают "куда не нужно ходить".

Итак, планируется создание музыкального синтезатора. Рассматривается именно музыкальный инструмент, а не нечто свистяще-булькающее для генерации шумовых эффектов.
Большая часть как этапов синтеза, так и используемых "устройств" - аппаратная. Причины - две:
- чисто программный синтез звука явно превосходит возможности AVR,
- у меня есть некоторый опыт по созданию аналоговых синтезаторов (опыт 20-летней давности).

Сначала немного теории.

Синтезаторы принято делить на одноголосые и многоголосые/полифонические. Это совершенно различные инструменты: первые являются функциональным аналогом духовых или смычковых инструментов, а вторые - инструментов, предназначенных для игры аккордами.

Обычно классический синтезатор состоит из следующих частей:
- некоторого количества генераторов тона (обычно не менее двух даже в одноголосых инструментах, или по одному-два на голос - в многоголосных),
- управляемого фильтра (по числу голосов или тонгенераторов, возможно, отдельный на генератор шума),
- управляемого усилителя (один на голос + 1 для генератора шума, возможно, + 1 общий),
- одного или нескольких (обычно 1-2 на голос) формирователя огибающей звука - ADSR (от сокращений Attac, Decay, Sustain, Release),
- от одного до четырех низкочастотных генераторов, предназначенных для модуляции генератора тона, фильтра, усилителя,
- генератора шума (факультативно),
- также факультативно - задержек, формантных фильтров, генераторов сигнала произвольной формы и пр.

Это что касается классического синтезатора. В последнее время приобрел широкое распространение таблично-волновой синтез. В общих чертах - это оцифрованный звук реальных музыкальных инструментов. Но, учитывая, что (если исходить из стандарта MIDI) имеется 128 нот, каждая со 128 уровнями громкости и совершенно невообразимым разнообразием длительностей, да еще и стандартных инструментов никак не меньше 128, то все оцифровки должны требовать чудовищного объема памяти. Поэтому звук режут на кусочки, интерполируют, масштабируют, а потом склеивают между собой.

Теперь переходим конкретике.

Теперь по блокам.

Управляемый фильтр.
По сути - классический универсальный фильтр на двух интеграторах и двух инверторах. Имеет выходы: ФНЧ, ФВЧ, ПФ и РФ (последнее - не Российская Федерация, а Режекторный Фильтр). В наиболее навороченных синтезаторах используются все. Мой опыт (и не только мой) говорит, что если не гнаться за шумовыми эффектами, а ограничиться музыкальным звуком, достаточно только ФНЧ. Но это уже вопрос исключительно коммутации и дополнительных ручек управления.
Варианты реализации:
1. Активные элементы:
1.а. ОУ,
1.б. Специализированная микросхема фильтра с уже подобранными конденсаторами интеграторов (например, UAF42),
1.в. Программно перестраиваемый фильтр (например, MAX260-MAX268).
2. Пассивные элементы:
2.а. Цифровые потенциометры (AD5204-06, AD5241-42, AD8400-02-03, CAT5116, MAX6160-61, MCP41xxx-42xxx, x9c102-103-104. ).
2.б. Цифровые регуляторы громкости (FM62429, LC75410, M61539, M62420-21-29, NGW1199, PT2257-58).
2.в. Перемножающие ЦАП (572ПА1, AD7520-21).
В принципе, наиболее привлекательным решением могли бы служить 1.в., вообще не требующий 2. Но диапазон перестройки, как правило, ограничен одной октавой, а в широких пределах может регулироваться частотой от внешнего генератора. Вот этот вот генератор - по одному на каждый фильтр - представляется тяжеловатым решением.
У фильтра регулируются:
- частота (называется cutoff),
- добротность (называется resonance),
- значения частоты в каждой из точек ADSR,
- глубина влияния следующих факторов на частоту (и, возможно, добротность):
-- вибрато от одного или нескольких низкочастотных генераторов,
-- ADSR, причем, влияние может быть как со знаком "+" так и "-".

Управляемый усилитель.
Аппаратный - цифровой регулятор громкости. (например, M62429)

Генератор ADSR.
Планируются программные. По 1-2 на голос (либо общий, либо раздельные для усилителя и фильтра) Реализуются в прерывании по таймеру.

Низкочастотные генераторы.
Также программные: планируется 2 или 4. Если 4, то 2 из них с внешней синхронизацией, а 2 - с синхронизацией от сигнала NOTE_ON. Если 2 - то переключаемые.

Генератор шум и прочий факультатив.
Генератор шума - не самая первая необходимость. Если будет, то, вероятно, аппаратный на сдвиговых регистрах.

Таблично-волновой синтезатор.
Планируется использование VS1053. Возможно, старую ISA плату Creative AWE32.

Управление.
Общее управление Arduino Mega 2560. В наиболее компактном варианте одноголосого синтезатора ею все и ограничится: из имеющихся 4 таймеров 2 будут использованы для тонгенераторов, а 2 оставшиеся - для задания частоты программируемым фильтрам.
В более общем случае будут использованы фильтры на интеграторах и 4 тонгенератора, которые будут в зависимости от режима работать либо как одноголосый, либо как двухголосый, либо как 4-голосый инструмент.
Возможно дополнительно подключение дополнительных голосов, формируемых либо Arduino Pro Mini, либо таймером 8253. Ну, либо той же Мегой 2560, если голосов потребуется много.

Сразу выражаю благодарность всем, кто словом или советом принял участие впроекте. В первую очередь dimax, ЕвгениийП, Arhat109-2.

Ардуино лего пианино

Привет! В предыдущих уроках мы рассмотрели возможности Ардуино по воспроизведению звука. Поэтому, сегодня используем эти возможности, чтобы создать проект настоящего пианино на Ардуино.

Мы уже использовали функцию tone() в уроках. Пожалуйста, посмотрите ее, если уже забыли или пропустили. потому что, сейчас мы будем использовать ее в проекте пианино.

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 7 кнопки
  • 8 резисторов номиналом 10 кОм
  • 1 резистор номиналом 150 Ом
  • Динамик 8 Ом
  • Лего
  • Кабель USB

Корпус из Лего

Прежде всего, возьмем конструктор лего для создания корпуса и каркаса для всего проекта. На этот раз конструктора понадобится много. Потому что, мы хотим подключить 7 клавиш для пианино, и нам придется спрятать в корпус макетную плату целиком.

В уроке посвященном подключению динамика к Ардуино мы уже рассматривали программу и схему подключения деталей. В этот раз схема будет почти такой же. Мы только добавим несколько кнопок. Программа же будет почти идентичной.

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

Готовое лего пианино

Программа и схема пианино

Принципиальная схема подключения пианино

Прежде всего, подключим динамик через сопротивление к 9 контакту ардуино. Все кнопки соответственно подключим к контактам со 2 по 8. Второй контакт кнопки подключим к шине 5 вольт. И еще один контакт подключим к земле последовательно с сопротивлением.

Внесем небольшие изменения в программу по сравнению с предыдущим уроком так, чтобы на функцию tone() передавалась определенная частота, если нажата соответствующая кнопка.

Кроме того, не забудем объявить все необходимые константы и переменные.

Полный текст программы

Пианино на Ардуино

Теперь постараемся сделать корпус для нашей схемы. В результате, получим нечто похожее на настоящее пианино. На макетной плате у нас получилось большое количество проводов, которые нужно спрятать. Кроме того, необходимо убрать плату Ардуино внутрь корпуса. Но, с другой стороны, оставить место для динамика.

Безусловно, мы не сможем получить звук как у настоящего пианино, но результат все равно завораживающий.

В этом уроке сделаем пианино с помощью Arduino и сыграем свою первую мелодию на этом мини-пианино.

Arduino - платформа с открытым исходным кодом, используемая для создания проектов в электронике.

Arduino состоит из программируемой платы (часто называемой микроконтроллером) и части программного обеспечения или интегрированной среды разработки Arduino IDE, которая работает на вашем компьютере, используется для написания и загрузки компьютерного кода на плату.

Делаем мини-пианино с помощью Arduino

Шаг 1. Компоненты

Платформа Arduino стала довольно популярной среди людей только начинающих в электронике, и не зря. В отличие от большинства предыдущих программируемых печатных плат, Arduino не нуждается в отдельном аппаратном обеспечении для загрузки нового кода на плату - вы можете просто использовать USB-кабель.

Кроме того, в Arduino IDE используется упрощенная версия C ++, что упрощает обучение программе. Наконец, Arduino предоставляет стандартный форм-фактор, который разбивает функции микроконтроллера на более доступные пакеты.

Необходимые компоненты для нашего урока по списку:

    - 1 шт.
  1. Провода-переходники папа-папа
  2. Клавиатура - 14 Ом
  3. Динамики - 1 A
  4. ПК или ноутбук

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

Шаг 2. Соединяем компоненты

Подключите Клавиатуру строки к 3 2 8 0 контактам Arduino и столбцы к 7 6 5 4 выводам Arduino.

Шаг 2: Соединяем компоненты

Подключите провода Динамика к клеммам 11 и Земля (GND).

Шаг 3. Как настроить оборудование

Кнопки Клавиатуры (наше пианино) были подключены с помощью перемычек. Основной эскиз (скетч) определяет, какие частоты музыкальных нот связаны с каждой клавишей пианино.

Для этого проекта мы использовали C4, D4, E4, F4, G4, A4, B4, C5, D5, E5, F5, G5, A5 и B5, причем C4 был переключателем '0', D4 - переключателем '1' и так далее. Измените значения частот или добавьте дополнительные переключатели, чтобы полностью настроить собственный проект. Динамик просто подключен одним концом к контакту 11 Arduino, а другой - к земле.

Шаг 4. Рабочий код

Шаг 5. Как работает код?

Эскиз (скетч) начинается с импорта библиотек Keypad.h и pitches.h, поэтому мы сможем ссылаться на различные элементы из них позже в коде. Далее, код настраивается путем определения количества ROWS и COLUMNS, определяющих, какие контакты входы и выходы, а также устанавливаем контакт Динамика как 11-й вывод Arduino.

Затем мы определяем значение каждой ноты в форме Матрицы и назначаем, какой вывод нам нужно связать со строками и столбцами:

  • в этом проекте мы использовали 3, 2, 8, 0 выводы как ROWS - строк,
  • 7, 6, 5, 4 в качестве COLUMNS - столбцов.

Основной цикл. Мы сохраняем каждое значение ноты в переменную customkey, а также печатаем значение в серийном мониторе Arduino IDE. Далее мы сравниваем каждую пользовательскую ноту и отправляем вывод SPEAKER NOTE (нота динамика) и DURATION (длительность) на функцию "тона".

На предыдущем шаге мы скачали библиотеку Arduino Keypad. Разархивируйте её в папку Arduino в Arduino IDE и далее пройдите:

Files → Example → Keypad → Custom Keypad

Шаг 6. Играем песню "С Днем Рождения"

Динамик должен быть подключен только к любым штыревым (PWM) разъемам ARDUINO, иначе настройка не будет работать.

Как играть песню "С Днем Рождения" на клавиатуре:

4 4 5 4 B 6 4 4 5 4 7 B
4 4 C 8 B 6 5
9 9 9 B 7 B

Желаем музыкальных успехов! До новых уроков, пока.

Читайте также: