Cuprins:

Digitizați o melodie cu Arduino: 6 pași
Digitizați o melodie cu Arduino: 6 pași

Video: Digitizați o melodie cu Arduino: 6 pași

Video: Digitizați o melodie cu Arduino: 6 pași
Video: Digitizați-vă colecția de filme DVD 2024, Noiembrie
Anonim
Digitizați o melodie cu Arduino
Digitizați o melodie cu Arduino

Am vrut să creez un proiect care să combine două dintre subiectele mele preferate: știința și muzica. M-am gândit la toate modalitățile prin care aș putea combina aceste două domenii și, m-am gândit că ar fi interesant să faci un Arduino să cânte Fur Elise în timp ce afișezi tonul notei în Hertz. Acum, să începem să construim!

Veți avea nevoie de un Arduino Uno sau Mega, o mulțime de cabluri jumper, un buzzer Piezo, o placă de măsurare, un ecran LCD de 16 * 2 cu toate știfturile ștergătorului în poziție și un Potențiometru de 10k (le puteți auzi, de asemenea, fiind numite potmetre). Cel mai bine este să adunați toate aceste consumabile înainte de a începe construcția.

Pasul 1: convertiți scorul muzical în note digitale: întârziere valori

Convertiți scorul muzical în note digitale: întârziere valori
Convertiți scorul muzical în note digitale: întârziere valori

Există doi pași pentru transcrierea digitală a unei note din scor în echivalentul său digital. În primul rând, va trebui să scriem timpul în care nota durează în milisecunde. Am folosit o diagramă găsită online pentru această sarcină. Având în vedere dacă o notă era o jumătate de notă, o notă de sfert, o notă a opta etc., am transcris lungimea notei în milisecunde. Puteți vedea aceste numere în codul meu ca delay (); funcția și numărul dintre paranteze vor fi valoarea de întârziere în milisecunde pe care am determinat-o în acest pas.

Pasul 2: convertiți scorul muzical în note digitale: valori Hertz

Convertiți scorul muzical în note digitale: valori Hertz
Convertiți scorul muzical în note digitale: valori Hertz

Înainte de a începe acest pas, permiteți-mi să definesc câțiva termeni tehnici. „Valoarea” unei note poate fi utilizată interschimbabil cu cuvintele „pitch”, „value” și „note”. Acum, trebuie să citiți fiecare notă a melodiei din partitura. Va trebui apoi să traduceți fiecare notă în Hertz folosind o muzică în masa Hertz, pe care o puteți găsi cu ușurință online. Un lucru de reținut este că mijlocul C este listat ca C4 pe masă, iar o octavă mai mare este C5 și așa mai departe. Odată ce aceste note sunt transcrise în Hertz, veți plasa valorile în tonul funcției (x, y, z); unde X este numărul PIN sau const int, un mod de a defini variabilele pe care le voi explica mai târziu. Y va fi valoarea Hertz pe care tocmai ați transcris-o, iar Z va fi durata notei în milisecunde rotunjită la cea mai apropiată sutime. Intarzierea(); valorile vor fi durata notei. Acum, să proiectăm circuitul care poate reda muzica.

Pasul 3: Proiectarea circuitului

Proiectarea circuitului
Proiectarea circuitului

Acum că am tradus toate notele în valori digitale pe care un computer le poate înțelege, este timpul să construim circuitul. Începeți prin a lua o placă de prindere și a plasa ecranul LCD cu primul pin (GND) în rândul 14. Așezați buzzerul oriunde doriți și puneți un potențiometru lângă el. Scopul este de a alinia totul, pentru a minimiza aglomerarea firelor. Așezați Arduino lângă panou și conectați pinul de 5v la șina pozitivă a panoului și pinul de masă la șina negativă. Acum suntem gata să conectăm jumperii între Arduino și componente.

Acum, să vorbim despre pinii de pe ecranul LCD și despre cum să le conectăm.

GND reprezintă pământ, acesta este firul negativ în curent continuu. Sârmă GND la șina negativă a panoului.

VCC înseamnă Voltage at the Common Collector, iar aici vă conectați sursa de alimentare de 5 volți (șina de alimentare pozitivă).

