Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN

DIY MIDI USB CONTROLEUR Project Arduino Uno Besoin d'aide

  • 76 réponses
  • 10 participants
  • 14 100 vues
  • 10 followers
Sujet de la discussion DIY MIDI USB CONTROLEUR Project Arduino Uno Besoin d'aide
Bonjour a tous

Mon projet est de réaliser un contrôleur MIDI
uniquement dans le but de commander des paramètres de mon logiciel mao et autres Vst

6 Potentiometres ( 10kohm )
8 boutons

je peux programmer via le logiciel Arduino ,la carte est bien reconnu par le port USB ,et je peux également flasher le contrôleur USB ATMEGA16U2 via le logiciel FLIP afin de pouvoir transmettre les Données Midi via L'usb manipulation que se fait sans problème

https://dartmobo.com/midi-over-usb/

Ci joint voici les programmes ainsi que les projets dont je me suis inspiré

https://www.hackster.io/etiennedesportes/ableton-live-midi-controller-9182b3

Les boutons fonctionnent le mappage se fait correctement dans mon logiciel Mao
Mais les potentiomètres ne fonctionnent pas
Leur course est différente
Leur mappage en midi est impossible car selon la position des potentiomètres la diode TX clignote en permanence
Même si je réussie a mapper un ou 2 potentiomètres le mappage des autres est impossible
Car des que je touche un autre potentiomètre la diode TX clignote donc le mappage est aléatoire

J'ai également testé avant avec ce programme
https://www.instructables.com/id/Easy-3-Pot-Potentiometer-Arduino-Uno-Effects-Midi-/
et le logiciel Hailess Midi et loopBe1
Les 3 potentiomètres (2k2ohm) fonctionnaient

Mon schéma de câblage

image.php

Est ce que Le problème vient du code ou bien est ce que mon câblage au niveau des potentiomètres n'est pas bon ?
Sur D'autres projets similaires comme celui ci
https://www.instructables.com/id/Custom-Arduino-MIDI-Controller/
il est conseillé de mettre des condensateurs de 100nf entre le masse et la commande ainsi qu'entre le + et la masse de chaque potentiomètres dans le but d’éliminer les bruits

je vous remercie par avance pour votre aide

Le code principale
Spoiler - Cliquer ici pour lire la suite



La bibliothèque Midi.h

Spoiler - Cliquer ici pour lire la suite



Spoiler - Cliquer ici pour lire la suite


Spoiler - Cliquer ici pour lire la suite


Afficher le sujet de la discussion
51
Je pense moi aussi à un problème d'alimentation.

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

52
Pour le plus 5V Je faisais allusion a un repére a partir du quelle la transmission midi s'emballe
Desolé si je me suis mal exprimé ou on s'est mal compris :facepalm:

En gros c'est quand la position du potentiomètre se situe a la moitié de sa course
l'allumage des pixels continu mais le transmission s'emballe
Purement électrique possible mais toutes les rings fonctionnent parfaitement comme on peut le voir sur la vidéo
Ou bien alors étant donné que la consommation est importante la transmission s'emballe
Car lorsque je débranche les ring la transmission ne s'emballe plus
Il y a également un sortie 3,3V sur l'arduino sa fait la même chose.

Effectivement mon arduino fonctionne sur L'USB


53
Chaque led du ring consomme -+18mA d'après le site, ce qui nous fait 24*18 =432mA en plus de ce que consomme déjà ton interface et ses leds, ce n'est pas négligeable. Ca dépend aussi de l'USB 1,2,3 de ton ordi...
Il y a de fortes chances que ton interface fonctionne correctement avec un simple transfo 5V (1 ampère).

[ Dernière édition du message le 12/06/2019 à 00:26:26 ]

54
x
Hors sujet :
Il faut demander son code source à Stephan Bodzin :



:-D

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)

55
Pour info
Je connecte mes cercles de led sur des connecteurs Duponts comme ceci

les-mains-dans-le-cambouis-2653151.jpg

Mode DART => Firmware Midi par USB (test Midi avec Midi TEST)
Mode Stock => Firmware d'origine Usb Serial pour pouvoir compilé et testé avec le moniteur Serie de l'arduino

