Build Your Own DMX Fixture - Arduino

34K7730

Intro: Build Your Own DMX Fixture - Arduino

Welcome to my second Instructables page. I have learned a lot from this site and this seems a great place to show my projects. I hope you find this project entertaining and helpful.
I'm eager to know what you think. Let me know in the comments, please keep in mind I'm a beginner and not a native speaker. All of your comments are welcome ;)

The Project

In this Instructable I will show you how to create a DMX fixture all on your own. With the right parts it surprisingly simple to make, you only need a couple of components. I will show you how to adapt the incoming DMX signal (+2.5V and -2.5V) to a suitable signal (5V) for your Arduino and how to process this signal. Further I will show you how to control high power LEDs via a PWM pin.

Watch the video for more information and see the DMX light in action.

STEP 1: Project Overview and Background

My friends and I are no strangers to the Dutch party scene and sometimes we like to organise a parties ourselves. Only when we organise a party we don't have much lighting and therefore I made a few DMX fixtures myself. In the third picture you can see my first (successful) attempt to create a DMX fixture on my own.

Because my clumsy friend dropped this prototype I had to make a new one and I thought it would be a neat idea to post my progress on Instructables this time. Enjoy! I hope it can be useful for your project.

STEP 2: Get Your Supplies

It's time to get your supplies! The most items on the list I got from eBay or Amazon. These items are widely available so I recon it won't be a problem to find them.

Parts

  • High Power UV LEDs (700mA) incl. star plates
  • ATmega328 IC
  • 5V voltage regulator IC (L7805CV)
  • N-channel mosfet (BUZZ11)
  • Small transistor (2N2222)
  • 10-dip Switch
  • Signal converter IC (SN75176BP) or MAX485
  • 16mhz cristal
  • 22 pF ceramic capacitors [2x]
  • 1 uF ceramic capacitor
  • 10 uF electrolytic capacitor
  • High power resistor (0.81ohm, 5W)
  • 100K ohm resistor
  • 10K ohm resistor [11x]
  • XLR sockets (male and female)
  • Power supply / adapter (32V and 16V, I salvaged this from an old printer)
  • Heat sink
  • Headers and pins
  • Proto-board
  • Material for the casing (I used compressed wood (in dutch: MDF))

STEP 3: Time to Solder

It's time to warm up the soldering iron and show off your solder skills.

Because the proto-boards where very small, I used three of them. I divided it in the power regulating board, control board and dip-switch board. I placed the dip-switch board upside down so the dip-switch is faced outside so the user can access it and change the DMX start address.

STEP 4: Build the Case

This is always a problem for me. I don't have heavy machinery or a 3D printer at my disposal so I settled for compressed wood (MDF). Wood is easy to modify and I have a great control over the finished product.

For the most part I used screws and wood glue. The only part I didn't use wood glue is the front part, so I can access the inside.

I am aware that heat and wood are not best friends. My first attend was to use lenses for the LEDs, but I ditched them in the hope that the airflow will be sufficient to cool down the high power LEDs. Further the UV LEDs will function as a blacklight and will be a limited time on during the party. I expect to use this light only 10% of the time during the party and I hope the pauses between usages will be enough to cool down the LEDs.

I tested this and my theory was right, the inside of the casing never got hotter than 40 degrees celsius. Besides, because I used wood I can always implement a small fan later to increase the airflow and therefor cool down the LEDs faster.

STEP 5: Schematics

Drive circuit High Power LEDs

I got this idea from Dan Goldwater. Check out his Instructable for more information and more variations of this driver circuit: https://www.instructables.com/id/Power-LED-s---si...

I intended to use a 0.75 ohm resistor but at the time I only had a 0.81 resistors laying around. This is not a problem because in this setup a higher impedance will result in a lower constant current and will therefor extend the life of the UV LEDs.


Dip-switch

I used pull-down resistors to stabilise the signals. It would be hard to control the light via DMX if the DMX start address changes during the party. I will lose the ability to control the light and it will make the light useless.


DMX signal conversion

To convert the incoming DMX signal (+2.5V and -2.5V) I used a signal convertor IC. I used the (cheap) SN75176BP for this. The more common IC is a MAX485. Connect the pins of the XLR socket like this:

XLR1 [GND] --> Ground / pin5

XLR2 [D-] --> B / pin6

XLR3 [D+] --> A / pin7

Don't forget to connect RO/pin1 and RE/pin2 to ground and DE/pin3 to VCC! Connect DI/pin4 to your microcontroller.

Note: this only works for incoming DMX signals. If you want to send DMX signals you need a different configuration. Maybe I will make a separate tutorial about this, let me know if this would be helpful.


Status LED

I forgot to draw in a 100K resistor between pin3 and the LED. I used a 100K ohm resistor because it still lets me see if the LED is blinking or not but the LED will not shine to bright so it will not illuminate the room.



STEP 6: The Code

I did my best to describe the code as well as I could but I think there is room for some improvements, I'm open for suggestions. If you have any tricks on how to decrease the lines of code, let me know!

Before you aks me questions about the code, please watch the video. Here I explain almost every line of the code and its function.

STEP 7: Put It All Together

Now put it all together. Paint the case. Add some brackets to make it possible to hang the light from a truss and enjoy your light!

Fan

Just to be sure the fixture will not overheat I implemented a small fan I had laying around. I connected this to the 16V output of the power adapter and will run when the light receives power. So even when the LEDs are off, the fan can cool down the LEDs.

Blacklight effect

For the best effect I would recommend some things that will illuminate when the UV LEDs are on. The best is to use white or some fluorescence material (f.i. a highlight marker). For the first party I used some cut-outs of cardboard and sprayed them with a fluorescent paint. In the first picture the LEDs are turned off, in the second they are turned on. You can clearly see a difference especially in real life. I got some quite neat reactions from the crowd when the lights turned on.

18 Comments

there's completely wrong schematics. its need to be deleted from the site.
I tried to make your project but the communication is not working. Are you shure that the "DI" of the RS485 ic has to be connected with the "RX" of the arduino ?
Hi ! Could you be a bit more specific about the type of UV leds you used? Wavelength and type for example?
Hey there. I am having trouble getting this fixture to work. The error LED keeps flashing, so does that mean there's no DMX flowing? I am using an Arduino Mega2560. I have tried an Uno as well with no avail. Could that be an issue as well? I appreciate the help!
Same here. i am doing dmx shutter and seems to have no signal :/
This is what I have written down from when I attempted this. I hope it helps. It may not be correct, but it might help point in the right direction. Best of luck!

So, I have pins 2 (, receiver output enable) and 3 (DE, driver output enable) tied to ground. Pin 4 (DI) would be used for using the IC as a transmitter, so it is not connected to anything at this point. Pin 1 (RO) is the output of the EIA-485 signaling going to the Arduino microcontroller. For the incoming data from the DMX controller, the positive (+) DMX data is connected to pin 6 (A, noninverting receiver input), while the negative (-) data is connected to pin 7 (B, inverting receiver input). Pin 8 (VCC) and pin 5 (GND) are connected to their respective 5V input and ground connections.
I believe you could modify the schematic to remove all of the pull-down resistors from the DIP switches.

For super beginners: look up what pull-up, pull-down, and high-z means.

For beginners: Most microcontrollers have the ability to enable pull-up or pull-down resistors for all input configured GPIO pins. You have to write code to enable these resistors (read the manual of your MCU or GPIO library). These internal resistors save you from needing to add a ton of external components.

The ATMega328p can not directly replace this circuit's pull-down resistors because the ATMega328p only has pull-up resistors. If we remove the pull-down resistors, attach the non MCU side of the DIP switches to GROUND, enable the ATMega328p's internal pull-up resistors, and invert the value read from the GPIO lines, then we have a functionally identical system with a ton less components and soldering.
could you upload the video again? (:
Thanks, your project give a lot of information for my project. but
your are sending the dmx_in signal as it is to dmx_out, means we are not strengthing the signal so that it can travel through long wire. how can i send the dmx signal to long distance??
and also please make a project with strobes.

Your schematic is wrong. As this the whole intensity pass thru the 2N2222. I think your goal was to make a constant current generator driven by PWM. Apart from this small error, you've made a very good job. I've got to lean on the code now. Cheers.

Thank you for noticing! Unbelievable I didn't spot that myself. Updated the schematic.

could you share the update? thanks

Love this project!
I tried to watch the video but it say unavailable?
I want to replace the decoder in my par lights with this one but having Red Green and Blue pins & adding a strobe and master intensity control, how would I do this in the code?
Can I use IRLZ44n instead of BUZ11?
I really wanto to put more functions by dmx in the same led.. strobes, pulses... do you have a clue on it?

Hello friend, could you help me add more channels to rgb control for example?

Sure! For each channel you need a separate LED driver. You can connect each channel to a PWM pin of your Arduino (if you want brightness control). For the code:

Create another const int for your second channel. For your rgb project, I would call them just 'RedPin', 'BluePin' and 'GreenPin'.

Control these channels via DMX, just extend the list:

int RedChannel = DMXSerial.read(startAddress); // first channel

int BlueChannel = DMXSerial.read(startAddress+1); // second

int GreenChannel = DMXSerial.read(startAddress+2); // third

Then use analogWrite functions:

analogWrite(RedPin, RedChannel);

analogWrite(BluePin, BlueChannel);

analogWrite(GreenPin, GreenChannel);

Good Luck! Let me know if you have any more questions