Aller au contenu

Brancher un haut-parleur sur l’arduino, pour produire du son

Comment brancher haut-parleur arduino, sans risque de griller microcontrôleur, impédance 8 ohms et puissance watt sur Arduino Uno électronique

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.

Ce contenu vous plaît ? Alors abonnez-vous à la Newsletter pour ne rien louper !

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çuDésignation
Arduino Uno R3 branchement USB, microcontrôleur ATmega328P, pour projet raccordement haut-parleur sur sortie digitale1 x Platine Arduino Uno R3
Mosfet VN2106n de chez MICROCHIP, transistor de puissance pour commande de haut-parleur 8 ohms, projet électronique avec fréquence variable1 x Mosfet VN2106n (canal N, 300 mA, 6 ohms)
Haut-parleur 8 ohms 150mW, montage traversant avec fixation sur PCB, puissance 0,15 watts signal fort 76 dB, projet électronique fréquence 700 à 4000 Hz1 x Mini haut-parleur 8 ohms 0,15W (73 dB, 700 Hz à 4 kHz)
Diode 1N4148 pour commutation haute fréquence, seuil d'environ 1 volt, 300 mA en continu, rapide et pas cher, pour protection anti retour, haute tension inverse1 x Diode 1N4148 (150 mA, 1 V, rapide)
Composants électroniques divers, pour montages et projets site de passion électronique, résistances, potentiomètres, condensateurs, ou petits semiconducteursAutres 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 !

Arduino Uno avec branchement haut parleur arduino directement dessus, sans ampli ni transistor de puissance, raccordement électrique

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 :

Schéma de branchement haut parleur arduino uno, commande mosfet avec signaux logiques, alimentation 5V Arduino sur HP de 8 ohms électronique

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).

Schéma équivalent haut-parleur, modèle simplifié résistance avec inductance, schéma électronique bobinage HP, de sa bobine pour calcul impédance

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 :

Mosfet VN2106n réseau caractéristique id en fonction de Vgs et Vds, courbes constructeur fabricant Microchip, canal N, avec tracés graphiques

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 :

Réseau caractéristique mosfet VN2106n de chez Microchip, donnant courant drain Id en fonction de tension Vds et Vgs, avec droite de charge croisement

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 :

Pic de courant haut parleur arduino uno, commutation mosfet avec diode de protection surtension induites, par bobinage inductance HP

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.

Ce contenu vous plaît ? Alors abonnez-vous à la Newsletter pour ne rien louper !

(*) Mis à jour le 15/05/2021

