Sadržaj:

Digitalizacija pjesme s Arduinom: 6 koraka
Digitalizacija pjesme s Arduinom: 6 koraka

Video: Digitalizacija pjesme s Arduinom: 6 koraka

Video: Digitalizacija pjesme s Arduinom: 6 koraka
Video: Creed - Motivation Training 2015 [HD] 2024, Novembar
Anonim
Digitalizirajte pjesmu s Arduinom
Digitalizirajte pjesmu s Arduinom

Htela sam da napravim projekat koji je kombinovao dva moja omiljena predmeta: nauku i muziku. Razmišljao sam o svim načinima na koje mogu kombinirati ova dva domena, i mislio sam da bi bilo zanimljivo napraviti Arduino da igra Fur Elise dok prikazuje visinu note u Hertzu. A sada počnimo graditi!

Trebat će vam jedan Arduino Uno ili Mega, puno kratkospojnih kabela, Piezo zujalica, matična ploča, LCD ekran veličine 16*2 sa svim iglama brisača i potenciometar od 10 k (možete ih čuti i kao potmetre)). Najbolje je prikupiti sve ove zalihe prije nego započnemo izgradnju.

Korak 1: Pretvorite notni zapis u digitalne note: vrijednosti kašnjenja

Pretvorite notni zapis u digitalne note: vrijednosti kašnjenja
Pretvorite notni zapis u digitalne note: vrijednosti kašnjenja

Postoje dva koraka za digitalno prepisivanje note iz partiture u njen digitalni ekvivalent. Prvo ćemo morati zapisati vrijeme trajanja bilješke u milisekundama. Za ovaj sam zadatak upotrijebio grafikon koji je pronađen na internetu. Na osnovu toga da li je nota pola note, četvrtina, osma nota itd., Prepisao sam dužinu note u milisekunde. Ove brojeve možete vidjeti u mom kodu kao delay (); funkcija i broj unutar zagrada bit će vrijednost kašnjenja u milisekundama koju smo odredili u ovom koraku.

Korak 2: Pretvorite muzičku partituru u digitalne note: Hertz vrijednosti

Pretvorite notni zapis u digitalne note: Hertz vrijednosti
Pretvorite notni zapis u digitalne note: Hertz vrijednosti

Prije nego započnem ovaj korak, dopustite mi da definiram neke tehničke pojmove. "Vrijednost" note može se naizmjenično koristiti s riječima "visina tona", "vrijednost" i "nota". Sada morate pročitati svaku notu pjesme iz partiture. Zatim ćete morati prevesti svaku notu u Hertz koristeći muziku na Hertz stolu, koju možete lako pronaći na internetu. Treba zapamtiti da je srednji C naveden na tablici kao C4, a za oktavu veći je C5 itd. Nakon što se sve bilješke prepišu u Hertz, vrijednosti ćete postaviti u ton funkcije (x, y, z); gdje je X pin broj ili const int, način definiranja varijabli koji ću objasniti kasnije. Y će biti vrijednost Herca koju ste upravo prepisali, a Z će biti trajanje note u milisekundama zaokruženo na najbližu stotinu. The delay (); vrijednosti će biti trajanje note. Sada, dizajnirajmo krug koji može reproducirati muziku.

Korak 3: Dizajn kola

Dizajn kola
Dizajn kola

Sada kada smo sve bilješke preveli u digitalne vrijednosti koje računar može razumjeti, vrijeme je za izgradnju kola. Počnite tako što ćete uzeti ploču za postavljanje osnove i postaviti LCD ekran s prvom iglom (GND) u red 14. Postavite zujalicu gdje god želite, a uz nju postavite potenciometar. Cilj je sve poravnati, kako bi se smanjilo nakupljanje žica. Postavite Arduino pored matične ploče i spojite iglu od 5 V na pozitivnu vodilicu ploče, a iglu za uzemljenje na negativnu vodilicu. Sada smo spremni za spajanje kratkospojnika između Arduina i komponenti.

Hajde sada razgovarati o pinovima na LCD -u i kako ih spojiti.

GND označava uzemljenje, ovo je negativna žica u istosmjernoj struji. Spojite GND na negativnu vodilicu matične ploče.

VCC označava napon na zajedničkom kolektoru, a tu spajate 5-voltni izvor napajanja (pozitivna razvodna traka).

