\ Produzindo Sons no Arduino

Produzindo Sons no Arduino



No artigo dessa semana irei falar como produzir sons no Arduino. O IDE Arduino inclui uma função integrada que permite criar facilmente sons de frequências arbitrárias. A função tone( ) gera uma onda de frequência quadrada selecionada ao pino de saída de sua escolha. Essa função aceita três argumento tone(pin, frequency, duration)pin é o pino do Arduino no qual o som é emitido; frequency é a frequência do tom de saída e duration é o tempo em milisegundos da duração do tom. Se o parâmetro duration não for fornecido, o tom será emitido até que o comando noTone( ) seja enviado a ele. 

A parte de Física que estuda os sons é a Ondulatória. O som é uma onda mecânica que se propaga através do ar (ou meios sólidos e líquidos) como uma onda de pressão. Por exemplo, ao fazer vibrar um sino, as partículas de ar em torno dele vibram transferindo energias para outras partículas adjacentes, criando uma reação em cadeia de partículas vibrantes.

Podemos controlar duas propriedades dessa partícula vibrante: a frequência que é quantidade de vibrações por segundo (unidade: Hertz), e, a amplitude que corresponde à intensidade das vibrações. Fisicamente, a frequência está associada ao tipo de som que produzimos: agudos ou graves. Sons agudos requerem frequência mais altas (como um soprano), enquanto que sons mais graves frequências mais baixas (como o baixo). A altura do som ou a intensidade do som está associada à amplitude - sons de amplitudes mais elevadas são mais altos; sons de amplitude menos elevadas são mais silenciosos.  

Disse no início do artigo que a função tone ( ) gera uma onda quadrada, mas afinal, o que é isso? Uma onda quadrada é uma onda produzida digitalmente; ela oscila entre um valor mínimo e máximo mas muda rapidamente sem a sutileza de uma onda senoidal (onda no mundo real). Na prática significa que os sons produzidos por esse tipo de ondas não soam tão belos como os sons emitidos por um piano. 

Sabemos que existem 7 notas musicais básicas naturais, são elas: Dó, Ré, Mi, Fá, Sol, Lá, Sí, representadas respectivamente por C, D, E, F, G, A, H. O cálculo dos tons é feito com a seguinte fórmula:

Tempo_HIGH = Período / 2 = 1 / (2 x Frequência)

Sendo que os diferentes tons são dados a partir da seguinte tabela:

Nota

Frequência (Hz)

Período 

Tempo_HIGH

A

440

2272

1136

B

523

1912

956

C

261

3830

1915

D

294

3400

1700

E

329

3038

1519

F

349

2864

1432

G

392

2550

1275


Enfim, ao longo desse artigo produziremos alguns projetos utilizando buzzers (usei o modelo SFM- 27 black ou white) que permitem produzir sons. Mas antes, dentro da pasta do IDE do Arduino há um arquivo de definição chamado "pitches.h". Para encontrá-lo, o caminho geralmente é esse: \arduino-versao\examples\02.Digital\toneKeyboard. Copie esse arquivo para a pasta de seu projeto. Podemos inclui-lo no scketch dos projetos fazendo: #include "pitches.h". Esse arquivo de definição mapeia as frequências para nomes de notas e será bastante útil em um dos projetos desenvolvidos aqui.

Projeto 1: Gerando um tom no buzzer

Materiais utilizados

Um Arduino Mega ou compatível;
Um resistor de 1M Ohms;
Um resistor de 330 Ohms;
Um diodo Zener (5V);
Um transdutor piezo elétrico;
Um buzzer ativo (SFM- 27);
Cabos Jumpers.

Esquema de ligação

Figura 1: gerando um tom no buzzer.


Ouviremos o som toda vez que o transdutor piezo elétrico é pressionado. Quando são pressionados, os piezos elétricos podem produzir tensões muito altas, as quais são capazes de causar danos ao Arduino. Com a finalidade de se evitar isso, foi utilizado um diodo zener (0,5 W e 5,1V) e um resistor de 1M Ohms que está lá para drenar a tensão a partir do transdutor; observe ainda que o resistor e o diodo zener estão ligados paralelos ao piezo elétrico (transdutor).