J'ai pu testé avec une alimentation externe 12v 1a
12v c'est le maximum pour ce type de carte

Je connecte un cercle de led 24 en direct +5 gnd et output plus de midi Tx je me dis il y a de l'espoir
Et je bascule en USB Midi (firmware DART Donc) ok c'est stable.
Je teste ensuite avec 2 cercle puis 3 puis 4 (dans le programme et physiquement bien sur)
en testant à chaque fois
c'est egalement ok

Je rajoute ensuite le 5ieme Ring est la transmission s'emballe ceci en touchant n'importe quels potentiomètres
Je recompile ensuite pour 4 cercles je fais en reset de la carte et sa s'emballe une nouvelle fois

Je débranche 3 cercles (physiquement) et rajoute les 3 autres cercles un par un étrangement pas de TX quand je touche rien
Je flash ma carte avec le firmware DART et effectue un midi test aucun problème c'est stable

Je repasse en mode Stock et rajoute un cinquième cercle et la sa s'emballe dans le moniteur Série
Test a nouveau avec 4 cercles idem même problème

J'ai le même problème que ce soit avec des cercles de 12 16 ou 24
Par moment j'ai le même problème si le potentiomètre est uniquement en fin de couse

La panne semble être complétement aléatoire de quoi devinir fou :8O:

