Willian Mateus Ferreira dos Santos, Autor em Blog Ryndack Componentes - Página 2 de 2
Rua Jovelina Claudino Buhrer, 440 - São José dos Pinhais - PR (41) 3383-3034
Projetos

É provável que você já tenha desejado reproduzir um áudio com o Arduino, mas como se faz isso? Vem com a gente, que nesse post você vai aprender!

A ideia por traz do projeto desse post é usar uma rede R2R, que é um conversor digital analógico formado por alguns resistores (se você ainda não conhece, confira o nosso post sobre ela), para reproduzir um áudio salvo na memória de um Arduino, de maneira simples e barata, usando poucos componentes.

Para esse projeto você não irá precisar de muita coisa, os materiais são:

  1. 25 resistores de 1kΩ

  2. 1 capacitor de 100nF

  3. Uma caixa de som

  4. Um Arduino

Esse projeto pode ser dividido em 3 etapas, sendo elas:

  1. Escolha e extração de um arquivo de áudio

  2. Escrita do código a ser executado

  3. Montagem do circuito


Escolha e Extração do Áudio 

A primeira etapa é a escolha de um arquivo de áudio. Para isso, precisamos levar em conta uma limitação comum em microcontroladores, a memória. No caso do Arduino, ela é de 32Kb, então precisamos garantir que o arquivo de áudio utilizado e o programa escrito não excedam este valor.

Assim, escolhemos um arquivo que seja curto, e com uma baixa frequência de amostragem. Para este artigo foi escolhido um áudio de cerca de 16 segundos com uma frequência de amostragem de 2000 amostras por segundo.
Com um arquivo de áudio selecionado, é preciso transformar ele em um vetor, que será gravado no Arduino. Para isso, usamos a função audioread do octave. O resultado dessa função é uma matriz [y fs], na qual y são os dados de áudio e fs a taxa de amostragem.

Os dados y são dispostos na forma de uma matriz que tem os frames de áudio colocados nas linhas e os canais nas colunas. A fim de simplificar o processo e de gerar um arquivo menor usamos um áudio mono, que fará com que y possua apenas uma coluna.

O próximo passo é transformar y em um vetor de uma unica linha com valores inteiros de 0 a 255, o que é possível com algumas contas simples e com a função reshape. Por fim, esse arquivo é salvo como um arquivo “.h”, que sera usado no código do Arduino. Isso esta demonstrado no script abaixo.

# Le o arquivo de audio, aqui usamos inicio e fim de modo que fim-inicio = numero_de_amostras. 
[y fs] = audioread("nome_do_arquivo_de_audio", [inicio fim]) 

# Determina o numero de linhas e o numero de colunas (1 para áudios mono) de y. 
[linha coluna] = size(y) 

# Transpõe y, em um vetor de 1 linha. 
y = reshape(y, 1, linha) 

# Transforma y em um vetor de 0 a 255 com números inteiros e salva em audio. 
audio = round(255*y+128) 

# Cria um arquivo .h com "const unsigned char pontos[ ] PROGMEM = {" salvo na primeira linha. 
dlmwrite("Audio.h", "const unsigned char pontos[ ] PROGMEM = {", "") 

# Adiciona o vetor com o audio ao arquivo .h criado. 
dlmwrite("Audio.h", audio, ",", "-append") 

# Fecha a chave. 
dlmwrite("Audio.h", "}", "", "-append")



Importante lembrar que para este script funcionar adequadamente, o arquivo de áudio deve estar salvo na mesma pasta que o octave. A fim de melhor aproveitar a memória do microcontrolador, foi usado o comando PROGMEM, que faz com que a variável, quando gravada, seja salva na memória flash, e não na RAM do Arduino.


Código do Arduino

O código implementado no Arduino ficou como está a seguir

#define F_CPU 16000000

#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "Pontos.h"

int i=0, Min=130;

//Interrupção quando há um estouro do timer0.
ISR(TIMER0_OVF_vect){ 

     //Reinicia o timer0.
     TCNT0 = Min; 

     //Manda o valor da posição i do vetor com o audio para o PORTD.
     PORTD = pgm_read_byte_near(pontos + i); 

     //incrementa a posição do vetor com o audio.
     if(i>30998){ 
          i = 0;
     }
     else{
          i += 1;
     }
}

