Mes passions, le boulots, mes coups de gueule...




Pont DMX Arduino pour simplifier le contrôle de Projecteurs Multi-canaux : Description du projet

Catégories : Boulot, Geek · par 26 Avr 2025

Introduction

Ceci est le premier article d’une série qui présente les étapes qui ont amené à l’aboutissement du projet.

Liens vers les articles :

Présentation du projet

Les appareils d’éclairage LED

Dans le cadre de la transition vers le LED dans le théâtre où je travaille, nous avons décidé de remplacer les PC halogènes de l’éclairage du public par des Robe ParFect 150™ RGBW.

Ces appareil disposent de 2 modes DMX :

  • Mode 1 : 17 canaux
  • Mode 2 : 11 canaux
Canaux DMX (mode 2)Fonctions
1Power / Special functions
2Virtual colour wheel
3Red
4Green
5Blue
6White
7CTC
8Colour Mix control
9Zoom
10Shutter/ strobe
11Dimmer intensity

Tous ces appareils sont installé de façon permanente pour éclairer la salle lors des représentations.

Difficultés rencontrées

Nous accueillons régulièrement des spectacles avec des techniciens qui viennent avec leurs propres consoles. Celles-ci n’ont pas toujours le bon Device dans leur librairie. Et même quand c’est le cas, il faut patcher 15 Parfect et assigner le zoom correct à chaque machine.
Parfois, certaines consoles n’ont qu’une ou deux sorties DMX et l’éclairage de la salle « mange » 165 canaux à lui tout seul.

Solution proposée

Pour réduire considérablement le nombre de paramètres et de canaux à gérer, nous avons construit un « Pont DMX Arduino » qui réalise les tâches suivantes :

  • Lecture de l’intensité sur 2 canaux DMX en entrée (un pour le parterre et un pour le balcon)
  • Sélection d’une couleur parmi une liste ou gestion manuelle RGBW sur un petit écran OLED
  • Attribution des zooms spécifiques à chaque machine en dur dans le code
  • Sortie DMX des 165 canaux adaptés (15 Parfect * 11 canaux)

Voici le tableau des reports des valeurs pour le premier Parfect :

Canal DMXFonctionValeur EnvoyéeSourceExplication
1Power / Special0Valeur fixeNon utilisé (défaut : 0)
2Virtual Colour Wheel0Valeur fixeDésactivé, car la couleur est gérée via RGBW (défaut : 0)
3Rouge (R)Dépend de la couleurMenu OLEDDéfini selon la couleur choisie (ex. : Light Amber → 223)
4Vert (G)Dépend de la couleurMenu OLEDIdem
5Bleu (B)Dépend de la couleurMenu OLEDIdem
6Blanc (W)Dépend de la couleurMenu OLEDIdem
7CTC (Correct. Temp.)0Valeur fixeNon utilisé (défaut : 0)
8Color Mix Control45Valeur fixeObligatoire : active le mode « Addition » (Virtual + RGBW) (défaut : 45)
9Zoom200Valeur fixe (défini en dur)Zoom spécifique (« écrit en dur » dans le code) attribué à chaque projecteur
10Shutter / Strobe32Valeur fixeShutter ouvert (défaut : 32)
11DimmerRepris du premier canal DMX INDMX IN : Canal 1 ou 2L’intensité est pilotée par la console via le canal d’entrée DMX 1 ou 2 (parterre ou balcon)

Choix du matériel

Le matériel incompatible

Arduino Nano + MAX485 Module RS-485 TTL

Pour commencer, nous avons testé une configuration gérée par un Arduino Nano connecté à une carte « MAX485 Module RS-485 TTL« .

Connecté sur les Pins du Arduino Nano, la carte MAX485 Module RS-485 TTL n’a pas fonctionné pour du DMX car le MAX485 n’est pas totalement compatible avec les exigences du protocole DMX512.

Le DMX nécessite des transceivers capables de gérer des tensions et des vitesses spécifiques, avec une meilleure tolérance aux longues distances et aux interférences.

Le MAX485 (conçu pour du RS-485 standard) semble souvent rencontrer des problèmes de fiabilité en DMX, notamment des pertes de signal ou des erreurs de transmission.

Transmission via GPIO : Les pins numériques (GPIO) de l’Arduino Nano ne sont pas optimisés pour gérer des signaux aussi rapides et précis que ceux exigés par le protocole DMX512.

Transmission via Bus Série (TX/RX) : L’Arduino Nano ne dispose que d’un seul bus série matériel (UART). Or, le protocole DMX nécessite une communication asynchrone stricte, indépendante en entrée (DMX IN) et en sortie (DMX OUT).

Problème : Avec un seul UART, il est impossible de gérer simultanément :

  • La lecture du signal DMX provenant d’un contrôleur (réception continue à 250 kbps).
  • Et l’écriture d’un signal DMX propre vers les appareils (émission constante au même débit).

Carte DSD TECH SH-U12 TTL vers RS485 5V avec Puce MAX13487

