venerdì 4 settembre 2015

Microfono Keyes per Arduino


Mi sono comprato un paio di modulini Keyes con microfono per provare a registrare suoni con Arduino (ed anche per provare la modalita' Fast Analog Read)

La scelta e' caduta sui microfoni Keyes che hanno una uscita analogica ed una uscita digitale (superata una certa soglia lo stato digitale si alza ad 1)
Il modulo ha anche un trimmer (in blu) con una vite che non sembra avere un fondo scala


Come semplice prova ho collegato Vcc, Gnd ed A0 e montato lo sketch Basic/AnalogReadSerial

--------------------------------------------
void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);     
}
--------------------------------------------

sul lato PC per vedere in diretta i dati ho preso un esempio di Processing

--------------------------------------------
import processing.serial.*;

Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph 

PrintWriter output;
//Variables to draw a continuous line.
int lastxPos=1;
int lastheight=0;

void setup () {
  size(600, 400);        
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[1], 9600);  //
  myPort.bufferUntil('\n');
  background(0);      // set inital background:
  output = createWriter("dati.txt"); 
}

void draw () {
}

void serialEvent (Serial myPort) {
  String inString = myPort.readStringUntil('\n');
  output.println(inString);
  if (inString != null) {
    inString = trim(inString);                // trim off whitespaces.
    float inByte = float(inString);           // convert to a number.
    inByte = map(inByte, 0, 1023, 0, height); //map to the screen height.

    stroke(127,34,255);     //stroke color
    strokeWeight(4);        //stroke wider
    line(lastxPos, lastheight, xPos, height - inByte); 
    lastxPos= xPos;
    lastheight= int(height-inByte);

    if (xPos >= width) {
      xPos = 0;
      lastxPos= 0;
      background(0);  //Clear the screen.
    } 
    else {
      xPos++;
    }
  }
}
--------------------------------------------

Alla prova dei fatti il sensore si rileva estremamente poco sensibile anche in modalita' analogica. Si osservano variazioni sensibili di corrente solo per rumori molto forti e vicini


Anche agire sul trimmer non migliora la situazione. Di fatto si alza e si abbassa solo l'offset della misura (il grafico si muove lungo l'asse Y) ma non si hanno miglioramenti della misura

Fondamentalmente inutile