Hummm — 2012-02-11 17:56:08

Bonjour,

J'ai pour projet de créer un objet équipé d'une baguette métallique qui puisse taper en rythme une partition musicale.

J'ai donc deux problématiques qui se posent, sachant qu'Arduino pourrait a priori convenir à ce type de besoins.

1) Quoi utiliser comme matériel pour mettre des petits coups sur des boites en rythme. Voir quelle type de matériel serait assez costaud pour tenir une baguette de batterie et l'activer au moment voulu ?

2) Comment envoyer dans Arduino une partition rythmique ? Dois-je travailler en MIDI ?


Merci d'avance de vos conseils et recommandations.

Olivier — 2012-02-11 22:13:29

citation :

Quoi utiliser comme matériel pour mettre des petits coups sur des boites en rythme.

Des solénoïdes par exemple...

Hummm — 2012-02-12 10:42:23

Super ! EN plus i y a un schéma + les références de matos. On ne pourrait rêver mieux.

matheynen — 2012-02-12 17:58:18

J'ai déjà fait un truc similaire.
Je lançais un morceau midi que j'avais créer dans Logic Audio, je récupérais le midi dans un sketch Processing avec la libraire promidi qui envoyait les impuls à l'Arduino, j'étais sous mac.

Si tu travaille sous linux il faut essayer : http://www.varal.org/ttymidi/
Et par exemple un lecteur midi pratique du genre Qt-tractor : http://qtractor.sourceforge.net/qtractor-index.html

Je serais curieux de voir ce que ru fais, si tu veux je peux t'envoyer les codes.

@+

Hummm — 2012-02-12 18:06:06

Matthieu,

ça serait super si tu as des codes.
Ce que je veux faire, c'est ultra simple. Une boite à musique qui tape sur des bouteilles plus ou moins remplies d'eau.
Je vais m'acheter des solénoïdes, j'ai fait des recherches et apparemment on peut en trouver en France sous le nom d'electroaimants. Du coup, on a un contact direct entre le solenoïde et la bouteille, il faut que je vois aussi si c'est pas trop puissant, au risque de briser le verre...
Merci ! :)

matheynen — 2012-02-13 20:13:21

Voilà j'avais codé au plus léger, c'est pas très propre mais chez mois avec les huit notes d'une gamme ça a marché.
C'est la fonction  midiIO.plug() qui intercepte le message noteOn du midi


import promidi.*;
import processing.serial.*;
import cc.arduino.*;

MidiIO midiIO;
Arduino arduino;

int pin;
boolean free;

void setup() {
  midiIO = MidiIO.getInstance(this);
  //midiIO.printDevices();
  //println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  for(int i=4; i<12; i++) { 
    arduino.pinMode(i, Arduino.OUTPUT);
  }
  midiIO.plug(this,"noteOn",2,0);
}

void draw() {
}

void noteOn(Note note) {
  //println(note.getPitch()-104);
  pin = note.getPitch()-104;// c7 dans logic
  if (note.getCommand() == 144) {
    arduino.digitalWrite(pin, Arduino.HIGH);
  }
  else if(note.getCommand() == 128) { 
    arduino.digitalWrite(pin, Arduino.LOW);
  }
}

Si il y a des trucs que tu ne comprends pas, je tacherai de t'expliquer.

Hummm — 2012-02-13 20:44:57

C'est super sympa, merci !
Je te tiens informé et je ferai une vidéo du projet.

matheynen — 2012-02-27 20:27:57

Je ne sais pas où tu en es mais pour te motiver voici une petite vidéo de mon projet :


lien vers la page de la vidéo sur vimeo


@+

Hummm — 2012-05-02 11:27:40

Salut,
Je m'y replonge actuellement et j'ai trouvé des ressources complémentaires :
http://wiki.labomedia.org/index.php/Sol … AFdes_Midi

Or, dans ce cas, ils utilisent un shield MIDI pour l'arduino.
Ta solution semble ne pas en faire usage. C'est étonnant, ça veut dire que tu tu peux t'en passer, dès lors que tu envoies les impulsions de Processing à Arduino ?

Autrement, ce que je comprends pas, c'est si tu routes tes signaux midi depuis ton mac vers une sortie spécifique ou si tout se fait automatiquement ? Je ne comprends pas non plus comment tu interfaces ton Arduino, est ce que tu te bases exclusivement sur Processing ou bien as-tu interfacé Arduino et Processing ensemble ?

A + :)

matheynen — 2012-05-02 17:22:08

Alors voilà,

Pour résumer, le midi est en interne sur l'ordi, pas besoin de cable et processing envoie les impuls midi qu'il a reçu de logic à arduino par usb.

Pour le midi, il y a sous mac un petit utilitaire qui simule les entrées et les sorties.
C'est un utilitaire fourni d'office sur tout les macs.
Tout se fait automatiquement une fois que tu l'as configuré.
Pour voir si tu as un port ouvert reconnu par Processing c'est la ligne suivante qu'il faut mettre :

midiIO.printDevices();

Sous linux il faut utiliser TTYMIDI et chipoter avec la ligne de commande.

En ce qui concerne l'arduino, j'ai uploader dedans le sketch firmata, livré dans les exemples.
Ainsi je peux contrôler directement mon arduino depuis Processing par usb.
Plus d'info ici : http://www.arduino.cc/playground/Interfacing/Processing

A ton service ;)

Hummm — 2012-05-04 16:20:47

Ah oui, j'y vois plus clair désormais. Merci !
Néanmoins, quelle électronique as-tu utilisé pour tes solenoides individuels ?
Outre les résistances, es-tu parti sur des condensateurs et pour éviter les retours des diodes ?