Bien que la puce MAX13487 de la carte DSD TECH SH-U12 soit compatible avec les spécifications du protocole DMX512 (notamment le débit à 250 kbps), plusieurs facteurs expliquent l’absence de signal DMX valide :

  • Configuration automatique du mode transmission/réception : Le MAX13487 gère automatiquement le basculement entre émission et réception, ce qui est pratique pour du RS-485 classique, mais inadapté au DMX qui nécessite un contrôle strict et manuel de la direction du signal via une broche DE/RE.
  • Absence de contrôle de la direction : En DMX, il est crucial de forcer la puce en mode émission ou réception selon le contexte. La gestion automatique du SH-U12 (pas de DE/RE) empêche ce contrôle précis, entraînant des signaux incomplets ou invalides.
  • Conception générale du module : Ce type de carte est pensé pour des communications RS-485 standards (bidirectionnelles et ponctuelles), alors que le DMX512 impose une émission continue et unidirectionnelle, avec des timings très stricts.

Le matériel qui fonctionne

Arduino MEGA

Pour ce projet, nous avons utilisé une carte AZ-MEGA2560 (clone Arduino MEGA avec ATmega2560).

Voici pourquoi :

  • Multiples ports série matériels (UARTs) : Avec ses 4 bus série, le MEGA permet de gérer simultanément un module DMX IN et un module DMX OUT, garantissant une communication stable et fluide sans compromis.
  • Puissance de traitement accrue : Son microcontrôleur ATmega2560 offre plus de mémoire et de performances que le Nano, ce qui permet de gérer des flux DMX complexes et des fonctionnalités supplémentaires comme un menu via écran OLED.
  • Plus de broches I/O : Permet d’intégrer facilement des boutons, des LEDs de contrôle ou d’autres extensions sans se limiter en connexions.
  • Compatibilité étendue : Le MEGA reste 100% compatible avec l’environnement Arduino et son brochage.

CQRobot DMX Shield MAX485

Le CQRobot DMX Shield est une solution clé en main pour intégrer le protocole DMX512 à un projet Arduino. Voici ses principaux avantages :

  • Conçu spécifiquement pour le DMX512 : Contrairement aux modules RS-485 génériques, ce shield est optimisé pour respecter les exigences strictes du DMX (débit, timings, polarité).
  • Connectique standardisée : Intègre directement des ports DMX 3 ou 5 broches, facilitant le câblage sans adaptation supplémentaire.
  • Gestion simplifiée du flux : Permet un contrôle clair entre émission (OUT) et réception (IN), compatible avec les librairies DMX comme Conceptinetics.
  • Compatibilité directe avec Arduino : Se connecte facilement sur les broches prévues, sans câblage complexe, et s’adapte aussi bien aux projets maître qu’esclave.

http://www.cqrobot.wiki/index.php/DMX_Shield_for_Arduino_SKU:_AngelDFR0260US

Choix des librairies

Le protocole DMX impose de choisir entre maître (OUT) et esclave (IN), or la plupart des librairies Arduino ne permettent pas de gérer ces deux rôles simultanément. Modifier une librairie pour combiner ces fonctions serait complexe, risqué et peu pérenne.

La solution la plus simple et fiable consiste à utiliser deux librairies complémentaires :

  • Conceptinetics : Plus lourde mais puissante, idéale pour gérer le DMX OUT avec des fonctionnalités avancées, parfaite pour piloter plusieurs appareils en sortie.
  • DMXSerial : Plus légère et optimisée pour une simple écoute du DMX IN, parfaite pour lire quelques canaux en esclave.

Pour que les deux cohabitent, il faut exploiter les deux ports série matériels (UART0 et UART1) disponibles sur l’Arduino MEGA :

  • UART0 : utilisé par Conceptinetics pour le DMX OUT.
  • UART1 : configuré pour le DMX IN avec DMXSerial.

Astuce importante :Par défaut, DMXSerial utilise UART0. Il faut activer une option cachée pour basculer sur UART1 :

  • Ouvrir le fichier DMXSerial_avr.h de la librairie.
  • Décommenter la ligne #define USE_DMXSERIAL_PORT1.

Ordre de déclaration dans le code :

  1. Inclure et initialiser Conceptinetics en premier (DMX OUT).
  2. Puis DMXSerial (DMX IN), pour éviter les conflits sur les registres matériels.

En résumé :
L’usage combiné de Conceptinetics (OUT) et DMXSerial (IN), chacun sur un UART dédié, offre une solution propre et efficace pour gérer à la fois la lecture et l’écriture DMX sur Arduino MEGA, sans réécrire de librairies complexes.

(1) Comment

Pierre Colin
10 mois ago · Répondre

Bonjour, bravo pour ce projet. Je gère l’éclairage dans un petit studio et j’ai un besoin semblable. Pourriez-vous partager le schéma de connexion et la configuration des jumpers du MAX485 vers l’arduino MEGA ainsi que votre code ? Un grand merci !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.