Новые технологии и древние звуки

Привет всем, это статья про DIY разработку и изготовление оригинального музыкального инструмента.

Когда-то я увидел электронный конструктор «арфа» где на рамке стояло 7 лазерных диодов и простой генератор тона. И вот захотел сделать лучше и больше — начался проект Оптоарфа. Как и всегда, мне неважно, есть ли такое изделие в мире, важно желание творить и привнести свои идеи.

Какие были выбраны решения, как воплощались через тернии, случилась ли труба или арфа — читайте ниже

 Определение габаритов, количества нот

Так как проект экспериментальный, выбрал средний размер инструмента — примерно 500 мм по деке.

Струны заменены лучами. Для оптических «струн» решил использовать инфракрасные светодиоды, чтобы не было видно лучей. Выбор ИК обусловлен также доступными приёмниками — фототранзисторам, они почти все работают в ИК-области.

На классических арфах большое количество нот, до 48, тут столько не помещалось. Сначала надо было определиться с минимально допустимым расстоянием между «струнами», так как я не знал, насколько получится сфокусировать луч, чтобы он не зацеплял соседние датчики. После расчётов и экспериментов с фокусировкой разным линзами удалось сделать расхождение ~15 мм на длине луча 430 мм. Так родился компромисс между размерами, количеством нот, расстоянию между лучами.

Итого — 20 нот, шаг между струнами 19 мм, длина деки 510 мм, высота арфы 500 мм. ИК-излучатели снизу в деке, фототранзисторы (ФТ) сверху в колковой раме.

Корпус

3-D модель разработал в SolidWorks, ссылка на файлы в конце статьи. При моделировании я ориентировался на фото из Сети (95% фото арф только с одного ракурса, wtf), доступность материалов и возможности раскроя. Колоночка звуковая на 3 Вт у меня была, как раз круглая без излишеств. Она и определила толщину деки.

Конструкция классической арфы представляет собой жесткую и прочную раму в виде треугольника — внизу корпус-резонатор (дека), сверху колковая рама с креплением струн, струнам параллельна колонна. Но я в процессе проектирования подумал наперёд — про удобство переноски и решил, что корпус арфы должен быть разборным.

Одновременно с возможностью разборки конструкция должна быть жёсткой и не люфтить нигде, чтобы не сбить оптические линии «струн». Колковая рама и колонна сделаны коробчатой конструкции (2 фанерные стенки и деревянные рейки между ними), что дало жёсткость и позволило уместить фотодатчики и провода. В желании сделать изящнее — отказался от видимого крепежа и почти всё собирал на клей. Да, разобрать невозможно и отладка одновременно идёт со сборкой.

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

3D‑модель

3D‑модель

Изгиб колковой рамы должен быть красивым и похожим на настоящие арфы. Несколько часов в SolidWorks — и готово. В колковой раме располагаются фотоприёмники, от них идёт много проводов. Лучше её сделать не полностью съёмную, а складывающуюся на деку, это ещё и убавит степени свободы при сборке. Нашёл точку, где можно сделать поворотную петлю, спроектировал подвижную часть колковой рамы и неподвижный завиток. Сочленение происходит через толстый штифт с плотной посадкой.

Ятаган или фальшион?

Ятаган или фальшион?

Точка крепления колковой рамы к стойке — разборное соединение, которое должно быть незаметно и тоже быть жёстким. Здесь используется система шип-паз с креплением винтом М6 через верх рамы. Винт полностью скрыт внутри рамы. В целом, пришлось поиграться с углом сопряжения деталей, подгоняя все точки — ось поворота, координаты крепления завитков, угол наклона стойки к деке.

Основное неудобство — что завиток при наладке электроники нельзя закрепить обратно к деке, замкнув размерное кольцо. Завиток крепится к боковой стенке деки, а она ставится последней.  Прищепки, струбцины, скотч — всё пошло в дело).

Весь корпус пилился из фанеры 4 мм, кое-где тонкий пластик, покрытый бумажным скотчем. Лак «янтарный», здесь у меня криворукость, есть потёки и разводы.

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

Линзирование