VO označava kontrast, povežite ga sa srednjim pinom potenciometra. Priključite lijevi pin potenciometra na pozitivnu razvodnu žicu, a desnu iglu na uzemljenu razvodnu šinu.

RS znači Register Select, a to koristi Arduino za prikaz na ekranu gdje treba pohraniti podatke. Spojite ovaj pin na pin 12 na Arduinu.

RW je kratica za Read/Write pin, koju Arduino koristi za provjeru prikazuje li ekran ono što ste programirali za prikaz. Spojite ovaj pin na negativnu vodilicu na ploči.

E označava Enable, koji LCD -u govori koje piksele treba omogućiti (uključiti) ili onemogućiti (isključiti). Spojite ovaj pin na Arduino pin 11.

D4, D5, D6 i D7 su prikazivači koji kontroliraju prikazane znakove i slova. Spojite ih na Arduino pinove 5, 4, 3 i 2, respektivno.

Pin A, ponekad označen kao LED, je LED anoda za pozadinsko osvjetljenje. Spojite ga na pozitivni vod sa žicom ili s otpornikom od 220 ohma. Otpornik je bolji za dužu upotrebu jer štedi LCD, ali ako uređaj nećete koristiti danju i noću, otpornik vam ne treba.

Pin K, ponekad (zbunjujuće) označen sa LED, je LED uzemljenje LED. Spojite ovo na uzemljenje.

Korak 4: Prijenos koda: How-To

Uključite svoj Arduino u USB računar. Prenesite sljedeći kod pomoću Arduino IDE programatora.

#include

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

