Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Projecteurs RGB LED extérieurs DMX – Abordables et haute performance

Composants et fournitures

Arduino Nano R3 ×1
Adafruit PCA9685 16 canaux PWM I2C ×1
PCB personnalisés ×1

Applications et services en ligne

À propos du projet

Salut ! J'avais déjà beaucoup de lumières pilotées par DMX à l'intérieur, mais je voulais aussi en avoir à l'extérieur. Les projecteurs RGB DMX sont plutôt chers (200-300€ l'unité), alors j'ai cherché des alternatives.

J'ai trouvé des projecteurs RGB LED à télécommande IR très abordables (environ 8€ / 10W RGB). Il suffisait de les convertir pour qu'ils comprennent le protocole DMX.

Pour réduire les coûts et l'encombrement, les 5 projecteurs partagent un seul « cerveau » Arduino dans un boîtier séparé. Chaque projecteur possède un PCB source de courant constant 3 canaux piloté par PWM et un connecteur D-Sub 9. Ce PCB s'insère parfaitement dans le petit compartiment sous le projecteur. Chaque canal LED est réglé à 350 mA.

Les 5 projecteurs sont connectés à un boîtier central contenant :

Le système a survécu 3 semaines sous de fortes pluies, l'étanchéité tient bon.

Le PCB où est monté le Nano est universel pour tous mes projets DMX : il convertit les signaux bus DMX vers l'Arduino, et fait office de breakout pour le bus I2C et/ou les 6 canaux PWM avec MOSFETs (BUZ11). Je l'ai aussi utilisé avec les MOSFETs pour convertir des lampes intérieures en DMX.

Au final : 5 lampes pilotées individuellement (ici pour ma rambarde en verre), contrôlées via DMX sans fil depuis un PC / téléphone mobile.

Dans les téléchargements, vous trouverez les fichiers Eagle pour les PCB, mon sketch Arduino et le fichier de définition de la lampe pour le logiciel de contrôle PC Freestyler.

Les adresses DMX sont codées en dur : adresse de départ 200, puis 5×3 canaux R, G, B sans canal de gradateur.

Dans le sketch, j'ai dû ajuster les valeurs des canaux rouges car la LED rouge est bien plus lumineuse que le vert et le bleu, ce qui empêchait d'obtenir un blanc pur.

Un sketch alternatif pour test/débogage permet de définir les valeurs RVB directement via le terminal de l'IDE Arduino.

Coût total pour 5 lampes : environ 110€ (pièces via Reichelt.de, PCB via platinenbelichter.de – grandement recommandé !).

N'hésitez pas à modifier et optimiser !

À bientôt,
Sebastian

Code

Version DMX (Arduino)

// 15 PWM sur 5 LEDs RGB / Adresse DMX de départ 200 / 5x 3 canaux R G B
#include <Conceptinetics.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define DMX_SLAVE_CHANNELS 15
DMX_Slave dmx_slave(DMX_SLAVE_CHANNELS);

int channel[16], channelOut[16], value[16];
int ch = 0, red = 0, green = 0, blue = 0;

void setup() {
  Wire.begin();
  pwm.begin();
  pwm.setPWMFreq(120); // Fréquence PWM max
  
#ifdef TWBR
  uint8_t twbrbackup = TWBR;
  TWBR = 12; // Passage à 400 KHz I2C !
#endif

  dmx_slave.enable();
  dmx_slave.setStartAddress(200);
  
  // Éteindre toutes les LEDs au démarrage
  for (int i = 0; i <= 14; i++) {
    pwm.setPWM(i, 4096, 0);
  }
}

void loop() {
  // Entrée DMX
  for (int j = 0; j <= 14; j++) {
    channel[j] = dmx_slave.getChannelValue(j + 1);
  }
  
  // Ajustement fin des couleurs (réduction rouge)
  channelOut[0] = map(channel[0], 0, 255, 0, 1400); // Rouge LED 1
  channelOut[1] = map(channel[1], 0, 255, 0, 4095); // Vert LED 1
  channelOut[2] = map(channel[2], 0, 255, 0, 4095); // Bleu LED 1
  channelOut[3] = map(channel[3], 0, 255, 0, 1400); // Rouge LED 2
  channelOut[4] = map(channel[4], 0, 255, 0, 4095);
  channelOut[5] = map(channel[5], 0, 255, 0, 4095);
  channelOut[6] = map(channel[6], 0, 255, 0, 1400); // Rouge LED 3
  channelOut[7] = map(channel[7], 0, 255, 0, 4095);
  channelOut[8] = map(channel[8], 0, 255, 0, 4095);
  channelOut[9] = map(channel[9], 0, 255, 0, 1400); // Rouge LED 4
  channelOut[10] = map(channel[10], 0, 255, 0, 4095);
  channelOut[11] = map(channel[11], 0, 255, 0, 4095);
  channelOut[12] = map(channel[12], 0, 255, 0, 1400); // Rouge LED 5
  channelOut[13] = map(channel[13], 0, 255, 0, 4095);
  channelOut[14] = map(channel[14], 0, 255, 0, 4095);
  
  // Assignation des valeurs
  for (int i = 0; i <= 14; i++) {
    if (channelOut[i] == 0) {
      pwm.setPWM(i, 4096, 0);
    } else {
      pwm.setPWM(i, 0, 4095 - channelOut[i]);
    }
  }
}

