Contrôleur MIDI

:

Description

Dans le cadre de la création de son spectacle Rien n'arrive ! Et ça arrive souvent !, la compagnie l'Art de Vivre nous a confié la fabrication d'un contrôleur MIDI utilisant des leviers pour déclencher des sons. L'association Laisser Passer nous a permis d'extraire de leur matériaux portuaires à recycler huit leviers articulés en aluminium qui seront la base du contrôleur. Ces huit levier ON/OFF actionnerons des sons, un neuvième levier gradué permettra de régler un volume ou des effets et deux entrées pour pédale d'expression ou switch en complétera le jeu. Les pièces nécessaires à ce fonctionnement (butées avant et arrières et le ressort de rappel, maintien des boutons poussoirs…) ont été conçues autour de ces leviers et découpé au LFO. Enfin, un cadre maintenant solidement le tout à été fabriqué en acier soudé.

Matériaux

  • Leviers : récupération portuaire issu du stock de Laisser Passer
  • Socle : profilé en L acier 4mm, boulons en U
  • Mécanique : PVC 10mm et PVC 5mm usiné à la fraiseuse numérique
  • Électronique : arduino Leonardo, boutons étanches de récupération, potentiomètre

code

Afin d'éviter les redondances dans le code, les entrées sont déclarées comme des structs contenant toutes les variables qui se réfèrent à l'entrée : numéro de pin, durée d'anti-rebond, note midi émise, valeur actuelle, valeur précédente… Ces structs sont ajoutés dans deux tableaux, l'un contenant les capteurs analogiques, l'autre les capteurs numériques. L'initialisation de toutes les entrées ainsi que leur traitement peut ainsi se faire sous forme de boucle for. Le midi est géré par la lib MIDIUSB de Gary Grewal. Des événements note-on et note-off sont envoyés quand un interrupteur est actionné et des control changes dès qu'une entrée analogique est bougée (pédale ou levier gradué). Chaque bouton est assigné à une note midi de C0 à B0 et les contrôles continus vont du numéro 20 au 22. Ce code implémente une zone morte autour de la dernière valeur analogique lue pour éviter l'envoi massif de messages non-significatifs. Toutefois comme l'Arduino offre une acquisition de 10bits (0~1023) et les valeurs MIDI restent bornées à 7bits (0~127 soit un demi-octet), la zone morte n'est pas nécessaire ici.

Pour lire les valeurs brutes et calibrer les entrées analogiques, un define en première ligne peut être dé-commenté. Il transforme alors le port USB de l'arduino Leonardo non plus en périphérique MIDI mais en port série, permettant de lire sur le moniteur série d'Arduino les valeurs brutes et mise à l'échelle MIDI des capteurs telles qu'elles sont envoyées en mode normal.

Les #define sont parfois ignorés pour les cartes Leonardo, Due et Micro par le pré-processeur des versions récentes d'arduino. le code téléchargeable en en-tête n'en possède pas pour rester compatible avec toutes les versions d'IDE d'Arduino.

Le code du projet peut être consulté ci-dessous :

arduinoLeonardo.ino

Photos