//Configura o timer0 e as saídas.
void main (void){
     //Habilita interruoções globais.
     SREG |= (1<<7); 

     //Configura o timer0 para operação normal, não conectada.
     TCCR0A = 0; 
     TCCR0B = 0;

     //Define o prescale como sendo 64.
     TCCR0B |= ((1 << CS01)+(1 << CS00)); 

     //Inicia o timer0.
     TCNT0 = Min; 

     //Habilita interrupção por estouro do timer 0.
     TIMSK0 |= (1<<TOIE0); 

     //Configura o PORTD (pinos 0 ao 7), como saídas.
     DDRD = 0xFF; 

     //Loop vazio
     while (1){

     }
}

No código acima, vimos que o registrador TCNT0 incrementa seu valor em uma unidade uma vez a cada \frac{N}{f_{CPU}} segundo com N sendo o valor do prescale (64). Além disso, haverá um estouro no timer sempre que o valor de TCNT0 atingir 255. Dessa forma, temos que a frequência do timer (f) será:

(1)   \begin{equation*} f=\frac{f_{CPU}}{N*(255-Min)} \end{equation*}

Com Min sendo o menor valor de TCNT0. A fim de que o audio seja reproduzido adequadamente, precisamos que f seja igual a fs. Usando fs=2000, f_{CPU} = 16MHz e N igual a 64, temos:

(2)   \begin{equation*} 2000=\frac{16000000}{64*(255-Min)} \end{equation*}

Resolvendo para Min encontramos Min = 130. Desse modo, temos um estouro do timer a cada 0,5ms, fazendo com que a rotina de interrupção ISR seja acionada. Nessa interrupção, primeiramente atualizamos o valor presente na saída (PORTD) e reiniciamos o valor de TCNT0.

Em seguida, atualizamos a posição do vetor que será mandado ao PORTD na próxima iteração.
Já na função main temos a configuração do PORTD como saída, configuração do timer0 no modo desconectado com o prescale definido e configuração da interrupção por estouro do timer.
Por fim temos o loop vazio, que mantem o microcontrolador ativo aguardando a próxima interrupção. O código usado e um arquivo .h com um áudio exemplo estão disponíveis em nosso GitHub.

Montagem

A montagem é bem simples, como mostra a imagem abaixo:


Ela basicamente consiste em uma rede R2R, com a saída ligada em um capacitor e uma caixa de som para computador. Já os pinos de 0 a 7 são ligados aos pinos de mesmos valores do Arduino.
O funcionamento desse circuito é simples, já que ele consiste basicamente em um conversor digital analógico. Esse conversor transforma a saída do Arduino em um sinal de tensão analógico que é usado na caixa de som. O capacitor presente é um capacitor de desacoplamento, já que a saída do R2R apresenta um nível de tensão CC e a componente de CA.
É importante observar que esse circuito não apresenta um amplificador, já que a caixa de som usada já possui um amplificador interno. Viu só como foi fácil? Agora me conta nos comentários, que som que você vai usar para esse projeto? 

0

Conhecimento

Você já deve ter precisado converter um sinal digital, gerado por um microcontrolador, em um sinal analógico, mas como fazemos isso? É para isso que serve o R2R, um circuito simples, mas muito útil, que usa apenas alguns resistores. Para entendermos seu funcionamentos, primeiro precisamos conhecer sua construção, que esta mostrada no esquemático abaixo.



O nome R2R é fácil de entender quando olhamos para o circuito, uma vez que os valores de resistência do circuito alternam entre um resistor de valor R e um com dobro de resistência, 2R. As entradas rotuladas de V0 até V3 são entradas digitais e Vout é a saída desse circuito.


Para usar esse circuito você insere uma palavra binária com V0 sendo o bit menos significativo, e V3 sendo o mais significativo. Como resultado, será obtido uma tensão em Vout, cujo o valor esta entre 0V e um valor de referencia, equivalente a tensão de um bit em nível lógico alto.


Para realizar a analise desse circuito vamos recorrer a 2 princípios bem interessantes da eletrônica, o principio da superposição, e o equivalente de Thévenin.


Calculo da Tensão de Saída em Função das Entradas Para 4 Bits

Considerando, em um primeiro momento, apenas o efeito de V0, temos V1=V2=V3=0. Assim o circuito fica como a imagem abaixo.



Determinando o equivalente de Thévenin para o ponto A, precisamos primeiro desconectar o restante do circuito, o que nos deixa com o que esta mostrado abaixo.



Para este circuito, a resistência de Thévenin é obtida substituindo V0 por 0V, assim a resistência será o paralelo dos dois resistores, ou seja R.


Já a tensão no ponto A (V_A) será obtida através do divisor resistivo formado pelos dois resistores de 2R, obtendo-se V_A=\frac{2R}{2R+2R}V0=\frac{V0}{2}, assim, o circuito fica como abaixo.



