- Nødvendig maskinvare:
- Forstå Tone () -funksjonen til Arduino:
- Den pitches.h header filen:
- Spiller musikalske notater på Arduino:
- Skjematisk og maskinvare:
- Arduino Program Forklaring:
- Arbeid med denne Melody Player Arduino Circuit:
Arduino er en utmerket måte å forenkle og øke hastigheten på mikrokontroller-prosjektene dine, takket være dens utviklingssamfunn som har gjort at nesten alt ser enkelt ut. Det er mange Arduino-prosjekter her ute som du kan prøve og ha det gøy. Noen av prosjektene dine trenger kanskje noen lydhandlinger for å varsle om noe eller bare for å imponere seerne. Hva om jeg fortalte deg at nesten alle temasanger som kan spilles på et piano kan etterlignes på Arduinoen din ved hjelp av et enkelt program og en billig Piezo-høyttaler?
I denne opplæringen vil vi lære hvor enkelt og enkelt det er å spille melodi på Piezo Buzzer eller høyttaler ved hjelp av Arduino tone () -funksjonen. På slutten av denne opplæringen vil du kunne spille noen berømte toner av Pirates of Caribbean, Crazy Frog, Super Mario og Titanic. Du vil også lære å spille et hvilket som helst stykke pianomusikk med Arduino. Sjekk videoen på slutten.
Nødvendig maskinvare:
- Arduino (hvilken som helst versjon - UNO brukes her)
- Piezo høyttaler / summer eller andre 8ohm høyttalere.
- Brettbrett
- Koble ledninger
- Trykke knapper
- 1k motstand (valgfritt)
Forstå Tone () -funksjonen til Arduino:
Før vi kan forstå hvordan en tone () fungerer, bør vi vite hvordan en Piezo-summer fungerer. Vi har kanskje lært om Piezo-krystaller på skolen vår, det er ingenting annet enn en krystall som omdanner mekaniske vibrasjoner til elektrisitet eller omvendt. Her bruker vi en variabel strøm (frekvens) som krystallet vibrerer for å produsere lyd. Derfor, for å få Piezo-summeren til å lage litt støy, må vi få Piezo-elektriske krystaller til å vibrere, tonehøyde og tone av støy avhenger av hvor raskt krystallet vibrerer. Derfor kan tone og tonehøyde styres ved å variere strømens frekvens.
Ok, så hvordan får vi variabel frekvens fra Arduino ? Det er her tone () -funksjonen kommer inn. Tonen () kan generere en bestemt frekvens på en bestemt pin. Varigheten kan også nevnes ved behov. Syntaksen for tone () er
Syntaks tone (pin, frekvens) tone (pin, frekvens, varighet) Parameter pin: pin som genererer tonefrekvens: frekvensen til tonen i hertz - usignert int varighet: varigheten av tonen i millisekunder (valgfritt) - usignert lang
Verdiene til pin kan være hvilken som helst av din digitale pin. Jeg har brukt pin nummer 8 her. Frekvensen som kan genereres, avhenger av størrelsen på tidtakeren på Arduino-kortet. For UNO og de fleste andre vanlige kort er den minste frekvensen som kan produseres 31Hz, og den maksimale frekvensen som kan produseres er 65535Hz. Imidlertid kan vi mennesker bare høre frekvenser mellom 2000Hz og 5000 Hz.
Den pitches.h header filen:
Nå vet vi hvordan vi kan produsere litt støy ved hjelp av arduino tone () -funksjonen . Men hvordan vet vi hva slags tone som genereres for hver frekvens?
Arduino har gitt oss en notatabell som tilsvarer hver frekvens til en bestemt musikktone. Denne notatbordet ble opprinnelig skrevet av Brett Hagman, på hvis arbeid tonekommandoen () var basert. Vi vil bruke denne notatbordet til å spille temaene våre. Hvis du er noen som er kjent med noter, bør du kunne forstå denne tabellen, for andre som meg er dette bare nok en blokk med kode.
#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 #_define #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 #define #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 #define #define #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 #define #define #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_DS6 1245 #define #define #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 #define #define #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
Ovenfor er koden gitt i pitches.h-headerfilen i denne zip-filen , du trenger bare å laste ned og inkludere denne filen i Arduino-koden som gitt på slutten av denne opplæringen, eller bruk koden i zip-filen.
Spiller musikalske notater på Arduino:
For å spille en anstendig melodi ved hjelp av Arduino, bør vi vite hva som utgjør disse melodiene. De tre viktigste faktorene som kreves for å spille et tema er
- Merk verdi
- Merk varighet
- Tempo
Vi har pitches.h- headerfilen for å spille en hvilken som helst noteverdi, nå skal vi finne ut den spesifikke varigheten av noten for å spille den. Tempo er ikke annet enn hvor raskt melodien skal spilles. Når du kjenner merkeverdien og merkets varighet, kan du bruke dem med tonen () som
tone (pinName, Note Value, Note Duration);
For tonene som ble spilt i denne opplæringen, har jeg gitt deg notatet Verdi og merknadens varighet inne i "themes.h" -hodefilen som du kan spille dem av i prosjektene dine. Men hvis du har en spesifikk tone i gruven din, og du vil spille den i prosjektet, så les videre…. Ellers hopp over dette emnet og fall ned til det neste.
For å spille en hvilken som helst bestemt tone må du hente notene til den aktuelle musikken og konvertere noter til Arduino-skisse ved å lese noteverdien og varigheten fra den. Hvis du er en musikalstudent, vil det være et stykke kake for deg, ellers brukte du litt tid og ødela hodet som jeg gjorde. Men på slutten av dagen når tonen din spiller på Piezo-summeren, vil du finne anstrengelsene dine verdt det.
Når du har merknadsverdien og merkelengden, kan du laste dem inn i programmet inne i “themes.h” -hodefilen som vist nedenfor
// ############## "" HE IS A PIRATE "Temasang av Pirates of Caribbean ** ################# // 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_D 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, NOTE_B3, NOTE_B3, NOTE_B3, NOTE_B3 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, NOTE_4, NOTE_A4, NOTE_A4 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}; // ########### Slutten av Han er en piratsang ############## //
Ovennevnte kodeblokk viser noteverdien og varighet av temaet “Han er en pirat” fra filmen Pirates of the Caribbean. Du kan legge til temaet ditt på samme måte som dette.
Skjematisk og maskinvare:
Skjematisk skjema for dette Arduino Tone Generator Project- prosjektet er vist i figuren nedenfor:
Tilkoblingen er ganske enkel, vi har en Piezo-høyttaler som er koblet til pin 8 og Ground of Arduino gjennom en 1K motstand. Denne 1k motstanden er en strømbegrensende motstand, som brukes til å holde strømmen innenfor de sikre grensene. Vi har også fire brytere for å velge ønsket melodi. Den ene enden av bryteren er koblet til bakken, og den andre enden er koblet til henholdsvis pin 2, 3, 4 og 5. Bryterne vil ha pull up-motstander aktivert internt ved bruk av programvaren. Siden kretsen er ganske enkel, kan den kobles til ved hjelp av et brødbrett som vist nedenfor:
Arduino Program Forklaring:
Når du har forstått konseptet, er Arduino-programmet ganske rett frem. Den komplette koden er gitt på slutten av opplæringen. Hvis du ikke er kjent med å legge til headerfiler, kan du laste ned koden som en ZIP-fil herfra og laste den direkte opp til Arduino.
Ovennevnte er topptekstfilene som må legges til. "Pitches.h" brukes til å likestille hver musikalsk tone til en bestemt frekvens, og "themes.h" inneholder toneverdien og tonevarigheten til alle de fire tonene.
#include "pitches.h" #include "themes.h"
Det opprettes en funksjon for å spille hver tone når det er nødvendig. Her når funksjonen Play_Pirates () kalles "Han er en pirat" tone vil bli spilt. Denne funksjonen består av tonefunksjonen som produserer frekvensen ved pin nummer 8. NoTone (8) kalles for å stoppe musikken når den er spilt. Hvis du vil spille din egen tone, endrer du Pirates_note og Pirates_duration til den nye noten og varighetsverdiene du har lagret i “themes.h” -verdien.
ugyldig Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // convert duration to time delay tone (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Her er 1.05 tempo, øk for å spille det langsommere forsinkelse (pauseBetweenNotes); noTone (8); }}
Pinnen 2, 3, 4 og 5 brukes til å velge bestemt tone som skal spilles. Disse pinnene holdes høye som standard ved hjelp av de interne opptrekksmotstandene ved å bruke ovennevnte kode. Når du trykker på knappen, trekkes den ned til bakken.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Under kodeblokk brukes til å spille sangen når du trykker på en knapp. Den leser den digitale verdien til hver knapp, og når den blir lav (null), antar den at knappen trykkes og spiller den respektive tonen ved å ringe til ønsket funksjon.
hvis (digitalRead (2) == 0) {Serial.println ("Valgt -> 'Han er en pirat'"); Play_Pirates (); } hvis (digitalRead (3) == 0) {Serial.println ("Valgt -> 'Crazy Frog'"); Play_CrazyFrog (); } hvis (digitalRead (4) == 0) {Serial.println ("Valgt -> 'Mario UnderWorld'"); Play_MarioUW (); } hvis (digitalRead (5) == 0) {Serial.println ("Valgt -> 'Han er en pirat'"); Play_Pirates (); }
Arbeid med denne Melody Player Arduino Circuit:
Når koden og maskinvaren din er klar, kan du bare brenne programmet inn i Arduino, og du skal kunne spille tonen ved å trykke på knappene. Hvis du har problemer, kan du ta en titt på seriell skjerm for feilsøking eller bruke kommentarseksjonen til å rapportere problemet, så hjelper jeg deg gjerne.
Fullstendig bearbeiding av prosjektet er vist i videoen nedenfor. Håper du likte prosjektet og vil bruke det i noe av prosjektet ditt eller skape en ny tone for prosjektet ditt. Hvis ja, del gjerne arbeidet ditt i kommentarseksjonen.