Version entrée USB (Arduino) – Pour test/débogage

// 15 PWM sur 5 LEDs RGB
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

int channel[15], channelOut[15], value[15];
int ch = 0, red = 0, green = 0, blue = 0;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("Waiting for input: LED, R, G, B, [each 0-255]");
  pwm.begin();
  pwm.setPWMFreq(120);
  
#ifdef TWBR
  uint8_t twbrbackup = TWBR;
  TWBR = 12;
#endif
  
  for (int i = 0; i <= 14; i++) {
    pwm.setPWM(i, 4096, 0);
  }
}

void loop() {
  // Entrée couleur via série
  while (Serial.available() > 0) {
    ch = Serial.parseInt();
    red = Serial.parseInt();
    green = Serial.parseInt();
    blue = Serial.parseInt();
    if (Serial.read() == '\n') {}
    
    ch = constrain(ch, 0, 4);
    red = constrain(red, 0, 255);
    green = constrain(green, 0, 255);
    blue = constrain(blue, 0, 255);
    
    Serial.print("new values: LED="); Serial.print(ch);
    Serial.print(" R="); Serial.print(red);
    Serial.print(", G="); Serial.print(green);
    Serial.print(", B="); Serial.println(blue);
  }
  
  // Assignation selon le numéro de LED
  switch (ch) {
    case 0: channel[0]=red; channel[1]=green; channel[2]=blue; break;
    case 1: channel[3]=red; channel[4]=green; channel[5]=blue; break;
    case 2: channel[6]=red; channel[7]=green; channel[8]=blue; break;
    case 3: channel[9]=red; channel[10]=green; channel[11]=blue; break;
    case 4: channel[12]=red; channel[13]=green; channel[14]=blue; break;
  }
  
  // Ajustement fin (identique version DMX)
  channelOut[0] = map(channel[0], 0, 255, 0, 1400);
  channelOut[1] = map(channel[1], 0, 255, 0, 4095);
  channelOut[2] = map(channel[2], 0, 255, 0, 4095);
  channelOut[3] = map(channel[3], 0, 255, 0, 1400);
  channelOut[4] = map(channel[4], 0, 255, 0, 4095);
  channelOut[5] = map(channel[5], 0, 255, 0, 4095);
  channelOut[6] = map(channel[6], 0, 255, 0, 1400);
  channelOut[7] = map(channel[7], 0, 255, 0, 4095);
  channelOut[8] = map(channel[8], 0, 255, 0, 4095);
  channelOut[9] = map(channel[9], 0, 255, 0, 1400);
  channelOut[10] = map(channel[10], 0, 255, 0, 4095);
  channelOut[11] = map(channel[11], 0, 255, 0, 4095);
  channelOut[12] = map(channel[12], 0, 255, 0, 1400);
  channelOut[13] = map(channel[13], 0, 255, 0, 4095);
  channelOut[14] = map(channel[14], 0, 255, 0, 4095);
  
  for (int i = 0; i <= 14; i++) {
    if (channelOut[i] == 0) pwm.setPWM(i, 4096, 0);
    else pwm.setPWM(i, 0, 4095 - channelOut[i]);
  }
}

Définition pour Freestyler (BatchFile)

Buzz Comments: "" Outdoor LED 3 0 0 RBG Outdoor.gif 0 0 0 0 0 0 0 1 1 2 3 Red Green Blue Macros 2 0 0 0 1 0 0 255 0 0 0 0 0 0 255 0 255 0 255 0 255 0 255 0 255 0 255 0 255 0 0 0-0-0-0 -1 Sliders 0

Schématiques

Processus de fabrication

  1. Construisez votre propre LUMAZOID : Visualiseur musical DIY Arduino
  2. Système d'éclairage DMX piloté par web – Contrôleur maître Arduino
  3. Lampe de table RGB à commande gestuelle – Éclairage interactif, mains libres
  4. Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
  5. Construire un robot quadrupède Arduino intelligent : guide étape par étape
  6. Minuteur de lavage des mains Arduino : un outil DIY simple pour lutter contre le COVID‑19
  7. Mélangeur de couleurs RVB Arduino – Projet DIY débutant
  8. Maîtriser une matrice LED 8×8 avec Arduino Uno : Guide pas à pas
  9. Dispositif de Traitement Radionique EMR DIY avec Arduino Nano