void setup () {

// postavljanje broja stupaca i redova LCD -a: lcd.begin (16, 2); // Odštampajte poruku na LCD ekranu. lcd.print ("Hertz korak:!"); kašnjenje (1000); void loop () {// reprodukcija e4 kašnjenja (600); // pauziranje za 0,6 sekundi ton (10, 329,63, 300); // reprodukcija e do zujalice na pinu 10, traje 0,3 sekunde lcd.print (" 329.63 "); // prikazuje poruku na LCD -u" 329.63"

delay (350); // kašnjenje 0,35 sekundi

lcd.clear (); // očisti LCD i resetira za sljedeću poruku // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (350); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (350); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (350); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (350); lcd.clear (); // pusti b3 ton (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.66, 300); lcd.print ("293.66"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 900); lcd.print ("220.0"); kašnjenje (1000); lcd.clear (); // line60 // helpave // avrdude.failure.eeprom // pusti d3 ton (10, 146.83, 300); lcd.print ("146.63"); kašnjenje (350); lcd.clear (); // reproduciranje f3 tona (10, 174.61, 300); lcd.print ("174.61"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 300); lcd.print ("220"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 900); lcd.print ("246.94"); kašnjenje (1000); lcd.clear ();

// pusti e3

ton (10, 164.81, 300); lcd.print ("164.81"); kašnjenje (400); lcd.clear (); // pusti g3# ton (10, 207.65, 300); lcd.print ("207.65"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 900); lcd.print ("261.63"); kašnjenje (1000); lcd.clear (); // pusti e ton (10, 164.81, 300); lcd.print ("164.81"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // reproduciranje b3 tona (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.66, 300); lcd.print ("293.66"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 900); lcd.print ("220.0"); kašnjenje (1000); lcd.clear (); // pusti d3 ton (10, 146.83, 300); lcd.print ("146.83"); kašnjenje (400); lcd.clear (); // reproduciranje f3 tona (10, 174.61, 300); // eeprom 20--6 yesno, flash 65-00 noyes lcd.print ("174.61"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 300); lcd.print ("220.0"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 900); lcd.print ("246.94"); kašnjenje (1000); lcd.clear (); // reproduciranje f3 tona (10, 174.61, 300); lcd.print ("174.61"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // reproduciranje b3 tona (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 900); lcd.print ("220.0"); kašnjenje (1000); lcd.clear (); // pusti b3 ton (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.66, 300); lcd.print ("293.66"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 900); lcd.print ("329.63"); kašnjenje (1000); lcd.clear (); // pusti g3 ton (10, 196, 300); lcd.print ("196.0"); kašnjenje (400); lcd.clear (); // reproduciranje f4 tona (10, 349.23, 300); lcd.print ("349.23"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.23, 300); lcd.print ("329.23"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.63, 900); lcd.print ("293.63"); kašnjenje (1000); lcd.clear (); // pusti e3 ton (10, 164.81, 300); lcd.print ("164.81"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.63, 300); lcd.print ("293.63"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 900); lcd.print ("261.63"); kašnjenje (1000); lcd.clear (); // pusti d3 ton (10, 146.83, 300); lcd.print ("146.83"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.63, 300); lcd.print ("293.63"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 900); lcd.print ("246.94"); kašnjenje (1000); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (350); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (350); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (350); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (350); lcd.clear (); // pusti b3 ton (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.66, 300); lcd.print ("293.66"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 900); lcd.print ("220.0"); kašnjenje (1000); lcd.clear (); // pusti d3 ton (10, 146.83, 300); lcd.print ("146.83"); kašnjenje (350); lcd.clear (); // reproduciranje f3 tona (10, 174.61, 300); lcd.print ("174.61"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 300); lcd.print ("220.0"); kašnjenje (400); // pusti b3 lcd.clear (); ton (10, 246.94, 900); lcd.print ("246.94"); kašnjenje (1000); lcd.clear (); // pusti e3 ton (10, 164.81, 300); lcd.print ("164.81"); kašnjenje (400); lcd.clear (); // pusti g#3 ton (10, 207.65, 300); lcd.print ("207.65"); kašnjenje (400); lcd.clear (); // reproduciranje b3 tona (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 900); lcd.print ("261.63"); kašnjenje (1000); kašnjenje (300); lcd.clear (); // pusti e3 ton (10, 164.81, 300); lcd.print ("164.81"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti d4# ton (10, 311.13, 300); lcd.print ("311.13"); kašnjenje (400); lcd.clear (); // pusti e4 ton (10, 329.63, 300); lcd.print ("329.63"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti d4 ton (10, 293.66, 300); lcd.print ("293.66"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 900); lcd.print ("220.0"); kašnjenje (1000); lcd.clear (); // pusti d3 ton (10, 146.83, 300); lcd.print ("146.83"); kašnjenje (400); lcd.clear (); // reproduciranje f3 tona (10, 174.61, 300); lcd.print ("174.61"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 300); lcd.print ("220.0"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 900); lcd.print ("246.94"); kašnjenje (1000); lcd.clear (); // reproduciranje f3 tona (10, 174.61, 300); lcd.print ("174.61"); kašnjenje (400); lcd.clear (); // pusti c4 ton (10, 261.63, 300); lcd.print ("261.63"); kašnjenje (400); lcd.clear (); // pusti b3 ton (10, 246.94, 300); lcd.print ("246.94"); kašnjenje (400); lcd.clear (); // pusti a3 ton (10, 220, 900); lcd.print ("220.0"); kašnjenje (1000); lcd.clear (); }

Korak 5: Učitavanje koda: Šta sve to znači?

Definirajmo neke funkcije na engleskom jeziku kako biste razumjeli kôd.

ton (x, y, z); = pusti ton sa visinom y Hertz, do zujalice na pinu x, za z milisekunde.

lcd.print ("XYZ"); = odštampajte poruku sa znakovima XYZ na LCD ekranu. (npr. prikazati Hertz visinu)

kašnjenje (x); = pauza x milisekundi.

const int X = Y = postavite konstantnu varijablu X na pin Y i koristite X ili Y za dodjeljivanje zadataka uređaju.

lcd.clear (); = očistite LCD ekran i resetujte novi ekran

pinMode (X, OUTPUT); = postavite pin X za način rada izlaza

Kada shvatite sve ove funkcije, možete jednostavno zamijeniti varijable podacima koje prikupljate pri prevođenju pjesme, a zatim možete kodirati svoju pjesmu!

Korak 6: Završeno !

Gotovo !!!
Gotovo !!!
Gotovo !!!
Gotovo !!!

Ili imate Arduino koji svira Fur Elise i prikazuje notne vrijednosti u Hertzima, ili ste napravili Arduino koji svira melodiju pjesme koju ste odabrali i prikazuje tekst koji želite prikazati. Hvala vam što ste posjetili ovaj vodič i nadam se ovom projektu na Arduinu.

Preporučuje se: