- Необхідне обладнання:
- Розуміння функції Tone () Arduino:
- Pitches.h заголовки:
- Відтворення музичних нот на Arduino:
- Схема та обладнання:
- Пояснення програми Arduino:
- Працює цей мікросхемний плеєр Arduino:
Arduino - це чудовий спосіб спростити та пришвидшити ваші проекти мікроконтролера завдяки спільноті розробників, які зробили майже все простим. Тут є безліч проектів Arduino, де ви можете спробувати та отримати задоволення. Деякі ваші проекти можуть потребувати звукових дій, щоб повідомити про щось або просто вразити глядачів. Що, якби я сказав вам, що майже будь-які тематичні пісні, які можна відтворити на фортепіано, можна імітувати на вашому Arduino за допомогою простої програми та дешевого динаміка Piezo?
У цьому підручнику ми дізнаємося, як просто і легко відтворювати мелодію на п’єзо-зумер або динамік за допомогою функції Arduino tone (). В кінці цього підручника ви зможете зіграти деякі відомі тони Піратів Карибського моря, Божевільної жаби, Супер Маріо та Титаніка. Ви також дізнаєтесь, як грати на будь-якому творі фортепіанної музики за допомогою Arduino. Перевірте відео в кінці.
Необхідне обладнання:
- Arduino (будь-яка версія - тут використовується UNO)
- П'єзодинамік / зумер або будь-який інший динамік 8 Ом.
- Макет
- Підключення проводів
- Кнопки
- 1k резистор (додатково)
Розуміння функції Tone () Arduino:
Перш ніж ми зможемо зрозуміти, як працює тон (), ми повинні знати, як працює п'єзо-зумер. Ми могли б дізнатися про кристали П'єзо в нашій школі, це не що інше, як кристал, який перетворює механічні коливання в електрику або навпаки. Тут ми застосовуємо змінний струм (частоту), для якого кристал вібрує, створюючи таким чином звук. Отже, щоб змусити п’єзозуммер видавати певний шум, ми повинні змусити вібросигнал п’єзоелементу вібрувати, висота і тон шуму залежать від того, як швидко кристал вібрує. Отже, тоном і висотою звуку можна керувати, змінюючи частоту струму.
Добре, так як же нам отримати змінну частоту від Arduino ? Тут з’являється функція tone (). Тон () може генерувати певну частоту на певному штифті. За необхідності також можна вказати тривалість часу. Синтаксис для tone () є
Синтаксичний тон (пін, частота) тон (пін, частота, тривалість) Параметри пін: пін, на якому генерується частота тону: частота тону в герцах - беззнакова тривалість int: тривалість тону в мілісекундах (необов’язково) - без підпису довгий
Значення pin можуть бути будь-якими з ваших цифрових 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_A1 55 #define NOTE_AS1 58 #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_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #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_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define 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 NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #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 тисячі сто сімдесят п'ять #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 +1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 тисяча шістсот шістьдесят одна #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 тисячу дев'ятсот сімдесят шість #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #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, прочитавши з них значення ноти та тривалість ноти. Якщо ви студент музичного факультету, це буде для вас шматочком пирога, інакше витратите трохи часу і зламаєте собі голову, як і я. Але наприкінці дня, коли ваш звук звучить на зумметрі П'єзо, ви побачите, що ваші зусилля того варті.
Отримавши значення ноти та тривалість ноти, завантажте їх у програму всередині заголовного файлу “themes.h”, як показано нижче
// ############## ** Тема пісні "Пірати Карибського моря" ** ############## // 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_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, NOT_, NOT__4, NOT_, NOT__4 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_4, NOT__4, NOT__4, NOT__4, NOT__4 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 - піратська пісня ############# //
У наведеному вище блоці коду показано значення ноти та тривалість ноти теми "Він - пірат" у фільмі "Пірати Карибського моря". Ви можете додати свою тему приблизно так.
Схема та обладнання:
Принципова схема проекту Arduino Tone Generator представлена на малюнку нижче:
Підключення досить просте, у нас є динамік Piezo, який підключений до виводу 8 та Ground 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 - темп, збільшуйте, щоб відтворити його повільнішою затримкою (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 ("Вибрано -> 'Божевільна жаба"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Вибрано -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Вибрано -> 'Він пірат'"); Play_Pirates (); }
Працює цей мікросхемний плеєр Arduino:
Коли ваш код та обладнання готові, просто запишіть програму на ваш Arduino, і ви зможете відтворити тон, просто натискаючи кнопки. Якщо у вас виникли проблеми, загляньте на свій послідовний монітор для налагодження або скористайтеся розділом коментарів, щоб повідомити про проблему, і я буду радий вам допомогти.
Повна робота проекту показана у відео нижче. Сподіваюся, вам сподобався проект і ви використаєте його в якомусь із ваших проектів або створите новий тон для вашого проекту. Якщо так, сміливо діліться своєю роботою в розділі коментарів.