Каждый светодиод должен излучать узкий параллельный пучок света. Лазеры я сразу исключил из проекта — не хотел видимых лучей, а ИК-лазеры дороги. Всё равно бы потребовалось расширять луч лазера для надёжности попадания в ФТ.

Имеющиеся светодиоды дают расхождение 25°, это конечно много. Конфигурация корпуса линзы светодиода даёт протяжённый источник. Если фокусировать луч дополнительной линзой — это даст изображение всего светодиода, увеличенное в размерах, причём размер тем больше, чем короче фокус линзы.

Как с этим бороться — можно применить светодиоды без линзы, допустим SMD, это почти точечный источник. Этот вариант очень неудобен для ручной сборки, их трудно крепить и настраивать местоположение, либо нужна плата для каждого светодиода, а 20шт будут стоить ощутимо.

Вариант 2 (реализованный) — перекрыть световой поток обычного 5-мм светодиода, создав искусственную точку. Проще всего оказалось сделать крышечки из жести с отверстием 0,8 мм напротив оси светодиода. Это помогло, при линзе с фокусным расстоянием 25 мм на дистанции 420 мм луч образовал пятно не более 15 мм диаметром. Интенсивность чуть снизилась, зато гарантировано нет засветки соседних приёмников.

Сами линзы — их оказалось найти непросто, кажется вроде бы китайские товарищи сделали всё уже. Но нет, дешёвых 10-мм пластиковых линз россыпью (не разбирая фонарики) я не нашёл. Спас меня кабошон — стеклянные «крышечки» для изготовления медальонов, серёжек. Их можно найти в разделах для рукоделия. Это плоско выпуклые линзы, неидеальные, но почти без искажений. Стекло даже лучше.

Вполне нормальные линзочки

Вполне нормальные линзочки

Крепление линз

Хороший вариант — это распечатать корпуса для линз и с ложементом под светодиод. Однако, у меня был ровный и жёсткий вспененный полиуретан, нарезал кубики с отверстиями из него. Ложемент не является фиксированным креплением светодиода, так как оптическую ось необходимо было подбирать под каждую ноту. Я себе уже представлял часы мучений с невидимыми лучами и перемещениями на доли мм.

Приклеенные линзы к внутреннему ребру, под углом 50°

Приклеенные линзы к внутреннему ребру, под углом 50°

С фототранзисторами проблем (кроме поиска подходящих) не возникло. Закрепил все в кабель-канале, на суперклей. Шаг от 19 мм до 21 мм. Кабель-канал с ними приклеил к фанере колковой рамы.

Фототранзисторы в кабель-канале

Фототранзисторы в кабель-канале

Все ФТ на колковой раме

Все ФТ на колковой раме

Одновременно со сборкой конструкции вёл провода, так как многие полости закрывались навсегда. Основная электроника крепится на боковой стене деки, и перекрывается ребром с линзами. На другой стенке деки — только колонка, эта стенка ставилась после настройки оптики, что добавляло риска.  Донышко деки сделал съёмное, на винтах впотай. Так есть доступ к контроллерам и аккумулятору.

Электроника и алгоритмы

В качестве управляющего контроллера применена народная плата на STM32F103С6Т6

Важный вопрос во всей конструкции — это уверенное срабатывание фототранзистора [ФТ] от прерывания светового потока. На приёме луча фототок ФТ должен быть такой, чтобы на нагрузочном резисторе создавать более 2,4 В (логическая 1 у STM на уровне 2,2 В) и одновременно фототок от фоновой дневной засветки не должен создавать более 0,8 В на резисторе (уровень лог. 0). Это значит световой луч должен попадать чётко на ФТ (как это сделать на сборной конструкции?) и быть ярким, что позволит ставить нагрузочный резистор невысокого сопротивления. ФТ брал SHF300.

Были мысли перевести ФТ на 5-вольтовое питание, чтобы был запас по напряжению на транзисторе в открытом состоянии. Но я пошёл в сторону более качественной фокусировки, чтобы не было неопределённых уровней, да и не все входы у МК толерантны к 5В.

