Electret VU LED

Een elektretmicrofoon is een microfoon waarin een akoestische trilling volgens een elektrostatisch principe resulteert in een elektrische spanning.

‘Electret’ is een samengestelde naam uit ‘electricity’ en ‘magnet’. Er is een ladings verschil tussen de twee kanten. Door een andere plaat zeer dicht tegen de electret plaat aan te zetten, en geluid de boel laten trillen, wordt er een kleine spanning opgewekt, die via een FET een grotere stroom laat lopen. De variaties in deze stroom tap je af met een condensator, die de directe stroom tegen houdt. Zo ga je dus van trillen lucht, naar trillen electret, naar spanningsverschillen, die de arduino kan ‘uitlezen’.

Zie vooral wikipedia voor betere uitleg. Dit is in ieder geval de man die het woord electret bedacht: Oliver Heaviside. Van hem komt ook het woord impedantie.

 

plaatje met de microfoon

plaatje met de versterker

aansluiten

  • GND op pin GND
  • Vcc op pin 3,3 of 5 Volt
  • AUD op een analoge pin (A0 – A5 ADC)

arduino sketch I

int microfoonPin = A0;   
int geluid; 

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

void loop() {
  geluid = analogRead(microfoonPin);    
  Serial.println(geluid);
}

sketch output

en toen?

Toen dacht ik: wat betekenen al die getallen? Bij stilte had ik 0 verwacht.

Vervolgens liet ik de sketch even lopen en berekende een gemiddelde over een output van enkele tienduizenden metingen:

En toen dacht ik: 512 is de helft van 1024. En 1024 is precies 10 bit. En de ADC cq Pin A0 is ook 10 bit.

dus blijkbaar zwabbert de output van de Electret microfoon + 100x versterker, rond het midden van 512.

De luidheid van het opgepikte geluid zal wel correleren met de deviatie t.o.v. het midden. Om dit te teste heb ik de Aduino sketch herschreven.

arduino sketch II

De belangrijkste verandering is dat er nu 100 metingen zijn, waarbij alleen naar de hoogste en laagste meting wordt gekeken. Daarnaast wordt het negatieve getallen positief gemaakt en opgeteld. Het maximum van de output blijft hierdoor 1024 (2 x 512) . Deze waarden vormen ook de output die naar de seriele poort (lees: naar de vaste computer via de USB kabel) worden gestuurd.

int microfoonPin = A0;   
int geluid;
int geluidMax = 512;
int geluidMin = 512;

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

void loop() {

  for (int i =0; i < 100; i++){
    geluid = analogRead(microfoonPin);
    if (geluid > geluidMax){
      geluidMax = geluid;
    }
    else {
    if (geluid < geluidMin){
      geluidMin = geluid;
    }
    }  
  }
  Serial.println(geluidMax-geluidMin);
  geluidMax = 512;
  geluidMin = 512;
}

sketch output II

De output van deze sketch heb ik in een excel grafiek gezet. Ik heb de sketch twee keer laten lopen. Eén keer met alleen achtergrondgeluid en één keer met een dubbele kuch op ongeveer twintig centimeter van de microfoon.

Het lijkt dus te kloppen: Deviatie van het midden = geluidssterkte.

en toen?

Toen moest ik aan mijn VU meter denken uit een eerder projectje. Uit een oud tapedeck van mamma mini, heb ik twee meters gerooid. Een ervan had ik aangesloten op een DS 1307 real time clock. Hier de output van toen:

De VU meter toont in drie stappen de uren, minuten en seconden.

Ik ga proberen de andere VU meter op het geluid te zetten. Misschien kan ik de kinderen zo wat feed-back geven op hun geschreeuw.

Allereerst de VU meter met een 10 kilo ohm weerstand in serie tussen GND en pin 3 gezet. Hier de sketch, waarin ‘het geluid’ van 0 tot 1024 wordt omgerekend naar 0 tot 255, die met PWM op de VU gezet wordt.

arduino sketch III

int microfoonPin = A0;
int vu_meterPin = 3;
int geluid;
int geluidMax = 512;
int geluidMin = 512;

