Problème avec un micro MEMS (Adafruit SPW2430)

Bonjour à tous,

J'ai reçu il y a peu un microphone MEMS de chez Adafruit (celui-là pour être précis).
J'ai beau le tester, il y a plusieurs choses qui ne vont pas :

  • Ce n'est absolument pas réactif : la valeur du capteur varie de 10/20 en criant dessus, cela varie un peu plus lorsque je tapote dessus mais ce n'est pas le but, je veux interagir avec la voix !
  • La valeur du capteur,diminue avec le temps et perd 1 à chaque seconde

Je sais que le micro n'est pas amplifié mais la démo sur la vidéo Adafruit (à 7min12) montre le capteur sans amplification, et ça marche très bien !

Le capteur est connecté comme suit :

  • Vin -> 3.3v
  • 3v -> AREF
  • GND -> GND
  • AV -> rien
  • DC -> A0

Sinon un schéma du montage :
Montage

Et le code que j'utilise (simplement, que l'éclairage d'une led soit proportionnel au volume sonore) :

const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
  analogReference(EXTERNAL);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);

  // print the results to the serial monitor:
  Serial.print("sensor = ");
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);
}

Bonjour,
ton montage est peut-être correct, mais celui de la vidéo est différent ...

trimarco232:
Bonjour,
ton montage est peut-être correct, mais celui de la vidéo est différent ...

Oui oui, comme dans la vidéo j'ai essayé en ajoutant une résistance entre le 3v du micro et AREF, mais c'est pas mieux…

the output peak-to-peak voltage has a 0.67V DC bias and about 100mVpp (peak-to-peak) when talking near the microphone

en français : à la sortie, il y a une tension continue de 0v67, et une excursion max de 0v1

ton soft doit en tenir compte :
0v67 = pas de son
0v57 ou 0v77 = son maxi

bien vu pepe !

trimarco232, pepe : merci pour vos conseils (et je ne tapoterais plus sur mon micro, promis :slight_smile:

Avec analogReference(INTERNAL), ça marche un peu mieux mais ça marche bien mieux avec les deux résistances, une de 2,7kΩ entre 3V et AREF et une seconde de 1kΩ entre AREF et GND.

Par contre, le problème de stabilisation demeure : lorsque je lance le moniteur série, la valeur du capteur indique environ 880 et bien une bonne minute à se stabiliser à 720. Après, quand je fais du bruit : cette valeur oscille plus ou moins fortement autour de 720.

C'est le fonctionnement normal à votre avis ? Je pensais que cette valeur allait simplement augmenter avec la volume sonore…

Note : j'ai mappé la valeur du capteur et l'ai également contrainte :

outputValue = map(sensorValue, 720, 800, 0, 255);
outputValue = constrain(outputValue, 0, 255);

Avec analogReference(INTERNAL), ça marche un peu mieux mais ça marche bien mieux avec les deux résistances, une de 2,7kΩ entre 3V et AREF et une seconde de 1kΩ entre AREF et GND.

Il n'y a pas un blème là ?
Qu'elle est la tension sur Aref ?
Moi je trouve 3,3V * 1k /(2,7k + 1k) = 0,89V.

Or dans la datasheet je lis que Vref ne doit pas être inférieur à 1 V,
En lisant entre les lignes on comprend que Vref ne doit pas être inférieur à la valeur minimale que peut prendre la référence interne qui est donnée à 1,1 V +/- 0,1 V
C'est un fonctionnement hors spec donc non garanti. Ce qui est génant avec les fonctionnements en zone hors spec c'est qu'il peut y avoir des effets secondaires imprévisibles.

Ed 11/2015 page 310 table 29-15

Quand je lis ceci sur le site Adafruit :

If you need a microphone with adjustable gain or auto-gain control, check out our mic+amplifier options. If you need a higher peak-to-peak, a rail-to-rail op-amp and some resistors can get you boosted up!

Il est clair que ce produit est difficilement utilisable sans amplification.

@pepe @68tjs : merci à vous deux pour vos contributions.

Habituellement, Arduino pour moi c'est surtout du plug'n play et je découvre là mes limites en ce qui concerne.

Pour l'instant, ce capteur n'est pas utilisable pour ce que je veux faire : il est réactif certes mais devoir attendre 1 bonne minute pour qu'il se stabilise, c'est un peu rédhibitoire…

Après, je pourrais l'amplifier avec un bidule là, LM386… mais c'est un peu difficile pour moi l'électronique (je débute :slight_smile:

Merci encore à vous deux !

Mais il me semble qu'on n'est plus vraiment à une approximation près, compte tenu du bricolage qu'on se permet déjà de réaliser avec ce module... :roll_eyes:

Exact, bel exemple d'information à but purement mercantile.

Bien, on peut clore le débat sur le fait que ce capteur est une belle merde dans la mesure où il est présenté comme accessible aux newbees et bricoleurs sur Arduino, alors que pour avoir un résultat probant il vaut mieux s'y connaitre en électronique…