Et surtout suite a un mauvaise manip la carte a grillé :(((
J'ai rebasculé sur arduino Uno

Autres remarques également
- Lorsque j'indique dans le programme le nombre de Pixel à afficher
pour le cercle 16 j'indique donc 16 et je n'ai que 12 pixels en fin course du potentiomètre
Si je lui indique 20 tout les pixels s'illuminent
Pour 24 idem j'en n'ai que 23
Je suis donc obligé de tricher sur le nombre de pixel pour que touts les pixels s'affichent

- Losque je mesure la tension de sortie je n'ai pas 5V mais 4.7V

- Les cercles de Leds 16 et 24 ont 2 Gnd et 2 +5V

- Ensuite lorsque je compile j'obtiens ceci :

C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:10:0: warning: "PIN2" redefined

 #define PIN2             5 // 24

 ^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:70:0: note: this is the location of the previous definition

 #define    PIN2         2
 ^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:11:0: warning: "PIN3" redefined
 #define PIN3             6 //12
 ^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\test4ringrotarymiditx.ino.cpp:1:

c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:69:0: note: this is the location of the previous definition
 #define    PIN3         3

 ^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:12:0: warning: "PIN4" redefined
 #define PIN4             7   // 16
 ^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\test4ringrotarymiditx.ino.cpp:1:

c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:68:0: note: this is the location of the previous definition
 #define    PIN4         4
 ^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:13:0: warning: "PIN5" redefined
 #define PIN5             8 // 16
 ^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:67:0: note: this is the location of the previous definition

 #define    PIN5         5
 ^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:14:0: warning: "PIN6" redefined
 #define PIN6            9 //12
 ^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\test4ringrotarymiditx.ino.cpp:1:

c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:66:0: note: this is the location of the previous definition
 #define    PIN6         6


 ^
Le croquis utilise 5946 octets (18%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 916 octets (44%) de mémoire dynamique, ce qui laisse 1132 octets pour les variables locales. Le maximum est de 2048 octets.











56
Citation :
Il faut demander son code source à Stephan Bodzin :

Spoiler - Cliquer ici pour lire la suite



:-D


Oui excellente idée:-D
Malheureusement il n'utilise pas d'arduino
En plus ces leds font un sorte de chenillard permanent
Son interface est basé sur 2 x Livid Brain v2 MIDI
57
Resalut MM,

Ce que je comprends c'est que ça plante quand tu branches trop de rings.
432 mA c'est pour un seul ring. Avec 4 rings + l'arduino on est déjà aux alentours de 2 Ampères...


Pour limiter la consommation tu peux envisager une autre approche: ne pas allumer toutes les leds du ring mais uniquement celle en face de ton curseur. Ce sera moins joli mais tu pourrais te passer d'allim.

Pour info et d'après ce que j'ai trouvé un USB2 est capable de fournir jusqu'à 500mA, l'USB3 monte lui à 900mA.

[ Dernière édition du message le 13/06/2019 à 12:47:52 ]

58
Tu peux diminuer la consommation avec l'astuce de la persistance rétinienne, deux LED qui clignotent très vite à tour de rôle consomment comme une seule.

Christian

59
Je viens de testé jusqu’à 3 ring en jouant avec la luminosité
J'ai mis la luminosité au minimum
Le problème commence a arrivé au bout du 3ieme ring avec un transmission aléatoire qui s'amplifie
donc il est clair que la consommation de courant est trop importante pour la carte


60
Citation de Mat :
donc il est clair que la consommation de courant est trop importante pour la carte


Il y a une subtilité. Si tu alimentes les rings par le "+5V" de l'arduino, alors oui tu seras limité par le régulateur de tension intégré à la carte. Tu dépasses largement l'intensité admissible.

Si tu branches tes rings sur le "Vin" avec une alimentation externe 5V conséquente alors l'intensité admissible sera limité a quelque chose comme 2A je crois.

Si tu alimentes directement tes rings par un transfo +5V, sans passer par la carte il n'y a alors plus de limites..


Edit: Un dernier truc: si tu alimentes ton arduino avec un transfo externe 5V et que tu check la sortie +5V alors tu obtiendras +4,7V. C'est normal, la tension est abaissée par le régulateur interne qui ne reçoit pas une tension suffisante pour travailler. Dans ces cas là on utilise plutôt le Vin qui est l'exacte reproduction de la tension en entrée.

[ Dernière édition du message le 13/06/2019 à 16:08:12 ]

61
Citation :
Tu peux diminuer la consommation avec l'astuce de la persistance rétinienne, deux LED qui clignotent très vite à tour de rôle consomment comme une seule.


Il faut donc créer un sous programme qui aurait pour fonction d'allumer et éteindre chaque cercle de Led sur un temps très court ?

Citation :
Si tu alimentes directement tes rings par un transfo +5V, sans passer par la carte il n'y a alors plus de limites..

Quel genre de transfo ne présente pas de limite pour cette utilisation ?
Quelque chose dans ce genre?
https://www.amazon.fr/HAILI-AC110V-Transformateur-dalimentation-Convertisseur/dp/B07Q2VXDKT/ref=sr_1_fkmr0_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=5v%2B220V%2Btranffomatur&qid=1560459457&s=gateway&sr=8-1-fkmr0&th=1

[ Dernière édition du message le 13/06/2019 à 23:05:01 ]

62
63
Citation de Mat :
Il faut donc créer un sous programme qui aurait pour fonction d'allumer et éteindre chaque cercle de Led sur un temps très court ?


C'est une solution en effet, si les LED du ring ne bénéficient pas localement d'une possibilité de réglage de luminosité (les LED WS2812 des anneaux que j'ai utilisés pour mon vumètre 018 le peuvent, je n'ai pas regardé quel modèle tu utilises). Pour éviter tout effet de scintillement gênant, je te conseille d'utiliser une fréquence de rafraichissement d'au moins 50 Hz pour chaque LED ou groupe de LED (donc 150 Hz pour 3 anneaux, 250 Hz pour 5 anneaux). Cela bien sûr joue sur la puissance lumineuse perçue par l'oeil, mais quand il y a assez de flux au départ (avant diminution), ce n'est pas un problème. Il est certain aussi que cela rajoute du code, mais on n'a rien sans rien : faire fonctionner 5 anneaux en ne consommant au maximum que le courant d'un seul, ça vaut le coup.

Citation de Mat :
Quel genre de transfo ne présente pas de limite pour cette utilisation ?


Ceux qui peuvent délivrer le courant dont tu as besoin.
Si tu as besoin de 2 A sous 5 V, eh bien, prend un bloc alim 5 V d'au moins 2 A (2,5 A conseillé, la marge n'est pas de trop, surtout si tu choisis un modèle à bas coût).

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

64
Citation :
(les LED WS2812 des anneaux que j'ai utilisés pour mon vumètre 018 le peuvent, je n'ai pas regardé quel modèle tu utilises)


J’utilise exactement les mêmes anneaux
J'ai cru comprendre que la fréquence de fonctionnement pour driver WS2812 est de 800khz et elle n'est pas modifiable

https://www.amazon.fr/NeoPixel-Anneau-LED-avec-WS2812-5050-LED/dp/B01B35DDTU
65
J'en profite pour dire au passage que le site de Chimimic est une mine d'or. Son site représente un travail colossal et j'y ai presque tout appris. ;)
:bravo::bravo::bravo:
66
Pour la persistance rétinienne j'ai procédé comme ceci
Sachant que l'affichage des cercles de led est géré par la fonction "pixels.show" j'ai créé un sous programme "Affiche" qui intègre un ON/off rapide pour chaque cercle de LED

j'ai également baissé pour l'instant la luminosité au minimum
et supprimer la variation de la luminosité en fonction de la rotation des potentiomètres

void affiche()
{
static int iAn0ValPrev;
iAn0ValPrev = 0 ;
iAn0ValPrev = iAn0Val ; // previous value
iAn0Val = analogRead(A0);
if (abs (iAn0Val - iAn0ValPrev)>3)
analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX value
pixels.show(); // This sends the updated pixel color to the hardware.
digitalWrite(4,HIGH); //on
delay(5); // petit délai pour l'oeil
pixels.show(); // This sends the updated pixel color to the hardware.
digitalWrite(4,LOW); //off

static int iAn1ValPrev;
iAn1ValPrev = 0 ;
iAn1ValPrev = iAn1Val; 
iAn1Val = analogRead(A1);
if (abs (iAn1Val - iAn1ValPrev)>3)
analogPinMidiTX(2,iAn1Val,iAn1ValPrev); 
pixels2.show();
digitalWrite(5,HIGH);
delay(5); // petit délai pour l'oeil
pixels2.show();
digitalWrite(5,LOW);

static int iAn2ValPrev;
iAn2ValPrev = 0 ;
iAn2ValPrev = iAn2Val; 
iAn2Val = analogRead(A2);
if (abs (iAn2Val - iAn2ValPrev)>3)
analogPinMidiTX(3,iAn2Val,iAn2ValPrev); 
pixels3.show();
digitalWrite(6,HIGH);
delay(5); // petit délai pour l'oeil
pixels3.show();
digitalWrite(6,LOW);

static int iAn3ValPrev;
iAn3ValPrev = 0 ;
iAn3ValPrev = iAn3Val; 
iAn3Val = analogRead(A3);
if (abs (iAn3Val - iAn3ValPrev)>3)
analogPinMidiTX(4,iAn3Val,iAn3ValPrev); 
pixels4.show();
digitalWrite(7,HIGH);
delay(5); // petit délai pour l'oeil
pixels4.show();
digitalWrite(7,LOW);

static int iAn4ValPrev;
iAn4ValPrev = 0 ;
iAn4ValPrev = iAn4Val; 
iAn4Val = analogRead(A4);
if (abs (iAn4Val - iAn4ValPrev)>3)
analogPinMidiTX(5,iAn4Val,iAn4ValPrev); 
pixels5.show(); 
digitalWrite(8,HIGH);
delay(5); // petit délai pour l'oeil
pixels5.show(); 
digitalWrite(8,LOW);

static int iAn5ValPrev;
iAn5ValPrev = 0 ;
iAn5ValPrev = iAn5Val; 
iAn5Val = analogRead(A5);
if (abs (iAn5Val - iAn5ValPrev)>3)
analogPinMidiTX(5,iAn5Val,iAn5ValPrev); 
pixels6.show(); 
digitalWrite(9,HIGH);
delay(5); 
pixels6.show(); 
digitalWrite(9,LOW);
 
 
}


Le TX ne s'emballe plus que se soit sur le monitor série ou en mode Midi :lol:

[ Dernière édition du message le 14/06/2019 à 14:36:00 ]

67
:bravo:
68
Citation de Mat :
J’utilise exactement les mêmes anneaux
J'ai cru comprendre que la fréquence de fonctionnement pour driver WS2812 est de 800khz et elle n'est pas modifiable


Ne pas confondre fréquence d'envoi des données vers le ou les anneaux (Data/Clock), et fréquence de rafraichissement au niveau visuel.

Citation de King :
J'en profite pour dire au passage que le site de Chimimic est une mine d'or. Son site représente un travail colossal et j'y ai presque tout appris. ;)
:bravo::bravo::bravo:


Merci ;)

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

69
Bonjour Electronifanzien :D:;)
Voila j'ai pu finir mon controller (thread mis a jour
https://fr.audiofanzine.com/les-mains-dans-le-cambouis/forums/t.687260,diy-midi-controller-usb-plug-play-upgrade-neopixel-ring,post.9911428.html)
Concernant les led et le bug de la carte le problème était bien du à l'alimentation
J'ai donc ajouté une alimentation externe ainsi j'ai pu effectuer mes réglages de luminosité mais aussi ajouté des variations de couleurs

J'ai du faire face également a un autre problème celui du sens de rotation de cercles de led
La polarité de L'alimentation du Cercle comprenant 16 LEDS est différente des cercles 12 et 24
Donc le sens de rotation ne coïncidait pas avec le sens de rotation du potentiomètre.
En codant on peut gérer ce problème mais petite galère pour moi





[ Dernière édition du message le 30/09/2019 à 09:06:40 ]

70
Ayant pour projet d'augmenter le nombre de potentiometre et d'intégrer en sus un step sequencer à mon interface ,Il s'avère que les cercles de led neopixel ne sont peut-être pas la solution.
Certes ils sont programmables mais leur cout et leur consommation dès qu'il y en a beaucoup sont élevés.
J'opterai pour me fabriquer mes propres cerlce de led car dans mon cas les cercles ont une utilisation bien specifique.
Differentes solutions se sont présentées a moi.
La première une serie de leds commandée par des transistors bc547.
https://homediyelectronics.com/projects/led_bar_graph_with_transistors/ledbargraphcircuit
Et le deuxième la gestion des leds via des circuits intégrés LM3914.
https://learn.sparkfun.com/tutorials/dotbar-display-driver-hookup-guide/all

Rien de bien compliqué pour les montages test mais je me trouve confronté a quelques problèmes.
Avec les LM3914 Sur un potentiometre de 10kohm en fin de course il se trouve que j'ai une variation plus rapide des leds.
Il faut sans nul doute jouer sur la valeur des resistances des LM3914.
Pour le montage avec les transistors on voit que la variation de luminosité se fait progressivement est ce que cette variation peut se faire avec les LM3914 ?

71
Citation de Mat :
Pour le montage avec les transistors on voit que la variation de luminosité se fait progressivement est ce que cette variation peut se faire avec les LM3914 ?


La luminosité des LED est déterminée par le courant qui les traverse. Or, ce courant, programmable par une des résistances du montage, est le même pour les 10 LED.

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

72
Dans la continuité :clin:

les-mains-dans-le-cambouis-3210961.jpg

73
Je ne sais pas si ça vaut le coup. je viens d'acheter sur AliExpress des RingLEDs pour un prix complètement dérisoire. En plus l'avantage des RingLEDS, c'est que l'on peut mettre un potard au centre. Ici, ça va pas être simple.

Je ne sais pas ce que tu en penses ?

Xavier
74
Bonjour,
j'ai pas le temps de tout lire, donc désolé si la réponse à ma question se trouve déjà quelque part.
Y a t il une alternative à Arduino, (quelquechose de déjà un peu plus travail mâché) pour se fabriquer un contrôleur midi?

Merci
75
Je ne sais pas si ça existe, voir coté Raspberry Pi si c'est plus vite configuré (je ne connais pas). Si un module préconfiguré existe, ce ne sera pas forcément "mâché" comme tu le souhaites. D'où l'avantage de programmer ce que tu veux faire exactement.
Sinon tu as les BCR2000 et BCF2000 Behri. Mais là aussi il faut y mettre un peu du tiens. :clin:

S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.