Indholdsfortegnelse:

Digitaliser en sang med Arduino: 6 trin
Digitaliser en sang med Arduino: 6 trin

Video: Digitaliser en sang med Arduino: 6 trin

Video: Digitaliser en sang med Arduino: 6 trin
Video: Samsung Galaxy Trend S7560 digitizer problem 2024, November
Anonim
Digitaliser en sang med Arduino
Digitaliser en sang med Arduino

Jeg ville oprette et projekt, der kombinerede to af mine yndlingsfag: videnskab og musik. Jeg tænkte på alle de måder, hvorpå jeg kunne kombinere disse to domæner, og jeg tænkte, at det ville være interessant at lave et Arduino -spil Fur Elise, mens tonens tonehøjde blev vist i Hertz. Lad os nu begynde at bygge!

Du skal bruge en Arduino Uno eller Mega, en masse springkabler, en Piezo -summer, et brødbræt, en 16*2 LCD -skærm med alle viskernåle på plads og et 10k Potentiometer (du kan også høre dem blive omtalt som potmetre)). Det er bedst at få alle disse forsyninger samlet, før vi starter byggeriet.

Trin 1: Konverter musikalscoren til digitale noter: forsinkelsesværdier

Konverter musikalscoren til digitale noter: forsinkelsesværdier
Konverter musikalscoren til digitale noter: forsinkelsesværdier

Der er to trin til digital transskription af en note fra partituret til dens digitale ækvivalent. Først skal vi skrive den tid, noten varer i millisekunder. Jeg brugte et diagram fundet online til denne opgave. Baseret på om en note var en halv note, kvart note, ottende note osv., Transskriberede jeg notelængden til millisekunder. Du kan se disse tal i min kode som forsinkelsen (); funktion og tallet inden for parenteser vil være forsinkelsesværdien i millisekunder, vi bestemte i dette trin.

Trin 2: Konverter musikalscoren til digitale noter: Hertz -værdier

Konverter musikalscoren til digitale noter: Hertz -værdier
Konverter musikalscoren til digitale noter: Hertz -værdier

Inden jeg starter dette trin, lad mig definere nogle tekniske termer. "Værdien" af en note kan bruges i flæng med ordene "tonehøjde", "værdi" og "note". Nu skal du læse hver note af sangen fra partituret. Du bliver derefter nødt til at oversætte hver note til Hertz ved hjælp af en musik til Hertz -bord, som du nemt kan finde online. En ting at huske er, at midten C er angivet som C4 på bordet, og en oktav højere er C5 og så videre. Når disse noter alle er transskriberet til Hertz, placerer du værdierne i funktionstonen (x, y, z); hvor X er pinkoden eller const int, en måde at definere variabler på, som jeg vil forklare senere. Y vil være Hertz -værdien, som du lige har transskriberet, og Z vil være varigheden af noten i millisekunder afrundet til den nærmeste hundredel. Forsinkelsen(); værdier vil være notens varighed. Lad os nu designe kredsløbet, der kan afspille musikken.

Trin 3: Kredsløbsdesign

Kredsløbsdesign
Kredsløbsdesign

Nu hvor vi har oversat alle noterne til digitale værdier, som en computer kan forstå, er det tid til at bygge kredsløbet. Begynd med at tage et brødbræt og placer LCD -skærmen med den første pin (GND) i række 14. Placer summeren hvor som helst, og placer et potentiometer ved siden af den. Målet er at stille alt op, for at minimere rod i ledningerne. Placer Arduino ved siden af brødbrættet, og slut 5v -stiften til den positive skinne på brødbrættet og jordstiften til den negative skinne. Nu er vi klar til at forbinde jumpere mellem Arduino og komponenterne.

Lad os nu tale om stifterne på LCD'et, og hvordan du kabler dem.

GND står for jorden, dette er den negative ledning i jævnstrøm. Led GND til den negative skinne på brødbrættet.

VCC står for Voltage at the Common Collector, og det er her du tilslutter din 5 volt strømkilde (den positive power rail).

VO står for Kontrast, led dette til den midterste pin på potentiometeret. Tilslut potentiometerets venstre ben til den positive strømskinne og den højre stift til jordstrømskinnen.

RS står for Register Select, og dette bruges af Arduino til at fortælle displayet, hvor data skal gemmes. Tilslut denne pin til pin 12 på Arduino.

RW står for Read/Write pin, som Arduino bruger til at kontrollere, om skærmen viser, hvad du har programmeret den til at vise. Tilslut denne pin til den negative skinne på brødbrættet.

E står for Enable, som fortæller LCD'et, hvilke pixels der skal aktiveres (tændes) eller deaktiveres (slukkes). Tilslut denne pin til Arduino pin 11.

D4, D5, D6 og D7 er displaynåle, der styrer de tegn og bogstaver, der vises. Tilslut dem til henholdsvis Arduino pins 5, 4, 3 og 2.