matheynen — 2012-05-05 10:14:12

J'ai suivi à la lettre le schéma ci-dessous que je ne trouve plus sur internet.
http://codelab.fr/up/solenoides.png

Il a l'air plus simple que les autres qu'on trouve actuellement. Il faut une alimentation 12V en plus pour les solénoïdes.

@+

Hummm — 2012-05-06 21:55:56

Salut,
je vais suivre ce schéma. Mais en regardant de près ta vidéo, je vois des blocs noirs en sortie de transistor. c'est quoi ?
Autrement, je lis sur un forum anglais qu'il faut un dissipateur de chaleur pour le transistor tip120, tu n'as pas eu de cas de surchauffe ?
A + :)

sakramh — 2012-05-07 02:29:43

ben en général les dissipateurs (dits aussi radiateurs) pour transistors sont en alu anodisé noir . Après quand ils sont plus noir que noir çà devient : "noir c'est noir, il n'y a plus d'espoir ohoh..." (vieille reprise fin 60)

matheynen — 2012-05-07 19:14:15

Pour les transistors, j'ai utiliser des npn 2N2219, un peu plus robuste que les 2N2222.
Il vaut mieux être prévoyants car ils vont être mis à rude épreuve, et les radiateurs ajoutés peuvent aider.

Avec ce type de système, je n'ai pas eu de surchauffe (pour l'instant).

Hummm — 2012-05-07 19:46:40

Ah, ben j'ai acheté ceux là :
http://www.rs-particuliers.com/WebCatal … 59610.aspx

ils ont la spécification TIP102
mais j'imagine qu'on peut mettre d'autres références. Par contre, Matthieu, je ne comprends pas, j'ai un message d'erreur sur la ligne :
"  midiIO.plug(this,"noteOn",2,0);"
Il m'indique ArrayIndexOutOfBoundsException: Array index out of range: 2

Tu as eu ça de ton côté ?
J'ai installé la librairie arduino sur Processing, fait l'upload du firmata aussi... Le test de la librairie Arduino output depuis Processing fonctionne bien pourtant...

matheynen — 2012-05-07 19:57:00

Le mieux c'est d'aller voir du côté de la référence :
http://creativecomputing.cc/p5libs/prom … d_plug.htm

A mon avis c'est le midi qui n'est pas ouvert sur ton ordi.
Que donne la ligne ?

midiIO.printDevices();
Hummm — 2012-05-07 19:59:33

Oui, cela y ressemble car j'étais en train de tester le sketch promidi simplement, il me ressort la même erreur.
Là, j'ai envoyé ce code :
import promidi.*;

MidiIO midiIO;
//get an instance of MidiIO
  midiIO = MidiIO.getInstance(this);
  println("printPorts of midiIO");
midiIO.printDevices();


Il me renvoie rien en input ni output.
il y a quelque chose de particulier que je dois configurer sur le mac pour ouvrir les ports midi ?

matheynen — 2012-05-07 20:42:48

Oui il y un petit programme pour le midi dans les utilitaires du mac à configurer.
Il faut un peu chercher.

Hummm — 2012-05-08 11:36:46

Alors,

voici l'avancement et peut-être que ces éléments aideront d'autres usagers sur Mac.
Je me suis rendu dans les utilitaires et gestion des périphériques MIDI.
J'ai activé le gestionnaire IAC : "Le périphérique est connecté" et ciblé l'entrée midi n°1 et sortie midi n°2

Plus de soucis de compilation dans Processing. Maintenant, j'attends mes composants pour tester la configuration.
Hé hé ! Je vous tiens au jus.

Hummm — 2012-05-08 12:35:57

Par contre, je ne comprends pas cette ligne :

pin = note.getPitch()-104;// c7 dans logic

et du coup comment cibler un channel midi pour l'affecter sur une sortie particulière de l'arduino...

matheynen — 2012-05-08 17:47:52

Tu as bien compris le fonctionnement cette ligne sert à cibler les sorties arduino, je l'ai utiliser ainsi pour simplifier le code au maximum.
Dans logic le c7 (do) = 108 (en code midi) donc 108 - 104 = 4 le numéro de la sortie de l'arduino.

Les quatres pin de l'arduino se suivant, il suffit d'utiliser dans Logic do et les 3 notes au dessus.

Hummm — 2012-05-16 11:15:29

Salut Matthieu

Résultat des recherches.

ça marche ! Cela marche bien même si mes câbles électriques ont du mal à tenir dans les sorties numériques de l'Arduino. J'ai fait deux cartes électroniques avec les composants, 13 sorties, cela fait du spagetti dans tous les sens et je ne suis pas parvenu à faire fonctionner mes 13 simultanément. Il semblerait que sur 2 sorties il y ait qq chose qui passe pas...

Autrement, je constate que suivant le solénoide (même si le modèle est identique) la force de frappe est plus ou moins forte... AUssi, mon lecteur/éditeur midi plante régulièrement le signal, j'ai donc opté pour un système en séquence autonome sur arduino basé sur le travail de Cécile Babiole et son séquenceur de solénoides.

Je t'envoie une vidéo dans la semaine pour te donner un aperçu, c'est assez sympa. Grand grand merci pour ton aide et accompagnement sur ton projet.

matheynen — 2012-05-16 13:17:49

Super, je me réjoui de voir ça.
Pour les câbles dans les sorties arduino, il existe de petits machins qui s'emboîte dans les sorties auxquelles tu soudes les fils :
http://www.sparkfun.com/products/116