- Необходим хардуер:
- Разбиране на функцията Tone () на Arduino:
- В pitches.h заглавният файл:
- Възпроизвеждане на музикални ноти на Arduino:
- Схема и хардуер:
- Обяснение на програмата Arduino:
- Работа на тази схема за мелодиен плейър Arduino:
Arduino е отличен начин за опростяване и ускоряване на вашите проекти за микроконтролер, благодарение на общността си от разработчици, които са направили почти всичко да изглежда просто. Тук има много проекти за Arduino, за да опитате и да се забавлявате. Някои от вашите проекти може да се нуждаят от звукови действия, за да уведомят за нещо или просто да впечатлят зрителите. Ами ако ви кажа, че почти всички тематични песни, които биха могли да се възпроизвеждат на пиано, могат да бъдат имитирани на вашия Arduino с помощта на проста програма и евтин пиезо говорител?
В този урок ще научим колко лесно и лесно е да възпроизвеждате мелодия на пиезо зумер или високоговорител, използвайки функцията Arduino tone (). В края на този урок ще можете да изсвирите някои известни тонове на Карибски пирати, Луда жаба, Супер Марио и Титаник. Също така ще научите как да свирите на всяка пиано музика с Arduino. Проверете видеото в края.
Необходим хардуер:
- Arduino (всяка версия - тук се използва UNO)
- Пиезо високоговорител / зумер или друг 8ohm високоговорител.
- Макет
- Свързване на проводници
- Бутони
- 1k резистор (по избор)
Разбиране на функцията Tone () на Arduino:
Преди да разберем как работи тон (), трябва да знаем как работи пиезо зумер. Може би сме научили за пиезо кристалите в нашето училище, той не е нищо друго освен кристал, който преобразува механичните вибрации в електричество или обратно. Тук прилагаме променлив ток (честота), за който кристалът вибрира, като по този начин произвежда звук. Следователно, за да накараме пиезо зумера да издаде някакъв шум, ние трябва да накараме пиезо електрическия кристал да вибрира, височината и тонът на шума зависи от това колко бързо кристалът вибрира. Следователно тонът и височината могат да бъдат контролирани чрез промяна на честотата на тока.
Добре, как да получим променлива честота от Arduino ? Тук идва функцията tone (). Тонът () може да генерира определена честота на определен щифт. Продължителността на времето също може да бъде спомената, ако е необходимо. Синтаксисът за tone () е
Синтаксисен тон (ПИН, честота) Тон (ПИН, честота, продължителност) Параметри ПИН: ПИН, на който да се генерира честотата на тона: честотата на тона в херци - неподписана int продължителност: продължителността на тона в милисекунди (по избор) - неподписан дълго
Стойностите на pin могат да бъдат всеки от вашите цифрови pin. Тук съм използвал щифт номер 8. Честотата, която може да се генерира, зависи от размера на таймера във вашата дъска Arduino. За UNO и повечето други често срещани платки минималната честота, която може да бъде произведена, е 31Hz, а максималната честота, която може да бъде произведена, е 65535Hz. Обаче ние хората можем да чуем само честоти между 2000Hz и 5000 Hz.
В pitches.h заглавният файл:
Сега знаем как да произвеждаме някакъв шум, използвайки функцията arduino tone () . Но как да разберем какъв тон ще се генерира за всяка честота?
Arduino ни даде таблица с ноти, която приравнява всяка честота към определен тип музикална нота. Тази таблица с бележки първоначално е написана от Брет Хагман, на чиято работа се основава командата tone () . Ще използваме тази таблица с бележки, за да играем нашите теми. Ако сте някой, запознат с нотите, би трябвало да можете да осмислите тази таблица, за други като мен това е просто още един блок с код.
# определят NOTE_B0 31 # определят NOTE_C1 33 # определят NOTE_CS1 35 # определят NOTE_D1 37 # определят NOTE_DS1 39 # определят NOTE_E1 41 # определят NOTE_F1 44 # определят NOTE_FS1 46 # определят NOTE_G1 49 # определят NOTE_GS1 52 # определят NOTE_A1 55 # определят NOTE_AS1 58 # определят ЗАБЕЛЕЖКА_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 NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE #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 220define 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 NOTF_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_define_define_definedefine 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_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 # определят NOTE_G6 1568 # определят NOTE_GS6 1661 # определят NOTE_A6 1760 # определят NOTE_AS6 1865 # определят NOTE_B6 1976 # определят NOTE_C7 2093 # определят NOTE_CS7 2217 # определят NOTE_D7 2349 # определят NOTE_DS7 2489 # определят NOTE_E7 2637 # определят NOTE_F7 2794 # определят NOTE_FS7 2960 # определят 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_DE, NOTE_D4, NOTE_D4, NOTE_D4, 0 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, NOTA_4, NOTA_4, NOTA_ 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 Project е показана на фигурата по-долу:
Връзката е доста проста, имаме Piezo високоговорител, който е свързан към щифт 8 и Ground of Arduino чрез 1K резистор. Този 1k резистор е резистор за ограничаване на тока, който се използва за поддържане на тока в безопасни граници. Имаме и четири превключвателя за избор на необходимата мелодия. Единият край на превключвателя е свързан към земята, а другият край е свързан съответно към щифтове 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 ("Избрано -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Избрано -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Избрано -> 'Той е пират'"); Play_Pirates (); }
Работа на тази схема за мелодиен плейър Arduino:
След като кодът и хардуерът ви са готови, просто запишете програмата във вашия Arduino и трябва да можете да възпроизвеждате тона, като просто натискате бутоните. Ако имате някакви проблеми, погледнете вашия сериен монитор за отстраняване на грешки или използвайте раздела за коментари, за да съобщите за проблема и ще се радвам да ви помогна.
Цялостната работа на проекта е показана във видеото по-долу. Надявам се, че проектът ви е харесал и ще го използвате в някой от вашите проекти или ще създадете нов тон за вашия проект. Ако отговорът е да, не се колебайте да споделите работата си в раздела за коментари.