Innholdsfortegnelse:
- Trinn 1: Konverter musikalscoren til digitale notater: forsinkelsesverdier
- Trinn 2: Konverter musikalscoren til digitale notater: Hertz -verdier
- Trinn 3: Kretsdesign
- Trinn 4: Last opp kode: Slik gjør du det
- Trinn 5: Last opp kode: Hva betyr alt dette?
- Trinn 6: Ferdig !
Video: Digitaliser en sang med Arduino: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Jeg ønsket å lage et prosjekt som kombinerte to av mine favorittfag: vitenskap og musikk. Jeg tenkte på alle måtene jeg kunne kombinere disse to domenene på, og jeg tenkte at det ville være interessant å lage et Arduino -spill Fur Elise mens jeg viste tonehøyden på notatet i Hertz. La oss begynne å bygge!
Du trenger en Arduino Uno eller Mega, mange hoppekabler, en Piezo -summer, et brødbrett, en 16*2 LCD -skjerm med alle viskerpinner på plass og et 10k potensiometer (du kan også høre at de blir referert til som potmetre)). Det er best å få alt dette utstyret sammen før vi starter byggingen.
Trinn 1: Konverter musikalscoren til digitale notater: forsinkelsesverdier
Det er to trinn for å digitalt transkribere et notat fra partituret til dets digitale ekvivalent. Først må vi skrive tiden notatet varer i millisekunder. Jeg brukte et diagram som ble funnet på nettet for denne oppgaven. Basert på om en note var en halv note, kvart note, åttende note, etc, transkriberte jeg notatlengden til millisekunder. Du kan se disse tallene i koden min som forsinkelsen (); funksjon og tallet i parentes vil være forsinkelsesverdien i millisekunder vi bestemte i dette trinnet.
Trinn 2: Konverter musikalscoren til digitale notater: Hertz -verdier
Før jeg starter dette trinnet, la meg definere noen tekniske termer. "Verdien" til en lapp kan brukes om hverandre med ordene "tonehøyde", "verdi" og "notat". Nå må du lese hver tone av sangen fra partituret. Du må deretter oversette hver note til Hertz ved å bruke en musikk til Hertz -bord, som du enkelt kan finne online. En ting å huske er at midten C er oppført som C4 på bordet, og en oktav høyere er C5, og så videre. Når disse notatene alle er transkribert til Hertz, plasserer du verdiene i funksjonstonen (x, y, z); hvor X er pinnummeret eller const int, en måte å definere variabler på som jeg skal forklare senere. Y vil være Hertz -verdien du nettopp transkriberte, og Z vil være varigheten av notatet i millisekunder avrundet til nærmeste hundredel. Utsettelsen(); verdier vil være varigheten av notatet. La oss nå designe kretsen som kan spille musikken.
Trinn 3: Kretsdesign
Nå som vi har oversatt alle notatene til digitale verdier som en datamaskin kan forstå, er det på tide å bygge kretsen. Begynn med å ta et brødbrett og plasser LCD -skjermen med den første pinnen (GND) på rad 14. Plasser summeren hvor du vil, og plasser et potensiometer ved siden av den. Målet er å stille alt opp, for å minimere rot i ledningene. Plasser Arduino ved siden av brødbrettet, og koble 5v -tappen til den positive skinnen på brødbrettet, og jordnålen til den negative skinnen. Nå er vi klare til å koble hoppere mellom Arduino og komponentene.
La oss nå snakke om pinnene på LCD -skjermen, og hvordan du kobler dem.
GND står for bakken, dette er den negative ledningen i likestrøm. Koble GND til den negative skinnen på brødbrettet.
VCC står for Voltage at Common Collector, og det er her du kobler til din 5-volts strømkilde (den positive strømskinnen).
VO står for Kontrast, led dette til den midtre pinnen på potensiometeret. Koble den venstre tappen på potensiometeret til den positive kraftskinnen, og den høyre tappen til den jordede skinnen.
RS står for Register Select, og dette brukes av Arduino for å fortelle skjermen hvor data skal lagres. Koble denne pinnen til pinne 12 på Arduino.
RW står for Read/Write pin, som Arduino bruker for å sjekke om skjermen viser det du har programmert den til å vise. Koble denne pinnen til den negative skinnen på brødbrettet.
E står for Aktiver, som forteller LCD -skjermen hvilke piksler som skal aktiveres (slås på) eller deaktiveres (slås av). Koble denne pinnen til Arduino pin 11.
D4, D5, D6 og D7 er Display pins som styrer tegnene og bokstavene som vises. Koble dem til henholdsvis Arduino -pinner 5, 4, 3 og 2.
Pin A, noen ganger merket LED, er LED -anoden for bakgrunnsbelysningen. Koble dette til den positive kraftskinnen med en ledning eller med en 220-ohm motstand. Motstanden er bedre for lengre bruk da den skåner LCD -skjermen, men hvis enheten ikke skal brukes dag og natt, trenger du ikke motstanden.
Pin K, noen ganger også (forvirrende) merket LED, er LED -bakkenålen. Koble dette til bakkenergiskinnen.
Trinn 4: Last opp kode: Slik gjør du det
Koble Arduino til datamaskinens USB. Last opp følgende kode ved hjelp av Arduino IDE -programmereren.
#inkludere
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
ugyldig oppsett () {
// sette opp LCD -antallet kolonner og rader: lcd.begin (16, 2); // Skriv ut en melding til LCD -skjermen. lcd.print ("Hertz Pitch:!"); forsinkelse (1000); void loop () {// play e4 delay (600); // pause i 0,6 sekunder tone (10, 329,63, 300); // play e til summeren ved pin 10, siste i.3 sec lcd.print (" 329,63 "); // vise en melding på LCD" 329,63"
forsinkelse (350); // forsinkelse i.35 sekunder
lcd.clear (); // tøm LCD og tilbakestill for neste melding // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // line60 // helpsave // avrdude.failure.eeprom // play d3 tone (10, 146,83, 300); lcd.print ("146,63"); forsinkelse (350); lcd.clear (); // spill f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 300); lcd.print ("220"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear ();
// spill e3
tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // spill g3# tone (10, 207,65, 300); lcd.print ("207,65"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 900); lcd.print ("261,63"); forsinkelse (1000); lcd.clear (); // spill e tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // spill d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (400); lcd.clear (); // spill f3 tone (10, 174,61, 300); // eeprom 20--6 yesno, flash 65--0 noyes lcd.print ("174.61"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 300); lcd.print ("220,0"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // spill f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 900); lcd.print ("329,63"); forsinkelse (1000); lcd.clear (); // spill g3 tone (10, 196, 300); lcd.print ("196,0"); forsinkelse (400); lcd.clear (); // spill f4 tone (10, 349,23, 300); lcd.print ("349,23"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,23, 300); lcd.print ("329,23"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,63, 900); lcd.print ("293,63"); forsinkelse (1000); lcd.clear (); // spill e3 tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,63, 300); lcd.print ("293,63"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 900); lcd.print ("261,63"); forsinkelse (1000); lcd.clear (); // spill d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,63, 300); lcd.print ("293,63"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // spill d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (350); lcd.clear (); // spill f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 300); lcd.print ("220,0"); forsinkelse (400); // spill b3 lcd.clear (); tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // spill e3 tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // spill g#3 tone (10, 207,65, 300); lcd.print ("207,65"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 900); lcd.print ("261,63"); forsinkelse (1000); forsinkelse (300); lcd.clear (); // spill e3 tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // spill e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // spill d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (400); lcd.clear (); // spill f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 300); lcd.print ("220,0"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // spill f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // spill c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // spill b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // spill a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); }
Trinn 5: Last opp kode: Hva betyr alt dette?
La oss definere noen funksjoner på engelsk, slik at du kan forstå koden.
tone (x, y, z); = spill en tone med en tonehøyde på y Hertz, til en summer ved pin x, i z millisekunder.
lcd.print ("XYZ"); = skriv ut en melding med tegnene XYZ til LCD -skjermen. (f.eks. vise Hertz -tonehøyden)
forsinkelse (x); = pause i x millisekunder.
const int X = Y = sett en konstant variabel X til pin Y, og bruk enten X eller Y til å tilordne oppgaver til enheten.
lcd.clear (); = tøm LCD -skjermen og tilbakestill for en ny skjerm
pinMode (X, OUTPUT); = sett pin X for utgangsmodus
Når du forstår alle disse funksjonene, kan du enkelt erstatte variablene med dataene du samler inn når du oversetter en sang, og du kan deretter kode din egen sang!
Trinn 6: Ferdig !
Du har enten en Arduino som spiller Fur Elise og viser notatverdiene i Hertz, eller du har laget en Arduino som spiller melodien til sangen du valgte, og viser tekst du ønsket å vise. Takk for at du besøkte denne opplæringen, og jeg håper deg dette prosjektet på Arduino.
Anbefalt:
Digitaliser Hi-fi-systemet: 6 trinn (med bilder)
Digitaliser Hi-fi-systemet ditt: I denne instruksjonsboken vil jeg vise deg hvordan jeg digitaliserte mitt analoge hi-fi-system og dermed realiserte webradio, tilgang til musikksamlingen lagret på NAS-en min, etc. Implementeringen er hovedsakelig basert på en Bringebær Pi, en Hifiberry -lue og et snev
Money Heist BELLA CIAO -sang i Arduino Uno: 9 trinn (med bilder)
Money Heist BELLA CIAO Song i Arduino Uno: I denne opplæringen vil jeg vise deg hvordan du kan spille Money Heist Song Bella Ciao i en hvilken som helst Arduino ved hjelp av Piezoelectric summer. Dette kule prosjektet er dedikert til alle Money Heist -fans over hele verden. Så, la oss komme i gang
Slik spiller du en sang på din Yamaha EZ-220: 5 trinn
Slik spiller du en sang på din Yamaha EZ-220: Disse trinnene hjelper deg med å spille sangen din ved hjelp av sangboken
Slik koder du en sang ved hjelp av noter i Sonic Pi: 5 trinn
Slik koder du en sang ved hjelp av noter i Sonic Pi: Denne instruksen kommer til å skissere noen grunnleggende trinn og kodebiter som skal brukes når du koder en sang i Sonic Pi ved hjelp av noter! Det er en million andre kodebiter for å prøve å tilføre smak til det ferdige stykket ditt, så sørg for å også leke deg rundt
Spille inn en sang på en iPad: 11 trinn (med bilder)
Spille inn en sang på en iPad: En venn av meg spurte nylig hvordan hun kunne spille inn noen av sangene hennes med bare en gitar og en iPad. Jeg spurte henne om hun hadde annen opptaksmaskinvare, for eksempel en mikrofon og et opptaksgrensesnitt. Dessverre var svaret nei, og hun er ikke