Для снижения количества задействованных входов применил динамическое переключение между двумя группами. То есть по 2 соседних ФТ нагружены на 1 резистор, он подключён к одному дискретному входу МК. Светодиоды также сгруппированы в чётную и нечётную группы. Это сделано для того, чтобы светились не все лучи сразу, а через 1, и не было паразитной засветки от соседнего светодиода. Поэтому ФТ можно ставить по 2 в параллель на 1 вход, однако для надёжности группы ФТ тоже питаются по очереди. То есть один из ФТ в паре всегда отключен от питания и соответствующий светодиод тоже выключен. При засветке от соседнего светодиода или фоновой засветке — напряжение на резисторе определяется только запитанным ФТ. Поясняющий рисунок ниже.

Схема работы излучателей и приёмников

Схема работы излучателей и приёмников

В итоге получилось 10 пар ФТ, все подключены к 10 входам регистра GPIOB. Также, 2 группы по 10 светодиодов, соединённых последовательно по 2 шт (1,25В * 2 + балласт = 5В питания). Они переключаются вместе с питанием ФТ двумя выходами GPIO через транзисторные ключи. Плату с ключами  сделал ЛУТом.

Логика работы лучей

  • Включается первая группа светодиодов (нечётные ноты)

  • Пауза 1 мс для пропуска переходных процессов фототока ФТ.

  • Периодический опрос 10-ти дискретных входов, определение затенения/отпускания каждой ноты, инкрементация счётчика времени затенения

  • Если время затенения не более 0,7 сек, то создаётся соответствующая нота начальной амплитуды.

  • После 10-го ФТ группа переключается на чётные ноты, процесс повторяется. Частота переключения групп 300 Гц.

Про ноты

Из музыкальной теории я знал только про 7 нот и октавы. Вообще в этом не разбираюсь, и для того, чтобы узнать частоты нот и их позиции на арфе — полез в Википедию. Читаю:

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

Так, понятнее не стало, читаем что это

Хроматическая гамма — восходящее или нисходящее мелодическое движение по полутонам, построенное, как правило, на основе мажорной или минорной гаммы. Диатоническая гамма — ладовая гамма, в которой все большие секунды заполнены проходящими полутонами

Нам нужны ноты! вот, нотная запись:

Например, нотная запись септаккорда и его обращений фиксирует «терцовую» логику аккорда независимо от того или иного музыкального строя. Знак альтерации, относящийся к диатонической ступени ладового звукоряда, может означать её хроматическую альтерацию в системе мажорно-минорной тональности…

Сколько новых слов…. Ладно, в итоге разобрался, частоты нашёл.

Частотные диапазоны инструментов

Частотные диапазоны инструментов

Так как моя оптоарфа меньше оркестровой диапазоном, пришлось выбирать, где его расположить. Рассмотрел диапазоны гитар и других инструментов, подобрал — первая нота ДО третьей октавы (С3, 131 Гц) , последняя нота Ля (A5, 880 Гц) пятой октавы, что даёт почти 3 октавы. Для начала пойдёт, перепрограммировать потом можно. 

Спектральный состав для арфы найти тоже непросто — 2 невнятные картинки без чисел, а из фраз «арфа имеет нежный, но относительно тихий тембр», «более насыщенный звук» много не накодируешь. Ладно, скачал примеры звукозаписей, прогнал через спектроанализатор. Составляющие спектра получились такие, в среднем.

Скриншот аудиозаписи арфы из GoldWave

Скриншот аудиозаписи арфы из GoldWave

Частота относительно базовой частоты

Уровень относительно базовой частоты, для «ненасыщенный звук»

Уровень относительно базовой частоты, для «звук с обертонами»

1 (0-я гармоника)

100%

100%

2 (1-я гармоника)

9,7%

18%

3 (2-я гармоника)

0,3%

15%

4 (3-я гармоника)

2,4%

5%

5 (4-я гармоника)

10%

32%

Количество обертонов в спектре не очень велико, что позволяет ограничиться 4-мя гармониками для вычислительной нагрузки на МК.

Синтезирование звуков.

Выбрал простой и экономный метод, позволяющий гибко настраивать тоны и гармоники — табличный синтезатор. В памяти хранится массив (1024) в 1 период sin сигнала, метка номера ячейки пробегает циклично по массиву с заданным шагом, который соответствует высоте ноты. Частота дискретизации и основной таймер всех расчётов — 16 кГц.

