Índice:

Fazendo músicas com um Arduino e um motor DC: 6 etapas
Fazendo músicas com um Arduino e um motor DC: 6 etapas

Vídeo: Fazendo músicas com um Arduino e um motor DC: 6 etapas

Vídeo: Fazendo músicas com um Arduino e um motor DC: 6 etapas
Vídeo: Controlando Motor de Passo com Arduino - Curso de Arduino #31 2024, Julho
Anonim
Fazendo músicas com um Arduino e um motor DC
Fazendo músicas com um Arduino e um motor DC

Outro dia, enquanto folheava alguns artigos sobre o Arduino, localizei um projeto interessante que usava motores de passo controlados pelo Arduino para criar melodias curtas. O Arduino usou um pino PWM (Modulação por largura de pulso) para operar o motor de passo em frequências específicas, correspondendo às notas musicais. Ao cronometrar quais frequências tocadas quando, uma melodia clara pode ser ouvida do motor de passo.

No entanto, quando tentei sozinho, descobri que o motor de passo que tenho não consegue girar rápido o suficiente para criar um tom. Em vez disso, usei um motor DC, que é relativamente simples de programar e conectar a um Arduino. Um IC L293D comum pode ser usado para acionar facilmente o motor de um pino PWM do Arduino, e a função tone () nativa no Arduino pode gerar a frequência necessária. Para minha surpresa, não encontrei nenhum exemplo ou projeto usando um motor DC online e, portanto, este Instructables é minha resposta para remediar isso. Vamos começar!

P. S. Presumo que você já tenha alguma experiência com o Arduino e esteja familiarizado com sua linguagem de programação e hardware. Você deve saber o que são arrays, o que é PWM e como usá-lo, e como a tensão e a corrente funcionam, só para citar algumas coisas. Se você ainda não chegou lá ou acabou de começar o Arduino, não se preocupe: tente esta página de primeiros passos no site oficial do Arduino e volte quando estiver pronto.:)

