Accueil > ARDUINO > Communication > DMX : Arduino en mode esclave

DMX : Arduino en mode esclave

lundi 8 février 2016, par thebault

Le protocole DMX.

https://fr.wikipedia.org/wiki/DMX_%28%C3%A9clairage%29

http://sitelec.org/cours/abati/dmx/dmx.htm

Le DMX512 est basé sur un bus série multipoint. Il permet de relier l’ensemble des effets de scène à un contrôleur. Il utilise le protocole RS485 pour la couche matérielle.

Le contrôleur est le maitre et les effets de scène sont les esclaves.
Chaque esclave est assigné à une ou plusieurs adresses ce qui lui permet de recevoir des ordres codés sur 8 bit (de 0 à 255).
Par exemple, un ensemble avec 3 led RVB utilisera 3 adresses, ce qui permettra de commander la puissance d’éclairage de chacune des lampes par un code entre 0 et 255.
Si les effets de scène sont motorisés, un canal peut être aussi utilisé pour commander les moteurs (position, vitesse...).

La trame DMX

La trame DMX est constituée de 24 à 512 canaux (valeurs pour chaque adresse). L’ensemble des informations (valeurs de chaque canaux) est transmise par le contrôleur et les effets de scène ne liront que la valeur concernant leurs adresses.

Exemple de trame :

GIF - 12.3 ko

La bibliothèque DMXSerial pour communiquer entre Arduino et DMX

La bibliothèque est issue du site suivant : http://www.mathertel.de/Arduino/DMXSerial.aspx.
Il faut installer les fichiers DMXSerial.cpp et DMXSerial.h dans le répertoire Library/DMXSerial de l’environnement arduino.

Les branchements

Ce schéma utilise un module qui comporte un MAX485 qui permet l’adaptation entre la carte arduino (0V-5V) et RS485.
Les broches :

DI driver input DE driver output Enable
RO Receive output /RE Receiver output enable
Vcc Alimentation 5V GND masse 0V
A Data + (paire différentielle) B Data - (paire différentielle)

Remarque : RE et DE sont en général reliés ensemble (fonctionnement half duplex du module MAX485. Dans le cas présent, nous n’utilisons que le mode réception.

/RE DE Etat
0 Mode récéption RS485 -> Arduino
1 Mode émission Arduino -> RS485
JPEG - 531.7 ko

Programme arduino avec 1 canal : commander la led sur la broche 13 de la carte arduino Leonardo

Remarque : cette manip n’est pas possible avec une carte UNO car il n’y a pas de sortie PWM sur la broche 13 où se trouve la led L.

Pour gérer l’éclairage de la led, j’utilise la commande :

analogWrite(broche 13,rapport cyclique)

qui permet d’avoir une commande PWM sur la broche 13. Le rapport cyclique est codé sur 8 bit et varie donc de 0 à 255. Du fait de la persistance rétinienne (fréquence supérieure à 24Hz), l’œil ne verra pas les impulsions, mais une luminosité moyenne qui dépendra du rapport cyclique.

Signal de sortie PWM :

Dans ce cas, la carte Arduino est à l’adresse 1 et lit donc les informations concernant le canal 1.

La liaison série via USB (Serial) ne sert qu’à visualiser les informations reçues.

  1. #include <DMXSerial.h>
  2.  
  3. int outPin = 13; //
  4.  
  5. void setup () {
  6. // initialisation de la liaison en mode réception
  7. DMXSerial.init(DMXReceiver);
  8. // broche 13 en sortie
  9. pinMode(outPin, OUTPUT);
  10. Serial.begin(9600);
  11. while (!Serial) {
  12. }
  13. }
  14.  
  15. void loop() {
  16. // DMXSerial.read(1) permet de lire le canal1
  17. Serial.print("canal 1 : ");
  18. Serial.println(DMXSerial.read(1)); // affichage de la valeur lue
  19.  
  20. // commande de la sortie 13 en fonction de la commande DMX reçue
  21. analogWrite(outPin,DMXSerial.read(1));
  22. delay(500);
  23. }

Télécharger

Programme Arduino permettant de lire les 3 premiers canaux (0,1,2)

Encore une fois, la liaison série (Serial) n’est utilisée que pour afficher les valeurs lues.

  1. #include <DMXSerial.h>
  2.  
  3. const int outPin = 13; // PWM output pin for Light.
  4.  
  5. void setup () {
  6. DMXSerial.init(DMXReceiver);
  7. pinMode(outPin, OUTPUT);
  8. Serial.begin(9600);
  9. while (!Serial) {
  10. }
  11. }
  12.  
  13. void loop() {
  14. Serial.print("canal 0 : ");
  15. Serial.print(DMXSerial.read(0));
  16. Serial.print("\t canal 1 : ");
  17. Serial.print(DMXSerial.read(1));
  18. Serial.print("\t canal 2 : ");
  19. Serial.println(DMXSerial.read(2));
  20. delay(500);
  21. }

Télécharger

SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL