Envie de raccorder un haut-parleur à votre Arduino, sans risque de griller quoi que ce soit ? Alors vous êtes au bon endroit ! Car ici, vous verrez comment, avec quelques composants additionnels, on peut facilement brancher un haut-parleur à un arduino, sans puiser trop de courant sur le microcontrôleur !
En fait, vous l’aurez compris, le principal « problème » est qu’une sortie arduino ne peut pas délivrer beaucoup de courant, ce qui empêche le branchement direct de « gros » haut-parleurs (car eux, ils sont plutôt gourmands en énergie !). C’est pourquoi il est nécessaire de mettre en place un « étage intermédiaire », entre l’arduino et le haut-parleur, afin que tout puisse fonctionner correctement.
Pour ce projet, à fin d’exemple, je suis parti sur un petit haut-parleur de 8 ohms, faisant 0,15 watts de puissance seulement. Si j’ai fait ce choix, c’est pour que ce haut-parleur puisse être alimenté depuis la carte arduino, sans ajout d’alimentation externe. Bien entendu, le principe de fonctionnement restera le même, qu’il s’agisse d’un petit, ou d’un gros haut-parleur ! Seuls seront à adapter l’alimentation fournie au haut-parleur, et les composants aux alentours.
Du reste, gardez bien à l’esprit que cet article se veut éducatif avant tout. Ici, le but premier est donc de permettre à un maximum de débutants d’apprendre comment brancher un haut-parleur sur un Arduino, sans que ce soit trop compliqué pour eux. C’est pourquoi j’en profiterai pour détailler au maximum la partie concernant le choix des composants, et le calcul de leurs valeurs, afin que chacun puisse suivre, comprendre, et adapter cette démarche à ses projets ! Bon, trêve de blabla, et place aux choses concrètes, sans plus attendre 😉
Matériel nécessaire pour ce projet
Voici la liste des composants utilisés dans ce projet, si vous souhaitez le reproduire à l’identique :
Aperçu | Désignation |
---|---|
1 x Platine Arduino Uno R3 | |
1 x Mosfet VN2106n (canal N, 300 mA, 6 ohms) | |
1 x Mini haut-parleur 8 ohms 0,15W (73 dB, 700 Hz à 4 kHz) | |
1 x Diode 1N4148 (150 mA, 1 V, rapide) | |
Autres composants électroniques (divers) : 1 x potentiomètre 10 kΩ linéaire (ou logarithmique) 1 x résistance 22 ohms 1/4 watt 1 x résistance de 1 kΩ 1/4 watt |
Nota : perso, j’ai pu trouver ces composants pour quelques euros seulement (la plupart chez FARNELL).
Pourquoi ne peut-on pas brancher directement un haut-parleur sur un Arduino ?
La plupart du temps, les haut-parleurs ont une « très » basse impédance (de 4 ou 8 ohms, par exemple). Ici, j’ai d’ailleurs pris un haut-parleur de 8 ohms dans ce projet, pour rester sur quelque chose de « classique ». Mais peut-être vous demandez vous certainement : pourquoi ne pas brancher directement un haut-parleur sur un arduino ?
En fait, si on applique la loi d’ohm aux bornes d’un haut-parleur de 8 ohms, alimenté en 5V, son courant nominal sera égal à : I = U / R, soit I = 5v / 8ohms, soit i = 0,625 A (ou 625 mA, si vous préférez !). Et comme un Arduino ne peut délivrer plus de 40 mA, au grand maximum, sur chacune de ses sorties, il est évident que brancher un haut-parleur directement sur une sortie arduino va rapidement l’endommager. C’est donc à bannir !
Au passage, une solution possible serait simplement d’ajouter une résistance entre le haut-parleur et l’arduino, afin de limiter le courant à 40 mA maxi. Mais ce faisant, la puissance sonore serait tellement diminuée, qu’il serait possible que le son ne soit quasiment plus audible ! Ce n’est donc pas non plus la chose à faire ici.
La « bonne » solution, selon moi, est d’ajouter des composants intermédiaires, qui permettront d’amplifier ce courant, afin de pouvoir alimenter correctement ce haut-parleur. Et pour ce faire, quoi de mieux qu’un transistor pour arriver à faire cela ? Ce sera donc, sans surprise, le cœur de notre montage !
Le saviez-vous ? Quand on parle de la valeur d’un haut-parleur en ohms, on parle en fait « d’impédance », et non de « résistance ». Mais n’ayez crainte, car c’est en quelque sorte la même chose (l’impédance étant simplement la résistance qui s’oppose au passage de tout courant alternatif). Par contre, cette impédance va varier en fonction de la fréquence, puisqu’un haut-parleur est par nature inductif (du fait de son bobinage). Du coup, ne croyez pas qu’un haut-parleur de 8 ohms aurait une impédance fixe de 8 ohms, quelque soit la fréquence du signal qu’on lui enverrait. En fait, cette valeur n’est valable que dans un seul cas : le cas où vous alimenteriez ce haut-parleur avec un signal sinusoïdal pur, de fréquence 1 kHz. Autrement dit, ces « 8 ohms » ne sont juste qu’un référentiel permettant de comparer les haut-parleurs entre eux, et non la valeur réelle (qui elle, varie en fonction de la fréquence).
Schéma de principe (raccordement HP sur arduino)
Avant tout, une petite remarque : ici, dans ce projet, j’ai choisi de prendre un haut-parleur 8 ohms / 0,15 watts. Si j’ai fait ce choix, c’est afin d’avoir un petit haut-parleur qui puisse loger sur une breadboard, et ne consommant pas trop de courant, pour pouvoir se brancher sur l’alim de l’arduino. Bien entendu, le principe de mise en œuvre que je vais vous exposer ici restera le même, pour un haut-parleur de plus forte puissance 😉
Pour entrer dans le vif du sujet, voici, sans plus attendre, le schéma pour piloter un haut-parleur 8 ohms / 0.15W, depuis un Arduino Uno :
En fait, dans le principe, ce montage est assez simple :
- L’Arduino génère un signal carré 0V/+5V, de fréquence donnée, sur sa sortie numéro D12 (choisie arbitrairement !)
- Ceci permet le pilotage d’un mosfet canal N, en mode « interrupteur tout ou rien »
- Ainsi :
- lorsque la sortie de l’arduino sera à 0v, le mosfet sera bloqué, et le haut-parleur non alimenté
- et lorsque la sortie de l’arduino sera à +5v, le mosfet sera passant, et le haut-parleur alimenté au travers du potentiomètre de réglage de volume (noté « POT »), et de sa résistance de limitation de courant de 22 ohms
Au passage, si jamais vous n’êtes pas à l’aise avec les transistors mosfet, n’hésitez pas à lire notre tutoriel sur les transistors Mosfets, avant d’aller plus loin !
À noter que :
- la résistance placée sur la grille du mosfet (notée R2) n’est là que pour limiter les courants d’appel, se produisant à chaque commutation du mosfet (ceci étant lié à la capacité d’entrée du mosfet en lui-même, comme nous le verrons par la suite)
- la diode branchée en parallèle sur le haut-parleur (notée D1) est là uniquement pour écrêter toute éventuelle tension négative, qui pourraient apparaître aux bornes du HP, à chaque fois que le mosfet coupera le courant. Car, pour rappel, un haut-parleur est essentiellement inductif (c’est-à-dire constitué d’un bobinage). Par principe, il s’opposera donc à toute variation brusque de courant (d’où les « surtensions »).
- le potentiomètre de 10 kΩ (noté POT) n’est là que pour permettre un réglage rudimentaire du volume sonore
- et la résistance placée juste avant le haut-parleur (notée R1) permet de limiter le courant dans le haut-parleur, afin de ne pas dépasser sa puissance maximale d’émission
Si vous vous posez des questions du type « comment j’ai fait pour déterminer la valeur de ses composants », ne vous inquiétez pas ! Car je vais vous détailler tous mes calculs ci-après, afin que vous puissiez bien tout comprendre. D’ailleurs, commençons par faire cela, dès à présent !
Choix des composants électroniques, et détermination de leurs valeurs
Le haut-parleur (8 ohms / 0,15W)
Pour ce projet, j’ai choisi de partir sur un haut-parleur de 8 ohms d’impédance nominale, et faisant seulement 0,15 watts de puissance. Ceci afin que le montage puisse loger sur une breadboard, à des fins d’expérimentations, que tout le monde pourra reproduire facilement. Car prendre un haut-parleur plus puissant aurait nécessité l’emploi d’une alimentation stabilisée indépendante, et je ne voulais pas compliquer le montage (afin qu’il puisse être bien assimilé par les débutants arduino). Du coup, avec mon « petit » haut-parleur, je peux me contenter de l’alimentation de l’arduino, tout simplement !
À présent, pour avoir une base de départ, il va falloir avant tout déterminer combien va consommer ce haut-parleur, au maximum. Pour rappel, un haut-parleur est essentiellement constitué d’un bobinage. Il est donc, si je simplifie les choses au maximum, équivalent à une résistance fixe (la résistance du fil de bobinage) en série avec une inductance (le bobinage en lui-même).
Or, on sait que :
- une résistance a toujours une valeur fixe (notée Rhp, ci-dessus), indépendante de la fréquence
- une inductance a une « résistance » qui varie en fonction de la fréquence (notée Lhp, ci-dessus), avec le comportement suivant : si la fréquence baisse, l’impédance diminue, et vice-versa
Du coup, si l’on cherche à savoir quand est-ce que la « résistance » d’un haut-parleur est minimale, consommant ainsi un courant maximal, c’est à fréquence nulle qu’il faut regarder. Car si la fréquence est de 0 Hz, l’inductance aura une impédance égale à zéro. Dans ces conditions, l’impédance du haut-parleur sera uniquement égale à sa résistance interne. Et d’après la loi d’ohm, plus la résistance est basse, et plus le courant est important. Il nous faut donc mesurer cette résistance interne, afin de trouver le courant maximal que ce HP pourrait consommer. Et pour cela, rien de plus simple ! Car il suffit de brancher un ohmmètre sur notre haut-parleur, pour mesurer sa résistance (dans ce cas, nous effectuons une mesure en courant continu, à fréquence nulle, donc).
Pour ma part, avec le haut-parleur de 8 ohms que j’utilise dans ce projet, je trouve 7,7 ohms à l’ohmmètre. C’est donc sa résistance minimale, qui engendrera un courant maximal (d’après la loi d’ohm I = U / R).
Et maintenant que nous connaissons la résistance interne de notre haut-parleur (7,7 ohms), tout en sachant que le constructeur nous a communiqué sa puissance maximale (0,15 watts), on peut ainsi déterminer le courant à ne pas dépasser, lorsqu’on alimente ce haut-parleur (grâce à la formule de calcul de puissance, où P = R * i²).
P = R * i² (formule de calcul de puissance)
d’où i = √ (P / R)
d’où i = √ (0.15 / 7.7)
d’où i = 0.14 A (donc 140 mA)
On veillera donc à limiter le courant à 140 mA maximum dans notre haut-parleur, afin de ne pas l’endommager.
Nota : si jamais mes explications ne sont pas suffisamment claires pour vous, retenez simplement que vous ne devez pas envoyer plus de courant que ce qu’un haut-parleur peut supporter. Ce courant max se détermine grâce à la formule ci-dessus, en prenant comme valeur de résistance la valeur que vous mesurerez à l’ohmmètre, sur votre haut-parleur. Tout simplement !
Choix du mosfet, pour piloter ce haut-parleur
Pour choisir notre mosfet, nous allons tout d’abord devoir lister tout ce que nous connaissons. Et pour l’heure, nous savons que :
- la tension de pilotage du mosfet, via la sortie D12 de l’arduino, sera de 0V ou +5V
- la tension d’alimentation du haut-parleur, reprise sur l’alimentation de l’arduino, sera également de 0V ou +5V
- le courant maxi traversant le haut-parleur sera limité à 140 mA, afin de ne pas dépasser sa puissance maximale (comme vu précédemment)
- la fréquence sonore (et donc la fréquence de commutation du mosfet) devra se situer dans la plage des 700 à 4000 Hz, car ce sont là les limites communiquées par le fabricant du haut-parleur que j’ai choisi
À cela, je rajouterai que l’idéal serait de prendre un mosfet qui pourrait fonctionner sans dissipateur, c’est-à-dire un modèle qui serait capable de dissiper plus de chaleur, que ce qu’il n’aurait effectivement besoin de dissiper, lorsque le haut-parleur serait alimenté.
Pour choisir le mosfet « idéal », je suis allé sur le site d’un vendeur de composants électroniques (FARNELL, en l’occurrence). Et en filtrant tous les mosfets existants, sur la base de nos critères énoncés ci-dessus, j’ai fini par choisir le mosfet « VN2106n » de chez MICROCHIP. En effet, ce mosfet a les caractéristiques suivantes :
- Tension Vds max de 60V (comme nous fonctionnons à 5V, pas de soucis)
- Courant de drain Id de 300mA (comme nous consommerons 140 mA tout au plus, cela convient parfaitement)
- Résistance Rdson de 6 ohms, quand piloté en 5V (tension Vgs)
- Boitier TO92, montage traversant (idéal pour loger sur une breadboard)
- Tension de seuil Vgsth de 2.4V (comme nous travaillons en 5V, c’est nickel)
- Peut dissiper 1W sans radiateur (ce qui est bon aussi, car d’après la formule de calcul de puissance P = R * i², alors Pmosfet = Rdson * i², d’où Pmosfet = 6 * 0,140² = 0,118 W … ce qui est bien en dessous des 1W dissipables !)
Calcul de la résistance de limitation de courant vers haut-parleur (notée R1, sur le schéma)
À présent, il s’agit de déterminer quelle sera la résistance à mettre en place avant notre haut-parleur, afin qu’il ne soit pas « suralimenté » en courant. Car si nous ne faisons rien, le courant direct sera égal à :
i = U / R (loi d’ohm)
d’où i = U / (Rhp + Rmosfet)
d’où i = 5 / (7,7 + 6)
d’où i = 0.365 A (soit 365 mA)
Et comme notre haut-parleur ne peut supporter plus de 140 mA, il faut donc bel et bien limiter ce courant. Pour ce faire, nous allons donc rajouter cette résistance de limitation de courant R1 dans nos calculs, mais en utilisant la loi d’ohm en sens inverse, cette fois-ci :
R = U / i
d’où R1 + Rhp + Rmosfet = U / i
d’où R1 = (U / i) – Rhp – Rmosfet
d’où R1 = (5 / 0.140) – 7,7 – 6
d’où R1 = 22,01 ohms
La valeur de la résistance R1 sera donc de 22 ohms (ce qui tombe bien, car c’est une valeur « normalisée » !).
Détermination de la résistance équivalente du mosfet (Rdson), suite au rajout de cette résistance de limitation de courant R1
Maintenant que nous avons défini la résistance de limitation de courant R1, nous allons tâcher de préciser quelle sera la « véritable » valeur de la résistance Rdson du mosfet (qui est sa résistance équivalente, en quelque sorte, à l’état passant). Pour rappel, nous avions basé nos calculs sur une résistance Rdson égale à 6 ohms, qui était donnée par le constructeur, pour une tension de commande Vgs de 5 volts. Maintenant, à voir si ces 6 ohms étaient bons ou pas !
Pour faire cela, nous allons nous servir du réseau de caractéristique Id en fonction de Vgs et Vds (qu’on retrouve dans le datasheet du mosfet). Le voici :
Sur ce diagramme, nous allons devoir tracer une droite (la « droite de charge » de notre circuit), et relever les valeurs à l’intersection de celle-ci avec la courbe donnée pour Vgs = 5 volts (notre tension de pilotage). Pour tracer une telle droite, il nous suffit d’avoir deux points. Et pour déterminer ces deux points, nous allons poser deux hypothèses :
- Hypothèse n°1 : si Vds = 0V, quel sera Id ?
- Hypothèse n°2 : si Vds = 5V, quel sera Id ?
Hypothèse n°1 : Vds = 0 (sera noté « Point 1 » sur le graphe)
I = U / R (loi d’ohm)
d’où Id = (Vcc – Vds) / (R1 + Rhp)
d’où Id = (5 – 0) / (22 + 7,7)
d’où Id = 0,168 A (soit 168 mA)
Hypothèse n°2 : Vds = 5V (sera noté « Point 2 » sur le graphe)
I = U / R (loi d’ohm)
d’où Id = (Vcc – Vds) / (R1 + Rhp)
d’où Id = (5 – 5) / (22 + 7,7)
d’où Id = 0 A
À présent, nous pouvons placer ces deux points sur le réseau de caractéristique précédent, et tracer une droite qui passe par ceux-ci. Voici ce que ça donne :
On peut à présent relever les infos de croisement entre cette droite de charge, et la courbe donnée pour « Vgs = 5V » (puisque notre montage sera piloté en 5V). Comme visible ci-dessus, cela nous donne deux nouvelles informations, à savoir :
- Id = 0,133 A
- et Vds = 0,833 V
Ce sont en fait les valeurs en tension et courant de notre mosfet, en charge, à l’état passant. On peut par ailleurs déterminer la résistance du mosfet dans ces conditions (le fameux « Rdson »), d’après la loi d’ohm :
R = U / I
d’où Rdson = Vds / Id
d’où Rdson = 0,833 / 0,133 = 6,3 ohms
Et comme vous pouvez le voir, on est quasiment à nos 6 ohms de départ, que nous avions pris comme hypothèse dans nos calculs précédents. Donc tout est bon, de ce côté-là !
Vérification de la puissance dissipée par le mosfet, par rapport à ce qu’il est effectivement capable de dissiper
Voici ce que nous savons à présent, issus des calculs précédents :
- Le courant de drain Id est égal à 0,133 A
- La tension Vds est égale à 0,833 V
Pour déterminer la puissance dissipée par ce mosfet en fonctionnement, rien de plus simple ! Car il suffit de multiplier ces deux valeurs entre elles, pour trouver sa puissance effectivement dissipée :
P = U * I
d’où Pmosfet = Vds * Id
d’où Pmosfet = 0,833 * 0,133
d’où Pmosfet = 0,11 W (soit 110 mW)
Si on compare ces « 0,11 W » aux « 1 watt » que peut dissiper ce mosfet, selon la documentation constructeur, on s’aperçoit qu’il n’y aura pas besoin de dissipateur thermique ici, pour assurer un bon refroidissement de ce transistor.
Nota : en fait, en pratique, cette puissance sera bien moindre. Car nous n’alimenterons évidemment pas le haut-parleur en continu, mais de manière alternative (tantôt 0V, tantôt +5V). Et comme le rapport cyclique sera de 50% (c’est-à-dire que la durée de l’état bas 0V sera égale à la durée de l’état haut +5V), la puissance moyenne sera bien plus basse que celle trouvée ici. À fortiori, nous n’aurons donc aucun besoin de dispositif de refroidissement, ici.
Calibration de la résistance de limitation de courant R1, en puissance (combien de watts ?)
Petite parenthèse : prenez soin de toujours bien vérifier quelle sera la puissance à dissiper par tous vos composants électroniques. Car déterminer leur valeur est une chose, mais s’assurer qu’ils puissent « tenir le choc » en est une autre ! Ainsi, dans le cas de nos résistances, il faudra donc vérifier que la puissance qu’elles devront dissiper soit bien inférieure à celle qu’elles peuvent effectivement dissiper.
Au niveau des données, voici ce que nous savons :
- Le courant maxi sera de 0,133 A
- Cette résistance R1 a une valeur de 22 ohms
En fait, nous avons juste à appliquer une formule de calcul de puissance, et le tour est joué :
P = R * i² (formule de calcul de puissance)
d’où P = 22 * (0,133)²
d’où P = 0,389 W (soit 389 mW)
Mais comme nous fonctionnerons avec un rapport cyclique de 50% (signal alternant 50% du temps à 0V, et 50% du temps à +5V), le courant sera en fait moitié moindre. Et comme dans cette formule de calcul, le courant est « mis au carré », alors la puissance réelle sera 4 fois moins grande. Du coup, la puissance à dissiper dans cette résistance sera de 0,389 / 4, soit 97 mW.
Dans ces conditions, une résistance classique de 1/4 de watt (250 mW, donc) conviendra parfaitement !
Choix de la diode D1 (diode de « décharge du haut-parleur »)
Côté puissance, il nous reste également à qualifier la diode D1. Bien sûr, nous avons pas mal de données connues maintenant, pouvant la concerner :
- Le courant traversant le haut-parleur, en temps normal, sera de 0,133 A. Du coup, lorsque le mosfet se coupera, et que l’inductance du haut-parleur « tentera de maintenir » ce courant, alors celui-ci pourra circuler au travers de la diode. Ainsi, le courant traversant la diode sera au maximum égal à 0,133 A
- La fréquence de commutation du signal variera de 700 Hz à 4000 Hz, tout au plus (car ce sont les limites en fréquence du haut-parleur utilisé dans ce projet)
- Enfin, la tension inverse de la diode ne sera pas très élevée, puisque notre montage est alimenté en 5 volts
D’après ces caractéristiques, j’ai simplement fait le choix de prendre une diode très commune, utilisée un peu partout, en commutation faible puissance. Il s’agit d’une diode « 1N4148 » (tout ce qu’il y a de plus classique, donc !). Au passage, voici les données constructeur, la concernant :
- Cette diode accepte un courant max de 300 mA en continu (alors que nous consommerons seulement 133 mA)
- Elle peut dissiper jusqu’à 440 mW
- Elle a une tension de seuil d’environ 1 volt
- Elle accepte une tension inverse pouvant aller jusqu’à 100 volts
On remarque qu’elle correspond à merveille, pour notre petit montage. On peut d’ailleurs en profiter pour vérifier la puissance maximale à dissiper dans celle-ci, à savoir :
P = U * I (formule de calcul de puissance)
d’où P = Useuil * Imax
d’où P = 1 * 0,133
d’où P = 0,133 W (donc 133 mW)
Étant donné que la diode peut dissiper jusqu’à 440 mW, et qu’il s’agit là que d’une puissance instantanée, elle est donc tout à fait appropriée, dans notre montage 😉
Calcul de la résistance de limitation de courant de « pilotage » (notée R2, sur le schéma)
Petite parenthèse, avant d’aller plus loin : bon nombre d’entre vous pourraient se demander pourquoi mettre une résistance à l’entrée d’un mosfet, compte tenu que le courant de grille d’un mosfet est nul (puisqu’il s’agit d’un transistor commandé en tension, et non en courant, comme c’est le cas avec les transistors bipolaires).
En fait, même si le courant de grille est effectivement nul en « théorie », ce n’est pas le cas en pratique. Car en pratique, il faut tenir compte de la capacité d’entrée du mosfet (souvent notée Ciss, dans les spécifications constructeur). Cette capacité est tout simplement équivalente à un condensateur, qui serait branché sur la grille du mosfet. Et ce condensateur, par nature, va déclencher des pics de courant à chaque commutation du mosfet (puisque ce condensateur s’opposera à toute variation brusque de tension, provoquant ainsi de brefs et « intenses » courants d’appel). Du coup, il faudra bel et bien mettre en place une résistance côté grille, afin de limiter ces courants, à chaque commutation du transistor. Surtout que là nous travaillons sur un Arduino, qui est limité à 40 mA grand maximum, au niveau de ses sorties.
Pour déterminer la valeur de résistance permettant de limiter ce courant de commutation, il nous faut tout d’abord :
- retrouver la valeur de capacité d’entrée du mosfet (notée Ciss dans la doc constructeur)
- et définir une valeur d’intensité maximale, qu’on ne souhaite pas dépasser sur notre sortie Arduino
Concernant la valeur Ciss, pour commencer, la documentation fabricant du mosfet VN2106n nous donne une valeur de 50 pF maxi. Et en ce qui concerne le courant maxi qu’on ne souhaite pas dépasser, au niveau de notre arduino, on va prendre 5 mA (afin d’avoir un bon compromis entre efficacité et consommation électrique).
Mais dans un premier temps, nous allons avoir besoin de calculer la constante de temps du « circuit RC » que nous allons ainsi former (qui sera donc constitué de notre résistance de limitation de courant R2, et du condensateur d’entrée du mosfet Ciss). Pour cela, nous allons nous servir de la formule suivante :
i = C * dV/dt (formule de calcul du courant de charge d’un condensateur, en fonction de la tension et du temps)
d’où Ig = Ciss * dV/dt
d’où Ig = Ciss * (Vcc / tm), où tm sera le temps de montée de notre signal (la fameuse constante de temps RC, ici égale à « 1 RC »)
d’où tm = Ciss * Vcc / Ig
d’où tm = 50 pF * 5v / 5mA
d’où tm = 50 ns
Que veut dire cette valeur ? Ben c’est tout simple : cela signifie qu’au bout de 50 ns, le condensateur sera chargé à 63% de la tension qui lui est appliquée (voir ce lien Wikipédia sur les constantes de temps, pour en savoir plus). Et comme 63% de 5 volts (soit 3,15 volts) est supérieur à la valeur nécessaire pour commuter le mosfet (son Vgsth étant de 2,4 volts), on est sûr que le mosfet sera bien commuté à ce moment-là.
Et grâce à cette constante de temps (notée « tm » ci-dessus), nous allons pouvoir déterminer la valeur de la résistance R2. Car en effet :
tm = R * C (formule de calcul de la constante de temps d’un circuit RC)
d’où tm = R2 * Ciss
d’où R2 = tm / Ciss
d’où R2 = 50 ns / 50 pF
d’où R2 = 1000 ohms
Il nous suffira donc de prendre une résistance de 1 kΩ, pour limiter le courant d’appel en commutation à 5 mA au maximum, sur notre Arduino !
Au passage, il y a une chose très important à vérifier ici. En effet, le fait de rajouter une résistance (R2) en série sur un condensateur (Ciss), engendre la création, sans le vouloir, d’un filtre « passe-bas ». C’est-à-dire que les basses fréquences vont passer, et que les hautes fréquences vont être atténuées, voire « coupées ». Il nous faut donc calculer la fréquence de coupure de ce circuit RC, afin de s’assurer que nous n’allons pas altérer notre signal d’haut-parleur, ayant une plage allant de 700 à 4000 Hz.
Voici la formule de calcul, pour déterminer la fréquence de coupure de ce filtre RC (cette fréquence sera notée « fc ») :
fc = 1 / (2 * Pi * R * C)
d’où fc = 1 / (2 * Pi * R2 * Ciss)
d’où fc = 1 / (2 * 3,1416 * 1000 * 50pF)
d’où fc = 3,18 MHz
Le moins qu’on puisse dire, c’est que la fréquence de coupure est très éloignée de la fréquence max de notre haut-parleur. Ainsi, aucune des fréquences de notre haut-parleur (entre 700 Hz et 4000 Hz) ne seront altérées par ce filtre. On peut donc conclure en disant que la mise en place de cette résistance R2 n’altèrera pas le signal de pilotage de notre mosfet. Nickel !
Voilà qui conclut toute notre partie sur les différents calculs de valeurs de composants et autre. À présent, nous allons pouvoir passer à la partie logicielle, pour se changer les idées 😉
Programme de test haut-parleur sur Arduino (signal carré, fréquence 2 kHz)
Avant tout, quelques photos du montage que j’ai réalisé de mon côté, avec un Arduino Uno, et une plaque de prototypage (breadboard).
Comme vous le voyez, j’ai pris un petit haut-parleur rond, à broches, pour pouvoir l’enficher à même la breadboard. Bien entendu, rien ne vous empêche de prendre un haut-parleur filaire, pour mettre à la place (en adaptant les composants au passage, si la puissance ou l’impédance sont différents de celui que j’ai employé ici).
Au niveau du code de programmation arduino, j’ai repris celui que j’ai déjà publié auparavant, à l’occasion d’un autre article. Dans les grandes lignes, il s’agit simplement d’un programme permettant de générer un signal carré sur n’importe quelle sortie arduino, avec une fréquence paramétrable entre 1 et 500 000 Hz (définissable à même le code, dans la variable notée « frequenceDeSortie »). Au passage, si vous souhaitez plus de détails sur ce bout de programme, n’hésitez pas à lire l’article que j’ai fait à ce sujet, disant comment générer un signal carré simplement depuis un Arduino Uno.
Voici donc ce programme :
#define pinSignalDeSortie B00010000 // Masque binaire, permettant de sélectionner la broche D12 de l'Arduino Uno
#define frequenceDeSortie 2000 // On entre ici la fréquence souhaitée sur cette sortie (2000 Hz par défaut)
#define periodeDuSignal (float)1/frequenceDeSortie*1000000 // Période = 1/Fréquence (et multiplié par 1 million, pour l'exprimer en micro-secondes)
#define tempo (float)periodeDuSignal/2 // délais calculés automatiquement, se rajoutant à l'état haut et à l'état bas, afin d'atteindre la fréquence souhaitée
void setup() {
DDRB = DDRB | pinSignalDeSortie; // Déclare la broche D12 comme étant une "sortie"
}
void loop() {
PORTB = PORTB | pinSignalDeSortie; // Met la sortie D12 à l'état haut (+5V)
_delay_us(tempo-0.15); // Ajoute un délai supplémentaire, avant de repasser à l'état bas
PORTB = PORTB & ~pinSignalDeSortie; // Met la sortie D12 à l'état bas (0V)
_delay_us(tempo-0.4); // Ajoute un délai supplémentaire, avant de repasser à l'état haut
// … et on boucle indéfiniment !
}
Une fois uploadé sur votre Arduino, et si tout est bien raccordé au niveau du haut-parleur, vous devriez entendre un son « fixe », assez aigü (la fréquence du programme étant par défaut à 2000 Hz). Si ce n’est pas le cas, vérifiez bien tout votre câblage sur breadboard, et assurez-vous bien que le potentiomètre de volume ne soit pas au minimum (sinon le son serait étouffé, voire inaudible).
Côté mesures, j’en ai profité pour brancher mon oscillo aux bornes du haut-parleur, pour voir l’allure du signal. Pour info : j’ai réalisé cette opération en me servant des deux voies de mon oscilloscope, en affichant à l’écran la différence entre la voie 2, et la voie 1. D’ailleurs, voici ce qui parait à l’écran :
Comme vous pouvez le constater, la tension aux bornes du haut-parleur montre quelques pics à chaque commutation du mosfet. Ceci est parfaitement normal, car c’est dû au fait que l’inductance de la bobine du haut-parleur s’oppose à toute variation brusque de courant (d’où les surtensions). À noter qu’on ne voit pas l’action de la diode de protection D1 ici, mais ceci est certainement dû à mes branchements de sondes d’oscilloscope (celles-ci ayant leur propre résistance et capacité d’entrée).
Créer une sirène arduino, sur notre haut-parleur de 8 ohms
Histoire de finir en beauté, avec quelque chose d’un peu plus fun, je vous ai écrit ci-après un petit programme, permettant de générer un son type « sirène de police ». Voici le code de programmation, à recopier dans votre IDE Arduino :
#define pinDeSortieArduino 12 // On va utiliser la broche D12 de l'Arduino Uno
#define frequenceDeDebut 700 // Fréquence "basse" de la sirène
#define frequenceDeFin 2700 // Fréquence "haute" de la sirène
void setup()
{
// Définition de la broche D12 en "sortie"
pinMode(pinDeSortieArduino, OUTPUT);
}
void loop()
{
// Phase de "montée" sirène
for (int i = frequenceDeDebut; i < frequenceDeFin; i=i+3) {
tone(pinDeSortieArduino, i);
delay(1);
}
// Phase de "descente" sirène
for (int i = frequenceDeFin; i > frequenceDeDebut; i=i-3) {
tone(pinDeSortieArduino, i);
delay(1);
}
}
Une fois téléchargé dans votre Arduino, vous devriez entendre une « belle » sirène, de quoi peut-être vous inspirer pour réaliser une alarme « home made » ! Pourquoi pas 😉
À noter aussi que malgré le fait que ce haut-parleur ne fasse que 0,15 watts, le son émit peut rapidement devenir pénible, voire insupportable. C’est pourquoi je vous recommande d’agir prudemment, surtout si vous passez sur des puissances supérieures de haut-parleurs !
Nous voici au terme de cet article didactique, vous montrant une façon de faire, pour brancher un haut-parleur sur un Arduino (avec tous les calculs intermédiaires, pour l’adapter à vos goûts !). J’espère en tout cas que vous aurez pris du plaisir à le lire, ou tout du moins, que vous aurez trouvé ici tout plein d’infos, pouvant vous inspirer dans vos futurs projets !
Ah oui… une dernière chose ! Au niveau des améliorations que l’on pourrait porter à ce montage, si vous envisagez de passer sur des haut-parleurs de plus forte puissance :
- optez pour une alimentation directe et stabilisée du haut-parleur, indépendante de l’arduino (car j’ai remarqué que même avec un si petit haut-parleur, la tension d’alimentation de l’arduino oscillait entre 5 et 4,5 volts, sous l’effet et au rythme de la fréquence de fonctionnement de ce haut-parleur)
- prenez des fils les plus courts possibles, pour faire vos liaisons (car les fils dupont que j’ai employé ici ont eux aussi provoqué des chutes de tension supplémentaires ; donc imaginez à plus forte puissance…)
- choisissez un potentiomètre de réglage de volume de qualité, et prévu pour résister au « fort » courant qui passera au travers de votre haut-parleur
- adaptez la puissance de vos composants en fonction de la puissance à dissiper (car les résistances de 1/4 de watts utilisées dans ce projet montreront vite leur limite, lorsqu’on monte en puissance)
Voilà ! Sur ce, il ne me reste plus qu’à vous dire à très bientôt, et surtout, amusez-vous bien !
Jérôme.
(*) Mis à jour le 15/05/2021
Bonjour
Je voulais vous demander que si c’est possible d’utiliser ce schéma pour faire parler un haut-parleur s’il vous plait ?
Merci
Bonjour Elham !
Théoriquement oui ! Mais dans tous les cas, le son va être plutôt médiocre…
Du reste, pour ne pas te dire de bêtises, je vais faire des essais de mon côté, en :
À bientôt 😉
Jérôme.
Re,
Je viens de faire des essais, et ça marche nickel ! Même si le son reste faible (dû en partie aux composants utilisés), et la qualité plutôt passable (dû notamment à la transcription PWM du son, enregistré au format PCM 8 bits / 8 kHz, pour prendre un minimum de place dans l’Arduino Uno, qui est très limité !).
Voici d’ailleurs le programme que j’ai utilisé (utilisant la librairie « PCM », à installer avant tout depuis le « Gestionnaire de bibliothèques » arduino) :
Remarques :
Afin de filtrer au maximum les messages de type "spam" ou "inappropriés", chaque commentaire est soumis à modération, et validé manuellement. Du coup, il se peut que certains commentaires ne soient pas publiés, ou sinon, avec un peu de retard. Par ailleurs, j'ai malheureusement plus de messages à traiter que de temps pour y répondre ; c'est pourquoi je ne pourrais pas répondre à tout le monde. Désolé …