- Hårdvara krävs:
- Förstå Tone () -funktionen i Arduino:
- Den pitches.h header fil:
- Spelar musiknoter på Arduino:
- Schematisk och hårdvara:
- Arduino-programförklaring:
- Arbetet med denna Melody Player Arduino Circuit:
Arduino är ett utmärkt sätt att förenkla och påskynda dina mikroprojektprojekt tack vare dess community av utvecklare som har gjort att nästan allt ser enkelt ut. Det finns många Arduino-projekt här ute för att du ska kunna ha kul. Vissa av dina projekt kan behöva lite ljudåtgärd för att meddela om något eller bara för att imponera på tittarna. Vad händer om jag sa till dig att nästan alla temalåtar som kan spelas på ett piano kan efterliknas på din Arduino med hjälp av ett enkelt program och en billig Piezo-högtalare?
I den här handledningen lär vi oss hur enkelt och enkelt det är att spela melodi på Piezo-summer eller högtalare med Arduino-tonfunktionen (). I slutet av denna handledning kommer du att kunna spela några berömda toner av Pirates of Caribbean, Crazy Frog, Super Mario och Titanic. Du kommer också att lära dig att spela vilken pianomusik som helst med Arduino. Kontrollera videon i slutet.
Hårdvara krävs:
- Arduino (valfri version - UNO används här)
- Piezo-högtalare / summer eller någon annan 8ohm-högtalare.
- Bakbord
- Anslutande ledningar
- Trycka på knappar
- 1k motstånd (tillval)
Förstå Tone () -funktionen i Arduino:
Innan vi kan förstå hur en ton () fungerar bör vi veta hur en Piezo-summer fungerar. Vi kanske har lärt oss om Piezo-kristaller i vår skola, det är inget annat än en kristall som omvandlar mekaniska vibrationer till el eller tvärtom. Här tillämpar vi en variabel ström (frekvens) för vilken kristallen vibrerar och därmed producerar ljud. Därför för att få Piezo-summern att göra lite ljud måste vi göra Piezo-elektriska kristaller att vibrera, tonhöjden och tonen beror på hur snabbt kristallen vibrerar. Därför kan ton och tonhöjd styras genom att variera strömfrekvensen.
Okej, så hur får vi en variabel frekvens från Arduino ? Det är här tonfunktionen () kommer in. Tonen () kan generera en viss frekvens på en specifik stift. Tidslängden kan också nämnas vid behov. Syntaxen för ton () är
Syntaxton (stift, frekvens) ton (stift, frekvens, varaktighet) Parametrar stift: stiftet för att generera tonfrekvensen: tonfrekvensen i hertz - osignerad int varaktighet: tonens varaktighet i millisekunder (valfritt) - osignerad lång
Värdena på stift kan vara vilken som helst av din digitala stift. Jag har använt stift nummer 8 här. Frekvensen som kan genereras beror på storleken på timern på ditt Arduino-kort. För UNO och de flesta andra vanliga kort är den lägsta frekvensen som kan produceras 31Hz och den högsta frekvensen som kan produceras är 65535Hz. Men vi människor kan bara höra frekvenser mellan 2000Hz och 5000 Hz.
Den pitches.h header fil:
Nu vet vi hur man producerar lite brus med hjälp av arduino tone () -funktionen . Men hur vet vi vilken typ av ton som genereras för varje frekvens?
Arduino har gett oss en anteckningstabell som motsvarar varje frekvens till en specifik typ av musiknoter. Denna anteckningstabell skrevs ursprungligen av Brett Hagman, på vars arbete tonekommandot () baserades. Vi kommer att använda denna anteckningstabell för att spela våra teman. Om du är någon som känner till noter borde du kunna förstå den här tabellen, för andra som jag är det bara ett kodblock.
#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_1 #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 #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 #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
Ovanstående kod ges i pitches.h-rubrikfilen i den här zip-filen , du behöver bara ladda ner och inkludera den här filen i vår Arduino-kod som anges i slutet av denna handledning eller använda koden i zip-filen.
Spelar musiknoter på Arduino:
För att spela en anständig melodi med Arduino borde vi veta vad som utgör dessa melodier. De tre huvudfaktorerna som krävs för att spela ett tema är
- Notera värde
- Observera varaktighet
- Tempo
Vi har pitches.h-rubrikfilen för att spela något notvärde, nu ska vi ta reda på dess specifika nottid för att spela den. Tempo är inget annat än hur snabbt melodin ska spelas. När du väl känner till notvärdet och notlängden kan du använda dem med tonen () som
ton (pinName, Not Value, Note Duration);
För tonerna som spelas i denna handledning har jag gett dig anteckningen Värde och anteckningens varaktighet i rubrikfilen "themes.h" med vilken du kan spela dem i dina projekt. Men om du har någon specifik ton i din gruva och du vill spela den i ditt projekt, läs vidare…. Hoppa annars över det här ämnet och falla ner till nästa.
För att spela vilken specifik ton som helst måste du hämta noterna för den aktuella musiken och konvertera noter till Arduino-skiss genom att läsa anteckningsvärdet och notens varaktighet från den. Om du är en musikalsk student skulle det vara en bit tårta för dig, annars spenderade du lite tid och slog dig som jag gjorde. Men i slutet av dagen när din ton spelar på Piezo-summern kommer du att hitta din ansträngning värt det.
När du väl har anteckningsvärdet och anteckningens varaktighet laddar du dem i programmet inuti rubrikfilen “themes.h” som visas nedan
// ############### "" HE IS A PIRATE "Temasång av Pirates of the 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, NOT_D4, NOT_D4, NOT_D4, NOT_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, NOT_B4, NOT_B, NOT_B 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, NOT_A4, NOT_G 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}; // ############ Slut på Han är en piratsång ############## //
Ovanstående kodblock visar anteckningsvärdet och anteckningsvaraktigheten för temat “Han är en pirat” från filmen Pirates of the Caribbean. Du kan lägga till ditt tema på samma sätt som detta.
Schematisk och hårdvara:
Schemat för detta Arduino Tone Generator Project- projekt visas i figuren nedan:
Anslutningen är ganska enkel, vi har en Piezo-högtalare som är ansluten till stift 8 och jord på Arduino via ett 1K-motstånd. Detta 1k-motstånd är ett strömbegränsande motstånd som används för att hålla strömmen inom de säkra gränserna. Vi har också fyra växlar för att välja önskad melodi. Den ena änden av omkopplaren är ansluten till jord och den andra änden är ansluten till stift 2, 3, 4 respektive 5. Strömställarna kommer att ha pull-up-motstånd aktiverat internt med programvaran. Eftersom kretsen är ganska enkel kan den anslutas med ett brödbräda enligt bilden nedan:
Arduino-programförklaring:
När du väl har förstått konceptet är Arduino-programmet ganska enkelt. Den fullständiga koden ges i slutet av handledningen. Om du inte känner till att lägga till huvudfiler kan du ladda ner koden som en ZIP-fil härifrån och direkt ladda upp den till din Arduino.
Ovanstående två är rubrikfilerna som måste läggas till. "Pitches.h" används för att jämföra varje musiknota till en viss frekvens och "teman.h" innehåller tonvärdet och notens varaktighet för alla de fyra tonerna.
#include "pitches.h" #include "themes.h"
En funktion skapas för att spela varje ton vid behov. Här när funktionen Play_Pirates () kallas “Han är en pirat” spelas tonen. Denna funktion består av tonfunktionen som producerar frekvensen vid stift 8. NoTone (8) kallas för att stoppa musiken när den har spelats. Om du vill spela din egen ton ändrar Pirates_note och Pirates_duration till ny anteckning och varaktighet värden som du har sparat i ”themes.h” värde
ogiltig Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // convert time to time delay tone (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Här är 1.05 tempo, öka för att spela det långsammare fördröjning (pauseBetweenNotes); noTone (8); }}
Stift 2, 3, 4 och 5 används för att välja den ton som ska spelas. Dessa stift hålls högt som standard med hjälp av de interna uppdragningsmotstånden med ovanstående kodrad. När du trycker på knappen dras den ner till marken.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Nedan kodkod används för att spela låten när du trycker på en knapp. Den läser det digitala värdet för varje knapp och när den blir låg (noll) antar den att knappen trycks in och spelar respektive ton genom att anropa önskad funktion.
if (digitalRead (2) == 0) {Serial.println ("Vald ->" Han är en pirat ""); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Selected -> 'Mario UnderWorld'"); Play_MarioUW (); } om (digitalRead (5) == 0) {Serial.println ("Vald -> 'Han är en pirat'"); Play_Pirates (); }
Arbetet med denna Melody Player Arduino Circuit:
När din kod och hårdvara är klar, bränner du bara programmet i din Arduino och du borde kunna spela tonen genom att helt enkelt trycka på knapparna. Om du har några problem, ta en titt på din seriella bildskärm för felsökning eller använd kommentarsektionen för att rapportera problemet så hjälper jag dig gärna.
Hela arbetet med projektet visas i videon nedan. Hoppas att du gillade projektet och skulle använda det i något av ditt projekt eller skapa en ny ton för ditt projekt. Om ja, gärna dela ditt arbete i kommentarsektionen.