Dernière mise à jour :
14/05/2014
Article non terminé, volontairement non
référencé dans les sommaires du
site
Présentation
Cet orgue est un orgue de barbarie électronique, sans soufflet ni tuyau. Les notes sont jouées
grâce à une feuille transparente qui se déplace en ligne
droite entre
une rangée d'émetteurs de lumière (LEDs) et une rangée de capteurs photosensibles
(photodiodes) montés en regard.
Chaque
fois qu'un faisceau lumineux est
interrompu par une des zones noircies sur la feuille transparente, une
note est
jouée. Et dès que le faisceau n'est plus interrompu (fin de la zone
noircie), la note en cours de jeu s'arrête. La feuille dispose de 2 x
13 colonnes (un seul groupe de 13 est représenté sur le dessin
ci-avant), un ensemble de 13 colonnes
pour les notes principales et un second ensemble de 13 colonnes pour
les notes
d'accompagnement, plus graves. Les sons sont produits localement par le
biais d'un oscillateur simple suivi de plusieurs diviseurs de fréquence
(voir page
Notes de musique) mais grâce à une interface MIDI optionnelle ils peuvent aussi être générés par un
instrument doté d'une entrée MIDI (instrument autonome style synthé ou
expandeur, ou ordinateur avec logiciel séquenceur et instruments
virtuels). J'avais pensé au départ réaliser un instrument capable de
jouer deux notes à la fois (une note aigue pour la mélodie et une grave pour
l'accompagnement), cela aurait grandement simplifié la réalisation du
générateur de son local. Mais il me semblait plus intéressant de ne pas
être bridé par un instrument "double monodique" et j'ai donc
décidé d'en faire un instrument totalement polyphonique.
Schémas
Afin de rendre le descriptif plus digeste, l'ensemble est présenté
sous forme de sous-modules :
-
schéma 007_lux : circuit avec les émetteurs de lumière et les récepteurs de lumière qui leur sont associés,
-
schéma 007_osc : oscillateur général 4 MHz
-
schéma 007_gen : circuit de génération de sons locaux (générateurs audio individuels),
-
schéma 007_midi : circuit générateur de notes MIDI (facultatif).
Schéma 007_lux - Circuits lumières
La section "lumières"
regroupe les émetteurs de lumières qui sont de simples
LED
et les
récepteurs de lumière qui sont des photodiodes, phototransistors ou LDR
(résistances
photosensibles).
Dans d'anciens orgues électroniques de ce type, il était fait usage
d'ampoules à incandescence associées à des LDR. Je ne vois pas de
raison particulière de ne
pas utiliser des LEDs, qui peuvent être (presque) aussi lumineuses
qu'on veut et qui bénéficient d'une bien meilleure durée de vie et qui
de surcroit sont mécaniquement plus robustes vis à vis des vibrations.
Les photodiodes et phototransistors régissent plus rapidement que les
LDR et fait marquant j'ai dans mes stocks de composants plus de
photodiodes que de LDR. J'ai donc suivi la logique implacable de mettre
des LDR sur le schéma qui suit, et d'utiliser des phototransistors. Le
schéma en question doit être réalisé en deux exemplaires, un pour les
notes aigus.
En toute franchise, il n'y a pas de
réelles contraintes pour les émetteurs de lumière et leur récepteur
associé. Faites donc des tests avec les composants que vous voulez
(que vous avez) et finalisez le tout comme bon vous semble. Si vous
avez de vieux stocks de transistors, rappelez-vous que ces derniers
peuvent être sensibles à la lumière si on les décapote...
Détection présence lumière
Comme
dit, on éclaire les récepteurs photosensibles (LDR ou phototransistors)
qui sont montés en diviseur de tension avec une résistance de valeur
fixe. Cas par exemple avec la LDR LDR1 et la résistance R13 (c'est le
même fonctionnement pour les autres). La valeur de la tension
disponible au point nodal du diviseur résistif LDR1 / R3 dépend de la
quantité de lumière reçue par la LDR. Si cette dernière est très
éclairée, sa résistance est faible, de quelques centaines d'ohms au
maximum. Comme la résistance qu'on lui a collée en binome et qui est
reliée à la masse vaut 10 kO, on dispose d'une tension bien supérieure
à +2,7 V qui est le seuil de basculement des AOP de type LM324 qui
suivent et qui sont montés en comparateurs de tension. Cette tension de
référence (de basculement) est obtenue grâce à la diode zener D13
polarisée par la résistance R37. En dépassant cette tension de
basculement, la sortie de l'AOP correspondant passe à l'état logique
haut, si peu que l'on puisse parler d'état logique haut pour un AOP
(disons que je me permet cette fantaisie). Pour ceux que ça dérange,
disons que la sortie de l'AOP monte aussi haut en tension qu'elle le
peut, à savoir qu'elle sera limitée au plus à la tension d'alimentation
qui est de +5 V. Si maintenant la LDR n'est plus éclairée, la tension
en sortie du pont diviseur chute d'un coup et cela a pour conséquence
de faire basculer la sortie de l'AOP correspondant vers le niveau bas,
proche de 0 V.
Schéma 007_osc - Oscillateur général
L'oscillateur général fournit le
signal rectangulaire périodique de 4 MHz qui est utilisé ensuite par chaque
diviseur de fréquence pour générer les notes locales. Il fait appel à des portes logiques d'un circuit intégré TTL de type 74HCT04.
La
stabilité de la fréquence de 4 MHz étant importante, elle est
stabilisée par un quartz de même valeur. Les portes logiques non
utilisées pour l'oscillateur lui-même sont mise à profit pour délivrer
plusieurs sources à 4 MHz qui sont toutes en phase (les portes logiques
d'un même boitier présentent très peu de différences entre elles au
niveau des temps de transit).
Schéma 007_gen - Générateurs sonores locaux
Les
générateurs sonores locaux permettent d'entendre quelque chose sur
place, même quand on ne dispose d'aucun générateur sonore externe
pilotable ou non par MIDI. J'avais au début pensé utiliser un
microcontrôleur pour générer les 12 notes de base, comme présenté à la
page
Orgue 003.
J'ai finalement opté pour un oscillateur de base (schéma 007b
précédent) qui attaque en même
temps un diviseur différent pour chaque note d'une octave, car la
précédente
solution ne me convenait pas pour la partie mélodie (fréquences
générées trop basses). Pour les diviseurs principaux, j'ai opté pour
des PIC
12F629, chacun possédant un rapport de division qui lui est propre.
Et pour les diviseurs par deux permettant d'obtenir les notes des
octaves inférieurs, j'ai choisi des CD4040.
Au
départ et pour les diviseurs principaux, je comptais utiliser une horloge externe de l'ordre de 4 MHz et
simplement compter le nombre d'impulsions reçues pour n'activer la
sortie qu'aux moments désirés, mais je n'ai pas obtenu un
fonctionnement correct en procédant ainsi. J'ai donc cherché à faire
autrement, tout en souhaitant conserver la simplicité d'un unique
boitier 8 broches pour chaque diviseur. J'ai trouvé une façon de faire
qui n'est pas très pro mais qui fonctionne plutôt bien : je fais
simplement tourner en boucle le programme principal du PIC, en incluant
dans la boucle un petit délai d'un nombre de microsecondes bien précis.
J'aurais pû tout déterminer par calcul mais j'ai fait par
approximations successives. Au final, voici les valeurs de retard que
j'ai du implémenter pour disposer des notes de musique de la gamme
allant de Do5 à Do6.
program electronique_orgue_007_osc_diviseurs_12f629;
var
Out_Clk: sbit at GP0_bit;
procedure Main_Init;
begin
INTCON := 0;
OPTION_REG := %10000001;
CMCON := %00000111; // comparators OFF
TRISIO.0 := 0; // main out (divided freq)
TRISIO.1 := 1; // input
TRISIO.2 := 1; // input
TRISIO.3 := 1; // always input
TRISIO.4 := 1; // input
TRISIO.5 := 1; // input for external clock
end;
begin
Main_Init;
while true do
begin
Out_Clk := Out_Clk xor 1;
delay_us(473); // Div by 508 -> In = 4 MHz, Out = 1046 Hz (Do 5)
continue;
delay_us(234); // Div by 254 -> In = 4 MHz, Out = 2092 Hz (Do 6)
delay_us(248); // Div by 269 -> In = 4 MHz, Out = 1976 Hz (Si 5)
delay_us(263); // Div by 285 -> In = 4 MHz, Out = 1865 Hz (La# 5)
delay_us(279); // Div by 302 -> In = 4 MHz, Out = 1760 Hz (La 5)
delay_us(296); // Div by 320 -> In = 4 MHz, Out = 1661 Hz (Sol# 5)
delay_us(314); // Div by 339 -> In = 4 MHz, Out = 1568 Hz (Sol 5)
delay_us(333); // Div by 359 -> In = 4 MHz, Out = 1480 Hz (Fa# 5)
delay_us(352); // Div by 380 -> In = 4 MHz, Out = 1399 Hz (Fa 5)
delay_us(374); // Div by 403 -> In = 4 MHz, Out = 1319 Hz (Mi 5)
delay_us(397); // Div by 427 -> In = 4 MHz, Out = 1245 Hz (Re# 5)
delay_us(420); // Div by 452 -> In = 4 MHz, Out = 1176 Hz (Re 5)
delay_us(446); // Div by 479 -> In = 4 MHz, Out = 1109 Hz (Do# 5)
delay_us(473); // Div by 508 -> In = 4 MHz, Out = 1046 Hz (Do 5)
end;
end.
Cette façon de faire paraîtra surement un peu cavalière à
certains, mais encore une fois j'assume. Une seule ligne de délai est
incluse dans la boucle While, on choisie celle qu'on veut (après la
ligne Continue) juste après avoi fait changer d'état logique la sortie
GP0 (accès via la variable Out_Clk). Pour la suite on revient dans le
domaine du standard avec des compteurs logiques de type CD4040, dont
les sorties fournissent les notes des octaves inférieurs pour chaque
note de base.
Amélioration des générateurs de tonalité
En
2014, j'avais décidé d'utiliser des PIC 12F629, à raison de 1 PIC par
note. La méthode que j'avais employée pour obtenir les fréquences
adéquates (méthode décrite ci-devant) fonctionnait mais manquait de
précision, même si à l'oreille on n'entendait pas de décalage flagrant.
En 2024, j'ai décidé d'améliorer la précision de la fréquence des notes
délivrées et pour cela je me suis basé sur un article de Roman Black
publié sur
son site.
Adaptation aux nouvelles technologies oblige, j'ai remplacé
les 12F629 par des 12F1572, plus performants et moins coûteux. Le
résultat est à la hauteur des attentes. Non seulement la précision est
meilleure, mais en plus on peut choisir l'octave de base (la plus
élevée) avec un potentiomètre ajustable !
Plus de détails...
Schéma 007_midi - Module MIDI (facultatif)
Le module
MIDI permet de transcrire les notes jouées par l'orgue en évenements
MIDI aptes à piloter un générateur de sons externes tel qu'un
synthétiseur, un expandeur ou un ordinateur équipés d'instruments
virtuels. Ce module, qui est facultatif dans le sens où il est
totalement indépendant des générateurs sonores locaux, fait usage d'un
microcontrôleur de type PIC.
schéma 007_midi
C'est la solution que j'avais déjà retenue
pour mon
orgue 006, je n'allais pas m'amuser à réinventer la roue.
Circuits imprimés
Tous les circuits seront réalisés en simple face.
Réalisation pratique
Je
ne sais pas si vous l'avez déjà remarqué, mais la mécanique n'a jamais
été mon fort. J'ai imaginé plusieurs solutions pour le défilement
de la bande calque :
- entrainement par roue dentée avec des
perforations dans la bande calque, à la manière des anciennes
imprimantes matricielles avec papier à bandes perforées;
- entrainement avec des galets presseurs en caoutchouc.
- entrainement style "pellicule dans appareil photo" ou "bande audio" avec support dévidoir et support récepteur.
Pour
chacune de ces solutions on peut envisager un déplacement motorisé ou
manuel, mais je penche nettement pour la solution manuelle car la
motorisation risque de donner un côté un peu trop régulier et on n'a
pas le plaisir d'agir sur quelque chose. J'envisage donc l'emploi d'une
petite manivelle comme sur certains orgues "d'époque". Comme à l'avenir
je souhaite que des enfants écrivent leurs propres "partitions" pour
cet instrument, je conçois mal de les laisser regarder l'instrument
jouer tout seul. Après tout, le jeu de leur partition leur appartient !
Historique
14/01/2024
- Amélioration de la circuiterie de génération des 12 notes de base.
14/05/2014
- Première mise à disposition.