void setup() {
  //pinMode(vu_meterPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {

  for (int i =0; i < 100; i++){
    geluid = analogRead(microfoonPin);
    if (geluid > geluidMax){
      geluidMax = geluid;
    }
    else {
    if (geluid < geluidMin){
      geluidMin = geluid;
    }
    }  
  }
  geluid = geluidMax-geluidMin;
  Serial.println(geluid);
  analogWrite(vu_meterPin,map(geluid,0,1023,0,255));

  //delay(100);
  geluidMax = 512;
  geluidMin = 512;
}

sketch output III

gelukt?

Op zich wel, maar de hoeveelheid storing vind ik enorm. Het viel me op dat de storing wel het krassen van de hardeschijf lijkt te volgen, maar niet het vollume van dat geluid. Daarom dacht ik dat de stroom voorziening via USB niet stabiel genoeg zou zijn. Dit mede ook omdat ik een arduino pro gebruik ipv een reguliere Arduino Uno.

Toen ik op proef de stroom via de Jack liet lopen wat ALLE RUIS WEG!

Zie hier de output met dezelfde sketch. Veel beter.

En dit is een registratie van Karlijn die boven in bed ‘ligt’. Meestal bonkt ze veel harder. Dus een erg gevoelige electret microfoon is het zeker.

en nu?

Nu weet ik dat geluidsvolume als input toegevoegd kan worden aan het arsenaal “omgevings” sensoren, als temp, licht, luchtvochtigheid, et cetera. Hier nog wat voorbeeldfilmpjes: De eerste is mijn hartslag (De storing komt door het vasthouden van de microfoon tegen mijn borst en filmen tegelijkertijd met apparatuur die net aan te kleine kabels zit. Maar de maximale uitslag liep mooi synchroon met mijn hartslag. Misschien lukt het eens een phono-cardio-gram te maken, waarop ook het sluiten van de hartkleppen zichtbaar wordt.). De tweede is Nina die het systeempje ook wel even wil testen.

en verder?

MEMs. Ik ben benieuwd hoe de MEMs microfoon het doet t.o.v. deze. Maar dat komt in een apart stukje terug. Update: werkt net zo prettig, alleen minder gain, dus van natuurne iets lage output (100 vs 67 o.i.d.)

MOSFET

en LED-strip

Het leuke van een MOSFET is dat je met een klein beetje stroom een veel grotere stroom kunt regelen. Zo kun je via een PWM-pin (Pulse Wave Modulation) van een arduino de lichten van een autolamp dimmen. Bovenstaande MOSFET kan 60 Volt gelijkstroom aan en 30 Ampere.

Zo is het schema: (deels gemaakt met fritzing)

De Volt gaat via de JACK naar binnen. Deze wordt op de arduino gesplitst in 3,3 Volt, 5 Volt en de Vin. Door de LEDstrip op de Vin aan te sluiten, is het aangesloten op de batterij, maar loopt de hele logistiek van de arduino via een eigen circuit. De MOSFET is een N-type. Het dient dus als Negatief, als afvoerputje. Vandaar de paarse kleur na de LEDstrip: rood richting zwart. Je kunt een LED strip niet laten branden vanaf een PWM pin zoals bij de VU meter. Die gebruikt nagenoeg geen stroom.

Hier de sketch:

int microfoonPin = A0;
int vu_meterPin = 3;
int ledPin = 5;
int geluid;
int geluidMax = 512;
int geluidMin = 512;

void setup() {
  //pinMode(vu_meterPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {

  for (int i =0; i < 100; i++){
    geluid = analogRead(microfoonPin);
    if (geluid > geluidMax){
      geluidMax = geluid;
    }
    else {
    if (geluid < geluidMin){
      geluidMin = geluid;
    }
    }  
  }
  geluid = geluidMax-geluidMin;
  Serial.println(geluid);
  int waarde = map(geluid,10,523,0,255);
  analogWrite(vu_meterPin,waarde);
  analogWrite(ledPin,waarde);

  //delay(100);
  geluidMax = 512;
  geluidMin = 512;
}

en hier het resultaat:


pjh

3 Responses to Electret VU LED

  1. Kris says:

    Geweldige tutorial! Dit hielp veel – Zelfs in het Nederlands in het Engels! Thanks – Kris

  2. Martin says:

    Echt zeer duidelijk hoe een en ander in zijn werk gaat, voortreffelijke weergave van het geluidsniveau.
    Bedankt.

    gr Martin

  3. Jack says:

    Nice net wat ik zoek
    Waar kan je soon printje met microfoon hallen?
    of wat zit er op (B44??)

    Gr Jack

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>