Neste projeto iremos desenvolver um gerador de tons usando Arduino Uno. Teremos botões interfaceados com o UNO e cada um deles gera diferentes intensidades de tom. A frequência do tom gerado pelo UNO é a mesma em todos os internos. É a intensidade do som que muda a cada toque. Esta é a maneira mais fácil de fazer um piano com o Arduino Uno. Verifique também este circuito de Piano.
Os tons podem ser aumentados até 20. Isso oferece a melhor variação de tons e mudanças muito mais suaves. A intensidade do tom é alterada por PWM (Modulação por largura de pulso). Um exemplo de PWM é mostrado no gráfico abaixo.
No PWM, a frequência do sinal ou o período de tempo do sinal (Ton + Toff) é sempre constante. Apenas a relação de hora de LIGAR e DESLIGAR muda. Por exemplo, no segundo gráfico da figura acima, o tempo de LIGAR é 80% e o tempo de DESLIGAR é 20% da duração completa.
No terceiro gráfico, o tempo de LIGAR é 50% e o tempo de DESLIGAR é 50% da duração completa. Portanto, no primeiro caso, temos uma taxa de dever de 80% e no segundo caso, temos uma taxa de dever de 20%.
Com esta mudança na relação de dever temos uma mudança em Vrms (valor da raiz quadrada média da tensão), quando esta tensão é dada ao buzzer ele faz um ruído diferente sempre que há uma mudança na relação de dever.
Vamos programar o UNO para fornecer um sinal PWM de diferentes taxas de serviço para cada um dos botões. Portanto, temos um gerador de tons em mãos que gera um tom diferente a cada pressionamento de botão.
Componentes necessários
Hardware: Arduino Uno, fonte de alimentação (5v), capacitor 1000 uF, capacitor 100 nF, campainha, botões (8 peças).
Software: AURDINO nightly ou Atmel studio 6.2
Diagrama de circuito e explicação de trabalho
O circuito do gerador de tons é mostrado no diagrama abaixo.
Para filtrar o ruído da tensão de alimentação, os capacitores são colocados nos terminais conforme mostrado no diagrama.
O PWM do Arduino Uno pode ser alcançado em qualquer um dos pinos simbolizados como “~” na placa PCB. Existem seis canais PWM no UNO. No entanto, não podemos usar pinos PWM estabelecidos sobre os PINS 0-7, pois os PINS são preferidos para a interface de botões.
Há uma razão para selecionar os PINS 0-7 como entradas, porque os PINS 0-7 representam o PORTD do microcontrolador. Portanto, no último caso, podemos obter o BYTE completo do PORTD.
Agora, para obter um PWM de razão de trabalho diferente, usaremos o seguinte comando.
analogWrite (9, VALOR); |
Da condição acima, podemos obter diretamente o sinal PWM no pino correspondente. O primeiro parâmetro entre colchetes é para escolher o número do pino do sinal PWM. O segundo parâmetro é para escrever a taxa de serviço.
O valor PWM do Arduino Uno pode ser alterado de 0 a 255. Com “0” como o mais baixo para “255” como o mais alto. Com 255 como taxa de serviço, teremos 5 V no PIN9. Se a taxa de serviço for de 125, obteremos 2,5 V no PIN9. Vamos dividir a taxa de serviço de 0-250 entre 8 botões com interface no PORTD do UNO. Aqui eu escolho 25 incrementos para cada botão, mas é de sua escolha.
Com isso teremos um sinal PWM cuja relação de trabalho muda com cada botão. Sendo dado ao buzzer, temos gerador de tons. O funcionamento deste gerador de tons baseado em Arduino é explicado passo a passo no código C fornecido abaixo.