Home Arduino projects Arduino based ArtNet-Node for led pixels
formats

Arduino based ArtNet-Node for led pixels

Arduino based art-net node for led pixels and digital led strips with drivers type WS2811, TM1803, TM1804, TM1809, TM1812.

In this post we show you how to build an Art-Net pixel node based on Arduino Mega with direct support for led pixels and digital led strips with drivers type WS2811, TM1803, TM1804, TM1809, TM1812. This node answers to the basic messages of the Art-Net protocol, so that any controller that meets the protocol will be able to detect it and use it.

 

What do we need?

- An Arduino Mega 2560 or Mega 1280 or Arduino UNO, the code has been tested with Arduino Mega 2560 and UNO, should work without problems in 1280.

- An ethernet shield based on Wiznet W5100 (Arduino ethershield)

- Library fast-spi (included in package)

- Library ethernet (included in package)

- Arduino IDE v0023 (The code for the Art-Net node does not work for now with higher versions)

*** Updated 17-12-2012 *** Support for Arduino UNO (1 universe) and Mega (2 universes)
Download code for Arduino based ArtNet Pixel Node v.0.2

Old version 0.1
Download code for Arduino based ArtNet Pixel Node

Installation Instructions:

Copy the folder “Ethernet” included in the package to the folder arduino-0023/libraries/

Copy the folder “FastSPI_LED” included in the package to the folder arduino-0023/libraries/

Copy the folder “pixel_node” to Arduino sketches folder, in my case “Arduino”

Now we can open the sketch of the “pixel_node”, compile the code and upload to Arduino.

Download code for WS2801 Pixel node (1 universe)

 

In order to avoid random flickering, and problems in first pixels you need:

For types TM18xx and WS2811:
- Use shielded audio cable or shielded data cable for connections between node and pixels. (central wire for DATA, shield to GND)
- Maybe necessary put a resistor (between 10 Ohm to 50 Ohm) in series into DATA line (close to controller)

For type WS2801:
- Put two 150 Ohm resistors, one between GND and data pin, and other between GND and clock pin.
- Use at least twin shielded audio cable for connections between node and pixels. (one of central wire for DATA and other for CLK, shields to GND)

Twin shielded audio cable

 

To test the performance I have used the software “MADRIX”

Configure your computer with the IP 2.0.0.1, subnet-mask 255.0.0.0, gateway 2.0.0.1

Arduino data output is pin 4 by default, connect to data input on led pixels or digital led strips.

 

I hope to share your experiences in the Blog.

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