Pin A, undertiden mærket LED, er LED -anoden til baggrundsbelysningen. Tilslut dette til den positive strømskinne med en ledning eller med en 220-ohm modstand. Modstanden er bedre til længere brug, da den skåner LCD'et, men hvis enheden ikke skal bruges dag og nat, behøver du ikke modstanden.

Pin K, undertiden også (forvirrende) mærket LED, er LED jordstift. Tilslut dette til jorden power rail.

Trin 4: Upload af kode: Sådan gør du

Slut din Arduino til din computers USB. Upload følgende kode ved hjælp af Arduino IDE -programmereren.

#omfatte

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

ugyldig opsætning () {

// konfigurer LCD's antal kolonner og rækker: lcd.begin (16, 2); // Udskriv en besked til LCD -skærmen. 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, sidste i.3 sec lcd.print (" 329.63 "); // vis en meddelelse på LCD" 329.63"

forsinkelse (350); // forsinkelse i.35 sekunder

lcd.clear (); // ryd LCD og nulstil til næste besked // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // line60 // helptave // avrdude.failure.eeprom // afspil d3 tone (10, 146,83, 300); lcd.print ("146,63"); forsinkelse (350); lcd.clear (); // afspil f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 300); lcd.print ("220"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear ();

// afspil e3

tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // afspil g3# tone (10, 207,65, 300); lcd.print ("207,65"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 900); lcd.print ("261,63"); forsinkelse (1000); lcd.clear (); // afspil e tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // afspil d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (400); lcd.clear (); // afspil f3 tone (10, 174,61, 300); // eeprom 20--6 yesno, flash 65--0 noyes lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 300); lcd.print ("220,0"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // afspil f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 900); lcd.print ("329,63"); forsinkelse (1000); lcd.clear (); // afspil g3 tone (10, 196, 300); lcd.print ("196,0"); forsinkelse (400); lcd.clear (); // afspil f4 tone (10, 349,23, 300); lcd.print ("349,23"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,23, 300); lcd.print ("329,23"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,63, 900); lcd.print ("293,63"); forsinkelse (1000); lcd.clear (); // afspil e3 tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,63, 300); lcd.print ("293,63"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 900); lcd.print ("261,63"); forsinkelse (1000); lcd.clear (); // afspil d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,63, 300); lcd.print ("293,63"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (350); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (350); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // afspil d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (350); lcd.clear (); // afspil f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 300); lcd.print ("220,0"); forsinkelse (400); // afspil b3 lcd.clear (); tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // afspil e3 tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // afspil g#3 tone (10, 207,65, 300); lcd.print ("207,65"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 900); lcd.print ("261,63"); forsinkelse (1000); forsinkelse (300); lcd.clear (); // afspil e3 tone (10, 164,81, 300); lcd.print ("164,81"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil d4# tone (10, 311.13, 300); lcd.print ("311.13"); forsinkelse (400); lcd.clear (); // afspil e4 tone (10, 329,63, 300); lcd.print ("329,63"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil d4 tone (10, 293,66, 300); lcd.print ("293,66"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); // afspil d3 tone (10, 146,83, 300); lcd.print ("146,83"); forsinkelse (400); lcd.clear (); // afspil f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 300); lcd.print ("220,0"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 900); lcd.print ("246,94"); forsinkelse (1000); lcd.clear (); // afspil f3 tone (10, 174,61, 300); lcd.print ("174,61"); forsinkelse (400); lcd.clear (); // afspil c4 tone (10, 261,63, 300); lcd.print ("261,63"); forsinkelse (400); lcd.clear (); // afspil b3 tone (10, 246,94, 300); lcd.print ("246,94"); forsinkelse (400); lcd.clear (); // afspil a3 tone (10, 220, 900); lcd.print ("220,0"); forsinkelse (1000); lcd.clear (); }

Trin 5: Upload af kode: Hvad betyder alt det?

Lad os definere nogle funktioner på engelsk, så du kan forstå koden.

tone (x, y, z); = afspil en tone med en tonehøjde på y Hertz, til en summer ved pin x, i z millisekunder.

lcd.print ("XYZ"); = udskriv en besked med tegnene XYZ til LCD -skærmen. (f.eks. vis Hertz -tonehøjde)

forsinkelse (x); = pause i x millisekunder.

const int X = Y = indstil en konstant variabel X til pin Y, og brug enten X eller Y til at tildele opgaver til enheden.

lcd.clear (); = ryd LCD -skærmen og nulstil for et nyt display

pinMode (X, OUTPUT); = indstil pin X til udgangstilstand

Når du forstår alle disse funktioner, kan du nemt erstatte variablerne med de data, du indsamler, når du oversætter en sang, og du kan derefter kode din egen sang!

Trin 6: Færdig !

Færdig!!!
Færdig!!!
Færdig!!!
Færdig!!!

Du har enten en Arduino, der spiller Fur Elise og viser noteværdierne i Hertz, eller du har lavet en Arduino, der afspiller melodien til den sang, du valgte, og viser tekst, som du ønskede at vise. Tak fordi du besøgte denne vejledning, og jeg håber dig dette projekt på Arduino.

Anbefalede: