fabrication console midi +24 faders/knobs

Bonjour :smiley:
Je me lance dans un grand projet : fabriquer une console lumière (enfin en midi mais pensé pour une utilisation light)

Mon objectif a cours terme : 12 faders + 3 fader (2 crossFaders et un master) et a long terme rajouter 12 faders et au moins 6 knobs en plus.

J'ai un arduino Uno et je sais qu'il n'y a que 6 entrée analogique vu la quantité d'entrée analogique (+/- 33) que je vais utiliser es que plusieurs (dé)multiplexeurs de type 4051 > Utiliser un multiplexeur analogique CD4051B avec une carte Arduino / Genuino | Carnet du maker - L'esprit Do It Yourself seront suffisant ou je dois utiliser une carte plus avancé ?

Le fait d'utiliser des démultiplexeur ne me complique pas trop le code ? je débute et je compte bien m'inspirer des tuto sur le net.

Es que l'arduino c'est 'fiable' le but est de l'utiliser en live, donc si le matos plante es que c'est la merde a relancer ?

Pour l'alim l'usb c'est suffisant ?
Et avez-vous des tuto en français dans le même style ?

Merci de vos retours :wink:

Bonjour,

sans être spécialiste je te fais quelques retours d'expérience:

A priori il n'y a pas de problème pour le multiplexage avec les 4051, côté code ce n'est pas très compliqué à mettre en place puisque tu comprends déjà le principe.

Par contre le MIDI peut se montrer plus délicat surtout si tu veux en recevoir..mais il semble que tu veuilles juste en envoyer? Tu as une idée des messages que tu souhaites envoyer?

Puisque tu as une Uno tu pourrais déjà tester une config avec 6 faders+midi, tu auras ainsi déjà fait le plus gros du travail côté programmation.

Bonjour,
je croyais que :
musique = midi
lumière = dmx ?

Plop,
Donc Chris je peux mettre par ex 5 * 4051 sur les broche A0 -> A4 ? sans problèmes ?
Oui je ne souhaite qu'envoyer, j'utilise WhiteCat pour recevoir le midi et je n'ai pas besoin de recevoir d'info, a part peut etre (si j'arrive a trouver comment coder..) afficher la valeur en % sur un afficheur 7 segments du dernier fader utilisé et le tout doit etre fait en 'interne' dans l’Arduino.
[/quote]

Chris_Paris:
Puisque tu as une Uno tu pourrais déjà tester une config avec 6 faders+midi, tu auras ainsi déjà fait le plus gros du travail côté programmation.

Oui et c'est pourquoi je n'ai toujours pas acheter les faders/knobs pour l'instant. je galère un peux : ou se trouve la partie qui envoi les trames midi ?

trimarco232:
Bonjour,
je croyais que :
musique = midi
lumière = dmx ?

Oui eeeeet non !
Le midi permet d'envoyer des commandes ça peut être une commande pour un son ou une valeur entre 0 et 126.
Le dmx c'est le protocole qui sort des consoles ou boitier type enttec de communiquer avec les gradateurs ou projecteur asservis, mais le logiciel permet d'utiliser des commandes midi pour mieux le contrôler.

ok, ok !
regardes aussi : CD74HC4067 ou 74HC4067 : il y a des modules tout faits qui coûtent peanuts et qui te simplifieront la vie

trimarco232:
ok, ok !
regardes aussi : CD74HC4067 ou 74HC4067 : il y a des modules tout faits qui coûtent peanuts et qui te simplifieront la vie

Merci, en gros c'est comme un 4051 mais avec 16in/out ? Enfaite j'ai déjà commander 10xCD4051BE pour 2€50 donc au max j'ai 6*8=48 fader/knob/bouton au max ce qui est suffisant pour moi.

J'ai réussi a avoir un retours d'information lors d'un petit essaie avec un potentiomètre rotatif via un terminal sur AMA0, je n'ai cependant pas trouver de tuto sur la communication entre les commandes analogique et l'envoi d'info midi.
Dans ma commande j'ai pris 11 fader de 10K ohm (j'ai vu sur plusieurs posts ou ils en utilisaient) pourquoi 10k en particulier ?

