Voici une petite boîte à rythme DIY semi-analogique à 4 voies. Les percussions sont des tangibles (objets divers, petites cymbales, etc) et le séquenceur numérique à 16 steps est réalisé avec un Arduino nano et quelques circuits intégrés.
Les séquences sont possibles à écrire et modifier pendant le fonctionnement. Un commutateur rotatif permet de choisir la piste qu'on veut éditer. Elle s'affiche alors sur la ligne de LEDs.
Sous chaque led se situe un bouton poussoir qui active ou désactive le pas correspondant, dans la piste sélectionnée.
Un potentiomètre permet de régler le tempo qui peut être très rapide.
Le micro-programme conserve 4 listes binaires de 16 éléments, représentant les quatre instruments et les 16 pas du séquenceur :
Les étapes de la boucle principale sont :
Je fais usage d'actionneurs type solénoïdes de chez Radio-Spare récupérés d'un vieux montage. Ils fonctionnent sous 24V, uniquement en traction. La force de maintien lorsque le noyau est entièrement enfoncé est élevée, mais la force de rappel diminue fortement dès que ce noyau s'éloigne du fond. La course utile ne dépasse pas 5mm.
Ils sont couplés à des bras ("les baguettes") moyennant un levier du 3ème ordre, c'est à dire que la force est appliqué entre le pivot et la charge. Les pivots sont à serrage réglable et munis d'un petit tampon souple. les bras en eux-même sont assez raides.
Les contraintes sont :
La commutation du 24V dans les solénoïdes se fait par l'intermédiaire d'un ULN2803 (8 transistors Darlington), qui est capable à la fois de supporter cette tension et de délivrer les 200mA de courant demandés par les électro-aimants. Ce circuit intégré est pourvu des diodes de protections nécessaire lorsqu'on pilote une charge inductive comme c'est le cas ici. 4 sorties de l'Arduino attaquent les entrées de l'ULN2803.
16 Leds sont nécessaires et l'Arduino Nano n'offre pas assez de sorties pour les piloter individuellement. On contourne cette limitation avec 2 registre à décalage 8-bits très courants : le 74HC595. Ils sont montés en cascade pour obtenir un registre à 16 bits. Ainsi 3 fils seulement sont nécessaires : un fil qui sélectionne le registre, un fil d'horloge et un fil de données.
En plus d'afficher les steps actifs ou inactifs, l'arduino allume/éteint successivement chaque led pour matérialiser le step courant.
Là encore, il y a 16 boutons, une solution doit être trouvée pour lire leur état sans avoir besoin de 16 entrées sur l'Arduino. Plusieurs solutions sont envisageables, similaires dans le principe au multiplexage où l'état de chaque bouton est lu séquentiellement.
Ici j'ai préféré une solution encore plus économique en entrées / sorties et en composants. Un diviseur de tension à 16 résistances permet d'obtenir des tensions régulièrement espacées entre 0 et 5V. Chaque bouton est connecté d'un côté à l'une de ces tensions, et de l'autre ils se rejoignent vers une entrée analogique. L'identification du bont pressé se fait donc par reconnaissance de la valeur de la tension lue (moyennant quelques techniques de réduction du bruit et une tolérance). Aucun circuit intégré n'est donc nécessaire ce qui limite fortement l'encombrement de la platine, le câblage et la complexité du code.