- Требуемое оборудование:
- Понимание функции Tone () Arduino:
- Pitches.h заголовочный файл:
- Воспроизведение музыкальных нот на Arduino:
- Схема и оборудование:
- Пояснение к программе Arduino:
- Работа этой схемы Arduino Melody Player:
Arduino - отличный способ упростить и ускорить ваши проекты микроконтроллеров благодаря сообществу разработчиков, которые сделали почти все простым. Здесь есть много проектов Arduino, которые вы можете попробовать и повеселиться. Некоторым из ваших проектов может потребоваться звуковое действие, чтобы сообщить о чем-то или просто произвести впечатление на зрителей. Что, если бы я сказал вам, что почти любые тематические песни, которые можно воспроизвести на пианино, можно имитировать на вашем Arduino с помощью простой программы и дешевого динамика Piezo?
В этом уроке мы узнаем, насколько просто и легко играть мелодию на пьезо-зуммере или динамике с помощью функции Arduino tone (). В конце этого урока вы сможете сыграть в некоторые известные мелодии «Пиратов Карибского моря», «Сумасшедшая лягушка», «Супер Марио» и «Титаник». Вы также научитесь играть любую фортепианную музыку с помощью Arduino. Проверьте видео в конце.
Требуемое оборудование:
- Arduino (любая версия - здесь используется UNO)
- Пьезо-динамик / зуммер или любой другой динамик на 8 Ом.
- Макетная плата
- Подключение проводов
- Нажмите на кнопки
- Резистор 1 кОм (опционально)
Понимание функции Tone () Arduino:
Прежде чем мы сможем понять, как работает тон (), мы должны знать, как работает пьезо-зуммер. Возможно, мы узнали о пьезокристаллах в нашей школе, это не что иное, как кристалл, который преобразует механические колебания в электричество или наоборот. Здесь мы применяем переменный ток (частоту), при котором кристалл вибрирует, производя звук. Следовательно, чтобы заставить пьезо-зуммер издавать некоторый шум, мы должны заставить пьезоэлектрический кристалл вибрировать, высота и тон шума зависят от того, насколько быстро вибрирует кристалл. Следовательно, тон и высоту звука можно контролировать, изменяя частоту тока.
Хорошо, а как же нам получить переменную частоту от Arduino ? Здесь на помощь приходит функция tone (). Функция tone () может генерировать определенную частоту на определенном контакте. При необходимости также можно указать продолжительность. Синтаксис для tone () :
Синтаксис тон (вывод, частота) тон (вывод, частота, продолжительность) Параметры pin: вывод, на котором будет генерироваться тон частота: частота тона в герцах - unsigned int duration: продолжительность тона в миллисекундах (необязательно) - беззнаковый длинный
Значения pin могут быть любыми из вашего цифрового вывода. Я использовал здесь контакт номер 8. Частота, которую можно сгенерировать, зависит от размера таймера на вашей плате Arduino. Для UNO и большинства других распространенных плат минимальная частота может быть 31 Гц, а максимальная частота 65535 Гц. Однако мы, люди, можем слышать только частоты от 2000 Гц до 5000 Гц.
Pitches.h заголовочный файл:
Теперь мы знаем, как создать некоторый шум с помощью функции arduino tone () . Но как узнать, какой тон будет генерироваться для каждой частоты?
Arduino предоставил нам таблицу нот, в которой каждая частота соответствует определенному типу музыкальной ноты. Эта таблица заметок была первоначально написана Бреттом Хагманом, на чьей работе была основана команда tone () . Мы будем использовать эту таблицу заметок для воспроизведения наших тем. Если вы знакомы с нотами, вы должны иметь некоторое представление об этой таблице, для других, таких как я, это просто еще один блок кода.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_GS1 52 #define #define NOTE_GS1 52 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_AS2 117 #define NOTE_Dine_A2 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_define_A3 220 #define NOTE_A3 220 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define #define NOTE_D5 587 #define #define NOTE_D5 587 #define #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_Edefine # 13_196 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 24897 #define NOTE_DS7 24897 #define # NOTE_DS7 24897 #define #define NOTE_DS7 24897 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Вышеупомянутый код приведен в заголовочном файле pitches.h в этом zip-файле , вам просто нужно загрузить и включить этот файл в наш код Arduino, как указано в конце этого руководства, или использовать код, указанный в zip-файле.
Воспроизведение музыкальных нот на Arduino:
Чтобы воспроизвести приличную мелодию с помощью Arduino, мы должны знать, из чего состоят эти мелодии. Три основных фактора, необходимых для воспроизведения темы:
- Значение примечания
- Примечание Продолжительность
- Темп
У нас есть файл заголовка pitches.h для воспроизведения любого значения ноты, теперь мы должны узнать его конкретную продолжительность ноты, чтобы сыграть его. Темп - это не что иное, как скорость воспроизведения мелодии. Как только вы узнаете значение ноты и длительность ноты, вы можете использовать их с тоном (), например
тон (pinName, значение ноты, продолжительность ноты);
Для тонов, воспроизводимых в этом уроке, я дал вам значение ноты и длительность ноты внутри файла заголовка «themes.h», с помощью которых вы можете воспроизводить их в своих проектах. Но если у вас есть какой-то особый тон в своей шахте, и вы хотите воспроизвести его в своем проекте, читайте дальше…. Или пропустите эту тему и переходите к следующей.
Чтобы воспроизвести любой конкретный тон, вы должны получить ноты этой конкретной музыки и преобразовать ноты в эскиз Arduino, прочитав из него значение ноты и продолжительность ноты. Если вы изучаете музыку, это было бы проще простого, иначе потратите немного времени и сломайте вам голову, как это сделал я. Но в конце концов, когда ваш тон зазвучит на звуковом сигнале Piezo, вы обнаружите, что ваши усилия того стоят.
Когда у вас есть значение заметки и продолжительность заметки, загрузите их в программу внутри файла заголовка «themes.h», как показано ниже.
// ############## ** "HE IS A PIRATE" Тема песни "Пираты Карибского моря" ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_D, NOTE_A4, NOTE_A, NOTE_A4, NOTE_A, NOTE_A4, NOTE_A 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############# //
Приведенный выше блок кода показывает значение ноты и продолжительность ноты темы «Он пират» из фильма «Пираты Карибского моря». Вы можете добавить свою тему аналогичным образом.
Схема и оборудование:
Схема этого проекта Arduino Tone Generator Project показана на рисунке ниже:
Подключение довольно простое: у нас есть пьезо-динамик, который подключен к контакту 8 и заземлению Arduino через резистор 1K. Этот резистор 1 кОм является ограничивающим ток резистором, который используется для поддержания тока в безопасных пределах. Также у нас есть четыре переключателя для выбора нужной мелодии. Один конец переключателя подключен к земле, а другой конец подключен к контактам 2, 3, 4 и 5 соответственно. Переключатели будут иметь подтягивающие резисторы, включенные внутри с помощью программного обеспечения. Поскольку схема довольно проста, ее можно подключить с помощью макетной платы, как показано ниже:
Пояснение к программе Arduino:
Как только вы поняли концепцию, программа Arduino станет довольно простой. Полный код приведен в конце руководства. Если вы не знакомы с добавлением файлов заголовков, вы можете загрузить код в виде ZIP-файла отсюда и напрямую загрузить его на свой Arduino.
Два вышеуказанных файла - это файлы заголовков, которые необходимо добавить. «Pitches.h» используется для приравнивания каждой музыкальной ноты к определенной частоте, а «themes.h» содержит значение ноты и длительность нот всех четырех тонов.
#include "pitches.h" #include "themes.h"
При необходимости создается функция для воспроизведения каждого тона. Здесь, когда функция Play_Pirates () вызывается, будет воспроизводиться тон «Он пират». Эта функция состоит из функции тона, которая выдает частоту на контакте номер 8. noTone (8) вызывается для остановки музыки после ее воспроизведения. Если вы хотите играть в свой собственный тон, изменить Pirates_note и Pirates_duration к новой ноты и длительности значений, которые вы сохранили в «themes.h» значение
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // конвертируем длительность в тон задержки времени (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Здесь 1.05 - темп, увеличивайте его, чтобы проигрывать медленнее delay (pauseBetweenNotes); noTone (8); }}
Контакты 2, 3, 4 и 5 используются для выбора конкретного тембра для воспроизведения. Эти выводы по умолчанию удерживаются на высоком уровне с помощью внутренних подтягивающих резисторов, используя приведенную выше строку кода. При нажатии кнопки она опускается на землю.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Приведенный ниже блок кода используется для воспроизведения песни при нажатии кнопки. Он считывает цифровое значение каждой кнопки и, когда оно становится низким (нулевым), предполагает, что кнопка нажата, и воспроизводит соответствующий тон, вызывая требуемую функцию.
if (digitalRead (2) == 0) {Serial.println ("Выбрано -> 'Он пират'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Выбрано -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Выбрано -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Выбрано -> 'Он пират'"); Play_Pirates (); }
Работа этой схемы Arduino Melody Player:
Когда ваш код и оборудование будут готовы, просто запишите программу в свой Arduino, и вы сможете воспроизводить звук, просто нажимая кнопки. Если у вас есть какие-либо проблемы, посмотрите на свой серийный монитор для отладки или используйте раздел комментариев, чтобы сообщить о проблеме, и я буду рад вам помочь.
Полная работа проекта показана на видео ниже. Надеюсь, вам понравился проект, и вы воспользуетесь им в каком-нибудь из своих проектов или создадите новый тон для своего проекта. Если да, не стесняйтесь делиться своей работой в разделе комментариев.