Dans la première partie de ce blog, je vous ai montré le montage expérimental pour l'une des principales applications industrielles du bus RS-485 : le Modbus. Pour cela, le PC avec un adaptateur USB-RS485 faisait office comme Master et le Micro Controller avec Atmel 328 et un shield RS-485 faisait office comme Slave. Pour me familiariser avec le sujet, j'avais surtout fait des recherches sur le site de notre fournisseur, la société zihatec, et sur Wikipedia.
J'ai trouvé un deuxième domaine d'application du shield RS-485 dans les articles du blog de Tobias Kuch au printemps 2020 (liens partie 1, partie 2, partie 3). Il s'agissait de la commande de systèmes d'éclairage avec DMX-512. Ici, le microcontrôleur est utilisé comme Master.
Malheureusement, je n'ai pas pu me procurer la lampe utilisée là-bas, j'ai donc cherché sur Amazon avec l'abréviation DMX et j'ai trouvé un projecteur à LED similaire. Cependant, le nombre de canaux pour la commande et l'affectation des canaux ne sont pas standardisés, ce qui est tout à fait logique lorsque les fonctionnalités sont différentes, de sorte que je n'ai pas pu transférer facilement les blogs mentionnés ci-dessus.
Ce blog se concentre donc sur la question de savoir comment connecter et programmer votre éclairage DMX. Pour ce faire, vous ne pouvez pas éviter d'étudier le "manuel d'utilisation" correspondant, souvent une simple feuille contenant les indications les plus importantes.
Commençons par le matériel. Sur l'image suivante de mon projecteur à LED, vous voyez à gauche de nombreuses LED qui sont rouges, vertes ou bleues par séries. On peut aussi piloter cette lampe avec la télécommande fournie avec différentes fonctions. Sur le côté droit, on voit la face arrière avec deux connecteurs XLR à trois pôles, un écran matriciel à LED à quatre chiffres et, en dessous (à peine visibles), quatre boutons pour la commande manuelle, particulièrement importants pour le réglage de l'adresse en cas d'utilisation de plusieurs projecteurs ou appareils DMX.
Le cas échéant, les contacts XLR peuvent aussi être à cinq pôles ; mais nous n'avons besoin que de deux contacts. La prise de gauche est l'entrée, celle de droite la sortie. C'est pourquoi j'ai besoin d'un connecteur XLR femelle pour le câble que j'ai bricolé (Neutrik NC-3 FX BAG - connecteur XLR, le FX signifiant "femelle"). Cela m'a permis d'établir facilement la connexion entre la lampe et le shield.
Deux différences par rapport au blog de Tobias Kuch : sur ma lampe, les contacts sont montés tournés de 180°, le contact central A est donc en bas, le contact B est à droite. Et chez moi, la lampe restait sombre lorsque j'établissais la connexion de masse avec le shield. Donc seulement deux fils : A à A et B à B.
Il faut encore procéder à quelques réglages sur le shield. Cela se fait d'une part à l'aide de connecteurs de court-circuit (cavaliers) et d'autre part à l'aide de petits interrupteurs (DIP switches, "claviers de souris"). Les inscriptions sur le circuit imprimé sont très utiles à cet égard.
Pour notre microcontrôleur avec Atmega 328, on place le seul cavalier J1 sur 5V, dans la rangée à côté des broches 0 à 7, nous n'avons besoin que d'un cavalier pour l'émission, donc on place la connexion de la ligne TX sur le port 3 (quatrième rangée, parce que le comptage commence à 0). Les ports 0 et 1 restent libres, ce qui nous permet de télécharger sans problème le sketch et d'utiliser également le moniteur série dans l'IDE Arduino.
Veuillez régler les interrupteurs DIP comme sur l'image suivante :
Ici aussi, le micro-commutateur le plus important est le premier sur SW 3 : il permet d'activer la résistance de terminaison (terminating resistor).
Côté logiciel, nous avons besoin de la bibliothèque de programmes DmxSimple de Peter Knight. Le nom est tout un programme. En effet, la bibliothèque ne dispose que de trois fonctions pour l'utilisateur, que j'explique brièvement ci-dessous. Elle s'installe comme d'habitude avec le gestionnaire de bibliothèque.
Au début du sketch, la bibliothèque est incluse avec
Les trois fonctions sont d'abord
DmxSimple.usePin(3);
DmxSimple.maxChannel(n);
et surtout
DmxSimple.write(channel, value);
usePin(3) permet de définir le port pour la ligne TX. En raison du développement historique, des travaux préparatoires de la société Tinker.it !, le port 3 est préréglé. Vous pouvez toutefois vous en écarter.
Le nombre de canaux est défini dans maxChannel. Par défaut, il est de 512, le maximum possible. Pour actualiser les données plus rapidement, on peut choisir un nombre plus petit. Personnellement, je n'ai connecté qu'une lampe à 6 canaux, c'est pourquoi je choisis
DmxSimple.maxChannel(6);
Pour deux projecteurs, j'inscrirais 2*6 = 12 et je réglerais l'adresse de base 7 sur le deuxième projecteur afin de pouvoir commander individuellement toutes les fonctions.
Rappelons-le : maxChannel est la somme de tous les canaux de tous les appareils DMX montés en série (Daisy Chain). Sur chaque appareil, la somme de tous les canaux précédents est réglée comme adresse de base.
Pour mes essais simples, je n'ai utilisé qu'un seul appareil à six canaux. Passons maintenant aux fonctions pour mon projecteur, conformément à la fiche technique :
Canal |
Valeur du canal |
Fonction Instruction |
Ch 1 |
0~255 |
Gradation totale |
Ch 2 |
0~255 |
Gradation R |
Ch 3 |
0~255 |
Gradation G |
Ch 4 |
0~255 |
Gradation B |
Ch 5 |
0~9 |
Pas de stroboscope |
10~255 |
Plus la valeur est grande, plus la stroboscopie est lente |
|
Ch 6 |
0~50 |
Mode manuel, les 5 premiers canaux sont valides |
51~100 |
Changement de saut |
|
101~150 |
Changement progressif |
|
151~200 |
Changement d'impulsion |
|
201~250 |
Mode automatique |
|
25~255 |
Mode son |
Donc : mon projecteur a trois LED de couleurs différentes que je peux commander individuellement (Ch 2 à 4). Je peux faire varier l'intensité de toutes les LED en même temps (Ch 1). Je peux régler l'éclairage stroboscopique (Ch 5). Et je peux choisir différents modes de fonctionnement (modes).
D'autres appareils DMX ont peut-être en plus une lumière blanche ou peuvent être orientés avec des servos (pan and tilt). Comme je l'ai dit : consultez votre fiche technique et notez le chiffre correspondant au canal plus, le cas échéant, l'adresse de base.
L'intégration de la bibliothèque fournit également deux exemples. Dans l'exemple FadeUp, vous devrez éventuellement modifier le canal ou insérer d'autres canaux avant que votre projecteur ne change continuellement de luminosité. Le programme SerialToDMX vous permet d'essayer toutes les fonctions. Pour ce faire, ouvrez le moniteur série et suivez les instructions. Avec la commande 1c 255W dans la ligne de saisie supérieure et Envoyer, j'écris (w=write) la valeur 255 pour le canal (c=channel) 1, pour moi "Total dimming".
Avec mon sketch modifié, j'écris d'abord 255 pour le canal 1 (cause fréquente d'erreur lorsque rien ne s'allume : Si Total dimming est réglé sur 0, toutes les LED restent sombres). Ensuite, je compte d'abord de 0 à 180 et j'attribue la valeur au canal 2 (couleur rouge) ; le rouge devient donc lentement plus clair. J'attribue la valeur (180 - variable de comptage) au canal 3 (couleur verte) ; le vert s'assombrit donc lentement. Lorsque le rouge est le plus clair, je sélectionne le mode Strobe Light pendant trois secondes, puis le rouge s'assombrit à nouveau et le vert s'éclaircit.
Mon Sketch (download):
// RS_485_DMX512_Controller
unsigned int r, g, b;
int i;
void setup() {
DmxSimple.usePin(3);
DmxSimple.maxChannel(6);
DmxSimple.write(6, 1); // Manual mode
DmxSimple.write(1, 255); // Total dimming
DmxSimple.write(2, 0); // R dimming
DmxSimple.write(3, 0); // G dimming
DmxSimple.write(4, 0); // B dimming
DmxSimple.write(5, 0); // No Strobe, Strobe > 10}
void loop() {
for (i=0; i < 180; i++) {
r=i;
g=180-i;
DmxSimple.write(2, r); // Red
DmxSimple.write(3, g); // Green
// DmxSimple.write(4, b); // Blue
delay(50);
}
DmxSimple.write(5, 16); // Strobe
delay(3000);
DmxSimple.write(5, 0); // no Strobe
i = 180;
do{
r=i;
g=180-i;
DmxSimple.write(2, r); // Red
DmxSimple.write(3, g); // Green
// DmxSimple.write(4, b); // Blue
delay(50);
i--;
} while (i > 1);
}
Pour terminer, j'aimerais montrer une capture d'écran du signal RS-485 sur l'analyseur logique, où l'on voit très bien la polarité opposée des deux lignes de signal du bus RS-485. Par rapport à l'ancien standard de télégraphie RS-232, cela permet de couvrir de plus grandes distances et d'utiliser plusieurs appareils.
J'espère avoir éveillé votre curiosité et vous avoir évité de commettre mes erreurs de débutant.
Je vous souhaite beaucoup de plaisir à les reproduire.