Projeto: Usando microfone com o Arduino - Projeto TI
Headlines News :

.

Home » » Projeto: Usando microfone com o Arduino

Projeto: Usando microfone com o Arduino

Written By x86_g on 2013-04-03 | 6:40 AM


Seguindo a série de projetos resolvemos estudar o CI LM386. O LM386 é um amplificador de aúdio de baixa potência. Ele é um CI com oito pinos e a função de cada pino está descrito abaixo. O funcionamento é simples, basicamente, você liga um microfone de eletreto nas portas 2 e 3 e tem o sinal amplificado na porta 5. Lembrando que na porta 2 devemos ligar o GND e na 6 o +5V do arduino.

Para aumentar a amplificação, podemos adicionar um capacitor ligando as portas 1 (+) e 8 (-). Para melhorar a qualidade do sinal, podemos adicionar alguns capacitores e resistores. Na rede há diversos circuitos que mostram como fazer a ligação com o arduino. O que achei mais simples foi esse aqui. Para seguir o padrão do nosso site, fiz o diagrama fritzing do circuito que montamos.


Os capacitores C1, C2 e C3 são capacitores de 10microF e o C4 é de 100nF. O resistor de 10K pode ser substituído por um potenciômetro, o potenciômetro funcionará como um botão de volume.

Este é o esquema para um microfone, o que nós fizemos foi montar dois circuitos iguais a esse e ligar no mesmo arduino. Um microfone foi ligado na porta analógica 0 (como mostrado no diagrama) e o outro ligamos na porta 2.






Abaixo segue o código arduino para enviar o sinal dos microfones para o computador. Enviamos uma string com os valores lido nas duas portas analógicas, separados por ";".

  1. int A0 = 0;
    int A1 = 2;
    int var0, var1;
    int passo=1;
    void setup(){
     Serial.begin(9600);
    }
    void loop(){
     var0=var1=0;
     for(int i=0; i
       var0+=analogRead(0);
       var1+=analogRead(2);
     }
     Serial.print(int(var0/passo));
     Serial.print(";");
     Serial.println(int(var1/passo));
    }


Agora que o computador está recebendo os dados do arduino, usamos o Processing para pegar este sinal e fazer um gráfico do sinal do microfone em função do tempo.


  1. // Importa a biblioteca de comunicação serial

  2. import processing.serial.*;

  3. // Cria um objeto para comunicação

  4. Serial myPort;        

  5. float xPos = 1;      

  6. float yPos0 = 1;

  7. float yPos1 = 1;

  8. float dt=1;

  9. int i=0;

  10. float inY0, inY1;

  11. void setup () {

  12.    // Define o tamanho da janela

  13.    size(800, 300);

  14.    //Conecta-se com o primeiro dispositivo da lista

  15.    myPort = new Serial(this, Serial.list()[0], 9600);

  16.    // Espera receber o primeiro sinal da usb

  17.    myPort.bufferUntil('\n');

  18.    // Define a cor de fundo da janela

  19.    background(255);

  20. }

  21. void draw () {

  22.    // Nada será feito aqui

  23. }

  24. void serialEvent (Serial myPort) {

  25.   // Pega a primeira linha recebida na porta serial

  26.   String inString = myPort.readStringUntil('\n');

  27.   // Se a linha não estiver em branco

  28.   if (inString != null) {

  29.     // remove os espaços em branco

  30.     inString = trim(inString);

  31.     // Divide a string num vetor separado por ;

  32.     String[] vector = split(inString,';');

  33.     // converte para int e muda os limites (map):

  34.     inY0 = map(float(vector[0]), 0, 1023, 0, 350);

  35.     inY1 = map(float(vector[1]), 0, 1023, 0, 350);

  36.     // Desenha as linhas:

  37.     stroke(255,0,0);

  38.     line(xPos,yPos0, xPos+dt, height - inY0);

  39.     yPos0=height-inY0;

  40.     stroke(0,0,0);

  41.     line(xPos,yPos1, xPos+dt, height - inY1);

  42.     yPos1=height-inY1;

  43.     // Se chegar no final da janela, volta para o início

  44.     if (xPos >= width) {

  45.       xPos = 0;

  46.       background(255);

  47.     }else {

  48.       xPos+=dt;

  49.     }

  50.   }

  51. }

  52.  





O resultado desse código é um gráfico como este abaixo.



Share this article :

0 comentários:

Postar um comentário