Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

DMX RGB LED buiten

Componenten en benodigdheden

Arduino Nano R3
× 1
Adafruit PCA9685 16PWM-kanalen I2C
× 1
eigen PCB's
× 1

Apps en online services

Arduino IDE
freestyler DMX-besturing

Over dit project

Hallo jongens, ik heb al veel DMX-gestuurde lichten in huis, maar wilde er ook een paar buiten hebben. Omdat deze RGB DMX-lampen nogal duur zijn (een ca. 200 - 300€) heb ik naar alternatieven gezocht.

Wat ik vond waren deze echt goedkope RGB LED-floods met IR-controle-eenheden. Deze zijn rond de € 8 / 10W RGB.

Dus ik hoefde deze alleen maar om te zetten om DMX te begrijpen.

Om de kosten en benodigde PCB-ruimte laag te houden, hebben alle 5 overstromingen slechts één Arduino-brein in een aparte doos. Elke lamp heeft een 3-kanaals PWM-getriggerde printplaat met constante stroombron en een D-Sub 9-connectorkabel. Deze print past perfect in het kleine vakje aan de onderkant van de lamp. Elk kanaal voor de LED is ingesteld op 350mA.

Alle 5 lampen zijn verbonden met een centrale box met de arduino en de draadloze DMX-ontvanger

In deze doos bevinden zich:

  • 12V 3,5A voeding
  • 12V - 5V oplader voor mobiele telefoons
  • Ardunino Nano op eigen PCB voor DMX (RS485) converter
  • Ardufruit 16-kanaals PWM-extensie via I2C
  • Draadloze DMX-ontvanger
  • Distributie-printplaten voor D-Sub-lintkabels
  • Veel hete lijm om het waterdicht te maken

Het heeft tot nu toe 3 weken in zware regen overleefd, het naait de doos en de afdichting is waterdicht.

De PCB waar ik de Nano heb gemonteerd is universeel voor al mijn DMX projecten, hij kan de DMX bus signalen omzetten naar de Ardunio en is tevens een breakout voor de I2C bus en/of alle 6 PWM kanalen met MosFET's (BUZ11). Ik heb het ook gebruikt met de MosFET's om binnenlampen te updaten naar DMX.

Dus alles samen resulteert in 5 individueel aangestuurde lampen (hier voor mijn glazen balustrade) die via draadloze DMX via een pc / mobiele telefoon worden aangestuurd.

In de downloads vind je de eagle-files voor de PCB's, mijn copy&paste Arduino sketch en het definition-file voor de lamp in de PC besturingssoftware Freestyler.

De DMX-adressen zijn hard gecodeerd om adres 200 te starten en dan 5x 3 kanalen R, G en B zonder dimmerkanaal.

In de Arduino-Sketch moest ik de waarden voor de rode kanalen manipuleren, omdat de rode LED veel helderder is dan groen en blauw en daarom niet zou mengen tot puur wit.

Als alternatief is er één schets om te testen / bugfixing waar u de RGB-waarden rechtstreeks via de Ardunio IDE-terminal kunt instellen

In totaal zijn de totale kosten voor 5 lampen ongeveer € 110, alle onderdelen (behalve lampen) afkomstig van Reichelt.de, alle PCB's gemaakt door platinenbelichter.de (grote aanbeveling!)

Voel je vrij om alles aan te passen of te optimaliseren!

Dag,

Sebastiaan

Code

  • DMX-versie
  • USB-ingangsversie
  • armatuur voor Freestyler
