samedi 9 janvier 2016

Fabrication d'une entrée audio pour Arduino

Ayant en tête quelques projets impliquant le traitement d'un signal audio par une carte Arduino, j'ai construit une interface qui transforme la tension d'un signal audio pour qu'elle se situe entre 0 et 5 V.

Signal audio?

Le signal audio que je désire transformer est déjà sous forme électrique.  Il peut être issu d'un lecteur mp3, d'une chaîne stéréo, d'une guitare électrique, d'un clavier électronique, d'un microphone, de la carte de son d'un ordinateur... Il s'agit donc d'une tension électrique qui varie de la même façon qu'une onde sonore; si on y branche un haut-parleur, il en résulte un son audible.

Le problème...

Sauf que cette tension est centrée autour de 0 V, ce qui signifie qu'elle prend souvent des valeurs négatives.  De plus, elle est typiquement très faible (généralement 1 volt ou moins).


À titre d'exemple, la figure ci-dessus montre le signal obtenu à la sortie pour casque d'écoute d'un clavier électronique, réglé pour produire un son de trompette.  Le signal oscille entre -0,8 V et + 0,8 V environ.

Les entrées de l'Arduino sont conçues pour recevoir des tensions positives situées entre 0 et 5 V.  La fonction du circuit que je présente aujourd'hui est donc, d'une part,  d'amplifier le signal pour qu'il soit plus facile à mesurer au moyen de l'Arduino et, d'autre part, le superposer à une tension continue de 2,5 V afin que la tension reçue par l'Arduino ne soit jamais négative.


Ci-dessus:  le même signal, après transformation:  il oscille maintenant entre 1,5 V et 4,2 V environ: donc plus intense, et jamais négatif.

La solution!

Je n'ai eu aucune difficulté à trouver diverses propositions de circuit sur internet impliquant, sans surprise, un amplificateur opérationnel.  Dans la plupart d'entre elles, toutefois, l'amplificateur opérationnel est alimenté par une tension de 9 V, ce qui engendre à mon point de vue deux inconvénients:  la nécessité d'utiliser une source de tension distincte pour l'amplificateur opérationnel même quand l'Arduino est déjà branché à un ordinateur par un câble USB, et le danger que la tension de sortie de l'ampli soit supérieure à 5 V (ce qui est risqué pour l'Arduino).

Mon circuit est basé sur les résultats d'une discussion sur le forum Stack Exchange, sauf que j'utilise un amplificateur opérationnel TLC272 alimenté par la sortie 5 V de la carte Arduino.  De cette façon, aucun risque que la tension à la sortie de l'ampli soit plus petite que 0 ou plus grande que 5 V.

Autre différence par rapport au circuit d'origine:  j'ai ajouté un potentiomètre qui permet d'augmenter le gain de l'amplificateur.  Ça rend le circuit plus polyvalent:  je peux régler le gain à une valeur élevée si le son provient d'une guitare électrique (sans avoir d'abord passé par un ampli), ou à une valeur beaucoup plus faible si le son provient de la sortie déjà amplifiée conçue pour brancher un casque d'écoute.

Le circuit

Les résistances R1, R2 et R3 forment un diviseur de tension grâce auquel la tension à l'entrée + du TL272 est de 2,5 V.  Le condensateur de liaison C2 laisse passer le signal audio, qui viendra donc s'additionner à la tension continue de 2,5 V.  Par contre, il empêche cette tension de 2,5 V d'atteindre la source du signal audio (ce qui pourrait causer des dégâts!).

Le condensateur C1, allié à la résistance R1 forme un filtre qui empêche de possibles fluctuations de l'alimentation de 5 V de se superposer au signal sonore.

Les résistances R4, R5 et R6 sont branchées de façon à configurer le TLC272 en amplificateur non-inverseur.  Le gain de l'amplificateur est égal à 1 + (R5+R6)/R4.  Donc quand le potentiomètre est réglé à zéro, le gain est de 2, et quand il est réglé au maximum, le gain est de 5,5.

(Notez que la valeur de tous les autres composants du circuit ont été calculés en supposant l'absence de potentiomètre, on peut donc présumer que le comportement du circuit est optimal lorsque le potentiomètre est réglé à zéro.)

Le condensateur C3 permet d'éviter que la composante continue du signal (2,5 V) soit amplifiée en même temps que la composante alternative.

Connecteur 

Pour l'entrée du signal audio, j'ai utilisé une prise jack pour casque d'écoute.  Le signal audio est véhiculé par la pointe, alors que le manchon est relié à la masse (GND).  Je n'ai pas utilisé l'anneau, qui transporte un autre signal audio (pour un effet stéréophonique).



À suivre...

Dans le prochain article, nous tenterons de visualiser le signal audio grâce au traceur série de l'IDE Arduino.

Yves Pelletier   (TwitterFacebook)

6 commentaires:

  1. Excellent article comme d'habitude, expliqué de façon claire et synthétique. Pour ma part, j'ai fait des mesures de tensions avec une appli androïd générant des signaux carrés simples. La tension moyenne rms en sortie est de 80mv ce qui est assez faible. On peut monter jusqu'à 200mv mais le signal est distordu.
    Pour l'amplification, il y a la possibilité d'utiliser des transistors simples (un petit npn et un gros pnp), en mode darlington ou pas ou des ampli op et même des mosfet. Attention toutefois aux ampliop. Ils peuvent très bien amplifier la tension mais fournir un courant de sortie en mode max très insuffisant. A choisir donc selon le modèle. En effet, on peut très bien avoir amplification de tension de sortie avec une puissance insuffisante pour la charge (le hp ou un autre système). Pour cela il faut faire des droites de charge...Cela permet de connaître les impédances d'entrée et de sortie...

    RépondreSupprimer
    Réponses
    1. Rappelons qu'il s'agit d'un amplificateur destiné à alimenter une entrée de l'Arduino, dont l'impédance avoisine les 100 megaohms...

      Supprimer
    2. Merci pour ta réponse, je n'ai aucune idée par contre du courant accepté en entrée.

      Supprimer
  2. oui vraiment excellent ! je me debrouille sur arduino mais pas du tout en electronique classique. existe t il un shield qui permettrait d'arriver au même résultat "sans souder" ?

    RépondreSupprimer
  3. merci pour cet article, malheureusement, je ne sais pas construire le circuit présenté. Existe t il une solution avec un module du commerce adapté à l'arduino ? Merci pour votre aide Renaud

    RépondreSupprimer
  4. Hello ! Merci pour ce tuto !
    Quelle est la référence exacte du TLC272 ? Il y a pas mal de choix et je ne voudrais pas commettre d'erreur :)
    http://www.conrad.fr/ce/fr/Search.html?search=tlc272+&searchType=mainSearchBar

    RépondreSupprimer

Related Posts Plugin for WordPress, Blogger...