Música com Microcontroladores - Inf

Propaganda
Música com Microcontroladores
Álister Machado1 and Eduardo F. Vernier1
1
Universidade Federal do Rio Grande do Sul
Neste trabalho estudamos a possibilidade de usar microcontroladores para sintetizar formas arbitrárias de ondas.
I.
INTRODUÇÃO
Para este trabalho precisávamos de algum microcontrolador de fácil acesso e fácil programação. Por isso,
escolhemos usar Arduino, uma plataforma em constante
popularização devido ao fato de que é muito simples
programá-la, pois usa uma linguagem semelhante à linguagem C. O projeto é baseado em um circuito Conversor
Digital-Analógico, o qual permite que criemos várias formas de onda simplesmente especificando as amplitudes
de cada ponto.
II.
A PLATAFORMA
ligarmos cada bit de entrada (1111), teremos a voltagem máxima do circuito, enquanto se desligarmos todos
(0000), teremos a voltagem mínima do circuito. Tal propriedade possibilita a geração de 16 valores de voltagem,
com os quais podemos gerar ondas de formatos arbitrários.
Entretanto, notamos um problema com nossa saída.
Na Figura 2, por exemplo, podemos ver picos no qual a
voltagem chega bruscamente a zero, eles ocorrem devido
ao tempo que o microcontrolador leva para ligar/desligar
uma saída digital. Para resolver tal problema, adicionamos ao circuito um capacitor ligado em paralelo com
a saída, desse modo, o componente age como um filtro
passa-baixas e elimina essas voltagens discrepantes, tornando as ondas mais fiéis e agradáveis ao ouvido.
Arduino é um microcontrolador baseado em um chip
Atmega que possui várias características interessantes.
As que chamaram nossa atenção, principalmente, foram
a facilidade do uso de entrada e saída, além da facilidade
de programação. A linguagem em si provê abstrações
muito simples dos recursos de E/S da placa, como por
exemplo simplesmente declarar o que cada pino dela será
(input/output) além de realizar escritas/leituras digitais
(HIGH ou LOW ) e analógicas em suas portas.
III.
O CÓDIGO
Figura 1. Circuito Resistor Ladder sem capacitor
O código é razoavelmente simples, e envolve basicamente definir quais pinos estarão ligados a quais botões
— e, portanto, quais notas eles representarão — além de
definir o vetor auxiliar para a geração de alguma onda
que necessite deste recurso e das funções que geram ondas predefinidas (quadrada, dente de serra, triangular e
senoidal).
IV.
O CIRCUITO
Existem várias configurações de conversores digitalanalógico. A implementação mais simples e intuitiva é
através de uma resistor ladder R-2R. Devido aos conhecimentos limitados em eletrônica e aos componentes à
nossa disposição, decidimos implementar tal circuito (Figura 1).
Nota-se na Figura 1 que as entradas são definidas
de bit mais significativo (MSB) a bit menos significativo
(LSB). Tal nomeclatura deve-se à relação entre voltagem
saindo do circuito e a interpretação do conjunto de entradas que a gerou como um número binário. Logo, se
Figura 2. Onda dente de serra sem o capacitor
V.
INTERAÇÃO COM O USUÁRIO
O circuito implementa uma oitava — porém, há a possibilidade de isto ser aumentado futuramente — através
de 12 botões, um para cada nota da escala. Além disso,
há um seletor à direita dos botões que seleciona o formato de onda desejado. Da chave 0 até a 3, temos as
seguintes ondas: quadrada, dente de serra, uma onda diferenciada que surgiu ao tentarmos criar um seno e, por
2
fim, um seno. Esta onda diferenciada tem um som metálico muito interessante, e seu formato é muito diferente,
embora lembre um seno com frequência variável.
VI.
ONDAS GERADAS
computada a função f (x) = 8 sin( 2πx
32 )+8, ∀(x < 32) ∈ N
para cada uma das 32 posições do vetor, sendo que estes
valores foram aproximados por truncamento. Foi escolhida esta função pois precisávamos que os valores oscilassem entre 16 e 0 para podermos convertê-los em valores
de 4 bits.
Com este circuito e o código que escrevemos conseguimos gerar ondas de formatos arbitrários. Como já
descrito, basta um vetor com as intensidades para cada
instante de tempo da onda que conseguiremos uma aproximação razoável para ela. As principais estão citadas
abaixo.
Figura 5. Onda senoidal gerada pelo circuito
A.
Onda Quadrada
Este tipo de onda é gerado muito facilmente: basta
ligar todos os bits de entrada, mantê-los ligados por algum tempo e depois desligar todos eles por algum tempo.
É importante notar que, assim como para os outros formatos de onda, este tempo no qual os bits ficam ligados/desligados determina a frequência da onda.
Figura 3. Onda quadrada gerada pelo circuito
B.
Figura 4. Onda triangular gerada pelo circuito
Onda Senoidal
Para esta onda foi necessário usar um vetor auxiliar
com as intensidades que gostaríamos que a onda reproduzisse a cada instante de tempo. Para gerar este vetor foi
Onda Dente de Serra
A geração da onda Dente de Serra assemelha-se muito
a da Onda Triangular, pois nesta devemos incrementar os
bits da entrada em 1 até que atinjam o máximo, porém
ao invés de decrementá-los até atingir zero, simplesmente
zeramos todos eles.
Figura 6. Onda dente de serra gerada pelo circuito
Onda Triangular
Para gerar esta onda, basta incrementar os bits da
entrada em 1 até que atinjam o máximo (1111), depois decrementá-los até que atinjam zero novamente. O
tempo entre os incrementos/decrementos determina a
frequência da onda.
C.
D.
E.
Onda Atípica
Esta onda que surgiu por acaso nos chamou a atenção devido ao seu som, que diferencia-se dos outros
gerados. Seu timbre metálico e formato "fora do padrão"despertaram nosso interesse. A onda em questão
é a da Figura 7.
Figura 7. Onda atípica gerada pelo circuito
VII.
RESULTADOS OBTIDOS
Alguns dos resultados obtidos foram muito interessantes. Além de conseguirmos gerar ondas parametrizadas,
outras coisas aconteceram. Ao selecionar mais de uma
3
onda no seletor de forma da onda, as duas são tocadas
uma após a outra, misturando-se e produzindo um som
muito diferente (Figura 8). Além disso, ao tocarmos
duas notas juntas, há um efeito similar ao de batimento,
já que a frequência que está sendo tocada muda muito
rapidamente de uma para outra. Também podemos ligar
algum equipamento como um pedal de efeito à saída do
circuito, possibilitando assim que exploremos outros tipos de som modificando a onda produzida pelo circuito.
ondas com complexidade maior, além de testar outros
tipos de DAC. Utilizando saídas PWM do microcontrolador e construindo um filtro passa-baixas devemos conseguir um resultado bastante interessante como o mostrado na Figura 9. Planejamos também dar ao usuário
a possibilidade de moldar suas ondas enquanto toca o instrumento, podendo através de potenciômetros modificar
a voltagem da onda em qualquer parte de seu período,
tornando o projeto mais parecido com sintetizadores comerciais. Atualmente, estamos estudando a possibilidade
de incluir envelope ADSR ao projeto.
Figura 8. Onda obtida com a mistura de Dente de Serra e
Quadrada
VIII.
PROJETOS FUTUROS
Para um futuro próximo, cogitamos a possibilidade de
gerar não somente uma oitava, mas várias, através de botões que troquem a oitava a ser tocada. Consideramos
também aumentar o número de bits de entrada no circuito, conseguiríamos, então, representar mais fielmente
Figura 9. Filtro passa baixas atuando sobre PWM
Download