Sommario:

Digitalizzare una canzone con Arduino: 6 passaggi
Digitalizzare una canzone con Arduino: 6 passaggi

Video: Digitalizzare una canzone con Arduino: 6 passaggi

Video: Digitalizzare una canzone con Arduino: 6 passaggi
Video: How to Play audio with Arduino 2024, Novembre
Anonim
Digitalizzare una canzone con Arduino
Digitalizzare una canzone con Arduino

Volevo creare un progetto che unisse due delle mie materie preferite: scienza e musica. Ho pensato a tutti i modi in cui avrei potuto combinare questi due domini e ho pensato che sarebbe stato interessante far suonare ad Arduino Fur Elise mentre mostrava il tono della nota in Hertz. Ora, iniziamo a costruire!

Avrai bisogno di un Arduino Uno o Mega, molti cavi jumper, un cicalino piezoelettrico, una breadboard, uno schermo LCD 16 * 2 con tutti i pin del tergicristallo in posizione e un potenziometro da 10k (potresti anche sentirli chiamare potmeters). È meglio mettere insieme tutte queste forniture prima di iniziare la costruzione.

Passaggio 1: convertire la partitura musicale in note digitali: valori di ritardo

Converti la partitura musicale in note digitali: valori di ritardo
Converti la partitura musicale in note digitali: valori di ritardo

Ci sono due passaggi per trascrivere digitalmente una nota dalla partitura nel suo equivalente digitale. Per prima cosa, dovremo scrivere il tempo in cui la nota dura in millisecondi. Ho impiegato un grafico trovato online per questo compito. In base al fatto che una nota fosse una mezza nota, una semiminima, un'ottava nota, ecc., Ho trascritto la lunghezza della nota in millisecondi. Puoi vedere questi numeri nel mio codice come delay(); funzione e il numero tra parentesi sarà il valore di ritardo in millisecondi che abbiamo determinato in questo passaggio.

Passaggio 2: convertire la partitura musicale in note digitali: valori Hertz

Converti la partitura musicale in note digitali: valori Hertz
Converti la partitura musicale in note digitali: valori Hertz

Prima di iniziare questo passaggio, vorrei definire alcuni termini tecnici. Il "valore" di una nota può essere utilizzato in modo intercambiabile con le parole "altezza", "valore" e "nota". Ora devi leggere ogni nota della canzone dalla partitura. Dovrai quindi tradurre ogni nota in Hertz utilizzando una tabella da musica a Hertz, che puoi trovare facilmente online. Una cosa da ricordare è che il Do centrale è indicato come C4 sul tavolo e un'ottava più in alto è C5, e così via. Una volta che queste note sono state tutte trascritte in Hertz, inserirete i valori nella funzione tone(x, y, z); dove X è il numero di pin o const int, un modo per definire le variabili che spiegherò più avanti. Y sarà il valore Hertz che hai appena trascritto e Z sarà la durata della nota in millisecondi arrotondata al centesimo più vicino. Il ritardo(); i valori saranno la durata della nota. Ora progettiamo il circuito in grado di riprodurre la musica.

Passaggio 3: progettazione del circuito

Progettazione di circuiti
Progettazione di circuiti

Ora che abbiamo tradotto tutte le note in valori digitali che un computer può comprendere, è il momento di costruire il circuito. Inizia prendendo una breadboard e posizionando lo schermo LCD con il primo pin (GND) nella riga 14. Posiziona il cicalino dove preferisci e posiziona un potenziometro accanto ad esso. L'obiettivo è quello di allineare tutto, per ridurre al minimo l'ingombro dei fili. Posiziona Arduino accanto alla breadboard e collega il pin 5v alla guida positiva della breadboard e il pin di terra alla guida negativa. Ora siamo pronti per collegare i jumper tra Arduino e i componenti.

Ora parliamo dei pin sull'LCD e di come collegarli.

GND sta per terra, questo è il filo negativo in corrente continua. Collegare GND alla guida negativa della breadboard.

VCC sta per Voltage at the Common Collector, ed è qui che colleghi la tua fonte di alimentazione a 5 volt (il binario di alimentazione positivo).

VO sta per Contrasto, collegalo al pin centrale del potenziometro. Collegare il pin sinistro del potenziometro al binario di alimentazione positivo e il pin destro al binario di alimentazione di terra.