Значения, взятые из массива с необходимым шагом, дают поток sin-сигнала основной частоты ноты, дальше он умножается на громкость 0й гармоники. Потоки для высших гармоник получаются так же, с кратно увеличенным шагом счётчика номера ячейки в том же массиве. Начальная громкость всех гармоник берётся из вышеприведённой таблицы.

Для экономии расчётов можно было бы заранее сделать массив уже с гармониками. Однако в реальности разные гармоники затухают с разной скоростью, и для гибкости синтеза сделал всё отдельно. Скорости МК при 16 кГц цикле хватает для расчёта пяти гармоник каждой ноты.

Длительность звучания ноты определяется скоростью снижения амплитуд. Так как снижение идёт по экспоненте, его реализовать можно цикличным умножением на число, близкое к 1. Для первой гармоники взято значение 62/64, для второй 61/64, для третьей и выше 60/64. То есть каждые n миллисекунд амплитуда вычисляется как А1 = А1×62 / 64. Это особенности целочисленных вычислений.

Длительность звучания разных гармоник

Длительность звучания разных гармоник

Период цикла n зависит от регулятора «длительность нот» и номинальной длительности звучания каждой ноты, которая зависит от высоты ноты. Регулятором, подключенным к аналоговому входу МК настраивается общий масштаб. Экспериментально выбран диапазон от 0,2 сек до 4 сек. С малым временем звучания арфа превращается в балалайку, со средним — как арфа, с большим — как рояль/контрабас.

С тактовой частотой 16 кГц происходит суммирование всех играющих нот. Для снижения нагрузки нота отключается при падении амплитуды менее 0,7% от начальной. Сумма подвергается нелинейному преобразованию, чтобы не было перегруза, но и даже одну ноту было слышно хорошо. Функция преобразования суммы сигналов в выход  Out = x / (x >> 10 + 1200), при этом одна нота звучит на 29% от общей громкости, а пять нот — на 77%.

Музыкальные фичи

В настоящей арфе, как и в других струнных инструментах, форма импульса возбуждения имеет вид, аналогичный импульсу в гитаре. Состав обертонов в спектре, а следовательно и тембр звучания также зависит от способа отщипывания и от места возбуждения. Здесь измерение места щипка было бы сложно реализовать, поэтому сделал такую зависимость от длительности затенения «струны». Если время большое, то обертонов мало, звук плавный, если задеть «струну» быстро, то пропорционально добавляются высшие гармоники, делая звук более резким, гитарным.

// ct[ni] - длительность удержания струны, от 1 до 200 тактов
harma =  8 - ((ct[ni]) >> 3); //зависимость высших гармоник от времени удержания, 1..64 = ампл гармоники =  8...0
if (harma < 0 ) harma = 0;
Amp4[ni] = Harm[4] + 41*harma; // Начальная амплитуда 4й гармоники, с добавлнием коффицента удержания

То есть присутствует возможность изменения тембра. Долгое удержание струны, от 0,7 с — звука не будет вообще.  Отладку делал на свой никакой слух, так что правильно ли получилось — не знаю.

Генерация и аналоговая часть

Сам звук генерируется аппаратным ШИМ с максимальной частотой и количеством уровней 1600. При нулевом сигнале на выходе — меандр частотой 40 кГц, что нормально фильтруется ФНЧ.

Фильтрация и усиление сигнала

Рассчитал и сделал фильтр низких частот второго порядка на операционном усилителе. Частота среза примерно 5 кГц. Получилась небольшая плата, сразу с разъёмом Jack 3.5 под колонку и выносным регулятором громкости.

Схема усилителя с ФНЧ

Схема усилителя с ФНЧ

Индикация нот

Так как в варианте с ИК — лучами не видно самих лучей и сложно понимать позицию пальцев, когда они перекрывают лучи, сделал индикацию срабатывания.

Вдоль отверстий для линз в деке сделал второй ряд отверстий для 3-мм светодиодов. Подобрал так же, как на настоящих арфах — ноты С — красным светом, ноты В — синим, остальные белые.