Es qu'il met possible de relier une led au fader pour avoir un rendu lumineux du potard en question ?

Merci :smiley:

pourquoi 10k en particulier

Bonjour,

  • c'est une valeur courante
  • pas trop élevée, pour ne pas attirer trop de parasites (on risque cependant de devoir en reparler)
  • ni trop faible, pour ne pas consommer trop de courant

Est-ce qu'il m'est possible de relier une led au fader pour avoir un rendu lumineux du potard en question ?

pas si simple, peux-tu nous préciser l'information que tu attends de cette led ?

il va falloir que j’installe frtiz ... je vais vous faire un schéma au plus vite

La led sera graduer par le fader via le collecteur c'est possible ?

yo !
Trimarco à raison, ne t'embête pas avec des CD4051 et des circuits imprimés à faire,

la position du multiplexeur se defini en 4 bits

donc avec 4 sorties numériques et 2 entrées analogiques tu es à 32 potentiomètres !

http://bildr.org/2011/02/cd74hc4067-arduino/

pour l'entrée midi, il faut un 6n138 ou CNX35 : http://www.notesandvolts.com/2015/02/midi-and-arduino-build-midi-input.html

il y a une bibliothèque MIDI pour arduino qui va bien.

si ton logiciel lumière reçois l'OSC en natif, c'est une possibilité à envisager (avec un iboard)

#include <MIDI.h>
#define S0 3 //
#define S1 4 //
#define S2 5 //
#define S3 6 //

//entrées analogiques utilisées : A0

byte channel = 1;
byte myCC = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}; // 16 contrôleurs
byte oldValueCC = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
unsigned long timeIntrerval = 15; // sending every 15ms max
unsigned long lastimeSend = 0;
MIDI_CREATE_DEFAULT_INSTANCE();

void setup() {
// put your setup code here, to run once:
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);

MIDI.begin(16); // Launch MIDI and listen to channel 16
}

void loop() {
// put your main code here, to run repeatedly:

for (byte address = 0; address < 16; address++) {
//set multiplexor address
digitalWrite(S0, bitRead(address, 0));
digitalWrite(S1, bitRead(address, 1));
digitalWrite(S2, bitRead(address, 2));
digitalWrite(S3, bitRead(address, 3));
//read analog inputs and send to respective midi CC if necessary
int tempValue = analogRead(0) << 3; //7MSB
unsigned long timeNow = millis();
if (tempValue != oldValueCC[address] && timeNow - lastimeSend > timeIntrerval) {
lastimeSend = timeNow;
oldValueCC[address] = tempValue;
MIDI.sendControlChange(myCC[address], tempValue, channel);
}
else{}
}
}//end loop

Merci Olilab je voulais prendre des 4067 mais les délais de livraison sont de plusieurs semaines. et je vais avoir besoin d'au moins 12 potard d'ici la fin de la semaine, je reçois demain ma commande avec les cd4051 et ça ne me dérange pas de faire un peux de soudure.

je vais donc me concentrer pour l'instant sur un code pour récupérer et envoyer l'info venant de A0 et A1 et l'envoyer sur white cat et je pense utiliser la doc http://www.le-chat-noir-numerique.fr/whitecat/dokuwiki/doku.php?id=configuration_arduino

Re
J’ai souder 6 fader et je les ai reliés a un cd4051 (les photos arrivent bientôt) j’ai suivis le tuto Utiliser un multiplexeur analogique CD4051B avec une carte Arduino / Genuino | Carnet du maker - L'esprit Do It Yourself

avec le code

/**
 * Exemple de code pour le circuit intégré CD4051B.
 */

// Broches d'adresse
const byte PIN_ENABLE = 2;
const byte PIN_ADDR_A = 3;
const byte PIN_ADDR_B = 4;
const byte PIN_ADDR_C = 5;
 
// Broche de signal
const byte PIN_SIG = A0;
 
