Home Arduino projects Schematic Arduino 4 universes dmx shield

Schematic Arduino 4 universes dmx shield

Schematic for Arduino four universes DMX shield for use with our DMX library:

All resistor are 10 ohm 1/4 wat, integrated circuits are MAX485, MAX487, ST485, SN75176 or equivalent, connectors XLR female for output, male for input.

Arduino four universes dmx shield


View of PCB for Arduino Mega (from top):

Arduino four universes dmx shield PCB

Arduino four universes dmx shield PCB

For this PCB design we need to use these calls before initialize universes:

ArduinoDmx0.set_control_pin( 11 );

ArduinoDmx1.set_control_pin( 13 );

ArduinoDmx2.set_control_pin( 12 );

ArduinoDmx3.set_control_pin( 10 );


View of PCB for Arduino UNO (from top):

PCB Arduino ONE universe dmx shield

PCB Arduino ONE universe dmx shield

For this PCB design we need to use these call before initialize universe:

ArduinoDmx0.set_control_pin( 11 );


PCB Made with Fritzing:


Download PCB for Mega in PDF format.

Download PCB for UNO in PDF format.


 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
24 Comments  comments 

24 Responses

  1. jeff

    I’m new to arduino and I would like to make this. I don’t know where to start. Is there a getting started I could reference? Is the shield pre-made by anyone that I could purchase and put together?


  2. Toni Merino

    Hi Jeff.
    Currently is not possible to buy the shield until September to October.

    I have updated the post with the design of the PCB, if you don’t have experience in the manufacture of PCB’s, search in google “make pcb” they have a lot of good tutorials.

    The shield is not complicated to assemble.
    Only used a handful of components.

    I hope you will help.
    Best regards.

  3. Mark Turner

    Hi tony,

    I am a final year student at uni, for my project i am creating a dmx lighting console using an arduino. i know you can buy single universe shields for the arduino, but not multi-universe.

    am i right in thinking that this diagram can be created to make a 4 universe shield (missing out the male XLRs you have for input – as i only want it to send data out from the arduino)

    I’m in the early stages of this project, my plans so far is to use an arduino as the serial interface with a dmx shield so that you can plug lights into the system as if it was a standard lightign console on the market. I will create a GUI interface, that will have banks of faders so with the click of a mouse you can drag up aders to control lights along this system. Any ideas would be greatly appriciated 🙂

  4. Peter

    What are the values of C1, c2, c3 and c4?

  5. Wim


    I have seen some other libraries for DMX on Arduino. Some of them have got restrictions on programming. Is it possible to use four universes and a LCD with rotary encoder to control the mega?

    • Toni Merino

      Depends on processor usage you need for your program, and the number of channels per universe.
      Yes, you can run the four universes simultaneously on Arduino mega.

  6. Hess

    What are pins 5 & 8 of the MAX485 connected to? Another commenter mentioned capacitors and it looks like there might be a capacitor in line with pin 8 according to the PCB, but I can’t tell for sure.

    Thank you!

    • Hess

      Also, are the resistors in line between the pins 6 & 7 and the DMX source necessary? I’ve looked at a number of other tutorials and none have specified that. If they are necessary, is 10 ohms the required value or can it be greater?

      Thank you!

      • Toni Merino

        Hi Hess.
        You can remove these resistors. But is recommended to use the ground scheme as this, take into account that this implementation does not provide isolation.


    • Toni Merino

      Hi Hess.
      Pin 8 is connected to +5 VCC, and pin 5 is connected to GND. Is recommended to place a 100 nF capacitor between pin 5 and 8 (close to MAX485)


  7. Hi toni, nic to see you are adding more and more cool hacking around dmx 😉

    we are using your library and schematics for my next project:

    i m facing a led blinking trouble, so maybe you can define what is goind wrong:

    i m using a NANO, as a DMX receiver; without dmx control pin (set to -1)
    and softPWM

    i have a led on one of my outpin pins, wich is blinking from time to time.

    i have seen that by disconnection DMX plug, there was no more blinking.
    do you have any idea on how i can resolve this ?

    here is a link to the thread on the french forum:,160206.45.html

    #include // comment/uncomment #define USE_UARTx in lib_dmx.h as needed
    // This example receive 4 channels from address 1 to 4 and write analog values to PWM pins 2 to 5

    // outputs update in main loop

    // New DMX modes *** EXPERIMENTAL ***
    #define DMX512 (0) // (250 kbaud - 2 to 512 channels) Standard USITT DMX-512
    #define DMX1024 (1) // (500 kbaud - 2 to 1024 channels) Completely non standard - TESTED ok
    #define DMX2048 (2) // (1000 kbaud - 2 to 2048 channels) called by manufacturers DMX1000K, DMX 4x or DMX 1M ???

    #define start_adress (1)
    #define nbre_circuits (12)
    #define dmx_pin_control (-1)

    void setup()

    for (int i=2;i<nbre_circuits;i++)
    pinMode(i, OUTPUT);


    ArduinoDmx0.set_control_pin(dmx_pin_control); // Arduino output pin for MAX485 input/output control (connect to MAX485 pins 2-3)

    ArduinoDmx0.set_rx_address(start_adress); // set rx0 dmx start address

    ArduinoDmx0.set_rx_channels(nbre_circuits); // number of rx channels

    ArduinoDmx0.init_rx(DMX512); // starts universe 0 as rx, NEW Parameter DMX mode

    } //end setup()

    void loop()

    for(int i=2;i<=2+nbre_circuits;i++)

    SoftPWMSet(i, ArduinoDmx0.RxBuffer[start_adress+(i-2)-1]);



    • Toni Merino

      Hi Christoph.
      Some time ago I have attempted to make a 24 channels led dimmer using Arduino and SoftPWM, and always I get strange artifacts and delays.
      I am not totally sure, but appears that USART interrupt (used for DMX) is the cause.
      Finally I have discarded SoftPWM and moved to TLC5940, and works fine (I tested up to 48 channels, 3 ICs) with UNO, NANO and MEGA.
      I have wrote code for make this, also to control each output with 2 DMX channels (like fine pan – tilt in moving heads), in order to get 12 bits PWM resolution allowed by TLC5940.

      I look for the code, and send later.
      If have any problem to get it working, please contact me.

      • hi tony thanks a lot for your code. helas, we had a lot of trouble with TLC: not stable, and being killed somehow very quickly. we were using your design of dimmerino. i will have a look with jacques at the pde file you sended to me , its very nice.
        are you using dimmerino without any trouble ?

        • Toni Merino

          Yes I am using without problems, but there are a small modification (add 2 resistors), I am looking for modified schematic and connections from Arduino to TLC, and post them.

          The code that I send is used with Arduino UNO, there is a dip switch x 10 contacts, 1 to 9 used for DMX address, and 10 for mode (8 or 16 bits, 1 or 2 channels for each output), you can hardcode if not used.

          Due to use of N-Channel mosfets the output is inverted by program. The only undesirable effect due to this, occurs at power-on time, during power of arduino ( < 1 sec.) outputs maybe full active. I use for dimming led strips and have no problems. One question, you are handling electrovalves powered with DC current, and driving via mosfets? If yes, are you using diodes for avoid reverse (inducted) currents during cut off electrovalves?, if not, TLC and mosfets can be damaged, or affect to arduino. (you need these diodes, as used for drive relays, these are inductive loads)



        • Toni Merino

          Dimmerino connector SV1 to arduino UNO
          pin 1 > next TLC board (board pin 9)
          pin 2 > Arduino pin 3
          pin 3 > NC
          pin 4 > +5 VDC
          pin 5 > NC
          pin 6 > Arduino pin 10
          pin 7 > Arduino pin 9
          pin 8 > Arduino pin 13
          pin 9 > Arduino pin 11 in first board, or previous board pin 1
          pin 10 > Arduino GND

          Board modification:

          TLC5940 library configured for 32 channels:

          Dimmerino sketch:

          • whitecat

            hello toni and many many thanks. i will try it next week
            tomorrow i will try to see how to cheat the uart trouble with soft pwm.
            about your library, i presume i can include the if(universe==0) condition inside the timed function in soft pwm?

          • Toni Merino

            tomorrow i will try to see how to cheat the uart trouble with soft pwm.

            Is a bit complicated, generate software PWM signals is time critical, and maybe affected by interrupts.
            I have also tested PWM hardware outputs with mega, and I not get all working correctly.
            The best option is external hardware.

            i presume i can include the if(universe==0) condition inside the timed function in soft pwm?

            Really you don’t need “if(universe==0)” for UNO and NANO due to only have 1 USART, only is necessary for MEGA when using ISR callback.

            Let me know the results.

  8. hello toni, thanks for all your precisions.
    we will go back to the TLC way next week !
    it was quite painfull and fight around it, and i m very happy to have your help

    about the Univers==0 condition i was thinking that it was the conclusion of you packet reading function.
    i will go inside your lib to see how to cheat it from inside the softpwm one.
    maybe by setting the reading data procedure inside soft pwm routine…

    but for sure i dont know internally arduino enough in its physical process to be very performant with this way …

  9. Matt

    Thanks Toni!

    I’m just in the testing phase using an UNO to receive, and I don’t have my stock of capacitors with me. I have a 10uF and 10pF… would either of these work for the bridge 5-8?

  10. hello toni. Jacques has done some more tests, and in fact it seems that all our trouble are coming from the 5vcc alimentation of the TLC, affecting dramatically its reaction.
    is it possible that you show us how you are doing your 5v stabilisation ? wich products are you using or wich way to correct the current ?

    i m testing here also succesfully your lib with the PCA 9685 adafruit’s shield

  11. rrrok

    Hi, how would you implement isolation on one channel?

    • Toni Merino

      Currently I dont have an implementation of shield with DMX isolation.
      If you use a wall power adaptor for arduino, is really needed isolation on DMX output? ,ethernet is isolated due to use of ferrite transformers.
      I you want the node isolated from DMX bus, need to use any of the DMX shield schematic with optocouplers or specialized ICs availables on the web.


Leave a Reply to Toni Merino Cancel reply

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