Índice:

Digitalize uma música com o Arduino: 6 etapas
Digitalize uma música com o Arduino: 6 etapas

Vídeo: Digitalize uma música com o Arduino: 6 etapas

Vídeo: Digitalize uma música com o Arduino: 6 etapas
Vídeo: Amazing arduino project 2024, Novembro
Anonim
Digitalize uma música com o Arduino
Digitalize uma música com o Arduino

Queria criar um projeto que combinasse duas das minhas disciplinas favoritas: ciências e música. Pensei em todas as maneiras de combinar esses dois domínios e pensei que seria interessante fazer um Arduino tocar Fur Elise enquanto exibia a altura da nota em Hertz. Agora, vamos começar a construir!

Você precisará de um Arduino Uno ou Mega, muitos cabos de jumper, uma campainha Piezo, uma placa de ensaio, uma tela LCD 16 * 2 com todos os pinos do limpador no lugar e um potenciômetro de 10k (você também pode ouvi-los sendo chamados de medidores de potenciômetro) É melhor reunir todos esses suprimentos antes de iniciar a construção.

Etapa 1: converter a partitura musical em notas digitais: valores de atraso

Converta a partitura musical em notas digitais: valores de atraso
Converta a partitura musical em notas digitais: valores de atraso

Existem duas etapas para transcrever digitalmente uma nota da partitura em seu equivalente digital. Primeiro, precisaremos escrever o tempo que a nota dura em milissegundos. Usei um gráfico encontrado online para essa tarefa. Com base no fato de a nota ser uma semínima, semínima, colcheia, etc., transcrevi a duração da nota em milissegundos. Você pode ver esses números em meu código como o delay (); função e o número entre parênteses será o valor de atraso em milissegundos que determinamos nesta etapa.

Etapa 2: converter a partitura musical em notas digitais: valores Hertz

Converta a partitura musical em notas digitais: valores Hertz
Converta a partitura musical em notas digitais: valores Hertz

Antes de iniciar esta etapa, deixe-me definir alguns termos técnicos. O "valor" de uma nota pode ser usado alternadamente com as palavras "altura", "valor" e "nota". Agora, você deve ler cada nota da música da partitura. Você terá que traduzir cada nota para Hertz usando uma música para mesa Hertz, que você pode encontrar facilmente online. Uma coisa a lembrar é que o dó central está listado como C4 na mesa, e uma oitava acima é C5 e assim por diante. Depois que essas notas forem todas transcritas em Hertz, você colocará os valores no tom de função (x, y, z); onde X é o número do pino ou const int, uma maneira de definir variáveis que explicarei mais tarde. Y será o valor de Hertz que você acabou de transcrever e Z será a duração da nota em milissegundos arredondada para o centésimo mais próximo. O atraso(); os valores serão a duração da nota. Agora, vamos projetar o circuito que pode tocar a música.

Etapa 3: Projeto do circuito

Projeto de Circuito
Projeto de Circuito

Agora que traduzimos todas as notas em valores digitais que um computador pode entender, é hora de construir o circuito. Comece pegando uma placa de ensaio e colocando a tela LCD com o primeiro pino (GND) na linha 14. Coloque a campainha onde quiser e coloque um potenciômetro próximo a ela. O objetivo é alinhar tudo, para minimizar a desordem dos fios. Coloque o Arduino próximo à placa de ensaio e conecte o pino 5v ao trilho positivo da placa de ensaio e o pino de aterramento ao trilho negativo. Agora, estamos prontos para conectar jumpers entre o Arduino e os componentes.

Agora, vamos falar sobre os pinos no LCD e como conectá-los.

GND significa terra, este é o fio negativo em corrente contínua. Conecte o GND ao trilho negativo da placa de ensaio.

VCC significa Voltage at the Common Collector, e é aqui que você conecta sua fonte de alimentação de 5 volts (o barramento de alimentação positivo).

VO significa Contraste, conecte-o ao pino do meio do potenciômetro. Conecte o pino esquerdo do potenciômetro ao barramento de alimentação positivo e o pino direito ao barramento de alimentação de aterramento.

RS significa Register Select e é usado pelo Arduino para informar ao display onde armazenar os dados. Conecte este pino ao pino 12 no Arduino.

RW significa Read / Write pin, que o Arduino usa para verificar se a tela está mostrando o que você programou para mostrar. Conecte este pino ao trilho negativo na placa de ensaio.