Repetindo essa analise, temos que a tensão no ponto B será \frac{V0}{4}, para o ponto C, \frac{V0}{8}, e por fim, temos que a tensão de saída será Vout=\frac{V0}{16}, quando consideramos o efeito de V0 apenas.


Agora consideraremos apenas a fonte V1, desprezando as demais fontes, o que nos deixa com o circuito abaixo.




A resistência equivalente até A é dada pelo paralelo dos dois resistores que antecedem esse nó, resultando em um resistor de resistência R, portanto a resistência antes do ponto B é de 2R, o que nos deixa com o circuito abaixo.




Esse circuito é quase igual ao que tínhamos para V0, logo, de maneira similar ao caso anterior a tensão no ponto B será \frac{V1}{2}. Para o ponto C teremos \frac{V1}{4}, e por fim Vout=\frac{V1}{8} para a saída.


Nesse ponto você já deve ter percebido que o mesmo raciocínio serve para V2 e V3. Considerando cada uma dessas fontes individualmente, teremos Vout=\frac{V2}{4} para V2 e Vout=\frac{V3}{2} para V3.


A tensão na saída considerando todas as fontes é dada pela soma de todas as contribuições individuais, uma vez que aplicamos o principio da superposição. O que resulta na equação abaixo:


(1)   \begin{equation*}Vout=\frac{V0}{16}+\frac{V1}{8}+\frac{V2}{4}+\frac{V3}{2}\end{equation*}




Generalizando…


Se quisermos colocar mais entradas no nosso circuito, basta adicionar um novo conjunto de resistores R2R, como mostra a imagem abaixo.



Ao adicionar esses novos resistores à sua rede R2R, a tensão na nova saída (Vout_novo) sem considerar a nova fonte de tensão (V4) será a metade da saída antiga (Vout_antigo). Mas se desprezarmos as demais fontes de tensão, e calcularmos a tensão de saída apenas para V4, encontraremos \frac{V4}{2}. Por fim, aplicamos o principio da superposição novamente, encontrando:


(2)   \begin{equation*}Vout=\frac{V0}{32}+\frac{V1}{16}+\frac{V2}{8}+\frac{V3}{4}+\frac{V4}{2}\end{equation*}



Se você observar os denominadores das equações 1 e 2, você verá que temos potências de base 2, de forma que 32=2^5, 16=2^4 e assim por diante. Então, a equação anterior pode ser escrita como sendo:


(3)   \begin{equation*}Vout=\frac{V0}{2^5}+\frac{V1}{2^{4}}+\frac{V2}{2^3}+\frac{V3}{2^2}+\frac{V4}{2^1}\end{equation*}



A fim de generalizar essa expressão, tomaremos o circuito abaixo.



Se você observar as equações 1 e 3, você verá que, quando temos 4 entradas digitais, a contribuição de V0 é dividida por 2^4. Já para 5 entradas, temos V0 dividido por 2^5, disso concluímos que para n entradas, teremos \frac{V0}{2^n}.


Para V1, temos, \frac{V1}{2^3} para 4 entradas, e \frac{V1}{2^4} para 5 entradas. Assim, para n entradas, ficamos com \frac{V1}{2^{n-1}}.


A entrada mais a direita, sempre ficou dividida por dois, assim, para n entradas, teremos \frac{Vn-1}{2}. Por fim a expressão 3 pode ser reescrita de modo geral como sendo:


(4)   \begin{equation*}Vout=\frac{V0}{2^n}+\frac{V1}{2^{n-1}}+\frac{V2}{2^n-2}+...+\frac{Vn-3}{2^3}+\frac{Vn-2}{2^2}+\frac{Vn-1}{2^1}\end{equation*}


O R2R é um circuito simples, porém muito útil, capaz de converter sinais digitais em analógicos. E você, já conhecia ele? Deixe seu comentário.

1

Conhecimento


Os retificadores são os responsáveis pela transformação de corrente alternada em corrente contínua, mas o que isso significa?

Para entendermos isso, primeiro precisamos lembrar o que significam corrente alternada (CA) e corrente contínua (CC). De modo simples, a corrente alternada, como o nome já diz, alterna constantemente o seu sentido, sendo ora positiva e ora negativa, seguindo um comportamento senoidal, como a figura a seguir nos mostra. Por outro lado, a corrente contínua possui um sentido único, que se mantém constante, sempre fluindo do positivo para o negativo (este é o sentido convencional).

