Музыкант собрал на Arduino барабанщика и даёт вместе с ним концерты
Испанец Франко Молино любит играть на гитаре. Так как одного человека для живого концерта мало, он пошёл по пути наименьшего сопротивления и собрал DrumCube — робота-барабанщика. DrumCube представляет собой компактную механическую драм-машину, которая заменяет три основных элемента ударной установки: бас-барабан, малый барабан и хай-хет. Они управляются платой Arduino Uno, а звук проходит через три раздельные цепи усиления. Его можно подключать к усилителю, ему не нужны семплы или записи, а ещё он не прогуляет репетицию и не напьётся после концерта.
Бас-барабан
В DrumCube бас-барабан состоит из двух пьезоэлементов, по которым бьёт резиновый молоток, управляемый сервоприводом. Чтобы звук был чище и не было высоких частот, на пьезоэлементы наклеены поролоновые губки.
Звук усиливается с помощью 5 вольт от общего блока питания, проходит через фильтр нижних частот и подаётся на микшер.
Малый барабан
Для получения этого звука Франко использует банку чипсов Pringles, электретный микрофон и две барабанные палочки с управлением от сервоприводов. Так как для них необходимо время на возврат в исходное положение, Франко применил схему из двух палочек, удары которыми чередуются.
Звук передаётся через схему усиления без фильтра нижних частот, но с дополнительным усилительным каскадом.
Хай-хет
Для хай-хета музыкант выбрал транзисторный генератор белого шума и светодиодный индикатор, которые активируются с Arduino. Шум проходит через фильтр высоких частот и подаётся на микшер, где объединяется с остальными сигналами:
На микшере с помощью потенциометра можно менять уровень звука от каждого элемента.
Создание музыки
Для создания ритма Франко использует цикл из 16 тактов. Биту каждого элемента соответствует простое число:
Для паузы Франко использовал ноль, а для комбинаций — суммы:
Таким образом, цикл записывается последовательностью этих чисел. Франко сохраняет их в переменные, которую Arduino проверяет при генерации битов. Например, для популярного бразильского стиля босанова будет последовательность 6, 0, 5, 0, 8, 0, 5, 0, 6, 0, 5, 0, 8, 0, 5, 0.
Для подачи битов используется цикл длительностью 150 миллисекунд, в конце которого должны приходить биты со всех трёх элементов. Длительность можно менять, но она ограничена скоростью работы сервоприводов.
В начале цикла на сервоприводы малого барабана подаётся команда возврата в исходное положение. Сервопривод бас-барабана остаётся на месте, так как у него оба положения дают звук. Хай-хет срабатывает почти моментально, поэтому включается в конце текущего цикла и выключается через заданный интервал в начале следующего. Так как у всех элементов разное время для создания звука, для каждого вычисляется свой интервал, когда нужно подать команду на создание бита, а затем сигнал последовательно передаётся на все задействованные элементы.
Посмотреть и послушать DrumCube можно на видео:
На странице проекта можно найти историю создания, детальное описание DrumCube и код для Arduino.