Índice:
- Etapa 1: converter a partitura musical em notas digitais: valores de atraso
- Etapa 2: converter a partitura musical em notas digitais: valores Hertz
- Etapa 3: Projeto do circuito
- Etapa 4: Upload de código: Como fazer
- Etapa 5: Upload de código: o que tudo isso significa?
- Etapa 6: Concluído !
Vídeo: Digitalize uma música com o Arduino: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
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
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
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
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 !
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:
Faça uma caixa de luz RBG reativa para música / # criatividade inteligente: 9 etapas
Faça uma caixa de luz RBG reativa à música / #smartcreativity: Olá amigos, hoje vou mostrar a vocês como fazer uma caixa de luz LED reativa à música. Então aproveite este projeto DIY legal e criativo. Então, espero que vocês gostem disso .. Todas as informações, código e instruções fornecidas neste tutorial. Então, vamos começar
Digitalize seu sistema de alta fidelidade: 6 etapas (com imagens)
Digitalize seu sistema de alta fidelidade: Neste Instrutível, gostaria de mostrar como digitalizei meu sistema de alta fidelidade analógico e, assim, realizei rádio na web, acesso à coleção de música armazenada em meu NAS, etc. A implementação é baseada principalmente em um Raspberry Pi, um Hifiberry HAT e um toque
Uma tentativa de música visual ao vivo: 4 etapas
Uma tentativa de música visual ao vivo: Olá e bem-vindo à minha primeira tentativa de fazer música visual ao vivo! Meu nome é Wesley Pena e sou graduado em Multimídia Interativa no College of New Jersey. Este instrutível é parte de um final da minha aula de Programação de música interativa, onde
Digitalize objetos próximos para fazer um modelo 3D usando ARDUINO: 5 etapas (com imagens)
Escaneie objetos próximos para fazer um modelo 3D usando ARDUINO: este projeto é específico ao utilizar o sensor ultrassônico HC-SR04 para escanear objetos próximos. Para fazer o modelo 3D, você precisa varrer o sensor na direção perpendicular. Você pode programar o Arduino para soar um alarme quando o sensor detectar um objeto w
Luz reativa para música -- Como tornar uma luz reativa para música super simples para tornar a área de trabalho incrível: 5 etapas (com imagens)
Música reativa luz || Como fazer música super simples luz reativa para tornar a área de trabalho incrível .: Ei, e aí galera, hoje vamos construir um projeto muito interessante. Hoje vamos construir uma luz reativa musical. O led mudará seu brilho de acordo com o baixo, que na verdade é um sinal de áudio de baixa frequência. É muito simples de construir. Vamos