Arduino для воспроизведения мелодий: схема и код


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

Здесь Arduino создает тона разных частот, воспроизводя их через подключенный динамик. Изменение частоты (высоты тона) и правильного выбора времени (ритма) и создают мелодию. Музыкальные сигналы, генерируемые Arduino и выводимые через один из его цифровых контактов, управляют пьезо-динамиком через простую схему усилителя. Обратите внимание, что можно легко изменить мелодию, загрузив новый скетч.

Требуемые детали

  1. Arduino Uno
  2. Пьезо-динамик
  3. Транзистор 2N2222 (или S8050), резистор 1 кОм, конденсатор 100 мкФ
  4. 3-х контактный разъем, перемычки и батарея 9 В

Большинство пьезо-динамиков обычно имеют красный (+) и черный (-) провода. Поэтому подключите провода к цепи точно так, как показано на схеме. Но можно использовать и обычный пьезокерамический элемент (без пластиковой оболочки, который выглядит как блестящий металлический диск) вместо рекомендованного пьезодинамика. Вот как выглядит аппаратная настройка (питание от внешней батареи 9 В):


Поскольку для мелодией требуется файл «pitches.h», сначала загрузите файл «pitches.h», чтобы использовать его с «melody-sketch.ino». Убедитесь что файл «pitches.h» находится в той же папке, что и «melody-sketch.ino».

В представленном здесь эскизе синтаксис функции тона следующий: тон (контакт, частота, продолжительность).

Параметры следующие:

  • контакт: на котором будет генерироваться тон
  • частота: частота тона в герцах (каждая музыкальная нота определяется своей частотой)
  • продолжительность: продолжительность тона в миллисекундах
Интересное на схемафоруме:
Однотактный ламповый усилитель малой мощности

Функция тонального сигнала генерирует прямоугольный сигнал заданной частоты на заданном выводе в течение определённой длительности (необязательно). Мелодия массива используется для хранения нот с именами, соответствующими ноте и частоте.

Плата для разработки Digispark Attiny85, будет очень эффективной платформой для многих проектов Arduino. Она помимо меньшего количества контактов ввода-вывода, может делать большую часть того, что делает полноразмерный микроконтроллер Arduino. Кроме того, можно запрограммировать её из той же среды разработки, которая используется с Arduino.

Обратите внимание на некоторые важные детали:

  1. Digispark требует Arduino IDE 1.6.5+
  2. Перед подключением платы Digispark к USB (или запуском Arduino IDE) необходимо загрузить и установить необходимый драйвер DigiSpark.
  3. Если отключите Digispark и снова подключите его, или подключите к другому источнику питания, появится будет задержка в 5 секунд перед запуском кода, который запрограммировали.

После всех манипуляций, Attiny85 дает звук в виде ШИМ-выхода на определенном выводе. Вы можете экспериментировать со своими собственными нотами и оборудованием, чтобы создавать короткие интересные мелодии.

Вот простой код, воспроизводящий гамму через Arduino.

Разберем программу. Команда «тон» Arduino принимает два параметра: первый – это вывод, на котором будет воспроизводиться тон, а второй – частота звука для воспроизведения. Чтобы сыграть ноту определенной высоты, надо указать ее частоту. Различные частоты для каждой ноты хранятся в массиве. Поскольку массив подобен списку, его можно воспроизвести проигрывая каждую из нот в списке по очереди. Цикл for будет считать от нуля до девяти с использованием переменной i. Чтобы получить частоту ноты воспроизводимой на каждом шаге, используем «тон [i]». Это относится к значению в массиве «тонов» в позиции «i». Так, например, «tones [0]» – это 261, «tones [3]» – это 311 и так далее. Если поместим код в «цикл», а не «setup», одна и та же гамма будет воспроизводиться снова и снова.