Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
Я хотел создать проект, который объединил бы два моих любимых предмета: науку и музыку. Я подумал обо всех способах, которыми я мог бы объединить эти два домена, и подумал, что было бы интересно заставить 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.
Рекомендуемые:
Оцифровка вашей Hi-Fi системы: 6 шагов (с изображениями)
Оцифровка вашей системы Hi-Fi: в этом руководстве я хотел бы показать вам, как я оцифровал свою аналоговую систему Hi-Fi и, таким образом, реализовал веб-радио, доступ к музыкальной коллекции, хранящейся на моем NAS, и т. Д. Реализация в основном основана на Raspberry Pi, Hifiberry HAT и прикосновение
Адаптация видеодомофона к звуку цифровой песни: 5 шагов
Адаптация видеодомофона к цифровому звуковому сигналу: Короче говоря, Best Buy сказал мне, что я не могу установить дверной звонок Simplisafe с песенной мелодией дверного звонка. Прочитав сотни сообщений, я сказал, что это невозможно. Simplisafe сказал, что это невозможно, но все равно предоставил комплект. Комплект соединителя для штанги
Запись песни на IPad: 11 шагов (с изображениями)
Запись песни на iPad: Моя подруга недавно спросила, как она может записать некоторые из своих песен, используя только гитару и iPad. Я спросил ее, есть ли у нее какое-либо другое записывающее оборудование, такое как микрофон и интерфейс записи. К сожалению, ответ был отрицательным, и она не
Удалите ненужные песни ITunes с вашего компьютера: 10 шагов
Удалите ненужные песни ITunes с вашего компьютера: Привет, дамы и господа, это моя первая инструкция по кодированию, поэтому, комментируя, пожалуйста, оставьте свое оружие дома (однако можно использовать ножи). стало возможным носить с собой беспрецедентный ам
Как разучивать песни бурундука: 7 шагов
Как исполнять песни бурундуков: Песни бурундуков - это то место, где вы изменяете свою песню, чтобы она звучала так, как будто ее спели Элвин и бурундуки