VO înseamnă Contrast, conectați-l la pinul central al potențiometrului. Conectați știftul stâng al potențiometrului la șina de putere pozitivă și știftul drept la șina de putere la sol.

RS înseamnă Register Select și este folosit de Arduino pentru a indica afișajului unde trebuie să stocheze datele. Conectați acest pin la pinul 12 de pe Arduino.

RW înseamnă pinul de citire / scriere, pe care Arduino îl folosește pentru a verifica dacă ecranul afișează ceea ce ați programat să afișeze. Conectați acest pin la șina negativă de pe panou.

E înseamnă Enable, care indică ecranului LCD ce pixeli trebuie să activeze (porniți) sau dezactivați (opriți). Conectați acest pin la pinul Arduino 11.

D4, D5, D6 și D7 sunt pini de afișare care controlează caracterele și literele afișate. Conectați-le la pinii Arduino 5, 4, 3 și respectiv 2.

Pinul A, denumit uneori LED, este anodul LED pentru iluminarea din spate. Conectați acest lucru la șina de alimentare pozitivă cu un fir sau cu un rezistor de 220 ohmi. Rezistorul este mai bun pentru o utilizare mai lungă, deoarece economisește ecranul LCD, dar dacă dispozitivul nu va fi utilizat zi și noapte, nu aveți nevoie de rezistor.

Pinul K, uneori și LED (confuz) etichetat, este pinul de masă cu LED-uri. Conectați acest lucru la șina de alimentare la sol.

Pasul 4: Încărcarea codului: proceduri

Conectați Arduino la USB-ul computerului. Încărcați următorul cod folosind programatorul IDE Arduino.

#include

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

