mardi 28 juillet 2015

Brancher un haut-parleur à l'Arduino

Vous désirez produire un son ou de la musique au moyen de votre Arduino?  Ce n'est pas très compliqué, puisque la commande "tone()" permet de faire osciller n'importe quelle sortie de l'Arduino à la fréquence désirée.

Il reste à brancher à cette sortie un transducteur qui transformera cette oscillation électrique en onde sonore.  Si vous optez pour un buzzer piézo de forte impédance, pas de problème majeur: vous branchez une de ses connexions à la masse (GND) et l'autre à la sortie de l'Arduino que vous faites osciller.

Cependant, les choses se compliquent un peu si vous utilisez un haut-parleur électrodynamique, puisque la plupart d'entre eux ont une faible impédance de 8 Ω...

Supposons que vous branchez un haut-parleur de 8 Ω directement à l'une des sorties de l'Arduino, tel qu'illustré ci-dessous.  Cette sortie oscille entre une tension nulle et une tension de 5 volts.  Une application rapide de la loi d'Ohm nous permet d'estimer qu'une charge de 8 Ω soumise à une différence de potentiel de 5 volts sera traversée par un courant de 5 / 8 = 0,625 A ou 625 mA.  Le hic, c'est qu'il n'est pas conseillé de faire circuler par une sortie de l'Arduino un courant supérieur à... 20 mA.  Le branchement illustré risque donc de griller votre microcontrôleur!



Une solution possible est d'ajouter une résistance en série avec le haut-parleur de façon à ce que le courant soit de 20 mA.  Nouvelle application de la loi d'Ohm:  résistance totale = 5/0,20 = 250 Ω. Vous pouvez essayer, mais il y a fort à parier que votre haut-parleur émettra un son de très faible intensité.

Que faire alors?   Commander le haut-parleur par l'entremise d'un transistor, tout simplement.  Dans le montage illustré ci-dessous, le faible courant qui circule dans la sortie numéro 5 de l'Arduino et dans la base du transistor contrôle le courant qui circule dans le haut-parleur et à travers le trajet collecteur-émetteur du transistor.


Le courant maximal pouvant circuler dans la sortie 5 volts de l'Arduino est indépendante du microcontrôleur, elle dépend plutôt des normes USB (en supposant que votre Arduino est alimenté par son port USB) et par le fusible réarmable (polyfuse) installé sur la carte:  ce courant peut atteindre près de 500 mA sans problème (mais pas uniquement pour votre haut-parleur:  pour la totalité de la carte).

Notre calcul plus haut a montré qu'un haut-parleur  de 8 Ω soumis à une tension de 5 volts sera traversé par un courant de 625 mA, ce qui semble un peu trop élevé.  Bien sûr le transistor absorbera une petite fraction de ces 5 volts, mais  il est  quand même plus sage d'ajouter une résistance d'au moins 10 Ω en série avec le haut-parleur (j'ai personnellement utilisé 100 Ω). Cette résistance peut être un potentiomètre si vous désirez contrôler le volume du son émis.




N'importe quel transistor NPN devrait faire l'affaire, il faut simplement s'assurer qu'il peut tolérer un courant d'environ 500 mA à travers le trajet collecteur-émetteur.  Avec son courant maximal de 200 mA, le 2N3904 ne semble pas un très bon choix.  Pour la rédaction de cet article, j'ai utilisé un PN2222 (courant maximal de 500 mA).

Pour vérifier que votre circuit fonctionne convenablement, vous pouvez utiliser l'exemple "toneMelody" fourni avec l'IDE Arduino (Exemples - 02.Digital - toneMelody).  La mélodie s'exécute à l'intérieur du setup, vous pouvez donc appuyer sur le bouton "reset" si vous désirez qu'elle joue une autre fois.



Ajout (17 mai 2017):

Vous pouvez remplacer le transistor bipolaire par un MOSFET.  Le schéma ci-dessous montre un circuit utilisant un MOSFET, dans lequel on a ajouté un potentiomètre pour contrôler le volume sonore (source:  forum Arduino).



Yves Pelletier   (TwitterFacebook)

5 commentaires:

  1. Salut

    Effectivement il est bon de rappeler qu'un montage "barbare" est incompatible avec le courant Max supporté par les sorties de l'arduino.

    Cependant, concernant les resistances en série que tu ajoutes, pour le reflexe et pour la forme, il serait bon de procéder au calcul de la puissance dissipée par la resistance : calcul du nouveau I dans la resistance, et calcul de P =R.I²
    Pour mémoire, la plupart des resistances et potentiomètres supportent 1/4 de W !

    Ex : pour ta resistance de 100 ohm, on arrive à 0.15W = parfait.
    Pour une resistance de 10 ohm : 239mA, ce qui nous donne 1.02W dans la reisstance !! Autant dire qu'une 1/4 de watt ne va pas durer longtemps !

    RépondreSupprimer
    Réponses
    1. Bon point! Si vous utilisez une résistance de 10 Ω, il faut prévoir une résistance d'au moins 1/2 W (le rapport cyclique du signal PWM étant de 50%).

      Supprimer
  2. Bonsoir,
    Pensez-vous qu'il serait possible de récuperer les vibrations d'une guitare à l'aide d'un piézo utilisé en sens direct, de traiter (amplifier ce signal avec une carte arduino) puis de renvoyer ce signal dans un buzzer piezo ? (que je fixerai dans la caisse de résonnance de ma guitare pour amplifier encore un peu plus le son ?)
    Si oui, ou pourrais-je me fournir en patch piezo en particulier le buzzer ?
    Merci d'avance pour le temps consacré à me répondre,

    Martin Marescaux
    martinmarescaux97@free.fr

    RépondreSupprimer
  3. Bonjour, je suis débutant et je fais des recherches sur les transistors... le but de mon expérience et simple générer du 12V alternatif a partir d'un transistor et d'un arduino comme ce tutoriel, j'ai fais un test simple mais il y a un Hic... je n'arrive pas a comprendre:
    je me suis basé sur le programme Blink de Arduino pour faire "osciller" une sortie (en l’occurrence ici la 13)
    avec:
    digitalWrite(13, HIGH);
    delay(50);
    digitalWrite(13, LOW);
    ...
    sur l'electronique j'ai ma source de 12V en continu donc un + et un - un transistor Npn (j'ai beaucoup d'autre transistor récupérés) avec Base Émetteur et Collecteur ce qui fais trois patte et donc ma théorie étais que si j'appliquais un signal (oscillant) a la base du transistor, il serais en mesure de "Découper" mon courant continu et ainsi pouvoir obtenir de l'alternatif ... mais une fois avec les composants en mains ... c'est autre chose je ne sais pas comment brancher tout sa ! tout en sachant que le transistor n'a que 3 bornes mon alimentation 12V en a 2 et j'ai logiquement 2 fils pour le "signal de l'arduino" quelqu’un peut il m'aider ??? je suis vraiment débutant dans l’électronique et je voudrais juste réussir cette expérience pour pourvoir mieux comprendre ..
    Merci d'avance si quelqun a le courage de m'aider :D

    RépondreSupprimer
  4. bonjour je suis interessé pour assembler ce module avec un MOSFET. Auriez vous une référence pour le MOSFET ? merci d'avance. Je souhaite concevoir un module compatible shield grove pour des collègiens dans le cadre d'un projet borne d'accueil à l'entrée d'un collège.
    cordialement lchastain professeur de technologie
    cf ma page de CAO dédiée : http://moncoursdetechno.ovh/coin_maker/modules_electroniques.html

    RépondreSupprimer