• Welcome to LusoRobótica - Robótica em Português.
 

Sensor de som com Arduino

Started by guibot, 03 de May de 2009, 16:13

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

guibot

Finalmente tive tempo para continuar com esta investigação que se tem vindo a arrastar, mas que estou a obter bons resultados  :)
Trata-se de um sensor de volume sonoro, o circuito que usei é este: http://www.rev-ed.co.uk/docs/picaxe_sound.pdf

Estou a usar microfones que tinha aqui para casa de uns headsets partidos:

No seu interior podemos ver que se tratam de microfones do tipo electrec

O circuito

Detalhe do circuito. Estou a usar um condensador de 10uF para estabilizar o sinal de output. É o condensador verde que se encontra mais à direita.
Não me consigo imaginar a soldar estes componentes todos quatro vezes numa pcb, já que gostava de ter uma aplicação com pelo menos quatro microfones....  :)

E aqui um video com um sketch em processing para vizualizar os dados recebidos pelo arduino:

http://www.flickr.com/photos/guibot/3497408152/#secret8980785104-w500-h375

E o respectivo código:

/* ****************************************************

Arduino Code

**************************************************** */

int analogValue;
int val;

void setup()
{
// start serial port at 9600 bps:
Serial.begin(9600);

}

void loop()
{
// read analog input
analogValue = analogRead(0);

// send values to processing
Serial.println(analogValue, DEC);

// pause for 10 milliseconds:
delay(10);

}


/* ****************************************************

Processing Code

**************************************************** */

// import the Processing serial library
import processing.serial.*;

// declare a font variable
PFont font48;

int linefeed = 10; // Linefeed in ASCII
Serial myPort; // The serial port

// value recieved from the serialport / arduino
int sensorValue;

// mapped value
float sensorValueMap;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Setup

void setup() {
myPort = new Serial(this, Serial.list()[0], 9600);

// read bytes into a buffer until you get a linefeed (ASCII 10):
myPort.bufferUntil(linefeed);

size (800, 600);
background (0);
//smooth();

// you need to have this font in your machine, if not go to
// Tools - Creat Font - and create your own font
font48 = loadFont("alask_48.vlw");

textFont(font48);

}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Serial Event

void serialEvent(Serial myPort) {
// read the serial buffer:
String myString = myPort.readStringUntil(linefeed);

// if you got any bytes other than the linefeed:
if (myString != null) {

myString = trim(myString);
//println(myString);
// split the string at the commas
// and convert the sections into integers:
int sensors[] = int(split(myString, ','));

// print out the values you got:
for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
//print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\n");

// sensor
sensorValue = sensors[0];
//sensorValueSmooth = sensors[1];

}
}
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Draw

void draw() {

// set the black backgrounf
background(0);

// run the displayText() function
displayText();

// map the recieved values
sensorValueMap = map(sensorValue, 0, 1024, 0, 800);

// draw a rectangle based on the variable sensorValueMap
rect (0, 100, width, sensorValueMap);
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Display Text

void displayText() {

text("Sensor Value", 20, 80);
text(sensorValue, 450, 80);

}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Save image

void keyPressed(){
if(key=='s')
saveFrame("sound-######.png");
}

TigPT

Muito bom artigo a dar continuidade ao do amgcgoncalves da semana passada.
http://lusorobotica.com/index.php/topic,809.0.html

Continua o bom trabalho ;)

metRo_


Fifas

temos guitarrista :D (por acaso gostava de dar uso a minha viola :P )

mas deixando o off-topic: excelente post! :)

tinhas-me pedido isto quando postei o "Detetor de ruido" mas nunca mais me lembrei de pesquisar :P

Gostava de fazer uma coisa assim (tenho um micro desses por cá) e se possivel variar a intensidade de um led tambem conforme o som (fácil)

vou ver se arranjo um tempito pa por em pratica :D

SPADAcorp

boas.
Sou novato nestas andanças.
Sou um artista plástico, estou a dar os primeiros passos com o arduino.

Tentei reproduzir o sensor de som aqui postado e não consegui por a funcionar.
Notei que no esquema que representa o circuito anexo em pdf  tem um condensador 1n0 mas no esquema da breadboard tem uma resistencia de 1k no lugar do condensador.
Alguem me sabe explicar?
já montei os dois esquemas e não consigo receber valores acima de 0.

O objectivo da experiencia que  vou tentar fazer é estudar ambientes de salas e depois meter uns leds (ou quem sabe mais tarde algo mais) a reagir segundo o som ambiente.

Se alguem puder dar umas dicas. agradeço