Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

DMX RGB LED im Freien

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Adafruit PCA9685 16PWM Kanäle I2C
× 1
eigene PCBs
× 1

Apps und Onlinedienste

Arduino-IDE
Freestyler-DMX-Steuerung

Über dieses Projekt

Hallo Leute, ich habe schon viele DMX-gesteuerte Lichter im Haus, wollte aber auch einige draußen haben. Da diese RGB DMX Lampen recht teuer sind (eine ca. 200 - 300€) habe ich nach Alternativen gesucht.

Was ich gefunden habe, waren diese wirklich billigen RGB-LED-Fluten mit IR-Steuergeräten. Das sind etwa 8€ / 10W RGB.

Also musste ich diese nur umwandeln, um DMX zu verstehen.

Um die Kosten und den benötigten PCB-Platz gering zu halten, haben alle 5 Floods nur ein Arduino-Gehirn in einer separaten Box. Jede Leuchte verfügt über eine 3-Kanal-PWM-getriggerte Konstantstromquellen-Leiterplatte und ein D-Sub-9-Anschlusskabel. Diese Platine passt perfekt in das kleine Fach an der Unterseite der Leuchte. Jeder Kanal für die LED ist auf 350mA eingestellt.

Alle 5 Lichter sind mit dem Arduino und dem drahtlosen DMX-Empfänger an eine zentrale Box angeschlossen

In dieser Box befinden sich:

  • 12V 3,5A Netzteil
  • 12V - 5V Handyladegerät
  • Ardunino Nano auf eigener Platine für DMX (RS485) Konverter
  • Ardufruit 16-Kanal-PWM-Erweiterung über I2C
  • Drahtloser DMX-Empfänger
  • Verteilerplatinen für D-Sub-Flachbandkabel
  • Viel Heißkleber, um es wasserdicht zu machen

Es hat bisher 3 Wochen bei starkem Regen überstanden, der Karton näht und die Versiegelung ist wasserdicht.

Die Platine, auf der ich den Nano montiert habe, ist universell für alle meine DMX-Projekte, kann die DMX-Bus-Signale auf den Ardunio umwandeln und ist auch ein Breakout für den I2C-Bus und / oder alle 6 PWM-Kanäle mit MosFETs (BUZ11). Ich habe es auch mit den MosFETs verwendet, um interne Lampen auf DMX zu aktualisieren.

Insgesamt ergeben sich also 5 einzeln ansteuerbare Lampen (hier für mein Glasgeländer), die per Wireless DMX über einen PC / Handy angesteuert werden.

In den Downloads findet ihr die Eagle-Dateien für die Platinen, meinen Copy&Paste Arduino Sketch und die Definitions-Datei für die Lampe in der PC-Steuerungssoftware Freestyler.

Die DMX-Adressen sind hartcodiert auf Startadresse 200 und dann 5x 3 Kanäle R, G und B ohne Dimmerkanal.

In der Arduino-Sketch musste ich die Werte für die roten Kanäle manipulieren, da die rote LED viel heller ist als grün und blau und sich daher nicht zu reinem Weiß mischen würde.

Alternativ gibt es eine Skizze zum Testen / Bugfixing, bei der man die RGB-Werte direkt über das Ardunio IDE-Terminal einstellen kann

Insgesamt liegen die Gesamtkosten für 5 Lampen bei ca. 110€, alle Teile (außer Leuchtmittel) stammen von Reichelt.de, alle Platinen von platinenbelichter.de (große Empfehlung!)

Fühlen Sie sich frei, alles zu ändern oder zu optimieren!

Tschüss,

Sebastian

Code

  • DMX-Version
  • Version mit USB-Eingang
  • Gerät für Freestyler