/** Fonction setup() */
void setup(){
  
  // Place les broches d'adresse en sortie et à LOW
  pinMode(PIN_ADDR_A, OUTPUT);
  pinMode(PIN_ADDR_B, OUTPUT); 
  pinMode(PIN_ADDR_C, OUTPUT); 
  digitalWrite(PIN_ADDR_A, LOW);
  digitalWrite(PIN_ADDR_B, LOW);
  digitalWrite(PIN_ADDR_C, LOW);
  
  // Active le CD4051B
  pinMode(PIN_ENABLE, OUTPUT);
  digitalWrite(PIN_ENABLE, LOW);
 
  // Message de bienvenue
  Serial.begin(9600);
  Serial.println("Demonstration CD4051B");
}
 
/** Fonction loop() */
void loop(){
 
  // Pour chaque voie on renvoie la valeur sur le port série
  for(byte i = 0; i < 8; i++){
    Serial.print("Voie ");
    Serial.print(i);
    Serial.print(" : ");
    Serial.println(readAnalogMux(i));
  }
  
  // Delai pour l'affichage
  delay(1000);
}
 
/** Fonction de lecture pour le CD4051B */
int readAnalogMux(byte channel) {
  
  // On sélectionne la voie
  digitalWrite(PIN_ADDR_A, bitRead(channel, 0));
  digitalWrite(PIN_ADDR_B, bitRead(channel, 1));
  digitalWrite(PIN_ADDR_C, bitRead(channel, 2));
 
  // On lit la valeur courante
  return analogRead(PIN_SIG);
}

Tout s’affiche correctement sur le moniteur série.
J’ai Flasher atmega16u2 Arduino et MIDI [Wiki] mon uno s’affiche bien comme un périphérique midi :smiley:

Mais là je bloque pour envoyer les infos via le midi, j’ai vu que c’était avec Serial.write qu’il fallait l’envoyer mais je ne sais pas comment intégrer cette variable au code :confused:

je ne sais pas comment intégrer cette variable au code

Bonjour,

d'abord ce n'est pas une variable mais un bout de code (voire une fonction) que tu dois intégrer à ton code -> regarde la définition d'une variable pour que cela soit clair pour toi

il te reste à faire 2 chose :

  • définir à quel moment (ou occasion) le message midi doit être envoyée
  • construire ce message et l'envoyer

tu as peut-être une idée ?

trimarco232:
il te reste à faire 2 chose :

  • définir à quel moment (ou occasion) le message midi doit être envoyée
  • construire ce message et l'envoyer

tu as peut-être une idée ?

Et bien en faite non :confused:
jusqu’à présent j'ai suivis des tutos et aucun ne parlaient d'envoyer du midi (via usb) avec des multiplexeurs 4051 et je ne sais pas trop ou trouver le code voila pourquoi je post ici, si vous avez des liens de tuto/cours sur ce sujet ou même un bout de code :smiley:

en attendant une réponse d'olilab qui connait mieux midi que moi, il y a une question qui me taraude : où sont les lumières, et comment sont elles commandées

trimarco232:
en attendant une réponse d'olilab qui connait mieux midi que moi, il y a une question qui me taraude : où sont les lumières, et comment sont elles commandées

Les lumières ? c'est des projecteurs de théâtre contrôlés avec des gradateurs en dmx ou des asservies ou par led etc. tout ce matos utilise le protocole DMX qui sort au cul des consoles ou des interfaces comme enttec qui permet d'envoyer du DMX via usb.
Et pour le logiciel comme dis plus haut j'utilise white cat qui envoi l'info sur le boîtier qui lui l'envoi sur les machines.

Plus d'infos sur Whitecat qui est open source :smiley:
http://www.le-chat-noir-numerique.fr/whitecat/dokuwiki/doku.php#description

//pour 2 CD4051 : les 3 lignes d’adressage A,B et C sont reliées en paralelle.
//com out du 1er CD4051 sur A0 et du 2° sur A1

#include <MIDI.h>
#define A 3 //
#define B 4 //
#define C 5 //