O diodo zener necessita ser conectado de maneira correta para que ele proteja a entrada analógica do Arduino (observe que ele está ligado à porta A0) de quaisquer tensão que excedam 5V.  Convencionalmente o cátodo ou o negativo do diodo, normalmente marcado com uma faixa preta, deve ser ligado ao GND, porém, no nosso circuito iremos invertê-lo, conectando ao contrário, de modo que o cátodo seja ligado ao lado positivo do circuito. O diodo zener apenas conduz eletricidade quando sua tensão de ruptura é excedida, a qual no caso é de 5,1V. Quaisquer tensões acima de 5,1 V romperão a resistência do diodo e curto-circuitará a tensão do GND, protegendo então a entrada do Arduino. 

O buzzer ativo está conectado à porta digital 2 (PWM) do Arduino através de um resistor de 330 Ohms.

Figura 2: circuito real do esquema de ligação.

Código utilizado

Nesse sketch foi usado uma das bibliotecas já embutidas do Arduino, o tone. Ouviremos o som se o sensorValor for maior que o limite (colocamos em 200). Pode-se se fazer o ajuste de frequência do som para torná-lo mais audível e também aumentar o duracaoTone de 40 para um valor maior. Faça os testes e verifique qual o melhor ajuste para o seu projeto.


Projeto funcionando


Projeto 2: Gerando uma Sequência Sonora

Materiais utilizados

Um Arduino Mega ou compatível;
Um resistor de 330 Ohms;
Um potenciômetro de 10k Ohms; 
Um buzzer ativo (SFM- 27);
Cabos Jumpers.

Esquema de ligação

Figura 3: criando uma sequência sonora.

Observe que no potenciômetro (botão giratório) utilizamos somente dois pinos. O pino central (wiper) vai para o buzzer, e qualquer um dos pinos das extremidades se conecta ao resistor de 330 Ohms. Quando o botão é girado completamente até o terminal desconectado, toda a resistência do potenciômetro é adicionada à resistência em série do resistor de 330 Ohms e o volume diminui. Se o botão é girado completamente em direção ao terminal conectado, isso não adiciona nenhuma resistência extra ao resistor de 330 Ohms, e o alto-falante estará  no volume máximo. 

Figura 4: circuito real do esquema de ligação.

Código utilizado

Nesse segundo projeto irei utilizar um exemplo que foi tirado do Project Hub.  A dica da sequência sonora é: todo mundo tem um desses a cada ano.


Projeto funcionando



Projeto 3: Construção de um piano

Materiais utilizados

Um Arduino Mega ou compatível;
Um resistor de 330 Ohms;
Cinco resistores de 10K Ohms;
Cinco botões de pressão;
Um potenciômetro de 10K Ohms;
Um buzzer ativo (SFM- 27);
Cabos Jumpers.

Esquema de ligação


Figura 5: criação de um teclado com 5 botões de pressão.

Conectei os 5 botões ao Arduino nas portas digitais 2, 3, 4, 5 e 6. Optei por ligar os resistores pull-down de 10K Ohms com os botões. A nota será tocada somente se os botões forem pressionados. Iremos manter o buzzer ligado como no projeto 1 (através de um resistor de 330 Ohms) na porta digital 7.

Figura 6: circuito real do esquema de ligação.


Código utilizado

Em cada ciclo while() irá chamar continuamente a função tone() na frequência apropriada durante o tempo em que o botão for pressionado. O botão pode ser lido dentro da avaliação do laço while() para evitar ter que primeiro salvar a leitura para um valor temporário; digitalRead() retorna um valor true sempre que um valor de entrada é alto (HIGH); o valor pode ser diretamente avaliado pelo loop while().


Projeto funcionando




Reuni todos os projetos nesse vídeo abaixo. Deixe um comentário ou compartilhe.

Post Um Comentário

Postagem Anterior Próxima Postagem