Boitier DMX – USB

par | Nov 2, 2017 | 0 commentaires

Photographie du boitier DMX - USB fini

Salut tout ce petit tuto sur la création d’un boitier DMX.

Tous les fans de podium, de concert et d’éclairage événementiel vont être ravis de se fabriquer leur petit boitier de contrôle DMX. Pour ceux qui ne savant pas de quoi je parle, ce boitier permet de contrôler les projecteurs de soirée ou de concert depuis un ordinateur.

Il existe de nombreux boitier sur internet. Ils sont soit à des prix corrects (environ 50€) mais fonctionnant qu’avec de vieux logiciels, soit très chères (entre 450€ et 1200€). Ici je vais vous montrer comment réaliser son propre boitier DMX – USB alimenté par le port USB et pour environ 20€.

Fonctionnement

Un petit rappel sur les bases du DMX ne fait pas de mal 🙂 . Le signal DMX est un message binaire qui envoi continuellement un tableau de chiffres à l’ensemble des projecteurs connectés à lui. Ce tableau a une taille fixe de 512 cases et chaque case peut avoir une valeur entre 0 et 255. Ces cases sont appelées « Canal ». Un schéma sera peut-être plus simple pour comprendre.

Tableau DMX 1

Ce signal et généralement transmit par un câble électrique (câble DMX). Ce câble relis les projecteurs en séries, c’est à dire que la ligne rentre dans le premier projecteur puis en sort pour aller sur le suivant et ainsi de suite jusqu’au bout de la ligne.

Encore un petit schéma pour expliquer :

Câblage DMX

Ça veut dire qu’il reçoivent tous le même signal. Donc ils font tous la même chose ? 😐

Bonne question 😀 ! Non, les projecteurs peuvent être différent mais il reçoivent effectivement tous le même tableau de données. Cependant chaque projecteur n’utilise pas 512 valeurs. La plupart utilise environ 10 valeurs. Pour que chaque projecteur on lui affecte une plage de valeurs qui lui sont dédiées, le premier canal de cette plage correspond à l’ « Adresse » du projecteur. Celle-ci est à paramétrer directement sur le projecteur. Si le projecteur utilise 8 valeurs, c’est valeurs seront les 8 valeurs du tableau depuis la position indiquée par l’adresse.

Exemple : Projecteur 4 canaux ayant l’adresse 53 :

Tableau DMX 2

Les valeurs en vertes sont celle utilisées par notre projecteur. Toutes les autres seront ignorées.

Le boitier DMX

Attaquons la partie électronique de notre projet.

Tout d’abord, comment fait-on pour créer un signal DMX ? Le signal DMX est équivalent au signal RS485 utilisé pour les vieux ports Séries des ordinateurs. Le signal de sortie de l’Arduino et de 0V pour un 0 logique et 5 V pour un 1 logique, tandis que le signal RS485 et de -5V pour un 0 logique et 5V pour un 1 logique.

Voici  deux schémas pour représenter ces signales :

Signal Arduino

Signal Arduino

Signal RS485

Signal RS485

Heureusement pour nous, il existe un petit composant pour le créer à partie d’une sortie 0 – 5V. Le SN 75176 A.

Pour la partie programme électronique nous allons utiliser un Arduino nano (environ 20€). Mais pour économiser nous allons utiliser un modèle moins chère (4€) avec les mêmes caractéristiques. C’est le Sodial et il est tout pareil :). Voilà le lien pour ceux qui souhaiterai l’acheter ICI.

Il suffit ensuite de connecter notre petit composant a notre Arduino et le tour est joué.

J’ai quand même rajouté sur mon boitier deux petite diode pour m’informer de l’état de la connexion avec le PC et l’état du signal envoyé.

Voilà le typon pour créer la carte, la sérigraphie pour positionner les composants et la liste des composants. Environ 20€ le tout.

  • Adruino nano ou Sodial
  • Composant SN 75176 A (RS485)
  • Diode rouge 2mm ;
  • Diode verte 2mm ;
  • Résistance 2.2 Kohm x2
  • Résistance 100 ohm
  • Prise DMX femelle
  • Barrette 16 picos femelle x2

Voila, notre boitier est fini est prêt à être programmé.

Programme de l’Arduino

Pour concevoir le programme de l’Arduino (programme qui permettra la communication avec l’ordinateur), il nous faut stocker et émettre chaque valeur du tableau DMX. Encore heureusement pour nous il existe un fichier développer pour l’Arduino qui permet de faire cela. C’est DmxSimple.

Tout d’abord, intégrons notre fichier dans notre programme Arduino. Ensuite créons quelques variables pour paramétrer le tous. Le numéro des pins de la diode verte et rouge et le numéro de la pin d’envoi du message DMX. Puis créons un tableau de 513 valeur (1 valeur pour l’état de la communication et les erreurs, et les 512 valeurs pour le tableau DMX).

Ensuite écrivons la fonction Setup() qui va nous configurer le système au démarrage. Affectons ici les pins à nos différents éléments. Pour effectuer la communication entre notre boitier et l’ordinateur nous devons définir une vitesse d’envoi de message. J’ai choisi la valeur de 57600 baudes pour que la communication avec le PC soit plus rapide que l’envoi des message DMX.

Maintenant passons à la fonction Loop() de notre programme. Cette fonction est executé en boucle tout le long de l’utilisation de l’Arduino. Dans celle-ci, nous allons récupérer l’ensemble du message transmis par l’ordinateur (message qui contiendra nos 513 valeurs). Ensuite analysons la première valeur pour déterminer l’état de la communication. Si la communication n’est pas bonne, informez grâce aux diodes, sinon écrivez les valeurs dans le tableaux DMX.

Voilà tout ! Notre programme est terminé. Il ne reste plus qu’à l’injecter dans notre puce et de brancher le tout. Voici le code complet du programme Arduino et les fichiers de DmxSimple.

// =============================================
// ==== DMX Live Arduino =======================
// =============================================

#include <DmxSimple.h>

// Setup Output
int ledErrorPin = 8;
int ledDMXPin = 10;
int DMXPin = 5;

int bytes = 0;
byte tableDMX[513];

// =============================================
// ==== Setup ==================================
// =============================================
void setup() {
Serial.begin(57600);
DmxSimple.usePin(DMXPin);
pinMode(ledErrorPin, OUTPUT);
pinMode(ledDMXPin, OUTPUT);
}

// =============================================
// ==== Main Loop ==============================
// =============================================
void loop() {
digitalWrite(ledDMXPin, LOW);
digitalWrite(ledErrorPin, LOW);
if (Serial.available()){
bytes = Serial.readBytes(tableDMX, 513); // Valeur d’état + 512 valeur de canaux

if(tableDMX[0] > 0){
Serial.println(« Connection OK »);
}
if(tableDMX[0] == 17){

}

if(tableDMX[0] == 32){
digitalWrite(ledDMXPin, HIGH);

for(int i = 0; i < 512; i ++){
DmxSimple.write(i, tableDMX[i+1]);
}
}
}else{
digitalWrite(ledErrorPin, HIGH);
}
}

Logiciel de gestion DMX

Bientôt un petit tuto sur comment faire un logiciel de communication en C#.