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