![](https://habrastorage.org/storage2/420/ea5/1cb/420ea51cb6a427bab822b4bfb1b3579e.jpg)
Речь пойдет об устройстве очень простом в изготовлении (даже для начинающего электронщика-любителя), но при этом крайне интересном и полезном — электронной «музыкальной шкатулке». Также, в качестве примера, я покажу и расскажу об одном из возможных воплощений и применений этого девайса — про последний сделанный на его основе подарок своей девушке.
История создания
Тут будет много букв, относящихся к делу достаточно косвенно, и если хотите, можете перейти сразу к описанию устройства.
Началось все очень давно, несколько лет назад, когда я захотел сделать девушке какой-нибудь интересный, оригинальный и запоминающийся подарок на день рождения. И обязательно своими руками. Времени до праздника оставалось совсем немного, два дня, за которые надо было что-то придумать и, собственно, реализовать. День ушел на раздумья — в голове крутились сотни разнообразных вариантов, от всевозможных светодиодных «мигалок»-сердечек, до разных электро-механических поделок. Но все это было не то: или слишком просто и избито, или наоборот, достаточно сложно (а времени-то уже совсем-совсем не остается!). Внезапно мне пришла в голову простая, но замечательная, как потом выяснилось, идея: почему бы не сделать музыкальную открытку? Причем не простую, а с «фишкой», с оригинальной мелодией. Тем более, у нас была «своя песня», под которую мы познакомились и которая вызывала у нас всевозможные приятные романтические воспоминания и переживания.
Так появился на свет самый первый вариант «музыкальной шкатулки», прародитель, так сказать. Очень простой, собранный на скорую руку навесным монтажом из PIC12F675, пьезодинамика, фотодиода, пары резисторов, трехвольтового элемента 2016 и упакованный в нарисованную в фотошопе открытку. Открытка эта в результате умела при раскрывании (и попадании света на фотодиод) пропискивать прямоугольником ту самую мелодию. Вот так вот незатейливо и просто.
Но идея оказалась архиуспешна, во много раз больше, чем я ожидал. В последствии я сделал еще несколько таких простых открыток по просьбе своих знакомых, для их вторых половинок. И в каждом случае такой подарок вызывал массу эмоций как у самих одаряемых, так и у их родителей, подруг и знакомых :)
Прошло достаточно много времени, все закрутилось, проект подзабылся. Но так получилось, что я снова вспомнил про музыкальную шкатулку. На сей раз это должен был быть подарок на 8 марта. В то время я активно изучал микроконтроллеры Atmel, в частности игрался с ATtiny45, и под это дело решил музыкальный модуль усовершенствовать. Тем более, на этот раз времени было много. Тут то все и началось.
Выискивая разную информацию на просторах интернета я наткнулся на широко известный в узких кругах сайт мистера Чана. А конкретнее, на одну из его конструкций, миниатюрный синтезатор, как раз на любимом МК :) Некоторое время назад я уже почти закончил четырехканальный синтезатор на PIC18, но, увы, наработки в сердцах уничтожил (о чем еще не раз потом пожалел). А конструкция Чана была вполне самодостаточной и законченной. Оставалось добавить к ней только «спусковой механизм» и вперед!
Я немного допилил код, и спусковой механизм был готов. Но дальше все оказалось несколько менее радужно. Основная проблема конструкции была в том, что она слишком тихо звучала. Как я ни пытался, при прямом приводе динамика от пинов МК получалось тихо и все тут! В результате, было принято волевое решение добавить усилитель мощности. Выбор пал на наличествующий тогда в Терраэлектронике LM4900. Опять же, пришлось внести еще некоторые изменения в код мистера Чана, чтобы синтезатор правильно работал с внешним усилителем — сделать управление ногой энергосбережения, чтобы усилок не кушал батарейку при простое и перенастроить ШИМ для правильного вывода сигнала с одного пина. После этих изменений прототип заработал просто идеально. Тогда же я нарисовал первый вариант платы (в который, как потом выяснилось, закрался косяк :) и собрал музыкальную шкатулку по-человечески. Далее, все по проторенной дорожке — самодельная открытка, установка модуля и дарение-вручение.
Конечно, это устройство было на несколько голов выше предыдущих — очень реалистичное звучание «настоящей» шкатулки и полифония давали о себе знать :) Подарок, как и в прошлые разы, еще давно, вызвал фурор. И я также собрал друзьям около десятка таких модулей.
Теперь о самом устройстве
Текущая версия модуля, третья по счету, содержит в себе еще несколько изменений и одно интересное нововведение — светомузыкальный канал, к которому можно подключить, например, светодиод. Но обо всем по порядку.
Начнем со схемы, она очень простая:
![](https://habrastorage.org/storage2/9a3/26f/af0/9a326faf02b829813c5835b34a35fd2e.jpg)
Сердце ее — микроконтроллер ATtiny45/85. Он занимается, собственно, синтезом музыки, управляет светомузыкальным каналом и энергосбережением усилителя. Второй по значимости элемент — звуковой усилитель мощности TPA301D. К усилителю подключен динамик, который находится за пределами модуля. Еще есть транзистор BC847, управляющий светомузыкальным каналом и несколько пассивных элементов — резисторов и конденсаторов. Питается все это от 2-3 щелочных элементов (например, AAA), находящихся во внешнем батарейном блоке (самом обычном, китайском). Как видите, схема действительно элементарна.
Принцип работы схемы
Большинство времени устройство находится в «спящем режиме». МК засыпает по команде прошивки сразу после включения, предварительно «усыпляя» и усилитель, устанавливая на его ноге «SHUTDOWN» высокий уровень (путем подключения слабой подтяжки ноги «PB0» к «+» питания внутри МК). Просыпается МК по прерыванию c ноги «PB2/INT0». Изначально нога тоже подтянута к «+» питания внутри МК и ее надо замкнуть на землю.
С ножки «PB1/OC1A» МК звуковой ШИМ сигнал, дабы отфильтровать его от несущей, проходит через простейший RC-фильтр второго порядка (R2-C3), который должен быть рассчитан (а в нашем случае может быть и просто «прикинут») на частоту среза, много меньшую (раз в десять) несущей частоты. А отфильтрованный сигнал, через блокировочный конденсатор C2, уже поступает на вход усилителя.
МК управляет и дополнительным, светомузыкальным каналом. Для этого используется npn-транзистор Q1 в ключевом режиме, база которого подключена к ноге МК «PB4/OC1B» через токоограничивающий резистор R1. В цепи коллектора тоже может стоять ограничивающий резистор (R3) — не будет лишним. Транзистор также управляется ШИМ сигналом. Все выполнено очень просто — в лучших традициях «мигания» светодиодами с «ардуины» :)
По питанию стоит развязочный тантал (С1), простейший обвес усилителя, выполняющий как роль развязки (С4), так и регулировки коэфициента усиления (громкости), в общем-то, подсмотрен в даташите на усилитель. При необходимости, КУ может быть достаточно точно рассчитан по самой обыкновенной для ОУ методике соотношения сопротивлений входного резистора R4 и резистора обратной связи R5, так как громкость бывает полезно подкорректировать под конкретно взятый динамик или конструкцию.
Печатная плата
Проста до безобразия, нарисована в DipTrace:
![](https://habrastorage.org/storage2/835/178/65a/83517865a94e9719393213bb1086acb7.jpg)
Это уже третья версия, в которой учтены все предыдущие недочеты.
Плата рассчитана под поверхностный монтаж и односторонняя, что сильно упрощает процесс ее домашнего изготовления. Можно применить любой способ: лазерно-утюжный, фотоспособ или даже нарисовать дорожки маркером (на любителя, конечно).
Все элементы — 0805 (включая «нулевые» перемычки), тантал — A или B, транзистор в SOT23 и МК с усилителем в SO-8. Все «периферийные» компоненты — батарейный блок, динамик, светодиоды и кнопка (фоторезистор, геркон) подпаиваются к соответствующим «кружочкам» на плате. Вот и все.
Программная часть
Немного о синтезе звука
О способе синтеза, используемом в девайсе, доходчиво можно почитать в оригинале у мистера Чана вот тут. Можно еще загуглить «wavetable synthesis». Если же вы не владеете языком, то вкратце, в памяти МК хранится звуковой сэмпл (отдельно взятый звук), т.н. «wavetable», который в нашем простейшем случае условно делится на две логические части, в целом образующие «envelope» — «attack», начало каждого нового звука, и «sustain», выдержку, постоянно зацикленный на протяжении звучания ноты фрагмент. Есть еще «decay», «дозвучка», часть, которая звучит после снятия ноты. У нас она реализована просто путем постепенного затухания звучания «sustain'а». В МК работает таймер, который с определенной частотой вызывает прерывание, где в соответствии с текущим положением по «envelope» и высотой звучания ноты выбирается нужное значение из памяти сэмпла. Причем, таким образом можно синтезировать сразу несколько каналов (то есть нот) одновременно, все зависит только от вычислительной мощности МК и частоты дискретизации (качества звучания). Дальше эти значения смешиваются и отправляются «на выход» (у нас — в регистр управления ШИМ). Все это безобразие, как я уже упоминал выше, называется «Wavetable synthesis» или «таблично-волновой синтез».
Ядро синтеза мистера Чана осталось практически неизменным. Немного поменял только метод вывода ШИМ, ввиду отказа от «прямого привода» динамика с МК. Добавил «спусковой механизм», управление энергосбережением МК и усилителя, а также написал код управления светомузыкальным каналом, который работает таким образом: по специальному событию из партитуры в нужных местах «зажигает» светодиод, и затем плавно его «гасит». Ну и «портировал» (сильно, конечно, сказано) код в Студию, для удобства.
Код написан на AVR ассемблере и состоит из нескольких файлов: «mbox.asm» — собственно, сама программа; «notes_pitch.inc» — указание соответствий мнемонических названий нот, используемых в партитуре, коэффициентам приращения позиции указателя в сэмпле (то бишь, в результате, высоте тона); «wavetable.inc» — данные сэмпла («таблицу») и кривую затухания «decay»; а «score.inc», как вы уже наверное догадались по названию, содержит партитуру исполняемого произведения, «ноты».
Изначально, в «wavetable.inc» самим Чаном «забит» звук шкатулки. Но при необходимости и желании его можно изменить на любой другой, используя вспомогательный скрипт «wav2asm.pl», или же просто руками.
Сложнее же дело обстояло с партитурой. Изначально предполагалось писать их вручную, что, несомненно, доставит массу удовольствия человекам-мазохистам, особенно если партитура совсем непростая.
Для человека, собирающегося использовать свою партитуру и, предположительно, по этому поводу хоть сколь-нибудь знакомому с музыкой и нотной грамотой, проще было бы нарисовать партитуру в любом доступном нотном редакторе и каким-то образом использовать ее. Для этого я написал специальную программку-конвертер, которая принимает «на вход» миди-файл формата 0, а «на выходе» отдает готовый файл «score.inc». Она же может самостоятельно расставлять события зажигания светодиода для всех встречающихся в первом канале нот, то есть, если мелодию изначально логически отделить от аккомпанемента и вынести в первый канал миди-файла, то мы получим партитуру, которая будет зажигать светодиод в такт с мелодией, если захотим и поставим галку. На самом деле, это, пожалуй, один из самых красивых вариантов работы дополнительного канала.
Еще программа умеет транспонировать результирующую партитуру на одну или две октавы вверх/вниз, что в определенных случаях может сильно облегчить работу по написанию партитуры.
Интерфейс программки выглядит просто, понятно и незатейливо, а исходники на Delphi прилагаются в комплекте:
![](https://habrastorage.org/storage2/d83/f46/c28/d83f46c283e737ee0bf1e824257707c5.jpg)
К стати, как мне подсказали в свое время (почему-то я об этом совсем не подумал), в интернете есть куча ресурсов, откуда можно взять уже готовые мидишки с желаемыми мелодиями. Их нужно будет лишь немного доработать для использования в моем конвертере. А некоторые, возможно, даже и не придется дорабатывать.
Что еще может понадобиться?
Допустим, вы купили/достали все необходимые компоненты, тем или иным образом изготовили плату или, как вариант, просто спаяли все навесным монтажом. Что понадобится еще? Понадобится программатор. Если вы уже имели или имеете дело с AVR, то у вас он, скорее всего, уже есть. А так, подойдет, например, «USBasp» в сотнях воплощений или любой другой. Здесь нет ничего сверхъестественного. В архиве со всем-всем есть уже скомпилированный бинарник, который можно сразу заливать в контроллер и использовать, если нет намерений что-то править и пересобирать.
Применение
А теперь, как и обещал, расскажу и покажу одно из сотни возможных применений модуля, музыкальную розу Кавасаки.
Роза Кавасаки, один из шедевров оригами, вообще отдельная большая тема, ознакомиться с которой в полной мере можно на просторах интернета.
Конструктивно же, сама вещица выполнена из двух частей:
Первая, роза, сложена из цветного листа бумаги и приклеена на скрученный стебелек с листиками (тоже сложенными из цветной бумажки). Внутри стебля проходит толстая медная проволока (для прочности) а в самом низу спрятан небольшой неодимовый магнитик.
Вторая часть, ваза, выкроена и склеена из толстого белого картона. Внутри нее установлен сам модуль, динамик (приклеенный на резонирующий объем, заполненный ватой), сверхъяркие белые широкоугольные светодиоды, заматованные мелкой наждачкой и батарейный блок, закрепленный снизу вазы для удобства доступа к батарейкам. Ну и, конечно же, геркон — «спусковой механизм», работающий в паре с магнитиком в стебле. Он установлен таким образом, что модуль активируется при вынимании розы из вазы.
Схематично это выглядит примерно так:
![](https://habrastorage.org/storage2/697/c54/a08/697c54a08e1c21457a1ac952da151a78.jpg)
А вот пара фотографий прототипа:
![](https://habrastorage.org/storage2/bd4/b2c/977/bd4b2c9777aad2127c1a59d87275e023.jpg)
![](https://habrastorage.org/storage2/7b8/7f4/a5f/7b87f4a5fc82db2ea6832df2eb87015c.jpg)
И видео работы. На видео играет композиция «Нежность», которую я переложил для шкатулки, и которая включена в архив как исходником (набирал в Sibelius) и мидишкой, так и готовой сгенерированной партитурой:
Как водится, дает о себе знать вечная моя проблема с нормальным звуком в видео. Тысяча извинений. Если интересно послушать в нормальном качестве как звучит конструкция, то можете скачать эмпэтришку вот отсюда.
Это — лишь одно из возможных применений конструкции. Как вы используете свой модуль будет зависеть от вашей фантазии ;)
Мне остается только пожелать вам успехов в этом нелегком творческом деле.
Дарите радость своим близким и любимым!
Скачать архив с исходниками и бинарниками прошивки, программы, чертежом схемы и платы, партитурой и прочими материалами можно вот здесь.
Дисклеймер и благодарности :)
P.S. Это мой первый пост здесь, так что, пожалуйста, сильно не пинайте, если в чем-то или как-то я оказался не прав.
P.P.S. Данный материал частично и в разрозненном виде я уже публиковал у себя в ЖЖ, более для себя, подметить какие-то моменты и оставить памятку, но так как устройство оказалось очень интересным и успешным, и уже несколько модификаций этого девайса в почти паре десятков воплощений с лихвой выполнили (и продолжают выполнять) свое предназначение — радуют слух и глаз девушек — то я решил рассказать о нем и вам.
P.P.P.S. Также на рассказ о нижеследующем девайсе тут, на Хабре, меня уже давно сподвигал товарищ dlinyj, и вот, наконец, я собрался с силами, подбил материал и решил-таки написать этот пост, за что Длинному огромное спасибо!
P.P.S. Данный материал частично и в разрозненном виде я уже публиковал у себя в ЖЖ, более для себя, подметить какие-то моменты и оставить памятку, но так как устройство оказалось очень интересным и успешным, и уже несколько модификаций этого девайса в почти паре десятков воплощений с лихвой выполнили (и продолжают выполнять) свое предназначение — радуют слух и глаз девушек — то я решил рассказать о нем и вам.
P.P.P.S. Также на рассказ о нижеследующем девайсе тут, на Хабре, меня уже давно сподвигал товарищ dlinyj, и вот, наконец, я собрался с силами, подбил материал и решил-таки написать этот пост, за что Длинному огромное спасибо!