Je vous ai déjà parlé de ma femme?

Bon. Après la chute des dominos, elle veut maintenant photographier un ballon de baudruche qui explose, en projetant de la farine qu'on aura préalablement introduite dans le ballon susmentionné. Je ne me prononcerai pas, car je suis assez mal placé pour juger de la folie des gens. Je vais d'ailleurs le prouver sous peu... Non, et puis ça peut quand même avoir un chouette rendu, ce ballon!

Et du coup, j'ai commencé à bricoler avec un micro à électret, pour voir comment je pouvais récupérer le signal sur une Arduino. De fil en aiguille, j'ai fini par carrément enregistrer un fichier son à partir du montage. Qui parlait de folie?

1. Connecter un micro à électret

Voici comment ça se passe. Comme d'hab, s'il y a des électroniciens (des vrais) dans la salle, j'attends les conseils avisés... Je ne suis pas du tout expert dans le domaine.

image

A l'oscilloscope, on peut voir qu'en soufflant dans le micro, on obtient un pic à environ 0.1V, ce qui est trop peu pour être traité par l'ADC de Arduino. Nous devons donc...

2. Amplifier le signal du micro

Rhooo mais quelle transition!

Pour l'amplification, j'ai pensé à un bête transistor; mais je recherche surtout un gain en tension, donc j'ai opté pour un petit amplificateur opérationnel, le LM358.

image
Les attentifs verront que RF=320k, alors que par la suite je parle de 220k. Vous referiez une capture, vous?

Selon la fiche technique du LM358, la tension maximale de sortie est égale à la tension d'alimentation moins 1.5v. Dans mon cas, la tension d'alimentation étant de 5v, je peux espérer un maximum de 3.5v en sortie.

Dans ce montage en mode inverseur, le gain en tension est égal à RF/RI, soit 220/4.7 = 47. Donc un pic à 0.1v à l'entrée ressortirait à 4.7v. Sauf qu'en vrai, on l'a vu, il sera plafonné à 3.5v environ. Mais pour la démo, on s'en fout en fait.

3. Acquérir le signal sur l'Arduino et le retransmettre à un PC par le port série

Alors maintenant, l'idée est de lire le signal de sortie de l'ampli, et de le resservir au PC pour construire un semblant de fichier son, brut de brut.

La première étape consiste donc écrire un petit programme pour l'Arduino, qui lit la valeur du signal à intervalles réguliers (4KHz) et les rebalance aussitôt à travers le port série.

J'ai décidé de brider à 4KHz, parce qu'une lecture avec analogRead(9) prend un temps non négligeable: 100 microsecondes.

Pour être large, une mesure toutes les 250μs, c'est bon. Et c'est de toute façon bien plus rapide que de trouver comment faire un μ sur un clavier suisse.

int inputPin = A0;
unsigned long intervalMicros = 250; //us
unsigned long nextMicros = 0;

void setup() {
  //On va écrire dans le port série à fond les ballons
  Serial.begin(2000000);
  nextMicros = micros();
}

void loop() {
  unsigned long currentMicros = micros();
  if(currentMicros < nextMicros)
    return;

  nextMicros = currentMicros + intervalMicros;

  //Chaque 250 microsecondes, on lit la valeur analogique sur A0
  int level = analogRead(inputPin);
  //Mapper la valeur sur l'intervalle 0-255
  level = map(level, 0, 1023, 0, 255);
  //Et on envoie la valeur sur le port série
  Serial.write(level);
}

4. Lire les valeurs brutes depuis le port série du PC, et les enregistrer dans un fichier

Tout est dans le titre. Un peu de python fera l'affaire

import serial

def main():
    print("PyRecorder v0.1")
    ser = serial.Serial('/dev/ttyACM0', 2000000)
    f = open("output.raw", "wb")
    while True:
        val = ser.read()
        f.write(val)
        f.flush()

if __name__ == '__main__':
    main()

Fonctionnement: on démarre le programme, on braille "Ah! Ah! Ah!" (ou une bonne vieille exclamation si chère à Gilles de la Tourette) dans le micro, et on quitte avec Ctrl+C. Il en ressort un fichier output.raw

5. Importer le fichier raw dans Audacity

Je vous préviens d'abord, le son est tout à fait crado.

Il faut préalablement installer Audacity.

Démarrer Audacity, et aller dans Fichier>Importer>Données brutes(Raw).

Sélectionner le fichier créé au point 4.

  • Fréquence d'échantillonnage : 4000Hz.
  • Encodage: Unsigned 8 bits PCM.
  • 1 canal.

6. Écouter l'horreur

AAAhkssssshhhAAHkkssshhhLAPINksshhhhCULssshhh

Article précédent Article suivant