Os sinais CA são muito usados na geração e distribuição de eletricidade, sendo o tipo de sinal que chega nas tomadas de nossas casas. Entretanto a maior parte dos eletrônicos que possuímos funcionam com corrente contínua, isso porque a corrente contínua pode ser facilmente armazenada em pilhas e baterias. Além disso, computadores, celulares, entre outros funcionam através da lógica binária, e para isso precisam internamente de tensões estáveis para servirem como níveis baixo (0) e alto (1).

Então, como ligamos circuitos de corrente continua (CC) com a energia das tomadas (CA)?

É aqui que entram os retificadores, que são circuitos elétricos com a função de retificar a tensão CA, isto é, transformá-la em corrente contínua.


Retificadores de Meia Onda

De modo geral, para a retificação de uma senoide apenas se usa uma característica bastante conhecida de um diodo, que é sua capacidade de condução em uma única direção. A imagem abaixo mostra a esquerda um circuito retificador simples, nele o diodo conduz corrente para a carga apenas quando a tensão entre o seu catodo e anodo (V_{21}) é positiva, bloqueando a corrente quando V_{21} é negativa. Já na imagem a direita temos a tensão na carga R, esta tensão é uma réplica do sinal de entrada, porém com a parte negativa removida.

Esse tipo de circuito é chamado de retificador de meia onda, uma vez que ele elimina metade da onda de entrada. Além disso, embora sem a parte negativa, este sinal ainda não é um sinal CC puro, já que ele não é estável em uma única tensão.

Para aumentar a estabilidade da tensão costuma-se usar um capacitor, ligado paralelo com a carga, como no circuito a seguir.


A ideia aqui é bem simples, ela consiste em carregar o capacitor, durante os picos de tensão, e usar o capacitor para fornecer energia para a carga quando a tensão está em baixa. Assim é possível alcançar maior estabilidade na tensão. Entretanto, com esse tipo de circuito ainda temos alguns problemas, sendo os principais o baixo aproveitamento da tensão, já que ele descarta metade do sinal, e que, mesmo com o capacitor, o sinal ainda continua uma grande variação de tensão, o que fica visível na próxima imagem.


Um modo de contornar estes problemas é o uso de retificadores de onda completa.

Retificadores de Onda Completa

O circuito de retificação mais utilizado é a ponte retificadora, sendo possível construí-la com diodos discretos, como o 1N4007, 1N4148, 1N5402, entre outros, ou podendo ser comprado já montado, como nas pontes KBPC5010, MB10F, e outros. Este circuito é um retificador de onda completa, ou seja, ele não só mantém a parte positiva da onda de entrada como também realiza a reflexão da parte negativa. Sua montagem é simples, envolvendo apenas 4 diodos, ligados como mostrado abaixo.


O funcionamento deste circuito pode ser separado em 2 momentos diferentes. Primeiro, quando a tensão é positiva. Nessa condição os diodos
D1 e D2 conduzem corrente elétrica, enquanto os diodos 3 e 4 a bloqueiam, isto está ilustrado na imagem a direita. A imagem a esquerda representa o segundo momento, quando a tensão de entrada é negativa. Nessa condição o inverso ocorre, isto é, os diodos 3 e 4 conduzem e os diodos 1 e 2 bloqueiam a corrente elétrica.

 

Testes Experimentais

Na imagem a seguir temos a tensão usada para alimentar uma carga de 10kΩ após um retificador de onda completa construído com os diodos 1N4148. Essa imagem foi obtida realizando medições com um osciloscópio. Nela vemos que a tensão fica em 0V por alguns instantes, mesmo em um retificador de onda completa. Isso ocorre porque o diodo usado apresenta uma queda de tensão mínima antes da condução de aproximadamente 0,7V. Note que o circuito montado não apresenta o capacitor presente no circuito retificador de onda completa apresentado anteriormente.

Quando usamos um retificador de meia onda, para uma mesma carga, temos como resultado a imagem abaixo. Note que a tensão de pico para ambos os retificadores é a mesma (9,30V). Porém frequência reduz pela metade, quando comparamos com um retificador de onda completa, apesar da fonte ser a mesma.

A diferença nas frequências são provocadas uma vez que o retificador de meia onda conserva a frequência da fonte. Enquanto o retificador de onda completa dobra a frequência, já que o sinal se repete a cada semi ciclo.


Colocando um capacitor de 100uF no retificador de onda completa obtêm-se uma tensão plana como mostra a imagem a seguir.


Note que a tensão é quase constante, já que o capacitor usado possui um valor muito alto. 
Pontes retificadoras são de grande importância na eletrônica. E você, já conhecia elas? Deixe seu comentário sobre o que achou do post. 

0