//entrées analogiques utilisées : A0 et A1

byte channel = 1;
byte myCC = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}; // 16 contrôleurs
byte oldValueCC = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
unsigned long timeIntrerval = 15; // sending every 15ms max
unsigned long lastimeSend1 = 0;
unsigned long lastimeSend2 = 0;
MIDI_CREATE_DEFAULT_INSTANCE();

void setup() {
// put your setup code here, to run once:
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);

MIDI.begin(16); // Launch MIDI and listen to channel 16
}

void loop() {
// put your main code here, to run repeatedly:

for (byte address = 0; address < 8; address++) {
//set multiplexor address
digitalWrite(A, bitRead(address, 0));
digitalWrite(B, bitRead(address, 1));
digitalWrite(C, bitRead(address, 2));
//read analog inputs and send to respective midi CC if necessary
int tempValue1 = analogRead(0) >> 3; //7MSB
int tempValue2 = analogRead(1) >> 3; //7MSB
unsigned long timeNow = millis();
if (tempValue1 != oldValueCC[address] && timeNow - lastimeSend1 > timeIntrerval) {
lastimeSend1 = timeNow;
oldValueCC[address] = tempValue1;
MIDI.sendControlChange(myCC[address], tempValue1, channel);
}
else{}
if (tempValue2 != oldValueCC[address+8] && timeNow - lastimeSend2 > timeIntrerval) {
lastimeSend2 = timeNow;
oldValueCC[address+4] = tempValue2;
MIDI.sendControlChange(myCC[address+8], tempValue2, channel);
}
else{}
}
}//end loop

le code que tu viens de poster m’affiche

cd4051midi:57: error: expected declaration before '}' token

 }//end loop

 ^

exit status 1
'tempValue' was not declared in this scope

Sinon le premier code que tu a posté je l’ai adapter au mieux, le logiciel reçoit bien une info midi mais les fader répondent bizarrement, j’ai l’impression qu’il y a des parasites.
comment ajouter un 2e cd4051 ou se trouve l’ajout pour l"entrée A1 ?

#include <MIDI.h>
#define S0 3 //
#define S1 4 //
#define S2 5 //


//entrées analogiques utilisées : A0

byte channel = 1;
byte myCC[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}; // 16 contrôleurs
byte oldValueCC[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
unsigned long timeIntrerval = 15; // sending every 15ms max
unsigned long lastimeSend = 0;
MIDI_CREATE_DEFAULT_INSTANCE();

void setup() {
  // put your setup code here, to run once:
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);


  MIDI.begin(0);          // Launch MIDI and listen to channel 16
}

void loop() {
  // put your main code here, to run repeatedly:

  for (byte address = 0; address < 8; address++) {
  //set multiplexor address
  digitalWrite(S0, bitRead(address, 0));
    digitalWrite(S1, bitRead(address, 1));
    digitalWrite(S2, bitRead(address, 2));
    //read analog inputs and send to respective midi CC if necessary
    int tempValue = analogRead(0) << 3; //7MSB
    unsigned long timeNow = millis();
    if (tempValue != oldValueCC[address] && timeNow - lastimeSend > timeIntrerval) {
      lastimeSend = timeNow;
      oldValueCC[address] = tempValue;
      MIDI.sendControlChange(myCC[address], tempValue, channel);
    }
    else{}
  }
  delayMicroseconds(500);
}//end loop

j'ai corrigé le code pour 2 CD4051, voir plus haut

Merci :smiley:
Le code semble fonctionner mais j'ai toujours des problèmes de réception des infos dans mon logiciel P: affiche plusieurs numéros et Vel la même chose : des valeurs qui passent de 0 a 127 instantanément sans que je touche un fader.J'ai l’impression que mon circuit n'est pas bon ou qu'il y a beaucoup de parasites. es que l'ajout d'un condo entre VDD et VSS " Si vous le souhaitez, vous pouvez ajouter un condensateur de 100 nF entre les broches VDD et VSS du CD4051B pour améliorer sa résistance aux parasites en provenance de l'alimentation."