Un contrôleur midi 100 basé sur Arduino
- 90 réponses
- 20 participants
- 22 853 vues
- 26 followers

secmast

Suite a la discussion sur ce contrôleur:https://fr.audiofanzine.com/surface-de-controle-midi/cme/BitStream-3X/forums/t.541700,mais-ou-le-trouver.html
Je viens jeter ici les bases pour la construction d'un contrôleur midi basé sur Arduino.
Certains pensaient que vu le nombre d'entrée analogique limitée sur une carte Arduino elle ne permettait pas l'utilisation de cette plateforme pour ce genre d'application. Ce n'est évidement pas le cas, il suffit de connaître un peu l'électronique et la programmation pour arriver a un résultat ma fois pas trop mal et peu coûteux.
Comme le montre l'image ci-dessous en utilisant des multiplexer il est possible de multiplier le nombre d'entrée/sortie avec en théorie un maximum de 1024 E/S sur une Arduino Mega.
Donc l'idée de ce fil est de jeter sur le papier le minimum requis pour une interface Midi
Sachant que l'arduino est limité en terme de mémoire (SRAM 2Kb au max) ce qui limite les variables (on en discute ?)
Sachant que l'Arduino est limité en terme de puissance "électrique", 40ma par PIN (on en discute ?)
Liste "A faire"
- Gestion EEPROM
- Alimentation externe
- Calcul d'un boucle sur 80 contrôle
[ Dernière édition du message le 13/09/2013 à 13:00:28 ]

Rémy M. (chimimic)


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

secmast

Qualité/Prix !!! les prix variant de 1 à 170 euros pour un potentiomètre et encore j'ai pas regardé longtemps.
Maintenant, vu que tu as besoins d'un valeur comprise entre 0 et 127. 1023 c'est bon tu es largement dans la plage.
En effet, 1024 - 8 = 1016. C'est donc a partir de 1016 que tu vas avoir la valeur 127.

Rémy M. (chimimic)

Je ne cherchais nullement à lancer un débat

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

adrienf


VDS123

I'm trying build 4x4051 --> 4051 cascade with 25 potenciometers (with no buttons - resistors only)
Can anyone help me to modify this code to my case, please?
I'm already change some parameters, but it still don't work.
Bonjour.
J'essaie construire 4x4051 -> 4051 cascade avec 25 potenciometers (sans boutons - résistances seulement)
Quelqu'un peut-il m'aider à modifier ce code pour mon cas, s'il vous plaît?
Je suis déjà changer quelques paramètres, mais il ne fonctionne toujours pas.
http://s2.ipicture.ru/uploads/20140203/axKQpz18.jpg
int selection1MuxPrimaire = 3;
int selection2MuxPrimaire = 4;
int selection0MuxSecondaire = 5;
int selection1MuxSecondaire = 6;
int selection2MuxSecondaire = 7;
int sel0;
int sel1;
int sel2;
int bouclePrimaire;
int boucleSecondaire;
int potentiometreEntre = 0;
int potentiometre[25];
int potentiometreCC[25]={
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };
// Canal midi de 176 à 191
int midiChannel = 176;
void setup(){
// Ouverture du port serie proche de la vitesse du Midi(31250) pour debut seulement
Serial.begin(31250);
// Configuration des ports Arduino E/S
pinMode(selection0MuxPrimaire, OUTPUT);
pinMode(selection1MuxPrimaire, OUTPUT);
pinMode(selection2MuxPrimaire, OUTPUT);
pinMode(selection0MuxSecondaire, OUTPUT);
pinMode(selection1MuxSecondaire, OUTPUT);
pinMode(selection2MuxSecondaire, OUTPUT);
}
void loop(){
// Scan et lecture des potentiometres
// Boucle de selection du Mux B2 ou Mux B3
for (bouclePrimaire = 0; bouclePrimaire < 8; bouclePrimaire++){
// Transformation en binaire de la variable bouclePrimaire
sel0 =bitRead(bouclePrimaire, 0) ;
sel1 =bitRead(bouclePrimaire, 1) ;
sel2 =bitRead(bouclePrimaire, 2) ;
// Selection du port sur le 4051 Mux A
digitalWrite(selection0MuxPrimaire, sel0);
digitalWrite(selection1MuxPrimaire, sel1);
digitalWrite(selection2MuxPrimaire, sel2);
// Boucle de lecture Mux Bn pour 4 entrees
for (boucleSecondaire = 0; boucleSecondaire < 8; boucleSecondaire++){
// Transformation en binaire de la variable boucleSecondaire
sel0 =bitRead(boucleSecondaire, 0) ;
sel1 =bitRead(boucleSecondaire, 1) ;
sel2 =bitRead(boucleSecondaire, 2) ;
// Selection du port sur le 4051 Mux Bn
digitalWrite(selection0MuxSecondaire, sel0);
digitalWrite(selection1MuxSecondaire, sel1);
digitalWrite(selection2MuxSecondaire, sel2);
// Delay d'attente avant capture du port Data, valeur à mettre au plus bas possible.
//delayMicroseconds(75);
// Lecture de la valeur du potentiometre(n)
// Verification de la valeur ancienne et valeur actuelle base sur 4 potentiometre par mux
if (analogRead(potentiometreEntre)/8 != potentiometre[bouclesecondaire + (bouclePrimaire * 8)]){
potentiometre[bouclesecondaire + (bouclePrimaire * 8)] = analogRead(potentiometreEntre)/8;
Serial.write(midiChannel);
Serial.write(potentiometreCC[bouclesecondaire + (bouclePrimaire * 8)]);
Serial.write(potentiometre[bouclesecondaire + (bouclePrimaire * 8)]);
}
}
}
}
[ Dernière édition du message le 03/02/2014 à 19:32:06 ]

secmast

Just change your cabling and it should work.

VDS123

Looking roughly at the drawing and the code you have inverted muxprimaire and muxsecondaire.
Just change your cabling and it should work.
Thank you for answer, but still no result
(i'm try combinations 0-1-2-3-4-5, 3-4-5-0-1-2, 2-1-0-5-4-3, 5-4-3-2-1-0)
I'm check again all circuit - all voltage is good
best result what i have is:
(none stop spam of messages in all cases)
http://s2.ipicture.ru/uploads/20140204/0W538Uhb.jpg

secmast

I don't really get what is exactly your problem.
But, 25 10k pots may drive you to some trouble, have you try putting a resistors at the pots common groung, you may have not enough resistance !!
Just a thought

Summers

Super ton petit contrôleur Secmast et pleins d'infos dans ton post !
Sans rien y connaitre en électronique, je suis quand même parti pour me fabriquer mon contrôleur MIDI pour un projet particulier : une console avec 32 Fader MIDI + peut être quelques switchs.
Pour l'instant j'en suis encore à glaner un maximum d'informations ici et là sur le net, pas évident d'avoir les bon tuyaus avant de faire la commande !
Donc une question suite à ton sujet : Tu à utilisé des multiplexeurs performant et peu cher, mais pour me faciliter la vie j'ai trouver ceci :
MonsterMux 32 Channel Analog Multiplexer Shield Kit for Arduino
http://www.criticalvelocity.com/item.php?itemid=shield3

Si tu est encore dans les parages, pourrais je avoir ton avis sur ce multiplexeur qui, même si il est plus cher, semble plus simple à mettre en oeuvre !? De plus il y a pile poils le nbr d’entrée analogique que je recherche.
- < Liste des sujets
- Charte