lundi 8 mai 2017

Fabrication d'une flûte à bec MIDI (Arduino)

J'ai fabriqué une flûte à bec MIDI.  J'admets qu'elle n'est pas très esthétique, mais elle fonctionne plutôt bien.



C'est quoi, une flûte MIDI?

C'est un contrôleur MIDI qui fonctionne exactement comme une flûte à bec, sauf que les trous ont été remplacés par des boutons poussoirs:  vous appuyez sur la bonne combinaison de boutons et, lorsque vous soufflez dans l'embouchure, un message MIDI est transmis à un clavier MIDI (ou un logiciel MIDI), qui joue les notes avec une sonorité de flûte...ou celle d'un autre instrument, si c'est ce que vous préférez.

Tout comme pour une vraie flûte à bec, le volume sonore de la note jouée dépend de la force avec laquelle vous soufflez dans l'embouchure (plus vous soufflez fort, plus la note aura un volume élevé). Quant à la hauteur de la note, elle dépend de la combinaison de boutons qui sont enfoncés.

Matériel

Pour fabriquer ma flûte MIDI, j'ai principalement utilisé une carte Arduino Uno, un capteur de pression BMP180, 11 boutons poussoirs, et un bâton de bois ayant à peu près la taille d'une flûte à bec,

L'embouchure

Pour détecter si le flûtiste est en train de souffler de l'air ou non, j'ai choisi d'utiliser un capteur de pression barométrique BMP180 (module GY-68)  (que j'avais déjà exploré dans un précédent article).

Pour que le souffle du musicien ait un effet perceptible sur la pression, il convient d'enfermer le capteur à l'intérieur d'un récipient semi-hermétique.  J'ai choisi ce que j'avais sous la main: une coquille de Kinder Suprise en plastique. Pour que ce soit plus confortable dans la bouche du flûtiste, j'y ai ajouté un tube provenant d'un stylo à billes.

Ça fonctionne raisonnablement bien, mais soyez conscients que j'ai utilisé ce qui traînait dans mon atelier.  Vous pouvez obtenir d'excellents résultant en utilisant du matériel totalement différent (en particulier:  quelque chose dont la forme ressemblerait un peu plus à l'embouchure d'une véritable flûte à bec...).

Il faut prévoir une ouverture dans le récipient pour faire passer les fils qui relieront le capteur BMP180 à l'Arduino, mais également pour laisser sortir l'air (de façon à ce que le musicien ait vraiment l'impression de souffler dans une flûte).






Tests de l'embouchure

Après avoir fabriqué mon embouchure rudimentaire, j'ai effectué quelques tests pour avoir une idée de la pression mesurée lorsqu'on ne souffle pas dans la flûte, lorsqu'on souffle doucement, ou énergiquement, etc.

Pour ce faire, j'ai utilisé le sketch publié dans mon précédent article sur le capteur BMP180.

Conclusion:  Lorsque je ne souffle pas dans l'embouchure, la pression atmosphérique est de 983,90 hPa, mais elle peut atteindre 1025 hPa lorsque je souffle.




Prenez garde, toutefois, de vous réserver une bonne marge de manoeuvre:  la pression atmosphérique varie d'une journée à l'autre (c'est d'ailleurs une façon d'effectuer des prédictions météorologiques). Suite aux mesures affichées ci-dessus, j'avais conçu un sketch qui considérait qu'une pression supérieure à 985 hPa signifiait qu'on soufflait dans l'embouchure;  le lendemain, ma flûte jouait toute seule...


Les boutons



Une flûte à bec comporte une dizaine de trous:  9 sur le dessus de la flûte, et un en-dessous.  Sur ma flûte, chaque trou est remplacé par un interrupteur (bouton poussoir).  J'ai respecté la taille et l'espacement des trous d'une vraie flûte mais, si c'était à refaire, j'utiliserais probablement des boutons plus gros et un peu plus espacés, pour une meilleure ergonomie.

Les trous situés près de l'extrémité de la flûte (contrôlés par l'annulaire et l'auriculaire de la main droite) sont doubles:  la note jouée ne sera pas la même selon que les deux trous sont couverts, ou qu'un seul trou est couvert, ou que les deux trous sont laissés découverts.

Sur ma flûte, ces paires de trous sont remplacés par deux boutons placés côte à côte, mais il n'est pas nécessaire d'appuyer sur les deux boutons avec le même doigt:  appuyer sur un des boutons est l'équivalent de couvrir les deux trous, alors qu'appuyer sur l'autre bouton est l'équivalent de couvrir un seul des deux trous.

Il en va de même pour le trou du dessous, contrôlé par le pouce de la main gauche:  pour produire certaines notes, il faut couvrir ce trou à moitié.  J'ai donc placé deux boutons sous ma flûte:  un bouton pour produire la note qu'on obtient lorsque le pouce recouvre la totalité du trou, et un deuxième bouton pour produire la note qu'on obtient lorsque le pouce ne recouvre que la moitié du trou.



L'illustration ci-dessous indique le numéro de chaque bouton (c'est la numérotation que j'ai utilisée dans mon sketch).  Voici la liste des boutons qu'il faut enfoncer pour produire chaque note:

Do 1:  1-3-4-5-6-7-8-10
Do# 1: 0-3-4-5-6-7-8-10
Ré 1: 3-4-5-6-7-8-10
Ré# 1:  2-4-5-6-7-8-10
Mi 1: 4-5-6-7-8-10
Fa 1: 1-3-5-6-7-8-10
Fa# 1: 3-4-6-7-8-10
Sol 1: 6-7-8-10
Sol# 1: 3-4-5-7-8-10
La 1: 7-8-10
La# 1: 6-8-10
Si 1:  8-10
Do 2: 7-10
Do# 2: 7-8
Ré 2: 7
Ré# 2: 2-4-5-6-7-8-9
Mi 2: 4-5-6-7-8-9
Fa 2: 3-5-6-7-8-9
Fa# 2: 4-6-7-8-9
Sol 2: 6-7-8-9
Sol# 2:5-7-8-9
La 2: 7-8-9
La# 2: 3-4-5-7-8-9
Si 2: 4-5-7-8-9
Do 3: 4-5-8-9

Pour les combinaisons qui ne sont pas indiquées sur cette liste, la flûte ne produira aucun son.  Si désiré, on pourrait choisir d'assigner d'autres notes à ces combinaisons manquantes, même si elles ne correspondent pas à ce qu'on obtiendrait sur une flûte réelle.  Si vous n'êtes pas flûtiste, vous pouvez aussi assigner à vos boutons des notes qui sont plus facile à mémoriser.

On remarquera aussi qu'une flûte est un instrument qui ne produit qu'une seule note à la fois:  cette contrainte nous facilitera un peu la vie lors de la conception du circuit et du programme.  Mais ici encore, rien ne vous empêche d'inventer un instrument à vent polyphonique.

Le circuit complet



Lorsque j'ai construit mon clavier MIDI, et même mon pédalier d'orgue MIDI, j'avais eu besoin de registres à décalages et de matrices d'interrupteurs.  Mais puisque ma flûte ne comporte que 11 boutons, j'ai décidé, pour simplifier les choses au maximum, d'assigner chaque bouton à une entrée de l'Arduino. Si vous préférez économiser les entrées de l'Arduino (pour ajouter d'autres contrôles, un afficheur LCD, etc.), libre à vous d'utiliser un ou deux registres à décalage HC165.

De plus, j'ai activé les résistances pull-up internes de l'Arduino, ce qui m'a évité de devoir ajouter une résistance externe à chaque bouton.

Le capteur de pression barométrique BMP180 se branche de la façon suivante:

VIN du BMP180:  5V de l'Arduino
GND du BMP180:  GND de l'Arduino
SCL du BMP180:  A5 de l'Arduino
SDA du BMP180:  A4 de l'Arduino

En ce qui concerne la communication MIDI, j'ai utilisé le module MIDI que j'avais jadis fabriqué (plus de détails ici), mais puisqu'il ne s'agit que d'une sortie (on n'a pas besoin d'une entrée MIDI sur notre flûte), la connexion est plutôt simple.

Biblothèque BMP180

Mon sketch nécessite l'installation de la bibliothèque BMP180 conçue par Sparkfun.  La communication MIDI ne requière quant à elle aucune bibliothèque.

Le sketch

Au départ, on définit la liste des configurations de boutons qui produisent une note connue, grâce à la matrice bidimensionnelle "notes" (25 notes constituée de 11 boutons pouvant être enfoncés ou non).

Puisque j'utilise les résistances pull-up internes, le niveau logique est "1" lorsque le bouton n'est pas enfoncé, et "0" lorsqu'il est enfoncé.  Par exemple, lorsqu'on produit la note "sol 1" en appuyant sur les boutons 6-7-8-10 , les éléments de la variable "boutons" prendront les valeurs suivantes "1111100010".  Lorsqu'on appuie sur les boutons 1-3-4-5-6-7-8-10 pour produire la note "do 1", la variable "boutons" devient "10100000010".

Par défaut, une commande "program change" règle le timbre à une sonorité de flûte.  Il serait utile d'ajouter un moyen de modifier cette valeur, afin que le flûtiste puisse jouer un solo de guitare électrique, par exemple.

À l'intérieur de la boucle principale, le sketch vérifie d'abord si le flûtiste est en train de souffler dans l'embouchure.  Si c'est le cas, la pression est convertie en un nombre situé entre 0 et 127, qui sert à envoyer à l'instrument MIDI un message de contrôle de volume (ainsi, le volume de la note jouée dépendra de la force avec laquelle le flûtiste souffle dans l'embouchure).

Si un souffle est détecté, on vérifie l'état de chacun des 11 boutons de la flûte (variable "boutons"), et on compare la configuration actuelle avec chacune des configurations associées à une note (variable "notes").  Si l'état des boutons correspond à une configuration associée à une note, on envoie un message "note on" pour jouer cette note.  Chaque fois qu'on change la configuration des boutons ou qu'on cesse de souffler, il faut envoyer un message "note off", qui est en fait un message "note on" avec une vélocité nulle,



Améliorations possibles


  • Pour une utilisation fréquente, il serait utile de remplacer la communication filaire par une communication sans fil (comme dans ce projet).  L'Arduino Uno pourrait alors être remplacé par un Arduino Nano ou Pro Mini, fixé directement sur la flûte, et alimenté par une pile.
  • Dans sa version actuelle, la flûte ne comporte pas de bouton permettant de changer la sonorité de l'instrument ("program change").  Ce serait relativement facile à ajouter (il reste encore quelques entrées disponibles sur l'Arduino).
  • Le capteur de pression peut détecter si le flûtiste inspire au lieu d'expirer:  on pourrait programmer la flûte pour qu'elle se comporte d'une certaine façon lors d'une inspiration (jouer la note avec une sonorité différente, peut-être).
  • Il devrait être facile de modifier ce projet afin d'imiter un autre instrument à vent: clarinette, saxophone, trompette, etc.

Yves Pelletier   (TwitterFacebook)

1 commentaire:

  1. Bonjour, et bravo pour ce montage. J'envisage de fabriquer une bombarde électronique sur ce modèle, serait-il possible d'y adapter une sortie jack 3,5mm en lieu et place du connecteur midi ? J'imagine qu'il lui faudrait pour cela un convertisseur numérique/analogique ?

    Merci d'avance pour vos éclaircissements.
    Seb.

    RépondreSupprimer