3 commentaires sur “Brancher un haut-parleur sur l’arduino, pour produire du son”

  1. Site passionelectronique.fr

    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

    1. Site passionelectronique.fr

      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 :

      • enregistrant un échantillon de voix de 2 ou 3 secondes (en 8 kHz, par exemple, sans quoi mon Arduino Uno pourrait vite être saturé, au niveau mémoire !)
      • en encodant ce son, afin de pouvoir l’insérer dans le code arduino
      • et en faisant appel à la librairie PCM (https://www.arduino.cc/reference/en/libraries/pcm/), pour lire ce son encodé

      À bientôt 😉
      Jérôme.

    2. Site passionelectronique.fr

      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) :

      /*
         ______               _                  _///_ _           _                   _
        /   _  \             (_)                |  ___| |         | |                 (_)
        |  [_|  |__  ___  ___ _  ___  _ __      | |__ | | ___  ___| |_ _ __ ___  _ __  _  ___  _   _  ___
        |   ___/ _ \| __|| __| |/ _ \| '_ \_____|  __|| |/ _ \/  _|  _| '__/   \| '_ \| |/   \| | | |/ _ \
        |  |  | ( ) |__ ||__ | | ( ) | | | |____| |__ | |  __/| (_| |_| | | (_) | | | | | (_) | |_| |  __/
        \__|   \__,_|___||___|_|\___/|_| [_|    \____/|_|\___|\____\__\_|  \___/|_| |_|_|\__  |\__,_|\___|
                                                                                            | |
                                                                                            \_|
        Fichier :       testLibrairiePcmArduino.ino
        
        Description :   Permet d'émettre une voix au démarrage d'un Arduino Uno,
                        en utilisant la librairie PCM (https://github.com/damellis/PCM)
                        
        Remarque :      Le son sort sur la pin D11 de l'arduino (non modifiable)
                        
        Auteur :        Jérôme TOMSKI (https://passionelectronique.fr/)
        Créé le :       21.11.2021
        
      */
      
      #include "PCM.h"
      
      // Exemple de voix enregistrée, disant le texte "1 2 3"
      // Nota : les données sont au format PCM 8 bits, échantillonné à 8 kHz
      
      const unsigned char bandeSonore[] PROGMEM = {
        129, 129, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 127, 127, 127, 127, 126, 126, 126, 126, 126, 127, 127, 126, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 129, 129, 129, 128, 128, 129, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 128, 128, 129, 129, 129, 129, 129, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 127, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 129, 129, 128, 129, 129, 129, 129, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 125, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 129, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 127, 128, 128, 127, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 127, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 129, 129, 129, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 129, 128, 129, 129, 128, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 125, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 127, 127, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 128, 129, 129, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 129, 129, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 129, 128, 128, 129, 129, 129, 129, 129, 128, 128, 128, 128, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 129, 129, 129, 128, 128, 128, 128, 129, 129, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 129, 129, 129, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 128, 128, 127, 127, 127, 127, 127, 127, 126, 127, 127, 126, 126, 127, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 129, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 125, 126, 126, 125, 126, 126, 127, 126, 127, 126, 126, 127, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 129, 129, 128, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 129, 128, 128, 128, 129, 129, 128, 129, 129, 128, 129, 128, 128, 128, 129, 128, 128, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 129, 128, 128, 128, 127, 127, 127, 128, 128, 127, 127, 127, 127, 126, 127, 127, 127, 127, 126, 127, 126, 126, 127, 126, 126, 126, 126, 126, 126, 127, 126, 127, 127, 126, 126, 125, 125, 125, 126, 126, 125, 126, 126, 127, 126, 125, 126, 126, 127, 126, 125, 126, 125, 127, 127, 127, 126, 127, 128, 127, 128, 127, 127, 127, 127, 128, 127, 129, 127, 126, 128, 127, 128, 127, 127, 127, 127, 129, 128, 127, 131, 135, 130, 125, 126, 123, 125, 128, 126, 124, 125, 130, 130, 131, 131, 129, 129, 130, 133, 128, 124, 124, 122, 127, 127, 124, 125, 127, 134, 133, 129, 127, 129, 130, 129, 130, 125, 125, 133, 132, 139, 150, 140, 116, 110, 119, 121, 126, 120, 107, 116, 134, 136, 124, 122, 120, 123, 138, 135, 132, 146, 152, 150, 150, 143, 128, 127, 131, 123, 116, 115, 117, 123, 135, 137, 130, 133, 136, 137, 135, 131, 125, 118, 123, 121, 120, 121, 117, 119, 117, 122, 123, 120, 118, 113, 116, 113, 112, 109, 109, 120, 114, 125, 109, 123, 231, 228, 170, 157, 106, 110, 152, 137, 76, 41, 86, 116, 143, 176, 135, 111, 144, 166, 164, 144, 102, 71, 94, 131, 126, 106, 105, 120, 144, 165, 158, 131, 116, 124, 135, 127, 111, 90, 90, 118, 133, 130, 124, 129, 143, 146, 141, 122, 109, 107, 103, 102, 100, 105, 111, 115, 124, 132, 180, 232, 211, 168, 129, 103, 122, 139, 108, 64, 63, 102, 140, 170, 169, 138, 134, 154, 165, 151, 119, 87, 79, 101, 121, 119, 113, 121, 141, 161, 167, 149, 137, 136, 119, 108, 100, 89, 96, 114, 126, 125, 138, 151, 145, 145, 130, 111, 102, 101, 107, 96, 107, 96, 106, 225, 254, 197, 177, 124, 111, 160, 148, 77, 36, 61, 96, 137, 176, 155, 127, 149, 176, 178, 166, 121, 73, 84, 113, 115, 102, 100, 115, 138, 168, 167, 146, 143, 136, 124, 109, 97, 83, 82, 111, 118, 122, 135, 136, 143, 139, 130, 110, 102, 111, 97, 107, 89, 102, 215, 237, 196, 174, 120, 117, 161, 151, 79, 39, 62, 97, 143, 158, 129, 116, 139, 176, 182, 160, 116, 82, 100, 120, 119, 101, 90, 107, 135, 162, 161, 150, 138, 127, 128, 114, 103, 89, 88, 108, 112, 126, 129, 131, 141, 128, 125, 111, 114, 122, 110, 117, 87, 126, 231, 226, 189, 157, 110, 122, 165, 143, 72, 55, 72, 103, 152, 161, 135, 125, 150, 171, 178, 163, 108, 85, 103, 116, 117, 102, 98, 111, 142, 160, 163, 161, 132, 119, 118, 111, 109, 93, 88, 99, 123, 135, 128, 127, 121, 124, 121, 122, 124, 116, 123, 94, 129, 225, 216, 184, 156, 110, 129, 165, 141, 80, 61, 77, 101, 149, 159, 131, 123, 141, 168, 183, 165, 113, 90, 106, 119, 123, 109, 97, 112, 145, 164, 153, 136, 116, 114, 125, 119, 102, 87, 93, 114, 123, 124, 115, 110, 124, 125, 124, 124, 115, 128, 111, 110, 197, 225, 197, 181, 106, 82, 139, 140, 100, 78, 63, 80, 142, 174, 149, 136, 133, 137, 170, 174, 122, 89, 92, 101, 123, 130, 109, 112, 137, 147, 151, 147, 120, 107, 115, 111, 109, 104, 97, 108, 128, 132, 123, 124, 120, 123, 124, 112, 113, 110, 120, 108, 101, 185, 227, 202, 183, 131, 118, 162, 159, 103, 67, 64, 78, 130, 154, 132, 125, 133, 152, 184, 187, 138, 102, 107, 112, 122, 115, 94, 99, 122, 139, 146, 159, 147, 131, 135, 122, 115, 108, 93, 95, 108, 122, 117, 123, 125, 122, 133, 121, 124, 127, 120, 123, 98, 123, 192, 208, 190, 159, 126, 134, 169, 148, 98, 79, 73, 98, 133, 137, 124, 121, 136, 157, 183, 172, 132, 114, 112, 121, 123, 109, 95, 99, 121, 134, 147, 145, 128, 128, 130, 129, 119, 102, 95, 101, 116, 117, 114, 115, 114, 123, 122, 121, 127, 125, 129, 124, 110, 141, 186, 186, 170, 144, 119, 143, 157, 126, 98, 85, 89, 113, 131, 124, 117, 125, 134, 156, 167, 148, 128, 120, 123, 129, 125, 111, 107, 116, 118, 123, 124, 120, 123, 123, 124, 123, 118, 110, 109, 112, 108, 110, 106, 109, 117, 117, 122, 127, 139, 136, 120, 155, 194, 197, 187, 147, 120, 146, 155, 123, 98, 82, 82, 113, 129, 125, 125, 125, 132, 160, 173, 154, 135, 124, 122, 132, 128, 111, 111, 121, 123, 128, 131, 120, 122, 128, 123, 122, 117, 109, 114, 120, 116, 111, 113, 111, 117, 122, 117, 122, 126, 128, 131, 118, 133, 175, 190, 186, 163, 134, 147, 165, 143, 114, 98, 92, 106, 122, 119, 113, 116, 123, 144, 167, 164, 146, 135, 128, 130, 132, 119, 106, 109, 113, 118, 126, 121, 115, 123, 127, 126, 123, 116, 114, 120, 120, 114, 114, 113, 115, 120, 118, 118, 123, 127, 131, 124, 118, 138, 161, 170, 162, 141, 140, 156, 153, 135, 121, 114, 112, 117, 118, 113, 111, 110, 118, 135, 141, 136, 132, 133, 135, 135, 132, 126, 124, 122, 120, 121, 118, 113, 115, 122, 124, 120, 116, 118, 125, 126, 122, 120, 121, 122, 123, 121, 119, 120, 121, 123, 123, 119, 114, 117, 133, 148, 143, 136, 147, 158, 158, 153, 147, 144, 144, 139, 134, 132, 124, 115, 116, 123, 125, 122, 119, 121, 127, 129, 128, 130, 131, 129, 131, 131, 127, 126, 126, 125, 125, 122, 116, 116, 118, 115, 114, 116, 117, 118, 120, 118, 119, 122, 124, 126, 127, 123, 118, 128, 146, 150, 143, 147, 157, 160, 155, 148, 143, 143, 139, 132, 130, 124, 114, 114, 121, 123, 122, 120, 119, 125, 130, 127, 127, 131, 132, 133, 133, 128, 125, 127, 124, 123, 121, 116, 113, 116, 115, 113, 114, 114, 116, 121, 119, 116, 119, 122, 122, 125, 124, 118, 118, 131, 144, 144, 141, 148, 156, 154, 148, 142, 140, 140, 135, 129, 125, 119, 113, 115, 120, 120, 119, 119, 122, 127, 126, 124, 127, 129, 130, 132, 131, 127, 125, 126, 125, 124, 119, 114, 115, 117, 115, 113, 114, 116, 119, 122, 120, 120, 122, 124, 126, 128, 124, 119, 122, 137, 145, 142, 144, 153, 157, 153, 148, 144, 142, 141, 135, 130, 126, 119, 116, 120, 122, 121, 121, 122, 125, 127, 126, 125, 128, 131, 132, 133, 132, 128, 127, 128, 127, 124, 120, 116, 118, 118, 115, 114, 116, 118, 121, 123, 121, 122, 125, 127, 128, 128, 123, 120, 129, 141, 142, 140, 147, 155, 155, 151, 146, 144, 143, 139, 134, 131, 125, 118, 118, 122, 121, 120, 121, 122, 125, 126, 124, 125, 129, 131, 131, 132, 130, 128, 129, 128, 124, 121, 118, 116, 116, 115, 111, 112, 114, 116, 119, 120, 119, 121, 124, 126, 126, 126, 122, 121, 129, 138, 137, 137, 144, 149, 148, 145, 143, 141, 139, 135, 131, 129, 124, 118, 118, 120, 119, 118, 120, 121, 122, 123, 122, 123, 126, 127, 129, 130, 128, 128, 129, 128, 124, 121, 119, 119, 118, 116, 113, 114, 118, 121, 123, 124, 124, 127, 130, 130, 129, 128, 126, 125, 128, 132, 133, 134, 138, 143, 144, 143, 142, 141, 140, 138, 136, 133, 130, 128, 127, 126, 125, 124, 125, 125, 125, 125, 124, 124, 126, 127, 127, 127, 127, 127, 127, 126, 124, 123, 123, 123, 122, 122, 122, 123, 126, 128, 128, 128, 127, 128, 130, 129, 128, 128, 128, 127, 127, 126, 127, 129, 130, 131, 133, 135, 136, 136, 137, 137, 137, 136, 135, 133, 132, 131, 130, 129, 127, 125, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 124, 123, 123, 123, 124, 124, 125, 126, 126, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 127, 127, 128, 129, 130, 131, 132, 132, 133, 132, 131, 131, 130, 129, 128, 129, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 125, 124, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 131, 131, 132, 132, 132, 132, 133, 132, 132, 131, 131, 131, 130, 130, 129, 129, 129, 128, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 127, 127, 128, 128, 128, 128, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 130, 129, 130, 130, 129, 129, 130, 129, 129, 129, 129, 130, 129, 129, 129, 128, 128, 127, 127, 127, 127, 126, 126, 125, 125, 125, 124, 124, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 127, 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 129, 129, 127, 129, 126, 127, 136, 129, 121, 129, 125, 126, 140, 135, 123, 123, 122, 119, 118, 116, 121, 129, 129, 128, 131, 131, 132, 133, 130, 130, 129, 132, 135, 129, 128, 127, 124, 127, 124, 123, 127, 126, 129, 131, 129, 129, 130, 132, 131, 131, 132, 132, 132, 132, 131, 128, 128, 130, 128, 128, 128, 126, 127, 129, 125, 125, 127, 125, 126, 127, 125, 125, 126, 127, 127, 126, 127, 127, 126, 127, 127, 128, 129, 127, 127, 129, 131, 131, 131, 131, 131, 132, 133, 131, 131, 132, 130, 130, 129, 128, 127, 127, 127, 126, 126, 126, 126, 127, 126, 124, 125, 125, 123, 123, 123, 121, 121, 122, 120, 118, 119, 121, 120, 119, 121, 121, 125, 124, 120, 121, 121, 127, 144, 146, 139, 144, 146, 146, 150, 146, 133, 126, 128, 121, 115, 113, 106, 104, 113, 116, 114, 120, 128, 132, 139, 143, 140, 141, 144, 142, 135, 129, 125, 120, 118, 114, 106, 105, 108, 110, 113, 115, 116, 121, 126, 130, 128, 130, 131, 123, 141, 167, 155, 150, 157, 152, 152, 159, 147, 122, 121, 122, 108, 107, 106, 94, 97, 115, 119, 117, 132, 139, 139, 155, 159, 150, 150, 153, 143, 134, 132, 119, 110, 110, 103, 95, 99, 104, 102, 110, 119, 118, 127, 134, 134, 134, 134, 136, 121, 130, 167, 162, 147, 155, 150, 146, 159, 155, 125, 113, 119, 108, 103, 108, 93, 88, 109, 122, 121, 130, 140, 139, 150, 163, 156, 150, 151, 144, 133, 129, 121, 106, 102, 100, 92, 94, 100, 101, 105, 114, 120, 124, 134, 134, 132, 136, 132, 132, 122, 121, 148, 156, 144, 145, 145, 142, 148, 151, 130, 113, 115, 111, 106, 109, 103, 95, 104, 120, 123, 127, 136, 136, 142, 154, 155, 150, 145, 140, 132, 127, 122, 111, 103, 102, 98, 98, 102, 106, 110, 116, 124, 127, 133, 136, 134, 135, 132, 133, 126, 117, 140, 158, 148, 146, 148, 143, 147, 156, 141, 119, 117, 116, 109, 112, 109, 98, 102, 118, 125, 127, 137, 139, 140, 152, 158, 153, 150, 146, 137, 131, 127, 116, 106, 103, 99, 98, 104, 107, 109, 116, 123, 128, 133, 137, 135, 136, 136, 133, 131, 121, 130, 153, 153, 146, 147, 144, 144, 153, 150, 129, 118, 120, 115, 113, 115, 106, 101, 112, 123, 126, 131, 137, 136, 143, 153, 152, 149, 147, 140, 132, 129, 124, 113, 107, 104, 100, 103, 108, 109, 112, 118, 123, 127, 133, 132, 130, 131, 130, 130, 126, 120, 135, 151, 147, 144, 143, 141, 144, 150, 140, 122, 117, 115, 111, 113, 110, 101, 102, 114, 121, 125, 132, 133, 135, 146, 151, 148, 147, 142, 134, 130, 127, 118, 110, 106, 101, 100, 105, 107, 109, 115, 120, 124, 129, 133, 131, 131, 132, 129, 130, 124, 122, 142, 152, 146, 144, 143, 140, 146, 150, 137, 121, 120, 116, 113, 116, 112, 104, 108, 120, 124, 129, 136, 135, 138, 150, 153, 148, 145, 141, 133, 129, 126, 116, 109, 107, 104, 103, 108, 110, 112, 118, 123, 126, 130, 133, 131, 132, 134, 131, 131, 126, 126, 144, 151, 146, 146, 144, 142, 147, 150, 137, 124, 122, 118, 115, 117, 112, 106, 110, 119, 124, 129, 134, 135, 139, 147, 150, 147, 144, 140, 134, 130, 125, 117, 111, 109, 106, 104, 107, 109, 112, 117, 121, 124, 128, 131, 131, 131, 132, 129, 129, 125, 122, 139, 149, 143, 142, 143, 141, 144, 149, 138, 124, 122, 119, 114, 116, 112, 104, 106, 115, 119, 122, 128, 130, 133, 142, 145, 142, 141, 139, 134, 130, 126, 118, 112, 110, 108, 105, 107, 108, 110, 115, 118, 120, 125, 128, 130, 131, 133, 131, 129, 129, 122, 126, 143, 146, 139, 142, 141, 140, 146, 147, 134, 127, 127, 122, 120, 121, 114, 108, 114, 120, 121, 126, 128, 129, 135, 141, 141, 140, 141, 138, 135, 134, 130, 124, 121, 119, 114, 114, 114, 112, 115, 118, 121, 124, 128, 130, 131, 134, 134, 133, 132, 131, 131, 130, 127, 130, 136, 136, 135, 135, 134, 137, 139, 137, 132, 130, 129, 128, 127, 126, 122, 122, 125, 127, 128, 128, 128, 129, 131, 132, 131, 130, 129, 128, 127, 126, 126, 124, 124, 124, 124, 125, 125, 125, 125, 125, 126, 126, 126, 126, 127, 127, 128, 128, 128, 128, 128, 127, 127, 126, 126, 126, 125, 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 127, 127, 127, 126, 126, 125, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 126, 126, 126, 126, 126, 127, 127, 127, 127, 128, 128, 127, 127, 127, 127, 127, 127, 126, 127, 127, 127, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 129, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 126, 126, 125, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 127, 127, 126, 126, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 128, 129, 129, 128, 129, 129, 129, 129, 128, 128, 128, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 127, 128, 128, 127, 127, 127, 128, 127, 127, 127, 128, 128, 128, 129, 128, 128, 127, 127, 128, 127, 128, 127, 127, 128, 126, 127, 126, 126, 128, 123, 132, 135, 123, 121, 124, 124, 126, 124, 126, 126, 125, 126, 126, 126, 126, 126, 127, 126, 127, 126, 125, 126, 126, 125, 126, 124, 127, 126, 123, 134, 131, 120, 124, 124, 122, 124, 124, 124, 127, 132, 123, 122, 132, 130, 127, 129, 135, 135, 126, 121, 120, 123, 124, 122, 126, 127, 128, 130, 128, 129, 131, 130, 129, 130, 129, 127, 127, 126, 125, 127, 128, 125, 131, 144, 136, 126, 125, 117, 119, 122, 116, 122, 130, 129, 139, 150, 138, 130, 131, 125, 127, 125, 122, 122, 120, 124, 127, 128, 129, 128, 132, 131, 132, 134, 134, 132, 126, 128, 128, 126, 129, 127, 126, 128, 125, 130, 133, 127, 134, 140, 134, 138, 133, 122, 127, 120, 119, 121, 113, 121, 129, 127, 130, 132, 134, 133, 135, 136, 131, 131, 128, 128, 126, 121, 123, 123, 125, 123, 123, 129, 128, 130, 132, 128, 129, 129, 129, 130, 130, 129, 126, 126, 125, 125, 125, 123, 126, 125, 127, 129, 126, 127, 127, 126, 130, 128, 123, 124, 122, 124, 130, 130, 129, 128, 126, 123, 123, 127, 126, 128, 127, 122, 128, 124, 124, 131, 127, 126, 125, 126, 127, 123, 128, 125, 125, 130, 124, 126, 126, 126, 130, 127, 128, 126, 125, 128, 125, 130, 131, 127, 131, 126, 124, 129, 127, 127, 126, 129, 129, 126, 130, 127, 127, 132, 128, 127, 130, 126, 126, 127, 128, 128, 128, 129, 127, 130, 131, 126, 129, 129, 127, 130, 129, 128, 128, 128, 128, 129, 131, 128, 127, 129, 126, 128, 130, 128, 129, 130, 129, 129, 128, 129, 128, 127, 128, 126, 129, 130, 128, 131, 131, 130, 131, 130, 128, 127, 127, 127, 127, 128, 129, 129, 129, 131, 126, 128, 131, 126, 128, 127, 125, 129, 128, 129, 129, 127, 130, 130, 131, 131, 127, 126, 126, 125, 125, 127, 126, 126, 129, 127, 127, 127, 127, 129, 130, 128, 128, 127, 123, 123, 123, 121, 127, 128, 125, 128, 126, 124, 127, 124, 125, 128, 124, 126, 128, 123, 126, 126, 121, 126, 124, 122, 128, 125, 125, 129, 125, 127, 128, 125, 125, 126, 125, 127, 126, 126, 127, 127, 127, 127, 128, 128, 127, 128, 126, 124, 127, 128, 128, 130, 127, 126, 127, 126, 125, 127, 128, 128, 128, 128, 127, 128, 129, 127, 130, 129, 127, 129, 128, 125, 127, 127, 126, 129, 129, 130, 133, 129, 128, 128, 124, 127, 126, 125, 130, 129, 131, 133, 129, 130, 128, 127, 129, 129, 128, 126, 125, 127, 126, 129, 131, 130, 134, 132, 129, 132, 127, 124, 129, 125, 124, 129, 126, 128, 132, 129, 131, 132, 127, 130, 129, 126, 131, 129, 129, 131, 127, 128, 128, 127, 129, 128, 127, 128, 127, 129, 130, 130, 131, 128, 128, 128, 125, 125, 125, 124, 127, 128, 127, 128, 127, 127, 127, 126, 127, 127, 124, 127, 127, 124, 129, 126, 122, 130, 127, 124, 131, 123, 122, 131, 123, 125, 130, 123, 127, 129, 123, 127, 125, 124, 129, 125, 125, 129, 124, 125, 128, 124, 127, 129, 124, 127, 127, 123, 128, 126, 124, 128, 126, 126, 129, 127, 129, 129, 126, 128, 127, 125, 128, 128, 125, 129, 127, 127, 131, 127, 127, 130, 126, 129, 129, 125, 129, 128, 125, 130, 127, 126, 130, 126, 127, 130, 128, 131, 130, 127, 130, 127, 125, 129, 124, 125, 130, 127, 128, 132, 128, 129, 131, 126, 128, 129, 127, 129, 129, 125, 129, 129, 126, 129, 129, 128, 132, 129, 126, 129, 127, 125, 128, 128, 128, 130, 129, 129, 129, 127, 128, 127, 126, 130, 129, 127, 131, 129, 126, 130, 128, 127, 130, 127, 128, 129, 126, 129, 128, 125, 130, 127, 127, 132, 126, 127, 131, 123, 127, 128, 123, 130, 126, 124, 131, 125, 128, 130, 122, 128, 127, 122, 128, 125, 125, 129, 125, 127, 128, 124, 126, 126, 125, 128, 126, 125, 125, 124, 124, 127, 128, 128, 128, 127, 125, 124, 124, 125, 126, 127, 127, 127, 126, 125, 126, 126, 128, 129, 127, 128, 126, 124, 128, 126, 125, 130, 126, 126, 130, 126, 127, 130, 126, 129, 129, 125, 129, 128, 125, 130, 127, 126, 129, 125, 127, 129, 128, 131, 129, 129, 132, 129, 128, 130, 127, 127, 128, 125, 128, 130, 128, 130, 129, 127, 130, 128, 129, 131, 127, 129, 129, 124, 128, 128, 126, 131, 130, 129, 132, 129, 128, 130, 127, 128, 130, 127, 129, 129, 125, 128, 130, 127, 131, 131, 127, 129, 127, 125, 130, 128, 129, 130, 127, 129, 128, 126, 130, 129, 127, 130, 127, 126, 129, 126, 127, 130, 129, 129, 130, 126, 127, 127, 124, 127, 127, 126, 129, 127, 126, 127, 125, 127, 128, 128, 129, 128, 126, 126, 124, 124, 126, 125, 126, 128, 127, 126, 126, 125, 126, 127, 127, 129, 128, 126, 126, 125, 125, 126, 124, 125, 126, 124, 126, 126, 125, 127, 126, 126, 128, 126, 126, 127, 125, 125, 125, 125, 126, 126, 127, 128, 128, 130, 131, 128, 128, 129, 126, 127, 128, 127, 128, 129, 129, 129, 128, 129, 129, 128, 129, 129, 126, 127, 128, 125, 127, 127, 126, 127, 127, 126, 126, 124, 125, 126, 124, 125, 125, 124, 125, 124, 124, 125, 123, 123, 125, 124, 127, 132, 137, 146, 154, 158, 160, 155, 146, 136, 123, 114, 108, 104, 106, 112, 116, 123, 129, 133, 137, 141, 144, 145, 142, 138, 132, 123, 116, 112, 109, 110, 113, 117, 120, 124, 126, 127, 127, 127, 128, 127, 127, 126, 123, 120, 114, 112, 128, 145, 158, 175, 184, 176, 162, 145, 122, 102, 90, 89, 92, 97, 110, 119, 121, 129, 136, 138, 143, 148, 149, 148, 144, 137, 127, 115, 110, 107, 104, 110, 119, 124, 130, 133, 131, 129, 126, 124, 124, 121, 122, 121, 117, 116, 115, 113, 113, 115, 116, 117, 116, 115, 112, 101, 110, 144, 170, 191, 216, 215, 187, 156, 120, 82, 57, 54, 67, 79, 97, 122, 132, 135, 147, 154, 156, 164, 170, 169, 158, 141, 125, 102, 86, 84, 84, 93, 111, 125, 136, 147, 154, 155, 151, 147, 140, 127, 117, 111, 102, 99, 104, 108, 114, 121, 126, 130, 128, 127, 125, 119, 108, 102, 125, 160, 180, 203, 219, 198, 163, 130, 94, 66, 60, 71, 89, 104, 122, 137, 135, 137, 149, 155, 163, 172, 172, 160, 137, 115, 95, 78, 79, 91, 102, 121, 139, 145, 152, 157, 153, 147, 141, 131, 117, 106, 102, 100, 100, 111, 122, 127, 133, 134, 131, 127, 121, 117, 113, 107, 98, 100, 136, 174, 193, 218, 223, 188, 147, 110, 75, 55, 57, 77, 97, 108, 126, 136, 130, 141, 156, 162, 172, 174, 163, 140, 109, 91, 75, 68, 84, 102, 117, 138, 151, 154, 159, 159, 152, 141, 124, 111, 96, 85, 90, 98, 109, 126, 137, 140, 138, 134, 128, 121, 114, 113, 107, 103, 104, 90, 104, 161, 194, 216, 240, 226, 178, 127, 86, 54, 36, 51, 85, 103, 118, 142, 144, 140, 156, 168, 175, 177, 170, 153, 115, 85, 73, 64, 75, 102, 123, 144, 160, 162, 160, 156, 155, 149, 131, 117, 102, 82, 80, 93, 106, 126, 146, 155, 153, 141, 134, 126, 113, 111, 109, 102, 99, 97, 102, 98, 118, 184, 224, 238, 255, 228, 161, 101, 58, 30, 25, 51, 93, 119, 133, 155, 157, 150, 166, 179, 183, 177, 159, 135, 90, 61, 62, 64, 86, 122, 144, 160, 165, 161, 157, 151, 149, 145, 123, 103, 89, 72, 78, 100, 122, 146, 159, 160, 149, 129, 118, 111, 104, 105, 107, 101, 99, 97, 102, 114, 113, 138, 206, 238, 240, 239, 198, 125, 64, 32, 22, 27, 67, 118, 139, 148, 163, 160, 151, 163, 177, 174, 157, 134, 104, 64, 49, 63, 80, 112, 148, 164, 168, 162, 153, 145, 138, 139, 135, 114, 95, 84, 75, 84, 112, 140, 160, 165, 158, 142, 119, 110, 108, 105, 107, 103, 100, 101, 102, 113, 125, 139, 142, 145, 188, 222, 218, 216, 191, 128, 68, 35, 29, 38, 74, 130, 162, 167, 173, 167, 147, 149, 159, 158, 145, 121, 99, 71, 58, 79, 102, 130, 163, 173, 168, 155, 142, 134, 125, 125, 128, 113, 95, 91, 91, 103, 128, 152, 165, 161, 149, 133, 111, 106, 110, 109, 111, 113, 107, 106, 109, 118, 129, 136, 146, 141, 136, 172, 202, 204, 205, 182, 129, 74, 44, 44, 56, 93, 144, 167, 166, 163, 152, 135, 135, 148, 152, 139, 119, 101, 76, 67, 89, 116, 143, 165, 170, 158, 134, 120, 116, 116, 124, 126, 120, 111, 103, 103, 112, 128, 143, 150, 146, 136, 121, 110, 111, 112, 113, 114, 110, 105, 103, 111, 121, 130, 137, 140, 135, 118, 138, 189, 206, 210, 202, 155, 90, 41, 34, 46, 77, 133, 172, 171, 159, 149, 134, 127, 140, 153, 148, 125, 105, 86, 69, 86, 117, 144, 166, 170, 158, 134, 117, 116, 115, 123, 134, 130, 117, 108, 107, 115, 129, 145, 154, 148, 136, 125, 113, 111, 117, 120, 120, 114, 108, 106, 110, 124, 136, 140, 142, 139, 121, 115, 153, 191, 204, 208, 184, 128, 70, 44, 51, 72, 114, 159, 174, 162, 149, 137, 123, 126, 144, 152, 139, 116, 99, 83, 84, 111, 140, 162, 169, 159, 139, 117, 109, 111, 117, 129, 135, 129, 118, 113, 115, 123, 135, 147, 147, 136, 125, 113, 108, 113, 117, 119, 117, 112, 108, 107, 114, 126, 135, 136, 133, 123, 114, 144, 185, 201, 204, 184, 135, 79, 48, 52, 70, 108, 152, 168, 157, 142, 131, 120, 124, 141, 150, 140, 116, 98, 83, 82, 105, 134, 156, 163, 155, 137, 117, 112, 115, 123, 134, 134, 125, 113, 107, 110, 121, 135, 147, 146, 136, 126, 116, 111, 112, 117, 121, 115, 107, 110, 112, 114, 126, 135, 135, 126, 130, 169, 194, 198, 198, 167, 113, 69, 53, 62, 84, 126, 165, 170, 155, 145, 135, 125, 133, 147, 145, 125, 105, 92, 82, 95, 127, 152, 165, 163, 148, 128, 114, 114, 121, 127, 131, 130, 119, 111, 114, 121, 132, 144, 147, 140, 130, 120, 115, 112, 114, 120, 117, 112, 113, 113, 116, 123, 131, 134, 129, 150, 184, 191, 187, 174, 138, 95, 69, 72, 84, 106, 138, 158, 154, 145, 143, 138, 135, 143, 142, 127, 106, 94, 91, 95, 116, 141, 155, 158, 149, 134, 120, 113, 116, 120, 124, 125, 120, 113, 110, 117, 128, 140, 147, 144, 134, 123, 113, 107, 107, 111, 116, 117, 120, 123, 125, 127, 130, 135, 141, 149, 156, 156, 148, 132, 114, 102, 98, 103, 118, 133, 142, 145, 142, 137, 132, 129, 130, 128, 123, 119, 112, 108, 112, 121, 130, 137, 139, 138, 134, 130, 131, 132, 127, 123, 117, 111, 111, 115, 125, 134, 138, 142, 137, 127, 121, 118, 118, 120, 123, 123, 121, 122, 125, 131, 139, 151, 159, 158, 148, 133, 121, 111, 108, 115, 122, 127, 131, 133, 134, 134, 136, 138, 137, 133, 127, 119, 114, 114, 117, 125, 131, 133, 138, 138, 136, 137, 133, 127, 123, 117, 114, 113, 117, 123, 128, 132, 133, 131, 129, 128, 127, 128, 128, 127, 125, 125, 130, 138, 142, 145, 145, 138, 131, 124, 120, 119, 121, 122, 124, 124, 126, 129, 131, 135, 138, 135, 131, 124, 118, 117, 117, 120, 124, 125, 127, 127, 126, 127, 129, 130, 132, 129, 126, 125, 121, 122, 125, 127, 128, 126, 124, 123, 121, 126, 129, 128, 128, 126, 122, 119, 119, 121, 124, 125, 127, 128, 126, 127, 129, 130, 132, 132, 131, 129, 126, 125, 126, 126, 128, 130, 131, 129, 128, 128, 129, 129, 129, 128, 126, 124, 122, 122, 123, 122, 122, 123, 122, 123, 124, 127, 129, 128, 128, 127, 124, 125, 134, 142, 147, 147, 142, 132, 122, 118, 118, 120, 125, 130, 129, 129, 131, 133, 135, 136, 136, 132, 124, 120, 118, 117, 121, 126, 129, 131, 132, 133, 133, 133, 134, 133, 129, 125, 121, 120, 121, 124, 129, 132, 134, 133, 131, 130, 129, 129, 129, 128, 127, 125, 123, 124, 126, 128, 131, 134, 133, 131, 128, 127, 126, 126, 127, 127, 126, 126, 126, 128, 130, 130, 131, 130, 129, 128, 126, 125, 125, 126, 126, 126, 126, 127, 127, 128, 128, 128, 128, 127, 126, 126, 125, 125, 125, 125, 124, 125, 128, 127, 127, 128, 128, 127, 126, 126, 125, 124, 124, 124, 124, 125, 127, 128, 127, 128, 127, 126, 126, 125, 125, 125, 126, 126, 126, 125, 126, 127, 127, 127, 127, 127, 127, 126, 126, 127, 127, 128, 129, 128, 129, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 127, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 127, 128, 129, 128, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 127, 127, 127, 127, 128, 129, 129, 130, 130, 130, 129, 129, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 126, 126, 127, 127, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 129, 129, 128, 128, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 127, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 127, 126, 126, 126, 126, 126, 126, 127, 127, 126, 126, 126, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 127, 126, 126, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 129, 129, 129, 129, 128, 128, 128, 127, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 127, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 126, 125, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 125, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 129, 128, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 126, 126, 126, 126, 127, 127, 128, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 128, 129, 129, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 126, 126, 127, 127, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 128, 128, 129, 129, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 128, 129, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 129, 129, 129, 128, 129, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 129, 129, 128, 129, 129, 129, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 127, 128, 129, 131, 130, 128, 127, 128, 129, 129, 128, 128, 127, 126, 126, 127, 127, 127, 127, 127, 128, 129, 129, 129, 129, 129, 128, 129, 129, 129, 129, 128, 128, 129, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 129, 129, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 127, 126, 126, 127, 127, 127, 126, 127, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 127, 126, 126, 126, 127, 127, 126, 126, 127, 127, 126, 126, 127, 127, 128, 128, 127, 127, 127, 128, 128, 128, 128, 127, 128, 128, 128, 128, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 127, 128, 129, 129, 129, 128, 128, 128, 129, 129, 129, 129, 128, 128, 129, 129, 129, 128, 128, 128, 129, 129, 128, 128, 128, 128, 129, 130, 129, 127, 128, 130, 130, 129, 128, 128, 128, 128, 129, 129, 128, 128, 128, 129, 130, 128, 128, 129, 129, 128, 128, 129, 129, 128, 128, 129, 129, 128, 127, 128, 129, 129, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 129, 130, 127, 125, 128, 130, 129, 126, 125, 127, 127, 126, 124, 124, 125, 125, 124, 126, 126, 125, 124, 124, 125, 125, 124, 125, 126, 125, 124, 124, 125, 126, 125, 125, 126, 126, 127, 126, 127, 127, 127, 127, 127, 128, 128, 127, 127, 128, 127, 127, 127, 127, 128, 128, 127, 126, 127, 128, 128, 127, 128, 127, 128, 128, 128, 128, 128, 127, 127, 128, 129, 129, 128, 127, 128, 128, 129, 130, 129, 127, 127, 129, 131, 129, 127, 127, 129, 130, 128, 126, 127, 128, 128, 128, 127, 127, 127, 127, 128, 128, 127, 127, 128, 128, 128, 127, 128, 129, 129, 128, 128, 128, 129, 130, 129, 128, 129, 129, 129, 128, 128, 128, 128, 129, 129, 128, 128, 128, 129, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 126, 127, 127, 126, 126, 127, 128, 127, 127, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 125, 126, 127, 127, 127, 127, 126, 126, 127, 127, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 129, 129, 129, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 129, 129, 129, 129, 129, 129, 129, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 129, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 129, 128, 128, 127, 127, 127, 127, 127, 127, 126, 127, 127, 126, 126, 126, 126, 126, 127, 127, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 127, 126, 125, 126, 126, 126, 126, 125, 126, 126, 126, 125, 126, 126, 126, 127, 126, 127, 127, 126, 127, 127, 126, 127, 127, 127, 126, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 127, 127, 127, 126, 126, 126, 126, 125, 125, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 127, 127, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 128, 128, 128, 127, 128, 128, 127, 128, 127, 127, 127, 127, 128, 128, 128, 128, 128, 129, 128, 128, 129, 129, 129, 128, 128, 129, 129, 129, 129, 128, 129, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 129, 128, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 125, 125, 125, 125, 126, 126, 126, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 127, 127, 128, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 128, 128, 129, 128, 128, 128, 128, 128, 128, 128,
      };
      
      void setup()
      {
        // Lecture de la bande sonore, au démarrage de l'arduino
        startPlayback(bandeSonore, sizeof(bandeSonore));        // Sortie sur la broche D11, non modifiable
      }
      
      void loop()
      {
        // Vide (tout se passe dans la fonction setup, ici)
      }
      

      Remarques :

      • Ce programme prend déjà 32% de la mémoire d’un Arduino Uno (c’est dire si sa capacité de stockage « interne » est limitée !)
      • J’ai utilisé le logiciel Audacity (https://www.audacityteam.org/), gratuit, pour abaisser à 8 kHz l’enregistrement MP3 que j’avais fait
      • J’ai ensuite utilisé un encodeur audio (https://github.com/damellis/EncodeAudio), gratuit aussi, pour récupérer le contenu du fichier MP3, au format texte (l’exécutable de l’encodeur étant par exemple téléchargeable ici)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Symbole danger point d'exclamation site PSE, triangle jaune avec contour noir, texte noir alerte au milieuAfin 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é …