E significa Ativar, que informa ao LCD quais pixels ativar (ligar) ou desativar (desligar). Conecte este pino ao pino 11 do Arduino.

D4, D5, D6 e D7 são pinos de exibição que controlam os caracteres e letras exibidos. Conecte-os aos pinos 5, 4, 3 e 2 do Arduino, respectivamente.

O pino A, às vezes rotulado como LED, é o ânodo do LED para a luz de fundo. Conecte-o ao barramento de alimentação positivo com um fio ou com um resistor de 220 ohms. O resistor é melhor para um uso mais longo, pois poupa o LCD, mas se o dispositivo não for usado dia e noite, você não precisa do resistor.

O pino K, às vezes também (confusamente) rotulado como LED, é o pino de aterramento do LED. Conecte-o ao barramento de alimentação de aterramento.

Etapa 4: Upload de código: Como fazer

Conecte seu Arduino ao USB do seu computador. Faça upload do código a seguir usando o programador IDE do Arduino.

#incluir

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

void setup () {

// configura o número de colunas e linhas do LCD: lcd.begin (16, 2); // Imprime uma mensagem no LCD. lcd.print ("Hertz Pitch:!"); atraso (1000); void loop () {// reproduzir e4 delay (600); // pausa para tom de 0,6 segundos (10, 329.63, 300); // tocar e para a campainha no pino 10, durar 0,3 segundos lcd.print (" 329.63 "); // exibe uma mensagem no LCD" 329.63"

delay (350); // atrasar por 0,35 segundos

lcd.clear (); // limpar o LCD e redefinir para a próxima mensagem // reproduzir d4 # tom (10, 311.13, 300); lcd.print ("311,13"); atraso (350); lcd.clear (); // toca o tom e4 (10, 329,63, 300); lcd.print ("329,63"); atraso (350); lcd.clear (); // reproduz d4 # tone (10, 311,13, 300); lcd.print ("311,13"); atraso (350); lcd.clear (); // toca o tom e4 (10, 329,63, 300); lcd.print ("329,63"); atraso (350); lcd.clear (); // reproduz tom b3 (10, 246,94, 300); lcd.print ("246,94"); atraso (400); lcd.clear (); // reproduz tom d4 (10, 293,66, 300); lcd.print ("293,66"); atraso (400); lcd.clear (); // reproduz tom c4 (10, 261,63, 300); lcd.print ("261,63"); atraso (400); lcd.clear (); // toca um tom 3 (10, 220, 900); lcd.print ("220,0"); atraso (1000); lcd.clear (); // linha60 // ajuda a salvar // avrdude.failure.eeprom // reproduz tom d3 (10, 146,83, 300); lcd.print ("146,63"); atraso (350); lcd.clear (); // reproduz tom f3 (10, 174,61, 300); lcd.print ("174,61"); atraso (400); lcd.clear (); // toca um tom 3 (10, 220, 300); lcd.print ("220"); atraso (400); lcd.clear (); // reproduz tom b3 (10, 246,94, 900); lcd.print ("246,94"); atraso (1000); lcd.clear ();

// jogar e3

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

Etapa 5: Upload de código: o que tudo isso significa?

Vamos definir algumas funções em inglês, para que você possa entender o código.

tom (x, y, z); = tocar um tom com uma altura de y Hertz, para uma campainha no pino x, por z milissegundos.

lcd.print ("XYZ"); = imprimir uma mensagem com os caracteres XYZ na tela LCD. (por exemplo, exibir o tom Hertz)

atraso (x); = pausa por x milissegundos.

const int X = Y = defina uma variável constante X para o pino Y e use X ou Y para atribuir tarefas ao dispositivo.

lcd.clear (); = limpar a tela LCD e redefinir para uma nova exibição

pinMode (X, OUTPUT); = definir o pino X para o modo de saída

Depois de entender todas essas funções, você pode facilmente substituir as variáveis pelos dados que coletou ao traduzir uma música e, então, codificar sua própria música!

Etapa 6: Concluído !

Finalizado!!!
Finalizado!!!
Finalizado!!!
Finalizado!!!

Você tem um Arduino que reproduz Fur Elise e exibe os valores das notas em Hertz ou criou um Arduino que reproduz a melodia da música que escolheu e exibe o texto que deseja mostrar. Obrigado por visitar este tutorial, e espero a você este projeto no Arduino.

Recomendado: