mercredi 5 août 2020

S'entraîner à lire les notes sur une portée avec Arduino

J'aime bien jouer du clavier, mais j'ai beaucoup de difficulté à jouer à vue, c'est à dire interpréter une partition de piano assez rapidement pour la jouer sans l'avoir préalablement mémorisée. Je me débrouille assez bien en clé de sol, mais en clé de fa, mes performances sont simplement pitoyables.



Dans l'espoir de devenir un meilleur musicien, j'ai mis au point un dispositif qui se branche dans un clavier MIDI. Une note s'affiche sur une portée, et je dois jouer cette note sur le clavier. Si j'appuie sur la bonne touche, je gagne un point, et une nouvelle note s'affiche. 



Si j'appuie sur la mauvaise touche, un petit clavier apparaît à l'écran pour m'indiquer quelle touche il faut appuyer et, bien entendu, je ne récolte aucun point. Je dois quand même appuyer sur la bonne touche afin de passer à la question suivante. De plus, juste après avoir joué "ma" note, le clavier joue la note que j'aurais dû jouer, ce qui me permet de comparer les deux notes de façon auditive.



Ce dispositif est constitué d'une carte Arduino Uno, d'un écran LCD PCD8544 (Nokia 5110) et d'une interface MIDI de fabrication maison qui est essentiellement constituée d'un octocoupleur, d'une diode de quelques résistances et de connecteurs DIN.




Le circuit

Je reproduis ici le schéma de mon interface MIDI, fabriquée en 2012... La partie "MIDI IN" est essentielle pour détecter la note jouée sur le clavier. La partie "MIDI OUT" permet à l'Arduino de faire jouer, par l'entremise du clavier, la note qu'il fallait jouer, ce qui aide l'utilisateur à constater s'il a joué la bonne note ou non.

Vous pouvez également vous procurer un module MIDI prêt à l'emploi (recherchez "MIDI Shield Arduino").

En ce qui concerne l'afficheur LCD, le circuit est assez complexe puisque j'utilise un circuit intégré 4050 afin d'abaisser à 3,3 V les signaux logiques générés par l'Arduino Uno. Voici le schéma, mais vous trouverez beaucoup plus d'information en consultant cet article consacré à l'utilisation d'un écran Nokia 5110 avec un Arduino.



Installation de la bibliothèque MIDI

J'ai utilisé la bibliothèque MIDI afin de simplifier au maximum la gestion de la communication entre l'Arduino et le clavier MIDI.


Installation des bibliothèques pour l'afficheur LCD

Pour l'affichage sur l'écran Nokia 5150, j'ai utilisé la bibliothèque Adafruit-PCD8544-Nokia-5110-LCD ainsi que la bibliothèque Adafruit-GFX.



Le sketch

Une part importante du sketch concerne la gestion de l'écran LCD. Au moyen d'un logiciel de dessin, j'ai créé quatre minuscules fichiers .bmp: la portée avec une clé de sol, la portée avec une clé de fa, le symbole bémol, et le symbole dièse.  J'ai ensuite chargé ces fichiers .bmp dans l'outil en ligne image2ccp afin de les transformer en information utilisable dans un sketch Arduino. Il s'agit des quatre constantes "cleDeSol", "cleDeFa", "bemol" et "diese" énoncées au début du programme.

Pour les autres éléments affichés sur l'écran, j'ai utilisé les outils de base de la bibliothèque GFX (rectangles pour dessiner le clavier, rectangle à coin arrondi pour les notes, etc.)

Comme son nom l'indique, la routine "nouvelleQuestion" est responsable de créer aléatoirement une nouvelle note à placer sur la portée. Cette nouvelle note est décrite au moyen de 3 variables: "clef" détermine si la portée est en clé de sol ou en clé de fa, "altération" détermine si la note est accompagnée d'un bémol ou d'une dièse, et "numéro" indique la position de la note sur la portée.

Lorsque l'utilisateur appuie sur une touche du clavier, il faut vérifier si la note qu'il a généré correspond à celle qui est affichée sur le portée; c'est fait dans la fonction "compareNotes", grâce à deux tableaux qui établissent une relation entre chaque position sur la portée et son numéro de note MIDI (ce sont les variables notes_fa et notes_sol).

-
-

À lire aussi:


Yves Pelletier (TwitterFacebook)

1 commentaire:

  1. Bonjour monsieur Pelletier.
    Cela fait quelques temps que je parcours vos sujets, essentiellement sur Arduino et l'électronique, et je suis épaté par votre volonté de partage de connaissances.
    Toujours bien présenté et illustré et dans un français impeccable.
    Mille mercis à vous pour tout ça.

    RépondreSupprimer