Музыкальная поделка · Arduino Nano · Mozzi

Паровоз

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

ATmega328P 16 МГцFM-синтез3 голоса16384 отсчёта/сШИМ на D9
Паровоз: три медные полоски на корпусе — ноты, три крутилки на задней стенке, внизу выход на наушники, динамик в кабине, USB Type-C в дне
Полоски на корпусе — ноты, крутилки на задней стенке — ручки, внизу — выход на наушники. Динамик стоит в кабине, разъём питания USB Type-C — в дне. Фото без подписей

Как он звучит

Внутри работает FM-синтез, тот же приём, что в синтезаторах Yamaha DX7. Один синус качает фазу другого. Когда их частоты в целом отношении (1, 2, 3), звук получается гладким, как электропиано. Когда в дробном (1.4, 2.76, 6.3), появляются негармоничные обертоны, и выходит колокол, колокольчик или гонг.

Яркость удара гаснет быстрее громкости: в начале звонкий металлический «дзынь», в хвосте мягкий тон. Так ведут себя настоящие колокола.

Входы и выходы

Электрическая схема

Схема паровоза: три сенсора через 1 МОм на +5 В к пинам A5–A7, три крутилки на A2–A4, белый светодиод через 270 Ом на A0, звук с D9 на ножку 5 гнезда для наушников, а с ножки 4 на усилитель PAM8403, питание от USB Type-C Arduino Nano +5 В 1 МОм до A5 +5 В 1 МОм ми A6 +5 В 1 МОм соль A7 +5 В 10 кОм высота A2 +5 В 10 кОм материал A3 +5 В 10 кОм глубина A4 +5 В белый 270 Ом A0 D9 5 4 2, 3 — не подключены 1 · GND гнездо TKX3-3.5-05 сюда наушники PAM8403 питание 5 В динамик 8 Ом USB Type-C 5V GND
СветодиодБелый, через 270 Ом от +5 В к пину A0. Горит, когда на A0 низкий уровень.
СенсорыКаждая медная полоска проводом идёт на свой пин, а пин через 1 МОм на +5 В. Палец тянет напряжение вниз.
КрутилкиКрайние выводы на +5 В и GND, средний на пин. Сейчас стоят две по 100 кОм и одна на 1 МОм, лучше все три по 10 кОм: АЦП Arduino рассчитан на источник не больше 10 кОм, с высокоомной ручкой показания плывут.

Гнездо для наушников

Обычное гнездо mini jack 3,5 мм на плату, TKX3-3.5-05, пять ножек. Внутри пружина: пока штекера нет, ножки 5 и 4 замкнуты, и звук с D9 проходит на усилитель. Штекер отжимает пружину, усилитель отключается, звук идёт в наушники.

4 · к усилителю PAM8403 5 · D9 3 · не подключена 2 · не подключена 1 · GND
Вид сверху, как на фото. Номера ножек по чертежу.
Чертёж гнезда TKX3-3.5-05: размеры и расположение ножек 1–5, сторона монтажа
Чертёж TKX3-3.5-05, внизу — сторона монтажа (вид снизу, зеркально). Источник: deltachip.kz
Как подключеноНожка 5 — D9, ножка 4 — вход PAM8403, ножка 1 — GND. Ножки 2 и 3 не подключены.
Если втыкать наушникиD9 идёт на гнездо напрямую. Наушники 32 Ом потянут из пина больше 40 мА, а это его предел. Безопаснее поставить между D9 и ножкой 5 резистор 470 Ом – 1 кОм и конденсатор 10 мкФ плюсом к Arduino.

Чтобы не свистело

Если в тишине слышен тихий плавающий свист около 1–2 кГц, это ультразвук ШИМ с выхода D9 перегружает вход усилителя. Ни сенсоры, ни ручки тут ни при чём, мы проверили каждый вход по очереди.

Убавить регулятор на PAM8403Свист пропадает полностью, ноты остаются, только тише.
Поставить фильтрD9 → 1 кОм → 33 нФ на землю перед гнездом, лучше два звена подряд. Тогда громкость можно поднять.
Второй вход усилителяНеиспользуемый канал PAM8403 соединить с землёй, а не оставлять в воздухе.

Как записать в плату

  1. Установить Arduino IDE и через менеджер библиотек библиотеку Mozzi версии 2.
  2. Скачать архив ниже и распаковать: внутри папка fm_bells с файлом fm_bells.ino.
  3. Открыть fm_bells.ino, выбрать плату Arduino Nano, процессор ATmega328P (Old Bootloader) и порт.
  4. Нажать «Загрузить». Если загрузка не проходит, переподключить USB или сменить кабель.

Скетч fm_bells.ino

Архив с папкой для Arduino IDE, 205 строк с подробными комментариями на русском. Код лежит и на GitHub: sketches/fm_bells.ino.

Показать код
Загружаю…

Свой звук через Claude

Хотите другой инструмент вместо колоколов? Скопируйте промпт и отправьте его Claude. Первые три строки описывают плату, их оставьте как есть. Последнюю перепишите под свою идею.

Скетч Mozzi для Arduino Nano (atmega328old).
Пины: A2–A4 — ручки, A5–A7 — сенсоры (касание тянет вниз, ~1000 → ~300), A0 — светодиод (LOW = горит), звук на D9.
Сенсоры высокоомные: читай их медленно, через analogRead с паузой между переключениями каналов.
Нужно: три ноты на сенсорах, ручки задают тембр, громкость и затухание.