- Nødvendig hardware:
- Forståelse af Tone () -funktionen i Arduino:
- Den pitches.h header fil:
- Afspilning af musiknoter på Arduino:
- Skematisk og hardware:
- Forklaring til Arduino-programmet:
- Arbejde med denne Melody Player Arduino Circuit:
Arduino er en glimrende måde at forenkle og fremskynde dine mikrocontroller-projekter takket være dets community af udviklere, der har fået næsten alt til at se simpelt ud. Der er mange Arduino-projekter herude, så du kan prøve at have det sjovt. Nogle af dine projekter har muligvis brug for nogle lyde til at underrette om noget eller bare for at imponere seerne. Hvad hvis jeg fortalte dig, at næsten alle temasange, der kunne spilles på et klaver, kan efterlignes på din Arduino ved hjælp af et simpelt program og en billig Piezo-højttaler?
I denne vejledning lærer vi, hvor enkelt og let det er at afspille melodi på Piezo Buzzer eller højttaler ved hjælp af Arduino tone () -funktionen. I slutningen af denne tutorial kan du spille nogle berømte toner af Pirates of Caribbean, Crazy Frog, Super Mario og Titanic. Du vil også lære at spille ethvert stykke klavermusik med Arduino. Tjek videoen i slutningen.
Nødvendig hardware:
- Arduino (enhver version - UNO bruges her)
- Piezo højttaler / summer eller enhver anden 8ohm højttaler.
- Brødbræt
- Tilslutning af ledninger
- Tryk på knapper
- 1k modstand (valgfri)
Forståelse af Tone () -funktionen i Arduino:
Før vi kan forstå, hvordan en tone () fungerer, skal vi vide, hvordan en Piezo-summer fungerer. Vi har måske lært om Piezo-krystaller på vores skole, det er intet andet end en krystal, der omdanner mekaniske vibrationer til elektricitet eller omvendt. Her anvender vi en variabel strøm (frekvens), som krystallen vibrerer for at producere lyd. Derfor, for at få Piezo-summeren til at lave noget støj, er vi nødt til at få Piezo-elektriske krystaller til at vibrere, tonehøjde og tone afhænger af, hvor hurtigt krystallen vibrerer. Derfor kan tone og tonehøjde styres ved at variere frekvensen af strømmen.
Okay, så hvordan får vi en variabel frekvens fra Arduino ? Det er her, hvor tone () -funktionen kommer ind. Tonen () kan generere en bestemt frekvens på en bestemt pin. Tidsvarigheden kan også nævnes, hvis det kræves. Syntaksen for tone () er
Syntaks tone (pin, frekvens) tone (pin, frekvens, varighed) Parametre pin: den pin, hvor tonefrekvensen skal genereres: frekvensen af tonen i hertz - usigneret int varighed: varigheden af tonen i millisekunder (valgfri) - usigneret lang
Værdierne for pin kan være enhver af dine digitale pin. Jeg har brugt pin nummer 8 her. Den frekvens, der kan genereres, afhænger af størrelsen på timeren på dit Arduino-kort. For UNO og de fleste andre almindelige kort er den mindste frekvens, der kan produceres, 31Hz, og den maksimale frekvens, der kan produceres, er 65535Hz. Men vi mennesker kan kun høre frekvenser mellem 2000Hz og 5000 Hz.
Den pitches.h header fil:
Nu ved vi, hvordan man producerer noget støj ved hjælp af arduino tone () -funktionen . Men hvordan ved vi, hvilken slags tone der genereres for hver frekvens?
Arduino har givet os en notatabel, der svarer til hver frekvens til en bestemt type musiknote. Denne notatabel blev oprindeligt skrevet af Brett Hagman, på hvis arbejde tonekommandoen () var baseret. Vi bruger denne notatabel til at spille vores temaer. Hvis du er en person, der er bekendt med noder, skal du være i stand til at give mening i denne tabel, for andre som mig er dette bare endnu en blok 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 NOTE_1 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 #define NOTE_FS5 740 #definer NOTE_G5 784 #definer NOTE_GS5 831 #definer NOTE_A5 880 #definer NOTE_AS5 932 #definer NOTE_B5 988 #definer NOTE_C6 1047 #definer NOTE_CS6 1109 #definer NOTE_D6 1175 #definer NOTE_DS6 1245 #definerer #definerer #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 NOTE_E7 #define #define #define NOTE_G7 3136 #definer NOTE_GS7 3322 #definer NOTE_A7 3520 #definer NOTE_AS73729 #definer NOTE_B7 3951 #definer NOTE_C8 4186 #definer NOTE_CS8 4435 #definer NOTE_D8 4699 #definer NOTE_DS8 4978
Ovenstående kode er angivet i pitches.h header-fil i denne zip-fil , du skal bare downloade og inkludere denne fil i vores Arduino-kode som angivet i slutningen af denne tutorial eller bruge koden i zip-filen.
Afspilning af musiknoter på Arduino:
For at spille en anstændig melodi ved hjælp af Arduino, skal vi vide, hvad der udgør disse melodier. De tre vigtigste faktorer, der kræves for at spille et tema er
- Bemærk værdi
- Bemærk Varighed
- Tempo
Vi har pitches.h- headerfilen til at afspille en hvilken som helst noteværdi , nu skal vi finde ud af dens specifikke varighed for at afspille den. Tempo er intet andet end hvor hurtigt melodien skal spilles. Når du kender noteværdien og notevarigheden, kan du bruge dem med tonen () som
tone (pinnavn, note værdi, note varighed);
For de toner, der spilles i denne vejledning, har jeg givet dig noten Værdi og notevarighed inde i "themes.h" -overskriftsfilen, hvor du kan afspille dem i dine projekter. Men hvis du har en bestemt tone i din mine, og du vil spille den i dit projekt, læs videre…. Ellers spring dette emne over og fald ned til det næste.
For at afspille en bestemt tone skal du hente noder for den pågældende musik og konvertere noder til Arduino-skitse ved at læse noteværdien og notevarigheden fra den. Hvis du er en musikalsk studerende, ville det være et stykke kage for dig, ellers brugte du lidt tid på at bryde hovedet som jeg gjorde. Men i slutningen af dagen, når din tone spiller på Piezo-summeren, finder du din indsats det værd.
Når du har haft noteværdien og notevarigheden, skal du indlæse dem i programmet inde i “themes.h” -overskriftsfilen som vist nedenfor
// ############### "" HE IS A PIRATE "Temasang af 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, 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_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, NOTE_4, NOTE_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,8,8,8,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}; // ########### Slutningen af Han er en piratsang ############## //
Ovenstående kodeblok viser noteværdien og notevarigheden af "Han er en pirat" -tema fra filmen Pirates of the Caribbean. Du kan tilføje dit tema på samme måde som dette.
Skematisk og hardware:
Skematisk af dette Arduino Tone Generator Project- projekt er vist i nedenstående figur:
Forbindelsen er ret simpel, vi har en Piezo-højttaler, der er forbundet til pin 8 og Arduino jord gennem en 1K modstand. Denne 1k modstand er en strømbegrænsende modstand, som bruges til at holde strømmen inden for de sikre grænser. Vi har også fire kontakter til at vælge den ønskede melodi. Den ene ende af kontakten er forbundet til jorden, og den anden ende er forbundet til henholdsvis pin 2, 3, 4 og 5. Kontakterne har pull up-modstande aktiveret internt ved hjælp af softwaren. Da kredsløbet er ret simpelt, kan det tilsluttes ved hjælp af et brødbræt som vist nedenfor:
Forklaring til Arduino-programmet:
Når du først har forstået konceptet, er Arduino-programmet ret ligetil. Den komplette kode gives i slutningen af vejledningen. Hvis du ikke er fortrolig med at tilføje headerfiler, kan du downloade koden som en ZIP-fil herfra og uploade den direkte til din Arduino.
Ovenstående to er de headerfiler, der skal tilføjes. “Pitches.h” bruges til at sidestille hver musiknote til en bestemt frekvens, og “themes.h” indeholder noteværdien og tonevarigheden for alle de fire toner.
#include "pitches.h" #include "themes.h"
Der oprettes en funktion til at afspille hver tone, når det er nødvendigt. Her, når funktionen Play_Pirates () kaldes "Han er en pirat", afspilles tonen. Denne funktion består af den tonefunktion, der producerer frekvensen ved pin nummer 8. NoTone (8) kaldes til at stoppe musikken, når den er spillet. Hvis du vil spille din egen tone, skal du ændre Pirates_note og Pirates_duration til de nye tone- og varighedsværdier, som du har gemt i “temaer.h” -værdien.
ugyldig Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // konverter varighed til tidsforsinkelsestone (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Her er 1.05 tempo, øg for at spille det langsommere forsinkelse (pauseBetweenNotes); noTone (8); }}
Ben 2, 3, 4 og 5 bruges til at vælge den bestemte tone, der skal afspilles. Disse ben holdes højt som standard ved hjælp af de interne trækmodstande ved hjælp af ovenstående kodelinje. Når der trykkes på knappen, trækkes den ned til jorden.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Nedenfor blok af kode bruges til at afspille sangen, når der trykkes på en knap. Den læser den digitale værdi for hver knap, og når den bliver lav (nul) antager den, at der trykkes på knappen og afspiller den respektive tone ved at kalde den ønskede funktion.
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 (); }
Arbejde med denne Melody Player Arduino Circuit:
Når din kode og hardware er klar, skal du blot brænde programmet ind i din Arduino, og du skal kunne afspille tonen ved blot at trykke på knapperne. Hvis du har problemer, skal du kigge på din serielle skærm til fejlfinding eller bruge kommentarsektionen til at rapportere problemet, og jeg hjælper dig gerne.
Den komplette bearbejdning af projektet vises i videoen nedenfor. Håber du nød projektet og ville bruge det i noget af dit projekt eller skabe en ny tone til dit projekt. Hvis ja, er du velkommen til at dele dit arbejde i kommentarsektionen.