DMX Effect Controller

The goal of this project was to make a DMX-Controlled plug box which would allow on-stage effects or devices to be triggered remotely from the lighting console. This could potentially eliminate the need for a separate control system and operator backstage. This controller could be used in a wide variety of applications including:

-Triggering FX (solenoid, motor, other micro-controller, etc.)

-Triggering practical props (lamps, radios, buzzers, etc.)

-Backstage cue light systems

The controller includes standard 5-pin DMX input and thru connectors mounted to the exterior of the box, which allows it to easily be daisy chained with other DMX peripherals. There is an onboard channel selector knob and display which allow the user to select and save the first of the four controllable DMX addresses/channels

The receptacles in this controller are not dimmable; they are meant only to provide 120V AC power on cue. Each receptacle has a maximum load of 10A due to the limits of the relays and wiring.

Step 1: What You’ll Need

Physical Components:

  • Enclosure box for:
    • 2 dual 120V/15A receptacles
    • All Electronic components
    • Knockouts for AC power, DMX Input, DMX Thru
    • Cutouts for LCD display, Rotary encoder knob
  • AC power cord
  • 16ga. wire for wiring relays to receptacles
  • Jumper wires for electronics
  • Assorted mounting screws and posts
  • Arduino UNO and USB cable
  • Rotary encoder w/button capability
  • Nifty 3D printed knob (or buy one or don’t)
  • 4 digit, 7 segment LCD display
  • MAX485 RS-485 module
  • Panel mount DMX (male and female)
  • Power supply (I used 12v)
  • 5V 4 relay module

Arduino Libraries Used:

  • EEPROM.h (to save DMX address in onboard memory)
  • Arduino.h
  • TM1637Display.h (LCD Display)
  • Conceptinetics.h (DMX Slave)

Step 2: Suggestion: Breadboard Prototyping

I would highly recommend breadboarding, assembling all of the electronic components, uploading the sketch, connecting to a DMX controller (like a lighting control console) and testing things out before adding the AC power components and the enclosure. This way, you’ll know you’re on the right track before you have everything crammed in the box and it becomes nearly impossible to make quick alterations.

Step 3: MAX485 DMX Slave Setup

I used a MAX485 module set up as a “slave” to receive the DMX packets. The connections are as follows:

  • GND to 5-pin DMX pin1, to DE &RE, and to GND on Arduino
  • A to 5-pin DMX pin3
  • B to 5-pin DMX pin2
  • VCC to +5V
  • RO to Pin0 on Arduino
  • DI not usedpin

-Later in the process you will use jumpers to connect pins 1-3 of the DMX input jack to pins 1-3 of the DMX thru jack.

-I later used the far end of this PCB to consolidate all ground and +5v connections before jumping one wire to the Arduino

*IMPORTANT* – You must unplug the jumper to Pin0 any time you upload a sketch, as this pin is also used in serial com. when uploading.

Step 4: 4 Digit 7 Segment LCD Display

This display is used to read out the DMX start address (out of 4) that has been selected with the encoder.

I cut a hole in the enclosure and created custom mounts for this piece of hardware. Connections are as follows:


VCC -> +5V

DIO -> Pin5 (orange wire)

CLK -> Pin6 (yellow wire

Step 5: Encoder Knob and Button

I used a 20 position rotary encoder w/push button functionality so that the knob could be used to set the DMX start address and, with a button push, save it to EEPROM so that the unit can be unplugged from power without forgetting a saved address. The address CAN be actively changed with the rotary encoder even after the address is saved, but the saved address will re-load on reset. With a slight tweak in the code, you can make it so the saved address cannot be overwritten by turning the knob without a re-set.

Here are the connections:

GND -> Arduino GND

VCC -> +5V

CLK -> Pin2 (purple)

DT -> Pin3 (gray)

SW (button) -> Pin4 (white)

The encoder is mounted next to the display and was mounted by drilling a hole and using then included nut and washer.

I decided to 3D print a custom knob for my controller box using Fusion 360 and a MakerBot Replicator.

Step 6: Enclosure and Mounting

After you’ve tested all of the previous steps to ensure the functionality of the electronics and sketch, it’s time to make a permanent enclosure.

I used a 6×8 junction box from Amazon (Bud Industries brand) and modified it as needed. As you’ll see later, things fit pretty snugly in the end.

I also created a mounting tray out of some spare acrylic to keep the main electronic components in place and stable. This allowed many of the components to be accessed easily for assembly before dropping them into the box later on

Step 7: Relays

I used a 4 channel relay module to control each receptacle separately. The AC hot comes into the COM terminal on the first relay and then jumps to the COM on each successive relay. From the NO (normally open) screw terminal of each relay, you’ll wire to the hot terminal of the corresponding receptacle. When the relays receive signal from the Arduino, they will close as prompted and supply power to the correct receptacle


Ch 1 – Pin8 (blue)

Ch 2 – Pin9 (purple)

Ch 3 – Pin10 (gray)

Ch 4 – Pin11 (white)

For More Details: DMX Effect Controller

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top