configurare nulă () {

// configurați numărul LCD de coloane și rânduri: lcd.begin (16, 2); // Imprimați un mesaj pe ecranul LCD. lcd.print ("Hertz Pitch:!"); întârziere (1000); void loop () {// redare e4 întârziere (600); // pauză pentru ton de 0,6 secunde (10, 329,63, 300); // redare e la buzzer la pinul 10, ultima pentru.3 secunde lcd.print (" 329.63 "); // afișează un mesaj pe ecranul LCD" 329.63"

delay (350); // delay pentru.35 secunde

lcd.clear (); // ștergeți ecranul LCD și resetați pentru următorul mesaj // redați tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (350); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (350); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (350); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (350); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,66, 300); lcd.print ("293,66"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 900); lcd.print ("220.0"); întârziere (1000); lcd.clear (); // line60 // helpsave // avrdude.failure.eeprom // redarea tonului d3 (10, 146.83, 300); lcd.print ("146,63"); întârziere (350); lcd.clear (); // redă tonul f3 (10, 174,61, 300); lcd.print ("174,61"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 300); lcd.print ("220"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 900); lcd.print ("246,94"); întârziere (1000); lcd.clear ();

// joacă e3

ton (10, 164,81, 300); lcd.print ("164,81"); întârziere (400); lcd.clear (); // redă tonul g3 # (10, 207,65, 300); lcd.print ("207,65"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 900); lcd.print ("261,63"); întârziere (1000); lcd.clear (); // redă tonul (10, 164,81, 300); lcd.print ("164,81"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,66, 300); lcd.print ("293,66"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 900); lcd.print ("220.0"); întârziere (1000); lcd.clear (); // redă tonul d3 (10, 146,83, 300); lcd.print ("146,83"); întârziere (400); lcd.clear (); // redă tonul f3 (10, 174,61, 300); // eeprom 20-6 da, nu, flash 65-0 noyes lcd.print ("174.61"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 300); lcd.print ("220.0"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 900); lcd.print ("246,94"); întârziere (1000); lcd.clear (); // redă tonul f3 (10, 174,61, 300); lcd.print ("174,61"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 900); lcd.print ("220.0"); întârziere (1000); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,66, 300); lcd.print ("293,66"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 900); lcd.print ("329,63"); întârziere (1000); lcd.clear (); // redă tonul g3 (10, 196, 300); lcd.print ("196.0"); întârziere (400); lcd.clear (); // redă tonul f4 (10, 349.23, 300); lcd.print ("349.23"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329.23, 300); lcd.print ("329.23"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,63, 900); lcd.print ("293,63"); întârziere (1000); lcd.clear (); // redă tonul e3 (10, 164,81, 300); lcd.print ("164,81"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,63, 300); lcd.print ("293,63"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 900); lcd.print ("261,63"); întârziere (1000); lcd.clear (); // redă tonul d3 (10, 146,83, 300); lcd.print ("146,83"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,63, 300); lcd.print ("293,63"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 900); lcd.print ("246,94"); întârziere (1000); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (350); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (350); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (350); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (350); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,66, 300); lcd.print ("293,66"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 900); lcd.print ("220.0"); întârziere (1000); lcd.clear (); // redă tonul d3 (10, 146,83, 300); lcd.print ("146,83"); întârziere (350); lcd.clear (); // redă tonul f3 (10, 174,61, 300); lcd.print ("174,61"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 300); lcd.print ("220.0"); întârziere (400); // joacă b3 lcd.clear (); ton (10, 246,94, 900); lcd.print ("246,94"); întârziere (1000); lcd.clear (); // redă tonul e3 (10, 164,81, 300); lcd.print ("164,81"); întârziere (400); lcd.clear (); // redă tonul g # 3 (10, 207,65, 300); lcd.print ("207,65"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 900); lcd.print ("261,63"); întârziere (1000); întârziere (300); lcd.clear (); // redă tonul e3 (10, 164,81, 300); lcd.print ("164,81"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redă tonul d4 # (10, 311.13, 300); lcd.print ("311.13"); întârziere (400); lcd.clear (); // redă tonul e4 (10, 329,63, 300); lcd.print ("329,63"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul d4 (10, 293,66, 300); lcd.print ("293,66"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 900); lcd.print ("220.0"); întârziere (1000); lcd.clear (); // redă tonul d3 (10, 146,83, 300); lcd.print ("146,83"); întârziere (400); lcd.clear (); // redă tonul f3 (10, 174,61, 300); lcd.print ("174,61"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 300); lcd.print ("220.0"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 900); lcd.print ("246,94"); întârziere (1000); lcd.clear (); // redă tonul f3 (10, 174,61, 300); lcd.print ("174,61"); întârziere (400); lcd.clear (); // redă tonul c4 (10, 261,63, 300); lcd.print ("261,63"); întârziere (400); lcd.clear (); // redați tonul b3 (10, 246,94, 300); lcd.print ("246,94"); întârziere (400); lcd.clear (); // redă tonul a3 (10, 220, 900); lcd.print ("220.0"); întârziere (1000); lcd.clear (); }

Pasul 5: Încărcarea codului: Ce înseamnă toate acestea?

Să definim câteva funcții în limba engleză, astfel încât să puteți înțelege codul.

ton (x, y, z); = redați un ton cu un ton de y Hertz, la un buzzer la pinul x, pentru z milisecunde.

lcd.print ("XYZ"); = tipăriți un mesaj cu caracterele XYZ pe ecranul LCD. (de exemplu, afișați tonul Hertz)

întârziere (x); = pauză pentru x milisecunde.

const int X = Y = setați o variabilă constantă X la pinul Y și utilizați fie X, fie Y pentru a atribui sarcini dispozitivului.

lcd.clear (); = ștergeți ecranul LCD și resetați pentru un nou afișaj

pinMode (X, OUTPUT); = setați pinul X pentru modul de ieșire

Odată ce ați înțeles toate aceste funcții, puteți înlocui cu ușurință variabilele cu datele pe care le colectați atunci când traduceți o melodie și puteți codifica propria melodie!

Pasul 6: Finalizat !

Terminat!!!
Terminat!!!
Terminat!!!
Terminat!!!

Fie aveți un Arduino care joacă Fur Elise și afișează valorile notelor în Hertz, fie ați creat un Arduino care redă melodia melodiei pe care ați ales-o și afișează textul pe care ați dorit să îl arătați. Vă mulțumim că ați vizitat acest tutorial și vă sper acest proiect pe Arduino.

Recomandat: