Suite au travail sur la première version du robobatteur, qui effectuait un simple “poum-tchac”, j’ai réfléchi à une version plus évoluée.
La principale évolution sera de pouvoir contrôler le robot à partir d’une séquence midi. Un séquenceur MIDI jouera une partition, et enverra à mesure qu’elle joue des messages aux moteurs. Voici le schéma de principe : sur la ligne du haut, les éléments par lesquels le message passe, sur celle du bas, le message
Ordi -------> Midi out (carte son) --> Midi in (circuit) --> carte Arduino -------------------> circuit --> servomoteur
Note MIDI -------------------------------------------------> routage / instructions de frappe ------------> frappe
Cela engendre une autre modification sur la machine, afin de pouvoir assurer la frappe sur des tempos élevés. 2 moteurs par élément, qui farppent alternativement.
Chaque note correspond à un élément. La note 30 (Do 1) correspond à la grosse caisse, la note 32 à la caisse claire, etc. Les notes sont récapitulées dans le tableau ci-dessous.
J’ai prévu de pouvoir contrôler quatre éléments de batterie.
Note MIDI | Note | Élément |
---|---|---|
43 | G1 | Ride |
42 | F1 | Hi-hat |
38 | D1 | Snare |
36 | C1 | Kick |
On s’appuie toujours sur une carte Arduino Uno pour effectuer ce travail.
Plusieurs besoins pour le circuit :
- un midi in
- une alimentation par groupe de servos dédiés (les servos ont besoin chacun d’une intensité d’un ampère pour fonctionner correctement. Comme il est difficile de se procurer du 5V 8A, pour pallier à cela, on n’alimente que deux moteurs avec une seule alim 5v à 2a).
J’ai utilisé une perfboard pour le circuit du module de MIDI In et pour le câblage des servo moteurs, et une autre board pour les circuits d’alim des servos. J’ai fait ça à mesure que j’avancais, j’imagine qu’il y a moyen d’optimiser ça.
Comme je l’ai mentionné plus haut, j’ai besoin de taper sur quatre éléments de batterie : j’aurai donc besoin de huit servomoteurs.
Principe général. Tout sur un socle, qu’on peut lester avec des parpaings. La disposition reprend celle d’une batterie jouée par un humain, à savoir grosse caisse au milieu, et charleston et caisse claire de part et d’autre. Mais on peut être plus ambitieux et disposer ses éléments dans l’espace : après tout, on est seulement limité par la longueur de câble Bras dont on peut modifier la rotation, afin de pouvoir effectuer des ajustements fins, pour avoir une frappe assez sonore.
Fixation des servos : baguette en pin (16mm), percé pour recevoir le moteur. Fixation avec des vis Fixation des baguettes : perçage, puis fixation avec vis dans le bras de chaque servo
Le circuit et la carte sont fixés dans une boîte, d’où partent les câbles vers les servos (8 groupe de 3 câbles ― phase, neutre, message arduino (?))
Les câbles sont fixés. C’est encore à l’état de prototype “early”, et la robustesse de connexions est le prochain point que je compte améliorer.
Le code est relativement simple. Les variables sur lesquelles on jouera en fonction du montage sont dans initPos[]. L’angle de rotation de chaque baguette est défini par rotationAngle. On pourra peut-être jouer avec. J’ai peu testé, mais on gagne peut-être en puissance. Le code se répète pas mal, et il pourrait aisément être factorisé. Cela est dû à mes compétences limitées. Malgré tout, le code est sûrement plus lisible pour des novices qui tâcheraient de comprendre ce qui se passe.
Le programme s’appuie sur les librairies MIDI
et Servo
.
Comment les télécharger ? Le plus simple est d’utiliser l’IDE Arduino, est d’installer les modules via le menu Menu
.
La librairie MIDI
La librairie Servo
Une fois installées, on appelle les librairies dans le code :
#include <MIDI.h> // Add Midi Library
#include <Servo.h> // Add servo lib
Les fichiers MIDI sont créés avec Rosegarden
. J’ai pu tester avec des (croches, doubles-croches) à un tempo de (combien) ?
QJackCtl
+ a2jmidid
+ Rosegarden
J’utilise Linux Mint. Le setup sera à adapter en fonction de l’OS, et sera sûrement plus simple dans d’autres environnements. Quoi qu’il en soit, voici le mien :
Les applications utilisées sont :
QJackCtl
pour piloter la carte son et effectuer les connexionsa2jmidid
pour envoyer des messages MIDI via la carte sonRosegarden
pour créer et lire les fichiers MIDI
Rosegarden ferta tourner les séquences midi, et enverra les notes vers la carte son via QJackCtl
et a2jmidid
(qui permet à QJackCtl
de piloter les connexions midi).
sudo apt-get update
sudo apt-get install -y qjackctl a2jmidid rosegarden
Une carte son (Presonus Audibox44VSL pour ma part) est connectée en USB à l’ordinateur.
Ensuite, QJackCtl
est démarré. Si tout roule, on peut lancer a2jmidid
a2jmidid -e
Si tout fonctionne, on doit voir quelque chose comme ça
Retour terminal
Puis on peut démarrer Rosegarden
Une fois que tout est démarré, on revient dans les connexions de Qjack
pour vérifier que RoseGarden
envoie des messages vers le midi out de la carte son (grâce à a2jmidid
)
Si tout fonctionne correctement, une note lue sur Rosegarden
doit activer les servo moteurs
Précision des fixations : angle de fixation des baguettes et des servos aléatoires, ce qui nuit à l’exactitude du tempo (rubato).
- Assortiment de fils : https://www.lextronic.fr/assortiment-fils-de-cablage-monobrin-30m-62595.html
- Perfboard : https://www.lextronic.fr/plaque-a-pastilles-cuivrees-81x51-mm-31761.html
- Condensateur 100 µF https://www.lextronic.fr/condensateur-chimique-radial-1000uf-35v-58165.html#/condensateurs_85-100f_10v
- Embase 5v : https://www.lextronic.fr/embase-d-alimentation-2-1x5-5mm-2529.html
- Embase DIN : me souviens plus
- Alimentation : 5v 2a (chez RS Composants)
- Servo moteur MG996R : https://www.miniplanes.fr/servos/tower-pro/mg-996-servo-numerique-pignons-metaux-10kgcm-tower-pro-p-19942.html
- Résistance 220 ohms + 4.7kohms
- Diode : 1n914 ou 1n4148 https://composant-electronique.fr/diode-1n4148
- Optocoupleur 6n138 : https://composant-electronique.fr/optocoupleur-6n138