#5 Эксперимент “Электронное пианино”
Человек уже очень давно знаком с музыкой. Древнейшим на данный момент музыкальным инструментом, найденным археологами, насчитывается более 35000 лет. Музыкальные инструменты могут быть совершенно разными как по форме, так и по звучанию, тем не менее принцип их работы всегда один: генерировать звуковые волны различных частот. Именно эти звуковые волны, мы воспринимаем как музыкальные звуки. Но любая звуковая волна – это аналоговый сигнал, можем ли мы заставить цифровое устройство генерировать такие волны? Можем, но с одним условием – сигнал должен быть оцифрован. Сегодня мы попытаемся заставить Arduino генерировать звуковые сигналы нужной нам частоты и длительности, а заодно разберёмся – можно ли представить музыкальный звук в виде различных чисел.
Перед выполнением эксперимента прочтите:
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- Беспаечная макетная плата;
- 1 Пьезодинамик;
- 5 тактовых кнопок;
- 5 резисторов, номиналом 10 кОм;
- 14 соединительных проводов разных цветов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
Принципиальная схема устройства |
- Все кнопки подключены по схеме со стягивающим резистором, это нужно для того, чтобы избавится от наведённых внешних шумов и исключить случайное возникновение высокого (HIGH) сигнала;
- Пьезоэлемент не требует дополнительного токоограничительного резистора и подключается напрямую к пину Arduino. В нашем случае он подключён к 8-му пину;
- Обратите внимание, на корпусе пьезодинамика есть значок (+). Он указывает на ногу пьезоэлемента, куда должен приходить положительный сигнал (+), в нашем случае это сигнал от 8-го пина.
ПРОГРАММИРОВАНИЕ
Для того, чтобы наш динамик зазвучал, мы будем использовать специальный блок [Звук], находящийся в разделе [Порты]:
Где [порт №] – пин, к которому подключён динамик, а [частота] – частота звука, издаваемого динамиком.
Для того, чтобы пьезодинамик проиграл нужную нам ноту, нужно знать – какая частота звука соответствует той или иной ноте. Эту информацию с лёгкостью можно найти в сети, но чтобы не отвлекаться на поиск, можете использовать следующую таблицу:
Нота | 1-я октава | 2-я октава | 3-я октава |
Частота звука, Гц | |||
До | 262 | 523 | 1047 |
До диез | 277 | 554 | 1109 |
Ре | 294 | 587 | 1175 |
Ре диез | 311 | 622 | 1245 |
Ми | 330 | 660 | 1319 |
Фа | 349 | 698 | 1397 |
Фа диез | 370 | 740 | 1480 |
Соль | 392 | 784 | 1568 |
Соль диез | 415 | 831 | 1661 |
Ля | 440 | 880 | 1720 |
Си бемоль | 466 | 932 | 1865 |
Си | 494 | 988 | 1976 |
Запустите Arduino IDE, выберите [Инструменты] ⇒ [ArduBlock]. Сейчас мы заставим наш пьезодинамик звучать. Для этого составим следующий алгоритм:
Теперь наш пьезодинамик проигрывает ноту “до” первой октавы. Поскольку программа выполняется в цикле, то и проигрываемая нота звучит постоянно. Для того, чтобы звук вам не надоедал, отключите Arduino от USB-порта компьютера. Давайте теперь попробуем проиграть сразу 3 ноты – “до”, “ми” и “соль”. Ноты должны проигрываться последовательно друг за другом, чтобы получилось трезвучие. Для этого нам нужно задать длительность нот. Чтобы задать длительность звучания каждой ноты, будем ставить задержку после каждого блока [Звук].
Какую же длительность паузы выбрать при проигрывании нот? Обратимся к музыкальной грамоте. Каждую ноту можно проиграть с разной длительностью. По длительности, ноты можно разделить на целые (4 секунды), половинные (2 секунды), четвертные (1 секунда), восьмые (0,5 секунды) и шестнадцатые (0,25 секунды). Такты – это своеобразные блоки, в которые объединяются ноты. Самыми популярными длительностями такта являются длительности в 2 четверти и 4 четверти, т.е. 2 и 4 секунды. Давайте проиграем наши ноты в такте длительностью в 2 четверти. Наш такт будет содержать 2 восьмых ноты “до” и “ми” и 1 четвертную ноту “соль”. Таким образом, величина задержки должна составлять по 500 мс для нот “до” и “ми”, и 1000 мс для ноты “соль”:
Обратите внимание на частоту звуков, с которыми проигрываются ноты – они взяты из таблицы выше. Теперь попробуем растянуть наш такт до 4 четвертей, т.е. до 4 секунд. Это можно сделать увеличив задержки после нот в 2 раза. А можно добавить паузы. Пауза – это по сути отсутствие звука в течение какого либо времени. Паузы, как и ноты имеют разные длительности. Для того, чтобы заглушить динамик, т.е. сделать паузу, используется блок [no tone]:
Давайте вставим этот блок после проигрывания каждой из нот и добавим ему задержку, равную задержке только что проигранной ноте:
Загрузите программу в Arduino и понаблюдайте за результатом работы программы. Теперь, вы можете воспроизводить любые песни с помощью Arduino, дело за малым – найти ноты этих песен.
Попробуйте самостоятельно “проиграть” на Arduino песню по следующим нотам:
до (500 мс), до (500 мс), ре (500 мс), ре (500 мс),
ми (500 мс), ми (500 мс), фа (1000 мс),
ми (500 мс), ми (500 мс), ре (500 мс), ре (500 мс),
до (500 мс), до (500 мс), до (1000 мс),
до (1000 мс), ре (1000 мс),
ми (500 мс), ми (500 мс), фа (1000 мс),
ми (500 мс), ми (500 мс), ре (500 мс), ре (500 мс),
до (1000 мс), до (1000 мс).
Проигрывать ноты в автоматическом режиме весьма интересно, но давайте наконец превратим наше устройство в электронное пианино. Нам задача заключается в том, чтобы заставить Arduino воспроизводить ту или иную ноту, при нажатии на кнопки. Клавиатура нашего пианино будет состоять из 5-ти кнопок. Давайте привяжем к ним но – “до”, “ре”, “ми”, “фа” и “соль”, соответственно, нам понадобятся частоты этих нот – “262”, “294”, “330”, “349”, “392”. Для начала попробуем заставить “звучать” одну кнопку. Для этого бы будем использовать блок повторения [пока] из раздела [Управление]:
Блок [пока] повторяет блоки, находящиеся в разделе [Команды] пока выполняется [условие], которое мы задаём в этом разделе. Из предыдущих занятий мы знаем – как задать условие, для определения нажатой кнопки. В нашем случае, если кнопка, подключённая ко 2-му пину – нажата, Arduino начинает проигрывать ноту “до” через пьезодинамик, подключённый к 8-му пину. Обратите внимание: для того, чтобы звук после прекращения нажатия на кнопку, прекращался, мы вставили блок [выключить звук] в самый конец программы.
Теперь дело за малым – дополним алгоритм блоками для проигрывания других нот:
Загрузите программу в Arduino и проверьте её работоспособность. Обратите внимание: блок [выключить звук] не обязательно использовать после каждого блока [пока]. Его достаточно прописать 1 раз в самом конце программы. Теперь наше электронное пианино полностью готово!
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Подключите к нашему электронному пианино потенциометр так, как показано в памятке, для того, чтобы вы могли управлять не только частотой звука, но и его громкостью.
Задание 2*:
Уберите все кнопки со схемы, оставив лишь пьезодинамик и потенциометр. При этом, подключите потенциометр к аналоговому входному пину [A0]. Создайте алгоритм, который будет изменять частоту звука на пьезодинамике, в зависимости от угла поворота ручки потенциометра. Схема устройства на макетной плате должна выглядеть следующим образом:
Для того, чтобы получить сертификат, подтверждающий успешное прохождение курса – выполняйте тесты в конце занятий. | Пройти проверочный тест |