DMX-versieArduino
Besturingsprogramma voor 5x 3-kanaals RGB-lampen
// 15 PWM op 5 RGB's LED's / DMX Start-Address 200 / 5x 3-kanaals 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 rood =0;int groen =0;int blauw =0; ongeldige setup () { Wire.begin (); // join i2c bus (adres optioneel voor master) pwm.begin(); pwm.setPWMReq(120); // Dit is de maximale PWM-frequentie #ifdef TWBR // save I2C bitrate uint8_t twbrbackup =TWBR; // moet worden gewijzigd na het aanroepen van Wire.begin() (binnen pwm.begin()) TWBR =12; // upgrade naar 400KHz!#endif // DMX-setup dmx_slave.enable (); dmx_slave.setStartAddress (200); // zet alle PWM op hoog -> LED's uit 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-invoer voor (int j =0; j <=14; j++) { channel [j] =dmx_slave.getChannelValue (j+1); } // verfijn kleur channelOut[0] =map (channel[0], 0, 255, 0, 1400); // rode LED verminderen 1 channelOut [1] =map (channel [1], 0, 255, 0, 4095); channelOut[2] =kaart(kanaal[2], 0, 255, 0, 4095); channelOut[3] =kaart(kanaal[3], 0, 255, 0, 1400); // rode LED verminderen 2 channelOut [4] =kaart (kanaal [4], 0, 255, 0, 4095); channelOut[5] =kaart(kanaal[5], 0, 255, 0, 4095); channelOut[6] =kaart(kanaal[6], 0, 255, 0, 1400); // rode LED verminderen 3 channelOut [7] =map (channel [7], 0, 255, 0, 4095); channelOut[8] =kaart(kanaal[8], 0, 255, 0, 4095); channelOut[9] =kaart(kanaal[9], 0, 255, 0, 1400); // rode LED verminderen 4 channelOut [10] =kaart (kanaal [10], 0, 255, 0, 4095); channelOut[11] =kaart(kanaal[11], 0, 255, 0, 4095); channelOut[12] =kaart(kanaal[12], 0, 255, 0, 1400); // rode LED verminderen 5 channelOut [13] =kaart (kanaal [13], 0, 255, 0, 4095); channelOut[14] =kaart(kanaal[14], 0, 255, 0, 4095); // waarden toewijzen voor (int i =0; i <=14; i++) {if (channelOut [i] ==0) { pwm.setPWM (i, 4096, 0); } else { pwm.setPWM(i, 0, 4095 - channelOut[i]); } }}
USB-invoerversieArduino
Debug-versie met directe invoer voor lamp Nr. en RGB-waarden
// 15 PWM op 5 RGB's LED's#include #include // zo genoemd, het gebruikt het standaardadres 0x40Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();// dat kan noem het ook met een ander adres dat u wilt//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 blauw =0;void setup() { Wire.begin(); // join i2c bus (adres optioneel voor master) Serial.begin (9600); Serial.println ("Wachten op invoer:LED, R, G, B, [elk 0-255]"); pwm.begin(); pwm.setPWMReq(120); // Dit is de maximale PWM-frequentie // als je dingen echt wilt versnellen, kun je in de 'snelle 400khz I2C'-modus gaan // sommige i2c-apparaten vinden dit niet zo leuk, dus als je de bus deelt, kijk dan // / hiervoor uit! #ifdef TWBR // save I2C bitrate uint8_t twbrbackup =TWBR; // moet worden gewijzigd na het aanroepen van Wire.begin() (binnen pwm.begin()) TWBR =12; // upgrade naar 400KHz!#endif // zet alle PWM op hoog -> LED's uit 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() {//invoer kleur while (Serial.available()> 0) {ch =Serial.parseInt(); rood =Serial.parseInt(); groen =Serial.parseInt(); blauw =Serial.parseInt(); if (Serial.read() =='\n') {} ch =constrain(ch, 0, 4); rood =beperking (rood, 0, 255); groen =beperken (groen, 0, 255); blauw =beperking (blauw, 0, 255); // print de drie nummers:Serial.print ("nieuwe waarden:"); Serieafdruk ("LED="); Serial.print (ch, DEC); Serieafdruk ("R="); Serial.print (rood, DEC); Serie.afdruk (", G="); Serial.print (groen, DEC); Serie.afdruk (", B="); Serial.println (blauw, DEC); } schakelaar (ch) { geval 0:kanaal [0] =rood; kanaal [1] =groen; kanaal [2] =blauw; pauze; geval 1:kanaal [3] =rood; kanaal [4] =groen; kanaal [5] =blauw; pauze; geval 2:kanaal [6] =rood; kanaal[7] =groen; kanaal [8] =blauw; pauze; geval 3:kanaal[9] =rood; kanaal [10] =groen; kanaal[11] =blauw; pauze; geval 4:kanaal[12] =rood; kanaal[13] =groen; kanaal[14] =blauw; pauze; } // verfijn kleur channelOut[0] =map (channel[0], 0, 255, 0, 1400); // rode LED verminderen 1 channelOut [1] =map (channel [1], 0, 255, 0, 4095); channelOut[2] =kaart(kanaal[2], 0, 255, 0, 4095); channelOut[3] =kaart(kanaal[3], 0, 255, 0, 1400); // rode LED verminderen 2 channelOut [4] =kaart (kanaal [4], 0, 255, 0, 4095); channelOut[5] =kaart(kanaal[5], 0, 255, 0, 4095); channelOut[6] =kaart(kanaal[6], 0, 255, 0, 1400); // rode LED verminderen 3 channelOut [7] =map (channel [7], 0, 255, 0, 4095); channelOut[8] =kaart(kanaal[8], 0, 255, 0, 4095); channelOut[9] =kaart(kanaal[9], 0, 255, 0, 1400); // rode LED verminderen 4 channelOut [10] =kaart (kanaal [10], 0, 255, 0, 4095); channelOut[11] =kaart(kanaal[11], 0, 255, 0, 4095); channelOut[12] =kaart(kanaal[12], 0, 255, 0, 1400); // rode LED verminderen 5 channelOut [13] =kaart (kanaal [13], 0, 255, 0, 4095); channelOut[14] =kaart(kanaal[14], 0, 255, 0, 4095); // waarden toewijzen voor (int i =0; i <=14; i++) {if (channelOut [i] ==0) { pwm.setPWM (i, 4096, 0); } else { pwm.setPWM(i, 0, 4095 - channelOut[i]); } }}
armatuur voor FreestylerBatchFile
definitie van kanalen beschrijving voor het DMX-besturingsprogramma op de pc
BuzzComments:""Outdoor LED3 0 0 RBG Outdoor.gif0000000 1 123RedGreenBlueMacros 2 0 0 0 1 0 0255000000255025502550255025502550255000-0-0-0-1Sliders 0 

Schema's

universele Nano-basis met DMX-ingang en PWM / I2C-uitgang universaldmx_2ixt4yqoce.sch universaldmx_a0KdrmJqGU.brd5x 3 kan. (15x PWM) distributie met 12V (+/-) ingang verteiler_dmx_a0M4khDOMv.sch verteiler_dmx_P6etUU6zsN.brd3x 350mA/12V bron met PWM-ingangen 3xksq_rework_2VYUHjd5Xl.sch 3xksq_rework_4rpvCLaFrs.brd 3xksq_rework_qp87kzXQGy.txt universaldmx_GtNeOjMWZL.txt

Productieproces

  1. DIY LUMAZOID Arduino Music Visualiser
  2. Web-gestuurde DMX-controller
  3. Gebaargestuurde interactieve tafellamp
  4. Arduino met Bluetooth om een ​​LED te bedienen!
  5. Arduino Quadruped
  6. Vecht tegen het coronavirus:eenvoudige handwastimer
  7. Arduino RGB-kleurenmixer
  8. Een LED-matrix besturen met Arduino Uno
  9. DIY Arduino RADIONICS-behandelingsmachine
  10. LED-roulettespel
  11. Arduino geautomatiseerde parkeergarage