Orgue 6

Voici la description d'un petit orgue électronique que m'a demandé de réaliser un professeur de guitare. Cet instrument dispose de 13 touches pour une étendue d'un octave, de Do3 à Do4, avec La3 central à 440 Hz (voir page Notes musique pour plus de détails sur les fréquences générées). 

orgue_006_pcb_3d_a

Deux boutons poussoirs permettent de descendre ou de monter la tonalité des notes jouées sur -3 octaves à +2 octaves par cran d'un octave, ce qui permet de couvrir la plage de Do0 à Do6 en six gammes. L'appareil dispose d'une sortie audio locale capable d'attaquer directement un petit transducteur piezo (générateur sonore intégré) et d'une sortie MIDI qui délivre un événement MIDI de type Note en adéquation avec la touche pressée et l'octave sélectionné. La sortie MIDI doit être reliée à un générateur sonore équipé d'une entrée MIDI tel que synthétiseur, expandeur ou ordinateur avec instruments virtuels. 
En mode Audio local, une seule note peut être jouée à la fois, l'orgue est dans ce cas de type monophonique. La note est audible tant qu'on appuie sur une touche, avec un effet de type "rafale" : note jouée pendant un certain temps, coupure brève, note à nouveau jouée, etc. La raison de ce comportement sera expliquée plus loin.

En mode MIDI, les notes peuvent être jouées de deux façons différentes : 

- mode "Note brève" - dans ce mode seul l'appui sur les touches du clavier est surveillé, le relâchement ne l'est pas. La note est jouée avec une durée fixe, qui ne dépend pas du temps pendant lequel on appuie sur le clavier.

- mode "Note normale" - dans ce mode l'appui et le relâchement des touches du clavier sont pris en compte. La note dure autant de temps qu'on appuie sur les touches du clavier. Dans ce second mode de fonctionnement on peut plaquer des accords, l'instrument étant dans ce cas polyphonique (chose que je n'avais pas espérée quand j'ai débuté sa conception).

Remarque : les sorties MIDI et Audio local ne peuvent pas être activées simultanément, il faut choisir l'une ou l'autre.
Une option permettant de jouer avec des touches sensitives sera évoquée, pour ceux qui peinent à appuyer sur des touches mécaniques.

Avertissement

Cet instrument n'a pas été conçu pour accompagner quelqu'un. On peut éventuellement s'en servir pour ça en mode MIDI, mais en mode audio local, les notes durent un peu quand on relâche les touches. Voyez donc cet appareil un peu comme un guide chant d'un type particulier.

Schéma

Vous avouerez qu'il n'y a tout de même pas grand chose quand on fait l'énumération des capacités de cet instrument !

orgue_006

Principe de fonctionnement