Suprimentos

  • Arduino (usei um UNO, mas você pode usar um Arduino diferente, se desejar)
  • Motor 5 Vcc padrão, de preferência um capaz de ter um ventilador conectado (veja a imagem em "Montagem do circuito"
  • L293D IC
  • Quantos botões de pressão quantas notas na música que você deseja tocar
  • Tábua de pão
  • Jumper Wires

Etapa 1: Visão geral

Veja como o projeto funciona: o Arduino irá gerar uma onda quadrada em uma determinada frequência, que será enviada para o L293D. O L293D é conectado a uma fonte de alimentação externa que ele usa para alimentar o motor na frequência fornecida pelo Arduino. Ao evitar que o eixo do motor DC gire, o motor pode ser ouvido ligando e desligando na frequência, o que produz um tom ou nota. Podemos programar o Arduino para tocar notas quando os botões são pressionados ou para tocá-los automaticamente.

Etapa 2: montagem do circuito

Montagem do circuito
Montagem do circuito
Montagem do circuito
Montagem do circuito

Para montar o circuito, basta seguir o diagrama de Fritzing acima.

Dica: A nota do motor é melhor ouvida quando o eixo não está girando. Eu coloquei um ventilador no eixo do meu motor e usei um pouco de fita adesiva para segurar o ventilador enquanto o motor funcionava (veja a foto). Isso evitou que o eixo girasse e produziu um tom claro e audível. Você pode ter que fazer alguns ajustes para obter um tom limpo de seu motor.

Etapa 3: Como funciona o circuito

Como funciona o circuito
Como funciona o circuito

O L293D é um IC usado para acionar dispositivos de alta tensão e corrente relativamente alta, como relés e motores. O Arduino é incapaz de acionar a maioria dos motores diretamente de sua saída (e o EMF traseiro do motor pode danificar o circuito digital sensível do Arduino), então um IC como o L293D pode ser usado com uma fonte de alimentação externa para acionar facilmente o motor DC. Inserir um sinal no L293D produzirá o mesmo sinal para o motor DC sem risco de danos ao Arduino.

Acima está uma pinagem / esquema funcional do L293D de sua folha de dados. Uma vez que estamos conduzindo apenas 1 motor (o L293D pode conduzir 2), precisamos apenas de um lado do IC. O pino 8 é a alimentação, os pinos 4 e 5 são GND, o pino 1 é a saída PWM do Arduino e os pinos 2 e 7 controlam a direção do motor. Quando o pino 2 está ALTO e o pino 7 está BAIXO, o motor gira em uma direção, e quando o pino 2 está BAIXO e o pino 7 está ALTO, o motor gira na outra direção. Uma vez que não nos importamos com a maneira como o motor gira, não importa se os pinos 2 e 7 são BAIXOS ou ALTOS, contanto que sejam diferentes um do outro. Os pinos 3 e 6 conectam-se ao motor. Você pode conectar tudo ao outro lado (pinos 9-16) se desejar, mas esteja ciente de que os pinos de alimentação e PWM trocam de lugar.

Nota: Se você estiver usando um Arduino que não tem pinos suficientes para cada botão, você pode usar uma rede de resistores para conectar todas as chaves a um pino analógico, como neste instructables. Como isso funciona está fora do escopo deste projeto, mas se você já usou um R-2R DAC, deve achá-lo familiar. Observe que o uso de um pino analógico exigirá que grandes partes do código sejam reescritas, pois a biblioteca de botões não pode ser usada com pinos analógicos.

Etapa 4: Como funciona o código

Para facilitar o manuseio de todos os botões, usei uma biblioteca chamada “Button” da madleech. Eu incluí a biblioteca primeiro. Em seguida, nas linhas 8-22, defini as frequências para as notas necessárias para tocar Twinkle, Twinkle, Little Star (a música de exemplo), o pino que usarei para acionar o L293D e os botões.

Na função de configuração, inicializei o Serial, os botões e configurei o pino do driver do L293D para o modo de saída.

Finalmente, no loop principal, verifiquei se um botão foi pressionado. Se tiver, o Arduino toca a nota correspondente e imprime o nome da nota no Serial Monitor (útil para saber quais notas são quais em sua placa de ensaio). Se uma nota for liberada, o arduino interromperá qualquer som com noTone ().

Infelizmente, devido à forma como a biblioteca está estruturada, não consegui encontrar uma maneira de verificar se um botão foi pressionado ou liberado de forma menos detalhada do que usando 2 condicionais por nota. Outra falha desse código é que se você pressionasse dois botões simultaneamente e soltasse um deles, as duas notas seriam interrompidas, porque noTone () interrompe a geração de qualquer nota, independentemente de qual nota a acionou.

Etapa 5: Programando uma música

Em vez de usar botões para tocar notas, você também pode programar o Arduino para tocar uma melodia para você automaticamente. Aqui está uma versão modificada do primeiro esboço que reproduz Twinkle, Twinkle, Little Star no motor. A primeira parte do esboço é a mesma - definindo as frequências das notas e o tonePin. Chegamos à nova parte em bpm = "100". Eu defino as batidas por minuto (bpm) e, em seguida, uso um pouco de matemática para descobrir o número de milissegundos por batida que equivale a bpm. Para fazer isso, usei uma técnica chamada análise dimensional (não se preocupe - não é tão difícil quanto parece). Se você já fez um curso de química no ensino médio, você definitivamente usou a análise dimensional para converter entre as unidades. Os flutuadores () existem para garantir que nada na equação seja arredondado até o final para fins de precisão.

Depois de termos o número de ms / batida, eu dividi ou multipliquei apropriadamente para encontrar os valores em milissegundos das diferentes durações de notas encontradas na música. Em seguida, faço uma matriz de cada nota em ordem cronológica e outra com a duração de cada nota. É fundamental que o índice de cada nota corresponda ao índice de sua duração, caso contrário, sua melodia soará incorreta. Eu coloquei as notas para Twinkle, Twinkle, Little Star aqui como um exemplo, mas você pode tentar qualquer música ou sequência de notas que desejar.

A verdadeira mágica acontece na função de loop. Para cada uma das notas, toco o tom por um tempo especificado na matriz beat_values. Em vez de usar atraso aqui, o que faria com que o tom não fosse reproduzido, registrei o tempo desde que o programa começou com a função millis () e subtraí do tempo atual. Quando o tempo excede o tempo que especifiquei a nota para durar no array beat_values, eu paro a nota. O atraso após o loop for existe para adicionar uma lacuna entre as notas, garantindo que as notas subsequentes com a mesma frequência não se misturem.

Etapa 6: Feedback

É isso para este projeto. Se houver algo que você não entende ou se você tiver alguma sugestão, por favor, não hesite em me contatar. Como este é meu primeiro Instructables, gostaria muito de receber comentários e sugestões sobre como melhorar este conteúdo. Vejo você na próxima vez!

Recomendado: