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 ";".
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.
- // Importa a biblioteca de comunicação serial
- import processing.serial.*;
- // Cria um objeto para comunicação
- Serial myPort;
- float xPos = 1;
- float yPos0 = 1;
- float yPos1 = 1;
- float dt=1;
- int i=0;
- float inY0, inY1;
- void setup () {
- // Define o tamanho da janela
- size(800, 300);
- //Conecta-se com o primeiro dispositivo da lista
- myPort = new Serial(this, Serial.list()[0], 9600);
- // Espera receber o primeiro sinal da usb
- myPort.bufferUntil('\n');
- // Define a cor de fundo da janela
- background(255);
- }
- void draw () {
- // Nada será feito aqui
- }
- void serialEvent (Serial myPort) {
- // Pega a primeira linha recebida na porta serial
- String inString = myPort.readStringUntil('\n');
- // Se a linha não estiver em branco
- if (inString != null) {
- // remove os espaços em branco
- inString = trim(inString);
- // Divide a string num vetor separado por ;
- String[] vector = split(inString,';');
- // converte para int e muda os limites (map):
- inY0 = map(float(vector[0]), 0, 1023, 0, 350);
- inY1 = map(float(vector[1]), 0, 1023, 0, 350);
- // Desenha as linhas:
- stroke(255,0,0);
- line(xPos,yPos0, xPos+dt, height - inY0);
- yPos0=height-inY0;
- stroke(0,0,0);
- line(xPos,yPos1, xPos+dt, height - inY1);
- yPos1=height-inY1;
- // Se chegar no final da janela, volta para o início
- if (xPos >= width) {
- xPos = 0;
- background(255);
- }else {
- xPos+=dt;
- }
- }
- }
-
O resultado desse código é um gráfico como este abaixo.
0 comentários:
Postar um comentário