RS sta per Register Select e viene utilizzato da Arduino per indicare al display dove memorizzare i dati. Collega questo pin al pin 12 di Arduino.

RW è l'acronimo di Read/Write pin, che Arduino utilizza per verificare se lo schermo mostra ciò che è stato programmato per mostrare. Collega questo pin al binario negativo sulla breadboard.

E sta per Enable, che indica all'LCD quali pixel abilitare (accendere) o disabilitare (spegnere). Collega questo pin al pin 11 di Arduino.

D4, D5, D6 e D7 sono pin di visualizzazione che controllano i caratteri e le lettere visualizzati. Collegali rispettivamente ai pin 5, 4, 3 e 2 di Arduino.

Il pin A, a volte etichettato come LED, è l'anodo del LED per la retroilluminazione. Collegalo alla barra di alimentazione positiva con un filo o con un resistore da 220 ohm. Il resistore è migliore per un uso più lungo in quanto risparmia l'LCD, ma se il dispositivo non verrà utilizzato giorno e notte, non è necessario il resistore.

Il pin K, a volte anche (confusamente) etichettato come LED, è il pin di massa del LED. Collegalo alla sbarra di alimentazione di terra.

Passaggio 4: caricamento del codice: istruzioni

Collega il tuo Arduino alla porta USB del tuo computer. Carica il seguente codice utilizzando il programmatore IDE di Arduino.

#includere

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LCD a cristalli liquidi (rs, en, d4, d5, d6, d7);