Il est assez simple et repose quasiment intégralement sur le logiciel forgé dans le PIC 18F2520. Il consiste à lire en permanence l'état des entrées du PIC sur lesquelles sont reliées les touches du clavier, et à réagir en cas de changement d'état (pression ou relâchement d'une touche).

Dans le mode Audio local, on lit l'état des seize entrées câblées aux boutons poussoir. Si une touche Note est appuyée, on génère sur la ligne AnaOut un signal rectangulaire dont la fréquence correspond à la note en question. Si après la génération de cette note l'entrée qui était activée l'est toujours, le PIC rejoue la même note. La légère coupure audio qui en résulte (entre les deux productions sonores) donne un petit effet que l'on peut qualifier de sympathique si on l'aime bien. Pour ma part ça ne me gêne pas. La durée de chaque "séquence" de note peut être ajustée dans le code si nécessaire, la valeur fixée par défaut est de 500 ms. On retiendra simplement qu'il s'agit du temps minimal pendant lequel les notes sont entendues même si l'appui sur les touches est très bref.

Dans le mode MIDI, les notes sont générées de façon différentes selon le mode de jeux spécifié par l'utilisateur au travers de la touche Mode. Lors de la mise sous tension, les notes MIDI sont composées d'un événement MIDI Note On quand on appuie sur une touche et d'un événement MIDI Note Off quand on relâche la touche. Un appui sur la touche Mode conduit à la production d'une note MIDI brève composée d'un événement MIDI Note On suivi peu de temps après d'un événement MIDI Note Off, même si la touche du clavier n'est pas relâchée.

Horloge de référence

Il aurait été possible d'utiliser l'oscillateur interne 8 MHz du PIC mais pour des questions de stabilité et de justesse j'ai préféré utiliser un quartz externe de 12 MHz. Cette fréquence de base suffit pour jouer les notes les plus aigues en mode audio local.

Sortie audio

La ligne RC5 du PIC est configurée en sortie et c'est sur cette broche que l'on récupère le signal BF de la note jouée en mode local (ligne appelée AnaOut pour l'occasion). La sortie du PIC ne peut débiter qu'un courant maximal de 25 mA, ce qui est bien insuffisant pour attaquer directement un haut-parleur. Mais il est possible en revanche de piloter directement un petit buzer piezo, dont la "consommation" est bien plus faible. La broche RC5 peut également servir de sortie audio au niveau ligne, en intercalant un pont diviseur résistif de rapport 1/10 environ (résistance série de 10 kO suivie d'une résistance parallèle de 1 kO par exemple). Cela permet de ramener l'amplitude du signal de 5 V à 500 mV, ce qui est plus compatible avec une sortie de type ligne. Un condensateur de liaison peut éventuellement être ajouté mais cela n'est pas obligatoire puisque la tension de sortie sur la ligne RC5 est de 0 V au repos (quand aucune note n'est jouée en mode audio local).

Alimentation

L'ensemble fonctionne sous une tension d'alimentation régulée de +5 V. Il n'est pas impossible que vous trouviez le schéma d'une telle alimentation sur ce site...

Autre PIC possible ?

Oui, on peut utiliser d'autres PICs pour disposer des mêmes fonctions. La première version de cet orgue était basée sur un 16F628A, mais je ne l'ai pas gardé car il fallait absolument disposer des deux boutons pour descendre ou monter les octaves. J'ai bien essayé d'utiliser un clavier matricé 4 x 4 touches mais se posait le problème de la gestion des "touches enfoncées / relâchées" en mode "notes normales". J'aurais sans doute pu fouiner plus loin, mais j'ai joué la simplicité en adoptant un PIC doté de plus de lignes d'entrées / sortie. Finalement bien m'en a pris car cela m'a permis de rajouter une sortie audio locale qui n'était pas du tout prévue au départ. En résumé, si votre besoin se résume à générer des notes MIDI "courtes" à chaque appui sur un poussoir, vous pouvez parfaitement utiliser un 16F628A et sa matrice 4 x 4 de boutons poussoirs.

Enregistrement des notes jouées ?

Le PIC dispose d'un espace mémoire (EEProm) que l'on pourrait mettre à profit pour enregistrer une séquence de quelques notes. Je ne me suis pas penché sur la façon de faire mais à vue de nez ce ne devrait pas être trop difficile.

Utilisation de touches sensitives

Tel que présenté ci-avant, l'instrument requiert des boutons poussoirs ou touches clavier électromécaniques pour être utilisable. Et il faut appuyer sur ces touches, ce qui peut causer des crampes en fin de semaine. Et bien figurez-vous qu'il y a la possibilité d'ajouter quelques composants bon marché pour obtenir un fonctionnement avec des touches sensitives. Le schéma qui suit représente une extension possible permettant de jouer avec l'instrument en effleurant simplement des touches sensibles du bout des doigts.

orgue_006_ext_ts_001

On exploite la haute impédance d'entrée des portes logiques incluses dans les circuits intégrés CD4011 (circuits U2 à U4) pour assurer la fonction de "détection pose doigt". Pour ce faire, il suffit de faire contact avec le bout du doigt entre les entrées des portes logiques et la masse. Au repos, quand le doigt n'est pas posé, les entrées des portes logiques sont portées à un potentiel positif de +5V au travers des résistances de forte valeur R101 à R116 de 4,7 MO. Voir aussi page Bases - Touches sensitives.

detecteur_toucher_cd4011_b

Les sorties des portes logiques, qui sont câblées en inverseuses, présentent donc des états logiques bas (pratiquement zéro volt) et de fait ne font pas conduire les transistors inclus dans les circuits ULN2803 qui font suite. Quand on pose le doigt entre une entrée de porte et la masse, la sortie de la porte en question change d'état car la résistance ohmique du bout du doigt que l'on pose est bien inférieure à 4,7 MO et l'entrée voit donc un état logique plus "bas" que "haut". La sortie de la porte qui passe à l'état logique haut (pratiquement +5 V) fait conduire le transistor intégré dans le circuit ULN2803 qui suit. Par exemple si on pose le doigt sur la touche TS_Mi3, les deux entrées (broches 1 et 2) de la porte logique U3:A passent à l'état logique bas, la sortie de cette même porte U3:A (broche 3) passe à l'état logique haut et le transistor inclus dans U6 et dont la base est raccordée à la patte 5B (broche 5, B comme Base) est rendu passant. De ce fait, on se retrouve avec un espace émetteur-collecteur passant entre la masse (broche 9 de U6 / ULN2803) et la sortie 5C (broche 14, C comme Collecteur). Et le résultat est identique à celui que l'on aurait eu en appuyant sur le bouton poussoir SW5 / Mi3, la note Mi3 est jouée.

Remarques :

- les CD4011 peuvent être échangés sans aucun problème par des CD4001 (vous pouvez même mixer les deux).

- il n'est à priori pas obligatoire de relier les bornes COM (commun en broche 10) des ULN2803 au +5 V, car les sorties ne sont pas raccordées sur des charges inductives. J'ai préféré le faire, par habitude. Dans tous les cas ça ne fait pas de mal.

- je n'ai pas jugé utile d'insérer une résistance de faible valeur pour limiter le courant de court-circuit des condensateurs d'entrées par les transistors des ULN2803, je juge ce courant assez faible pour être sans risque pour les transistors intégrés. Il est en effet de quelques centaines de mA sur des pointes brèves et les transistors intégrés le supportent sans crainte. Si vous jugez que le courant de décharge des condensateurs est préjudiciable à la durée de vie des transistors (ce que je ne pense pas) ou à celle des boutons poussoir (ce que je ne pense pas s'ils sont de bonne qualité), alors vous pouvez insérer des résistances de valeur comprise entre 10 et 100 ohms en série avec l'élément de commande (bouton poussoir ou transistor).

Ah au fait, peut-être est-il utile de rappeler la structure interne du ULN2803...

uln2803
ULN2803

Prototype

Réalisé sur plaque d'expérimentation sans soudure.

   

Le circuit n'a pas fonctionné parfaitement du premier coup. Ca allait bien pour la partie audio locale (avec le petit buzzer visible sur la quatrième photo), mais les notes MIDI étaient toujours envoyées "complètes" (Note On et Note Off) quand on appuyait sur les touches sans les relâcher, quelque soit le mode choisi. J'ai cherché un bon moment avant de trouver la faute : j'avais inséré une ligne de code de débuggage pour faire des tests dans un mode figé, et j'avais tout bonnement omis de la retirer ensuite. C'est souvent des petites choses comme ça qui vous amusent pendant quelques heures. Je n'ai pas monté l'intégralité de la partie à touches sensitives, que j'ai déjà faite plusieurs fois auparavant et je sais que ça fonctionne comme ça. Comme les photos du prototype peuvent en attester, je n'ai pas posé de condensateur sur la totalité des entrées. Je pensais que les "rebonds" (plutôt les faux contacts) obligatoirement générés lors de la pose de mes fils de tests poseraient des problèmes, mais en fait ils étaient assez brefs (contacts établis assez rapidement) et le temps processeur passé pour gérer le premier changement d'état constituait à lui seul un anti-rebond logiciel de fortune. Attention, je ne dis pas là que les condensateurs d'entrée peuvent être supprimés ! Vous noterez également la présence de trois réseaux de résistances en ligne, bien pratique pour économiser la place sur la plaque d'essai et sur le circuit imprimé. Toutes les résistances intégrées n'étaient pas câblées, j'ai pris ce que j'avais sous la main. Pour résumer, un circuit qui fonctionne plutôt bien avec peu de moyens.

Logiciel PIC

L'archive zip dont le lien suit contient le source complet (MikroPascal Pro V3.8) et le fichier binaire compilé (*.hex).
Orgue 006 - PIC 18F2520 (03/10/2010)

Clavier à touches sensitive

Il peut être réalisé de plusieurs façons. Vous pouvez utiliser des punaises fixées sur une planche de bois fine, et souder un fil court sur chaque pointe de punaise (les fils vont donc par le dessous et ne sont pas visibles). Vous pouvez aussi graver un petit circuit imprimé sur lequel sont dessinées les touches, à la taille désirée. Il peut tout aussi bien s'agir de petits carrés que de formes approchant le look de vraies touches, comme le montre le dessin suivant.

orgue_006_pcb_clavier_ts_001a

Ces exemples sont assez parlants je pense. La forme des touches du clavier inférieur n'est pas une reproduction fidèle d'un vrai clavier, l'idée est de reconnaitre visuellement les notes non altérées et celles qui le sont, tout en limitant le risque d'en toucher deux adjacentes en même temps. Les trois dernières touches sensitives sont vraiment pleines et on les localise bien à part des touches pour notes. Comme on peut le lire sur les emballages de plats préparés, "suggestion de présentation".

Clavier à touches mécaniques

J'ai entamé la réalisation d'un second prototype avec des boutons poussoirs à souder sur CI. Les treize boutons des notes sont bien séparés des trois boutons de "configuration".



Ce prototype sera laissé entre les mains de mes enfants, c'est pourquoi j'ai utilisé des poussoirs de bonne qualité et robustes. 
Oui je sais, les touches sensitives sont sensées être aussi robustes. Mais il me semble aussi que les enfants aiment bien la sensation tactile et le "clic" sonore lors de l'appui sur les touches.
 

 

 

 

Accuil