DMX-VersionArduino
Steuerprogramm für 5x 3Kanal RGB Lichter
// 15 PWM auf 5 RGBs LEDs / DMX Start-Adresse 200 / 5x 3Kanal RGB#include #include #include Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();#define DMX_SLAVE_CHANNELS 15DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );int channel[16];int channelOut[16];int value[16];int ch =0;int red =0;int green =0;int blue =0;void setup() { Wire.begin(); // i2c-Bus beitreten (Adresse optional für Master) pwm.begin(); pwm.setPWMFreq(120); // Dies ist die maximale PWM-Frequenz#ifdef TWBR // I2C-Bitrate speichern uint8_t twbrbackup =TWBR; // muss nach Aufruf von Wire.begin() geändert werden (innerhalb von pwm.begin()) TWBR =12; // auf 400KHz upgraden!#endif // DMX einrichten dmx_slave.enable(); dmx_slave.setStartAddress (200); // setze alle PWM auf hoch -> LEDs aus pwm.setPWM (0, 4096, 0); pwm.setPWM(1, 4096, 0); pwm.setPWM(2, 4096, 0 ); pwm.setPWM(3, 4096, 0 ); pwm.setPWM(4, 4096, 0); pwm.setPWM(5, 4096, 0); pwm.setPWM(6, 4096, 0); pwm.setPWM(7, 4096, 0); pwm.setPWM(8, 4096, 0); pwm.setPWM(9, 4096, 0); pwm.setPWM(10, 4096, 0); pwm.setPWM(11, 4096, 0); pwm.setPWM(12, 4096, 0 ); pwm.setPWM(13, 4096, 0 ); pwm.setPWM(14, 4096, 0);}void loop() { // DMX-Eingang für (int j =0; j <=14; j++) { channel[j] =dmx_slave.getChannelValue (j+1); } // Feinabstimmung der Farbe channelOut [0] =map (channel [0], 0, 255, 0, 1400); // rote LED reduzieren 1 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); // rote LED reduzieren 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); // rote LED reduzieren 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); // rote LED reduzieren 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); // rote LED reduzieren 5 channelOut[13] =map(channel[13], 0, 255, 0, 4095); channelOut[14] =map(channel[14], 0, 255, 0, 4095); // Werte zuweisen für (int i =0; i <=14; i++) { if (channelOut[i] ==0) { pwm.setPWM(i, 4096, 0); aufrechtzuerhalten. Else { pwm.setPWM (i, 0, 4095 - channelOut[i]); } }}
Version mit USB-EingangArduino
Debug-Version mit direkter Eingabe für Lampen-Nr. und RGB-Werte
// 15 PWM auf 5 RGBs LEDs#include #include // So genannt, verwendet es die Standardadresse 0x40Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();// Sie können Rufen Sie es auch mit einer anderen gewünschten Adresse auf //Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver(0x41);int channel[15];int channelOut[15];int value[15];int ch =0;int red =0;int green =0;int blau =0;void setup() { Wire.begin(); // i2c-Bus beitreten (Adresse optional für Master) Serial.begin (9600); Serial.println ("Warten auf Eingabe:LED, R, G, B, [jeweils 0-255]"); pwm.begin(); pwm.setPWMFreq(120); // Dies ist die maximale PWM-Frequenz // Wenn Sie das Zeug wirklich beschleunigen möchten, können Sie in den Modus "schneller 400-kHz-I2C" wechseln // einige i2c-Geräte mögen das nicht so sehr, also wenn Sie den Bus teilen, sehen Sie sich an / / out for this!#ifdef TWBR // I2C-Bitrate speichern uint8_t twbrbackup =TWBR; // muss nach Aufruf von Wire.begin() geändert werden (innerhalb von pwm.begin()) TWBR =12; // Upgrade auf 400KHz!#endif // setze alle PWM auf hoch -> LEDs aus pwm.setPWM(0, 4096, 0); pwm.setPWM(1, 4096, 0); pwm.setPWM(2, 4096, 0 ); pwm.setPWM(3, 4096, 0 ); pwm.setPWM(4, 4096, 0); pwm.setPWM(5, 4096, 0); pwm.setPWM(6, 4096, 0); pwm.setPWM(7, 4096, 0); pwm.setPWM(8, 4096, 0); pwm.setPWM(9, 4096, 0); pwm.setPWM(10, 4096, 0); pwm.setPWM(11, 4096, 0); pwm.setPWM(12, 4096, 0 ); pwm.setPWM(13, 4096, 0 ); pwm.setPWM (14, 4096, 0);}void loop () {//Eingabefarbe while (Serial.available ()> 0) { ch =Serial.parseInt (); rot =Serial.parseInt(); grün =Serial.parseInt(); blau =Serial.parseInt(); if (Serial.read() =='\n') {} ch =einschränken(ch, 0, 4); rot =einschränken (rot, 0, 255); grün =einschränken (grün, 0, 255); blau =einschränken (blau, 0, 255); // drucke die drei Zahlen:Serial.print ("neue Werte:"); Seriendruck ("LED="); Serial.print (ch, DEZ); Serial.print (" R ="); Serial.print (rot, DEZ); Serial.print (", G="); Serial.print (grün, DEZ); Serial.print (", B="); Serial.println (blau, DEZ); } Schalter (ch) { Fall 0:channel[0] =rot; Kanal[1] =grün; Kanal [2] =blau; brechen; Fall 1:Kanal [3] =rot; Kanal[4] =grün; Kanal[5] =blau; brechen; Fall 2:Kanal[6] =rot; Kanal[7] =grün; Kanal[8] =blau; brechen; Fall 3:Kanal[9] =rot; Kanal[10] =grün; Kanal[11] =blau; brechen; Fall 4:Kanal[12] =rot; Kanal[13] =grün; Kanal[14] =blau; brechen; } // Feinabstimmung der Farbe channelOut [0] =map (channel [0], 0, 255, 0, 1400); // rote LED reduzieren 1 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); // rote LED reduzieren 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); // rote LED reduzieren 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); // rote LED reduzieren 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); // rote LED reduzieren 5 channelOut[13] =map(channel[13], 0, 255, 0, 4095); channelOut[14] =map(channel[14], 0, 255, 0, 4095); // Werte zuweisen für (int i =0; i <=14; i++) { if (channelOut[i] ==0) { pwm.setPWM(i, 4096, 0); aufrechtzuerhalten. Else { pwm.setPWM (i, 0, 4095 - channelOut[i]); } }}
Gerät für FreestylerBatchFile
Definition der Kanäle Beschreibung für das DMX-Steuerungsprogramm auf dem PC
BuzzComments:""Outdoor LED3 0 0 RBG Outdoor.gif0000000 1 123RedGreenBlueMacros 2 0 0 0 1 0 0255000000255025502550255025502550255000-0-0-0-1Sliders 0 

Schaltpläne

universelle Nano-Basis mit DMX-Eingang und PWM / I2C-Ausgang universaldmx_2ixt4yqoce.sch universaldmx_a0KdrmJqGU.brd5x 3 ch. (15x PWM) Verteilung mit 12V (+/-) Eingang verteiler_dmx_a0M4khDOMv.sch verteiler_dmx_P6etUU6zsN.brd3x 350mA / 12V Quelle mit PWM-Eingängen 3xksq_rework_2VYUHjd5Xl.sch 3xksq_rework_4rpvCLaFrs.brd 3xksq_rework_qp87kzXQGy.txt universaldmx_GtNeOjMWZL.txt

Herstellungsprozess

  1. DIY LUMAZOID Arduino Music Visualiser
  2. Webbetriebener DMX-Controller
  3. Gestengesteuerte interaktive Tischleuchte
  4. Arduino mit Bluetooth zur Steuerung einer LED!
  5. Arduino-Vierbeiner
  6. Bekämpfen Sie das Coronavirus:Einfacher Handwasch-Timer
  7. Arduino RGB-Farbmischer
  8. Steuerung einer LED-Matrix mit Arduino Uno
  9. DIY Arduino RADIONICS-Behandlungsmaschine
  10. LED-Roulette-Spiel