Светодиоды стоят рядом с ИК излучателями, но с хитрой геометрической особенностью. Дека арфы при игре находится под крутым углом к плоскости зрения музыканта, почти вдоль оси зрения. Из-за этого отнесённые ровно влево светодиоды будут казаться дальше чем соответствующие им ИК — излучатели. Эксперименты показали, что мозг воспринимает как перпендикуляр (соответствие индикатора отверстию), при сдвиге примерно на 40% к оси зрения.

21cc58d3f25ae538fee90d56c2b83cc0.png

Для управления светодиодами индикации используется отдельная плата на таком же STM, связанная с главным МК по UART. Посылка размером 4 байта, отправляется 62 раза в секунду. Можно переключать тип индикации — либо индикация затенённой «струны», либо индикация после отпускания, пока звучит эта нота.

3d8ddf26c00f72e9a3aafbc75d3c16a0.jpg

Вывод B.2, который расположен отдельно на плате в разъёме Boot, не может выводить лог. 1, поменял этот вывод на A.2

Питание

Используется 1 аккумулятор 18650, с преобразованием в 5 Вольт и 3,3 Вольта. Модуль зарядки тоже присутствует. Индикация оставшегося заряда сделана с помощью тех же индикаторных светодиодов. При включении арфы в первую секунду отображается уровень заряда первыми четырьмя индикаторными светодиодами.

Сборка и настройка

Настройка лучей ИК-светодиодов происходила уже на почти собранной с прищепками конструкции. Каждый ФТ подключался к нагрузочному резистору 30 кОм (Некоторые резисторы скорректировал для более чёткого срабатывания фотоприёмника), к нему подключался вольтметр, а светодиод подключался к источнику тока. Движениями около фокусной точки линзы влево-вправо и вверх-вниз (так как пятно имеет градиент, который можно поймать) находилось место максимального сигнала от ФТ. В этой позиции светодиод фиксировался термоклеем, и пока клей не застыл, ещё раз корректировалось положение для поиска максимального сигнала. У термоклея оптимальное время, другие клеи либо долго, либо быстро застывают. С первыми светодиодами пришлось повозиться, там самое большое расстояние до ФТ. Но дальше пошло даже быстрее, чем я ожидал, точка фокуса находилась быстро. Точность позиционирования 0,5 мм и менее, при этом термоклей не плывёт и нормально фиксирует. Фанера с линзами тоже приклеена жёстко, удивительно, но обошлось без долгих корректировок. Дольше паять все провода.

f11cb4d4638a804cd96288e1c1566899.jpg703fafb4f47bce723cae01756bda88cc.jpgОбщий вид

Общий вид

Сложенное состояние

Сложенное состояние

Технические параметры

Нотный диапазон: 20 нот, с С3 (131 Гц) до A5 (880 Гц)

Гармоники: 4, тембр зависит от длительности удержания.

Габариты: 580×520 х 80 мм

Масса: 850 г

Питание: аккумулятор 18650 3,7В

Потребление: 250…500 мА в зависимости от громкости

Регулятор длительности ноты и регулятор громкости, переключатель режима «арфа»/«пианино».

Недостатки

Всего достичь нельзя, особенно в первой версии. Нет возможности добраться до светодиодов ИК и фототранзисторов, если что-то испортится. Лучи тоже не поправить, но их и сбить маловероятно. Нет регулировки тембра или спектра целиком для имитации других инструментов без перепрошивки МК. Нет звука зацепления струны, как в крутых синтезаторах. Нет дополнительного аудиовыхода для внешней звукотехники (1 есть, но занят колонкой). На ярком солнечном свету оптоарфа не работает, засветка перебивает приёмники.

Угадай мелодию ©

Вследствие отсутствия у меня музыкального слуха могу заявить — работает, звуки издаёт. Сравнивая с записями игры на арфе — похоже.

По видеороликам MIDI записал 2 мелодии:

Классика Lose Yourself Eminem (вступление)

https://rutube.ru/video/b04d66b7365ada778ed40154fe46749e/

/// здесь будет ссылка на запись, через несколько дней//

Саундтрек к Властелину Колец The Lord of the Rings theme

https://rutube.ru/video/43530fd2fd2cd5219813dd08e4f45b8e/

/// здесь будет ссылка на запись, через несколько дней//

Спасибо за внимание!

© Habrahabr.ru