147 Responses

  1. Toni Merino

    Hi all.
    For those users that needs an Art-Net pixel controller at affordable price.

    We have in test phase our new Pixel controller II, this controller handles up to 12 Art-Net universes (2040 RGB pixels), running at 25-30 FPS, price are in the range of 25 Euros by universe (for unboxed version, only board + power supply).

    Supported drivers:
    WS2801
    WS2811
    TM1804
    TM1809
    TM1812
    UCS1903
    Coming soon support for LPD8803, LPD8806

    Deskontrol Art-Net Pixel Controller II

    Deskontrol Art-Net Pixel Controller II

    Available for orders at end of April 2013.

    • In for two! If you need testers or early adopters, we are a full service live event production house, we can put these cards to the test. (proplus.squarespace.com)

      p.s. If your still basing the LED compatibility on FastLED, TM1803 is not supported by that code. Even though it states it does, if you read farther down in the conversations TM1803 never actually got supported. I don’t know if that has been fixed in the FastLED_2 code that recently was released.

    • Matt

      This looks perfect for a project I am working on now! You say the price is 25 euros by universe. Does that mean 25 euros per universe, so 10 universe controller would be 250 euros?

    • matthew

      Hello Toni..
      I am interested in the new pixel node seen here….
      will you write me at phee.lighting@gmail.com when you get a chance

    • I am very excited about this project you are doing with your new Pixel controller II.

      Any possibility I could buy a “beta” model from you now?
      I have a large event towards the end of May involving a lot of pixel mapping and
      I’m mostly wanting to test a couple things on my end before committing to this route. I realize it could be buggy. But It would help me a lot to have something to build a bit of a proof of concept for the client. I would be glad to assist in any testing if the would be beneficial to you.

      Thanks for considering…

      Dave

    • wayna

      Hello!

      Are those already available? i wasn’t able to find them in the products shop..
      Also i have another question about it, will it work with programs which uses artnet in broadcast mode?

      • Toni Merino

        Hi.
        We expect that is available for order this week.

        You can use ONE single board directly in broadcast mode.

        Max support per board:
        With drivers WS2801, LPD8803, LPD8806 – up to 12 universes, 50 FPS (2040 RGB pixels)
        With drivers TM1809, TM1812, WS2811, UCS1903 – up to 6 universes, 30 FPS (1020 RGB pixels)

        If you need to use bigger quantity of pixels, we are working on a new model designed to work in broadcast / unicast, available in August 2013, or use our Art-Net proxy to convert to unicast.
        In unicast mode there is no limit of boards connected.

        EDITED 28-05-2013
        Full support is expected in Madmapper version 1.5

        Regards.

        • wayna

          Okay thanks!

          6 Universes will be okay for now, waiting for it to be available to order.

          Thank you for the great work

  2. Toni, I’d like to extend a personal thanks for this project as it’s working excellently. Now for to find Madrix or comparable that is within our budget. Here is the album with the steps we took on the build with due credit given in the album title: https://www.facebook.com/media/set/?set=a.10151311896597484.1073741825.284869387483&type=3

  3. Roz

    Hello,
    I also am interested in the art-net pixel node you have in the works..
    please email me when you have any ready for sale

  4. vincedub

    hi many thanks for your work

    i try to fix probleme on a led matrix 15*15 based on w2801 led strip

    i use your code(with adafruit library because the news update dont work for me even i change the pin to 11 and 12), 2 arduino mega one by universe with madrix no probleme it s work fine , but i need too work with other plateform like arkaos mediamaster and his ledmapper. but arkaos mediamaster broacast arnet: the first universe work fine but the secons on a second arduino freeze and don t work .

    do you have a idea ? or a way to solve my problem?

    excuse my english is not good.

    regards

    vince

    • Toni Merino

      Hi
      I have wrote a small windows application to convert Art-Net multicast / broadcast to unicast.

      This involves the use of a dedicated windows XP machine with 2 ethernet adapters, to act as a “proxy”.
      One ethernet adapter receive Art-Net broadcast from controller, and the other ethernet adapter outputs in unicast to IP adress configured for each universe.

      They need more work to be faster, but is usable for small number of universes.

      I will post them tonight.
      Regards

      • Janson

        Hi,

        OLA (Open Linux Light Architecture) could work as well. I didn’t test this configuration yet, but it allows re-patching of universes and runs on small Hardware. I used it as Artnet–>DMX (Enttec) converter on Raspberry PI

  5. Andreas

    I tried to upload this pde to my arduino ethernet and i get some errors:

    In file included from /Users/andy/Documents/Arduino/libraries/Ethernet/Ethernet.h:6,
    from pixel_node.pde:36:
    /Users/andy/Documents/Arduino/libraries/Ethernet/Client.h:3:23: error: WProgram.h: No such file or directory
    In file included from /Users/andy/Documents/Arduino/libraries/Ethernet/Ethernet.h:6,
    from pixel_node.pde:36:
    /Users/andy/Documents/Arduino/libraries/Ethernet/Client.h:15: error: conflicting return type specified for ‘virtual void Client::write(uint8_t)’
    /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error: overriding ‘virtual size_t Print::write(uint8_t)’
    /Users/andy/Documents/Arduino/libraries/Ethernet/Client.h:17: error: conflicting return type specified for ‘virtual void Client::write(const uint8_t*, size_t)’
    /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:53: error: overriding ‘virtual size_t Print::write(const uint8_t*, size_t)’
    In file included from /Users/andy/Documents/Arduino/libraries/Ethernet/Ethernet.h:7,
    from pixel_node.pde:36:
    /Users/andy/Documents/Arduino/libraries/Ethernet/Server.h:17: error: conflicting return type specified for ‘virtual void Server::write(uint8_t)’
    /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error: overriding ‘virtual size_t Print::write(uint8_t)’
    /Users/andy/Documents/Arduino/libraries/Ethernet/Server.h:19: error: conflicting return type specified for ‘virtual void Server::write(const uint8_t*, size_t)’
    /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:53: error: overriding ‘virtual size_t Print::write(const uint8_t*, size_t)’
    pixel_node.pde: In function ‘void setup()’:
    pixel_node:104: error: ‘Udp’ was not declared in this scope

    As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetUdp.

    pixel_node.pde: In function ‘void loop()’:
    pixel_node:119: error: ‘Udp’ was not declared in this scope

    As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetUdp.

    pixel_node.pde: In function ‘void handle_packet()’:
    pixel_node:125: error: ‘Udp’ was not declared in this scope

    As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetUdp.

    pixel_node.pde: In function ‘void send_reply(uint8_t, uint8_t*, uint16_t)’:
    pixel_node:245: error: ‘Udp’ was not declared in this scope

    As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetUdp.

    pixel_node:249: error: ‘Udp’ was not declared in this scope

    As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetUdp.

    Maybe you could help me?

  6. kouga001

    hi Toni,

    thanks for your efforts, we are just at the beginning of our project, which consist of 1920 LEDs (a 60*32 LED-Matrix based on WS2811), this is a really big engineering so everything need to be considered before taking action :(

    according to your post, here we need altogether 6 arduino mega, each controls 320 LEDs. but I’m still not very clear, in what a direction are these LEDs physically arranged and connect to arduinos? or how to configure each arduino about the portion of the video frame it should display?

    is it already defined in your code for the Art-Net node? I’ve only come up with two possible plan, which could be a way out for our project:

    pattern A: http://i.imgur.com/12PRE4W.png
    pattern B: http://i.imgur.com/Fqel5bz.png

    am I able to setup the arduino so that even one of the two ways properly works? or should I take another wiring? thanks for any hints and suggestions!

  7. kouga001

    Hi Toni,

    now I’m back with a small prototype (a 8 * 6 Matrix, WS2811 with integrated 5050-SMD-LEDs): http://i.imgur.com/PRJCxIl.jpg

    in this photo above I’ve only 1 Arduino connected, but actually are 2 Arduinos arranged in this way (each Arduino controls 2 Universe): http://i.imgur.com/45bif0F.png

    in the light of your post I have successfully configured different IP and MAC address for each Arduino and correspondingly in Madrix these new Art-Net interfaces set: http://i.imgur.com/zcGYBEc.png

    and with help of Patch Editor also the LEDs arranged: http://i.imgur.com/BFRYIdD.png

    my problem here is that I can only see the Output of 1 Universe on each Arduino :(

    before compilation I’ve changed the code:


    #define PIN 4 // Arduino output pin to data input on pixels or digital led strips

    to


    #define PIN 11 // Arduino output pin to data input on pixels or digital led strips
    #define PIN 12

    result is that only 1 Universe per Arduino works, the other seems get no signal at all

    is there anything wrong or should I make more modify with the code?

    • Toni Merino

      Hi, sorry for the delay in response.
      - You need make a patch with more than 170 pixels in order to get data in second universe.
      - For test purposes you can configure Madrix for get a copy of universe 1 in all universes, in device manager window (F4), select left tab (“Dmx devices”) and set all universes to #1.
      - Output of 2 universes in each Arduino is done in the same pin, not in separate pins.
      - Due to Madrix uses round number of channels in each universe (510 channels for 170 pixels) small modification is needed on Arduino code for discard the 2 unused channels, if not, you get second universe shifted 2 channels.

      I send the modification as soon as posible.
      Regards.

  8. kouga001

    hi, thanks for your reply,

    these days we have fast fallen into a blind alley, struggling with those modification in the code that I have send to you, it seems just like a misunderstanding with the idea from your original intended. force the Arduino to give two outputs of signal in different variable is not yet too difficult, but how to make them reach the correct Universen and Pins like what we want drive us crazy Q_Q

    now is everything clear, the idea to make the first Universe filled up and “push” the Art-Net paket automatically to second Universe looks better, and … the Madrix is really very powerful, we need to make more practice with it T_T

    so, just wait for your good news ^_^

    yours respectfully

  9. [...] a central location. I made an Arduino Art-Net Node to accomplish this task.  Toni Merino’s code at  www.deskontrol.net is the foundation of my code.  I updated it though to work with Arduino [...]

  10. Got back into playing with this at work. Thought I’d follow up on the RGB ordering, is their somewhere in the code I can change it to GRB?? Thanks

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">