- Szükséges hardver:
- Az Arduino Tone () funkciójának megértése :
- A pitches.h fejlécfájl:
- Zenei jegyzetek lejátszása az Arduino-n:
- Séma és hardver:
- Az Arduino program magyarázata:
- A Melody Player Arduino áramkör működése:
Az Arduino kiváló módszer a mikrovezérlő projektek egyszerűsítésére és felgyorsítására, köszönhetően a fejlesztői közösségének, akik szinte mindent egyszerűvé tettek. Rengeteg Arduino projekt van itt, ahol kipróbálhatja és jól érezheti magát. Egyes projektjeihez hanggal kapcsolatos műveletekre lehet szükség, hogy értesítsenek valamiről, vagy csak lenyűgözzék a nézőket. Mi lenne, ha azt mondanám, hogy szinte minden, zongorán játszható főcímdal utánozható Arduino készülékén egy egyszerű program és egy olcsó Piezo hangszóró segítségével?
Ebben az oktatóanyagban megtudhatjuk, milyen egyszerű és egyszerű a dallam lejátszása a piezo hangjelzőn vagy a hangszórón az Arduino tone () funkció használatával. A bemutató végén a Karib-tenger kalózai, az Őrült béka, a Super Mario és a Titanic híres hangjait játszhatod le. Azt is megtanulja, hogyan kell bármilyen zongoramuzsikát játszani az Arduinóval. Ellenőrizze a videót a végén.
Szükséges hardver:
- Arduino (bármilyen verzió - itt UNO-t használunk)
- Piezo hangszóró / hangjelző vagy bármely más 8 ohmos hangszóró.
- Kenyérlemez
- Vezetékek csatlakoztatása
- Nyomógombok
- 1k ellenállás (opcionális)
Az Arduino Tone () funkciójának megértése:
Mielőtt megértenénk a hang () működését, tudnunk kell, hogyan működik a piezo hangjelző. Lehet, hogy iskolánkban megtudhattuk a piezo kristályokat, nem más, mint egy kristály, amely a mechanikus rezgéseket elektromossággá alakítja, vagy fordítva. Itt egy változó áramot (frekvenciát) alkalmazunk, amelyhez a kristály rezeg, így hangot termel. Ezért ahhoz, hogy a Piezo hangjelző némi zajt hallhasson, a Piezo elektromos kristályt rezegni kell, a zaj hangmagassága és hangja attól függ, milyen gyorsan rezeg a kristály. Ezért a hang és a hangmagasság szabályozható az áram frekvenciájának változtatásával.
Oké, akkor hogyan lehet változó frekvenciát kapni az Arduinótól ? Itt jön be a tone () funkció. A tone () egy adott frekvenciát generálhat egy adott csapon. Az időtartam is megemlíthető, ha szükséges. A tone () szintaxisa az
Szintaxis hang (pin, frekvencia) hang (pin, frekvencia, időtartam) Paraméterek pin: az a tű, amelyen a hangfrekvenciát előállítják: a hang frekvenciája hercben - aláíratlan int időtartam: a hang időtartama milliszekundumban (opcionális) - hosszú ideig aláíratlan
A pin értékei bármelyik digitális pinje lehetnek. Itt használtam a 8. számú tűt. A generálható frekvencia az Arduino táblán lévő időzítő méretétől függ. Az UNO és a legtöbb más közös tábla esetében a minimálisan előállítható frekvencia 31Hz, a maximálisan előállítható 65535Hz. Mi, emberek azonban csak 2000Hz és 5000 Hz közötti frekvenciákat hallhatunk.
A pitches.h fejlécfájl:
Most már tudjuk, hogyan kell némi zajt produkálni az arduino tone () függvény segítségével . De honnan tudjuk, hogy milyen hang fog generálódni az egyes frekvenciákhoz?
Az Arduino egy jegyzet táblázatot adott nekünk, amely az egyes frekvenciákat egy adott zenei hangtípushoz hasonlítja. Ezt a jegyzet táblázatot eredetileg Brett Hagman írta, akinek munkáján a tone () parancs alapult. Ezt a jegyzet táblázatot használjuk a témáink lejátszására. Ha valaki ismeri a kottákat, akkor képesnek kell lennie arra, hogy értelmezze ezt a táblázatot, mások, mint én, ezek csak egy újabb kódblokk.
#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 58defin # 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__defin__2 #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 23_3defini 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 NOTE5_55 #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_F6_F6_Fájl_define #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 2489 #define NoteDefine #Define Note_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
A fenti kód a pitches.h fejlécfájlban van megadva ebben a zip fájlban , csak le kell töltenie és be kell illesztenie ezt a fájlt az Arduino kódunkba , az oktatóanyag végén megadott módon, vagy használja a zip fájlban megadott kódot.
Zenei jegyzetek lejátszása az Arduino-n:
Ahhoz, hogy tisztességes dallamot játsszunk az Arduino segítségével, tudnunk kell, mi alkotja ezeket a dallamokat. A téma lejátszásához szükséges három fő tényező:
- Megjegyzés értéke
- Megjegyzés Időtartam
- Tempó
Megvan a pitches.h fejlécfájl, amellyel bármilyen hangértéket lejátszhatunk. Most meg kell találnunk a hang pontos lejátszási időtartamát. A tempó nem más, mint hogy milyen gyorsan kell lejátszani a dallamot. Miután megismerte a Jegyzet értékét és a Jegyzet időtartamát, használhatja őket a ( például ) hangjelzéssel
hang (pinName, Jegyzet értéke, Jegyzet időtartama);
Az ebben az oktatóanyagban lejátszott hangokhoz megadtam az "Érték és Megjegyzés időtartama" megjegyzéseket a "themes.h" fejlécfájlban, amellyel lejátszhatja őket a projektjeiben. De ha van valamilyen konkrét hang az enyémben, és el akarja játszani a projektben, olvassa el… olvassa el ezt a témát, és ugorjon a következőre.
Bármely adott hang lejátszásához meg kell szereznie az adott zene kottáját, és a kottát Arduino vázlatká kell konvertálnia, leolvasva belőle a hang és a hang hosszát. Ha zenei hallgató vagy, ez egy darab sütemény neked, különben eltöltött egy kis időt, és megtörte a fejét, mint én. De a nap végén, amikor a hangod szól a Piezo hangjelzőn, megéri az erőfeszítésed.
Ha megvan a jegyzet értéke és a jegyzet időtartama, töltse be őket a programba a „themes.h” fejlécfájlba, az alábbiak szerint
// ############## ** "HE IS A PIRATE" Karib-tengeri kalózok főcímdala ** ############### // 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_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, NOTE4, NOTE4, NOTE4 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_A4, Note4A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE4 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 Kalózok időtartama = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,4,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}; // ########### Vége egy kalóz dal ############## //
A fenti kódblokk a Karib-tenger kalózai című film „Ő egy kalóz” témájának jegyzetértékét és időtartamát mutatja. Hasonlóan hozzáadhatja a témáját, mint ez.
Séma és hardver:
Az Arduino Tone Generator Project projekt vázlata az alábbi ábrán látható:
A kapcsolat nagyon egyszerű, van egy Piezo hangszóró, amely 1K ellenállással csatlakozik az Arduino 8. tűjéhez és a Groundhoz. Ez az 1k ellenállás egy áramkorlátozó ellenállás, amelyet arra használnak, hogy az áramot a biztonságos határok között tartsa. Négy kapcsolónk is van a kívánt dallam kiválasztásához. A kapcsoló egyik vége a földhöz, a másik vége pedig a 2., 3., 4. és 5. csaphoz van csatlakoztatva. A kapcsolóknak a szoftver segítségével belsõleg engedélyezniük kell a felhúzható ellenállásokat. Mivel az áramkör nagyon egyszerű, egy kenyérlap segítségével csatlakoztatható az alábbiak szerint:
Az Arduino program magyarázata:
Miután megértette a koncepciót, az Arduino program meglehetősen egyszerű. A teljes kódot az oktatóanyag végén adjuk meg. Ha nem ismeri a fejlécfájlok hozzáadását, innen letöltheti a kódot ZIP fájlként, és közvetlenül feltöltheti Arduino-ra.
A fenti kettő a fejlécfájl, amelyet hozzá kell adni. A „pitches.h” kifejezéssel az egyes hangjegyeket egy adott frekvenciához kell igazítani, a „themes.h” pedig mind a négy hang hangjegyét és időtartamát tartalmazza.
#include "pitches.h" #include "themes.h"
Létrejön egy funkció az egyes hangok lejátszására, ha szükséges. Itt játszódik le, amikor a Play_Pirates () függvényt „He is a Pirate” hangjelzésnek hívják. Ez a funkció a hangfunkcióból áll, amely a 8-as PIN-számnál előállítja a frekvenciát. A noTone (8) a zene leállítása után hívásra kerül. Ha azt szeretnénk játszani a saját hang, változtassa meg a Pirates_note és Pirates_duration az új jegyzet és időtartamát értékeket mentett „themes.h” érték
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // időtartam időkésleltetéssé alakítása (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1,05; // Itt az 1.05 a tempó, a lejátszás növelése lassabb késleltetéssel (pauseBetweenNotes); noTone (8); }}
A 2, 3, 4 és 5 csapok a lejátszandó hang kiválasztására szolgálnak. Ezeket a csapokat alapértelmezés szerint magasan tartják a belső húzóellenállásokkal, a fenti kódsor használatával. A gomb megnyomásakor lehúzza a földre.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
A kódblokk alatt a dal lejátszására szolgál, amikor egy gombot megnyomnak. Kiolvassa az egyes gombok digitális értékét, és amikor alacsony (nulla) lesz, feltételezi, hogy megnyomja a gombot, és a kívánt funkció meghívásával játssza le a megfelelő hangot.
if (digitalRead (2) == 0) {Serial.println ("Kiválasztott -> 'Ő egy kalóz'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Kiválasztott -> 'Őrült béka'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Kiválasztva -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Kiválasztott -> 'Ő egy kalóz'"); Play_Pirates (); }
A Melody Player Arduino áramkör működése:
Miután elkészült a kód és a hardver, egyszerűen égesse be a programot az Arduino-ba, és képesnek kell lennie arra, hogy a gombokat egyszerűen megnyomva játssza le a hangot. Ha bármilyen problémája van, nézze meg a soros monitor hibakeresését, vagy használja a megjegyzés részt a probléma jelentéséhez, és szívesen segítek.
A projekt teljes működését az alábbi videó mutatja. Remélem, hogy tetszett a projekt, és felhasználná valamilyen projektjében, vagy új hangot adna a projektjének. Ha igen, bátran ossza meg munkáját a megjegyzés részben.