void setup() {

// imposta il numero di colonne e righe del display LCD: lcd.begin(16, 2); // Stampa un messaggio sul display LCD. lcd.print("Passo Hertz:!"); ritardo(1000); void loop() { // riproduce e4 delay(600);//pausa per 0,6 secondi tone(10, 329.63, 300);//play e al cicalino al pin 10, dura 0,3 secondi lcd.print(" 329.63");//visualizza un messaggio sul display LCD "329.63"

ritardo (350); // ritardo per 0,35 secondi

lcd.clear();//cancella LCD e resetta per il messaggio successivo // riproduce d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo(350); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo(350); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo(350); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo(350); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293,66, 300); lcd.print("293.66"); ritardo (400); lcd.clear(); // suona il tono c4 (10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 900); lcd.print("220.0"); ritardo(1000); lcd.clear();//line60//helpsave//avrdude.failure.eeprom // riproduce il tono d3(10, 146.83, 300); lcd.print("146.63"); ritardo(350); lcd.clear(); //riproduci il tono f3(10, 174.61, 300); lcd.print("174.61"); ritardo (400); lcd.clear(); //riproduci un tono a3(10, 220, 300); lcd.print("220"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 900); lcd.print("246.94"); ritardo(1000); lcd.clear();

// suona e3

tono(10, 164,81, 300); lcd.print("164.81"); ritardo (400); lcd.clear(); // suona g3# tone(10, 207.65, 300); lcd.print("207.65"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona il tono c4(10, 261.63, 900); lcd.print("261.63"); ritardo(1000); lcd.clear(); //riproduci e tone(10, 164.81, 300); lcd.print("164.81"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293,66, 300); lcd.print("293.66"); ritardo (400); lcd.clear(); // suona il tono c4(10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 900); lcd.print("220.0"); ritardo(1000); lcd.clear(); // suona d3 tone(10, 146.83, 300); lcd.print("146.83"); ritardo (400); lcd.clear(); // riproduce il tono f3(10, 174.61, 300); //eeprom 20--6 sì, flash 65--0 no lcd.print("174.61"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 300); lcd.print("220.0"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 900); lcd.print("246.94"); ritardo(1000); lcd.clear(); // riproduce il tono f3(10, 174.61, 300); lcd.print("174.61"); ritardo (400); lcd.clear(); // suona il tono c4 (10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 900); lcd.print("220.0"); ritardo(1000); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona il tono c4(10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293,66, 300); lcd.print("293.66"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 900); lcd.print("329.63"); ritardo(1000); lcd.clear(); // suona il tono g3(10, 196, 300); lcd.print("196.0"); ritardo (400); lcd.clear(); // riproduce il tono f4(10, 349.23, 300); lcd.print("349,23"); ritardo (400); lcd.clear(); //riproduci tono mi4(10, 329.23, 300); lcd.print("329.23"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293.63, 900); lcd.print("293.63"); ritardo(1000); lcd.clear(); // suona il tono mi3(10, 164.81, 300); lcd.print("164.81"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293.63, 300); lcd.print("293.63"); ritardo (400); lcd.clear(); // suona il tono c4(10, 261.63, 900); lcd.print("261.63"); ritardo(1000); lcd.clear(); // suona d3 tone(10, 146.83, 300); lcd.print("146.83"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293.63, 300); lcd.print("293.63"); ritardo (400); lcd.clear(); // suona il tono c4 (10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 900); lcd.print("246.94"); ritardo(1000); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo(350); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo(350); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo(350); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo(350); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293,66, 300); lcd.print("293.66"); ritardo (400); lcd.clear(); // suona il tono c4 (10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 900); lcd.print("220.0"); ritardo(1000); lcd.clear(); // suona d3 tone(10, 146.83, 300); lcd.print("146.83"); ritardo(350); lcd.clear(); //riproduci il tono f3(10, 174.61, 300); lcd.print("174.61"); ritardo (400); lcd.clear(); //riproduci un tono a3(10, 220, 300); lcd.print("220.0"); ritardo (400); // riproduci b3 lcd.clear(); tono (10, 246,94, 900); lcd.print("246.94"); ritardo(1000); lcd.clear(); // suona il tono mi3(10, 164.81, 300); lcd.print("164.81"); ritardo (400); lcd.clear(); // suona sol#3 tone(10, 207.65, 300); lcd.print("207.65"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona il tono c4(10, 261.63, 900); lcd.print("261.63"); ritardo(1000); ritardo(300); lcd.clear(); //riproduci il tono mi3(10, 164.81, 300); lcd.print("164.81"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona d4# tone(10, 311.13, 300); lcd.print("311.13"); ritardo (400); lcd.clear(); // suona mi4 tone(10, 329.63, 300); lcd.print("329.63"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona d4 tone(10, 293,66, 300); lcd.print("293.66"); ritardo (400); lcd.clear(); // suona il tono c4(10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 900); lcd.print("220.0"); ritardo(1000); lcd.clear(); // suona d3 tone(10, 146.83, 300); lcd.print("146.83"); ritardo (400); lcd.clear(); // riproduce il tono f3(10, 174.61, 300); lcd.print("174.61"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 300); lcd.print("220.0"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 900); lcd.print("246.94"); ritardo(1000); lcd.clear(); // riproduce il tono f3(10, 174.61, 300); lcd.print("174.61"); ritardo (400); lcd.clear(); // suona il tono c4 (10, 261.63, 300); lcd.print("261.63"); ritardo (400); lcd.clear(); // suona il tono b3(10, 246,94, 300); lcd.print("246.94"); ritardo (400); lcd.clear(); // suona un tono a3(10, 220, 900); lcd.print("220.0"); ritardo(1000); lcd.clear(); }

Passaggio 5: caricamento del codice: cosa significa tutto ciò?

Definiamo alcune funzioni in inglese, così puoi capire il codice.

tono (x, y, z); = suona un tono con un passo di y Hertz, su un cicalino al pin x, per z millisecondi.

lcd.print("XYZ"); = stampa un messaggio con i caratteri XYZ sullo schermo LCD. (es. visualizzare il passo Hertz)

ritardo(x); = pausa per x millisecondi.

const int X=Y = imposta una variabile costante X sul pin Y e usa X o Y per assegnare compiti al dispositivo.

lcd.clear(); = cancella lo schermo LCD e ripristina per un nuovo display

pinMode(X, USCITA); = impostare il pin X per la modalità di uscita

Una volta comprese tutte queste funzioni, puoi facilmente sostituire le variabili con i dati che raccogli durante la traduzione di una canzone e puoi quindi codificare la tua canzone!

Passaggio 6: finito!

Finito!!!
Finito!!!
Finito!!!
Finito!!!

O hai un Arduino che riproduce Fur Elise e visualizza i valori delle note in Hertz, oppure hai creato un Arduino che riproduce la melodia della canzone che hai scelto e mostra il testo che volevi mostrare. Grazie per aver visitato questo tutorial, e spero che questo progetto su Arduino.

Consigliato: