Оцифровка песни с помощью Arduino: 6 шагов
Оцифровка песни с помощью Arduino: 6 шагов
Anonim
Оцифруйте песню с помощью Arduino
Оцифруйте песню с помощью Arduino

Я хотел создать проект, который объединил бы два моих любимых предмета: науку и музыку. Я подумал обо всех способах, которыми я мог бы объединить эти два домена, и подумал, что было бы интересно заставить Arduino воспроизводить Fur Elise, отображая высоту ноты в Герцах. А теперь приступим к строительству!

Вам понадобится один Arduino Uno или Mega, много соединительных кабелей, пьезозуммер, макетная плата, ЖК-экран 16 * 2 со всеми контактами стеклоочистителя и потенциометр 10 кОм (вы также можете слышать, что их называют потенциометрами.). Лучше всего собрать все эти материалы, прежде чем мы начнем сборку.

Шаг 1. Преобразование музыкальной партитуры в цифровые ноты: значения задержки

Преобразование музыкальной партитуры в цифровые ноты: значения задержки
Преобразование музыкальной партитуры в цифровые ноты: значения задержки

Существует два шага для цифровой расшифровки ноты из партитуры в ее цифровой эквивалент. Во-первых, нам нужно будет записать время, в течение которого будет храниться заметка, в миллисекундах. Для этой задачи я использовал диаграмму, найденную в Интернете. В зависимости от того, была ли нота половинной, четвертной, восьмой и т. Д., Я преобразовал длину ноты в миллисекунды. Вы можете увидеть эти числа в моем коде как delay (); функция, а число в скобках будет значением задержки в миллисекундах, которое мы определили на этом шаге.

Шаг 2: преобразование музыкальной партитуры в цифровые ноты: значения в герцах

Преобразование музыкальной партитуры в цифровые ноты: значения Герца
Преобразование музыкальной партитуры в цифровые ноты: значения Герца

Прежде чем начать этот шаг, позвольте мне определить некоторые технические термины. «Значение» примечания может использоваться взаимозаменяемо со словами «высота звука», «значение» и «примечание». Теперь вы должны прочитать каждую ноту песни из партитуры. Затем вам нужно будет перевести каждую ноту в герцы, используя таблицу музыки в герцы, которую вы легко найдете в Интернете. Следует помнить, что средний C указан как C4 в таблице, а октава выше - C5 и так далее. После того, как все эти ноты будут преобразованы в Герцы, вы поместите значения в функциональный тон (x, y, z); где X - номер вывода или const int, способ определения переменных, который я объясню позже. Y будет значением в герцах, которое вы только что расшифровали, а Z - длительностью ноты в миллисекундах, округленной до ближайшей сотой. Задержка(); значения будут длительностью заметки. Теперь давайте спроектируем схему, которая может воспроизводить музыку.

Шаг 3: Проектирование схемы

Схемотехника
Схемотехника

Теперь, когда мы перевели все записи в цифровые значения, понятные компьютеру, пришло время построить схему. Начните с того, что возьмите макетную плату и поместите ЖК-экран с первым контактом (GND) в ряду 14. Поместите зуммер в любом месте, а рядом с ним разместите потенциометр. Цель состоит в том, чтобы выровнять все, чтобы минимизировать загромождение проводов. Поместите Arduino рядом с макетной платой и подключите контакт 5 В к положительной шине макета, а контакт заземления к отрицательной шине. Теперь мы готовы подключить перемычки между Arduino и компонентами.

Теперь поговорим о контактах на ЖК-дисплее и о том, как их подключить.

GND обозначает землю, это отрицательный провод постоянного тока. Подключите GND к отрицательной шине макета.

VCC означает «напряжение на общем коллекторе», и именно сюда вы подключаете 5-вольтовый источник питания (положительная шина питания).

VO означает контраст, подключите его к среднему контакту потенциометра. Подключите левый контакт потенциометра к положительной шине питания, а правый контакт - к шине питания заземления.

RS означает выбор регистра, и он используется Arduino, чтобы сообщить дисплею, где хранить данные. Подключите этот вывод к выводу 12 на Arduino.

RW означает вывод для чтения / записи, который Arduino использует для проверки, показывает ли экран то, что вы запрограммировали для отображения. Подключите этот штырь к отрицательной шине на макете.

E означает «Включить», который сообщает ЖК-дисплею, какие пиксели нужно включить (включить) или отключить (выключить). Подключите этот вывод к выводу 11 Arduino.

D4, D5, D6 и D7 - это выводы дисплея, которые управляют отображаемыми символами и буквами. Подключите их к контактам 5, 4, 3 и 2 Arduino соответственно.

Контакт A, иногда обозначаемый как светодиод, является анодом светодиода для подсветки. Подключите его к положительной шине питания с помощью провода или резистора 220 Ом. Резистор лучше подходит для более длительного использования, поскольку он щадит ЖК-дисплей, но если устройство не будет использоваться днем и ночью, вам не нужен резистор.

Контакт K, иногда также (что сбивает с толку) обозначенный как светодиод, является контактом заземления светодиода. Подключите его к шине питания заземления.

Шаг 4. Загрузка кода: инструкции

Подключите Arduino к USB-порту компьютера. Загрузите следующий код с помощью программатора Arduino IDE.

#включают

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; ЖК-дисплей LiquidCrystal (rs, en, d4, d5, d6, d7);

void setup () {

// устанавливаем количество столбцов и строк ЖК-дисплея: lcd.begin (16, 2); // Выводим сообщение на ЖК-дисплей. lcd.print ("Шаг в Герцах:!"); задержка (1000); void loop () {// play e4 delay (600); // пауза в течение 0,6 секунды тон (10, 329.63, 300); // воспроизведение e для зуммера на выводе 10, последнее в течение 0,3 секунды lcd.print (" 329.63 "); // выводим сообщение на ЖКИ" 329.63"

delay (350); // задержка на 0,35 секунды

lcd.clear (); // очистить ЖК-дисплей и сбросить для следующего сообщения // воспроизвести d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (350); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (350); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (350); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (350); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.66, 300); lcd.print («293,66»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем тон a3 (10, 220, 900); lcd.print («220.0»); задержка (1000); lcd.clear (); // line60 // помогает сохранить // avrdude.failure.eeprom // воспроизвести d3 tone (10, 146.83, 300); lcd.print («146,63»); задержка (350); lcd.clear (); // проигрываем f3 tone (10, 174.61, 300); lcd.print («174,61»); задержка (400); lcd.clear (); // проигрываем a3 tone (10, 220, 300); lcd.print («220»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 900); lcd.print («246.94»); задержка (1000); lcd.clear ();

// играем на e3

тон (10, 164,81, 300); lcd.print («164,81»); задержка (400); lcd.clear (); // играем g3 # tone (10, 207.65, 300); lcd.print («207,65»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 900); lcd.print («261,63»); задержка (1000); lcd.clear (); // проигрываем e tone (10, 164.81, 300); lcd.print («164,81»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.66, 300); lcd.print («293,66»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем тон a3 (10, 220, 900); lcd.print («220.0»); задержка (1000); lcd.clear (); // проигрываем d3 tone (10, 146.83, 300); lcd.print («146,83»); задержка (400); lcd.clear (); // проигрываем f3 tone (10, 174.61, 300); // eeprom 20-6 да нет, flash 65-0 нет да lcd.print ("174.61"); задержка (400); lcd.clear (); // проигрываем a3 tone (10, 220, 300); lcd.print («220.0»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 900); lcd.print («246.94»); задержка (1000); lcd.clear (); // проигрываем f3 tone (10, 174.61, 300); lcd.print («174,61»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем тон a3 (10, 220, 900); lcd.print («220.0»); задержка (1000); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.66, 300); lcd.print («293,66»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 900); lcd.print («329,63»); задержка (1000); lcd.clear (); // проигрываем g3 tone (10, 196, 300); lcd.print («196.0»); задержка (400); lcd.clear (); // проигрываем f4 tone (10, 349.23, 300); lcd.print («349,23»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.23, 300); lcd.print («329,23»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.63, 900); lcd.print («293,63»); задержка (1000); lcd.clear (); // проигрываем e3 tone (10, 164.81, 300); lcd.print («164,81»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.63, 300); lcd.print («293,63»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 900); lcd.print («261,63»); задержка (1000); lcd.clear (); // проигрываем d3 tone (10, 146.83, 300); lcd.print («146,83»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.63, 300); lcd.print («293,63»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 900); lcd.print («246.94»); задержка (1000); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (350); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (350); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (350); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (350); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.66, 300); lcd.print («293,66»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем тон a3 (10, 220, 900); lcd.print («220.0»); задержка (1000); lcd.clear (); // проигрываем d3 tone (10, 146.83, 300); lcd.print («146,83»); задержка (350); lcd.clear (); // проигрываем f3 tone (10, 174.61, 300); lcd.print («174,61»); задержка (400); lcd.clear (); // проигрываем a3 tone (10, 220, 300); lcd.print («220.0»); задержка (400); // проигрываем b3 lcd.clear (); тон (10, 246,94, 900); lcd.print («246.94»); задержка (1000); lcd.clear (); // проигрываем e3 tone (10, 164.81, 300); lcd.print («164,81»); задержка (400); lcd.clear (); // проигрываем g # 3 tone (10, 207.65, 300); lcd.print («207,65»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 900); lcd.print («261,63»); задержка (1000); задержка (300); lcd.clear (); // проигрываем e3 tone (10, 164.81, 300); lcd.print («164,81»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем d4 # tone (10, 311.13, 300); lcd.print («311,13»); задержка (400); lcd.clear (); // проигрываем e4 tone (10, 329.63, 300); lcd.print («329,63»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем d4 tone (10, 293.66, 300); lcd.print («293,66»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем тон a3 (10, 220, 900); lcd.print («220.0»); задержка (1000); lcd.clear (); // проигрываем d3 tone (10, 146.83, 300); lcd.print («146,83»); задержка (400); lcd.clear (); // проигрываем f3 tone (10, 174.61, 300); lcd.print («174,61»); задержка (400); lcd.clear (); // проигрываем a3 tone (10, 220, 300); lcd.print («220.0»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 900); lcd.print («246.94»); задержка (1000); lcd.clear (); // проигрываем f3 tone (10, 174.61, 300); lcd.print («174,61»); задержка (400); lcd.clear (); // проигрываем c4 tone (10, 261.63, 300); lcd.print («261,63»); задержка (400); lcd.clear (); // проигрываем b3 tone (10, 246.94, 300); lcd.print («246.94»); задержка (400); lcd.clear (); // проигрываем тон a3 (10, 220, 900); lcd.print («220.0»); задержка (1000); lcd.clear (); }

Шаг 5: Загрузка кода: что все это значит?

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

тон (x, y, z); = воспроизвести тон с высотой тона y герц для зуммера на контакте x в течение z миллисекунд.

lcd.print ("XYZ"); = распечатать сообщение с символами XYZ на ЖК-экране. (например, отображение шага в герцах)

задержка (х); = пауза на x миллисекунд.

const int X = Y = установить постоянную переменную X на вывод Y и использовать X или Y для назначения задач устройству.

lcd.clear (); = очистить ЖК-экран и выполнить сброс для нового отображения

pinMode (X, ВЫХОД); = установить контакт X для режима вывода

Как только вы поймете все эти функции, вы можете легко заменить переменные данными, которые вы собираете при переводе песни, а затем вы можете написать свою собственную песню!

Шаг 6: Готово !

Законченный!!!
Законченный!!!
Законченный!!!
Законченный!!!

У вас либо есть Arduino, который воспроизводит Fur Elise и отображает значения нот в герцах, либо вы создали Arduino, который воспроизводит мелодию выбранной вами песни и отображает текст, который вы хотели показать. Спасибо, что посетили это руководство, и я надеюсь, что вам понравился этот проект на Arduino.

Рекомендуемые: