I had already made a different type of DMX tester based on Arduino Mega for checking problems with DMX splitter/buffer boxes but it just pushed out random values on one universe and read back on another universe (via the splitter box) to compare they were the same but the problem was I had no way of setting specific channels to specific values as the entire Serial system was hijacked by the DMX library.
So here is a simple little project for a DMX testing device that was born out of the need to test DMX equipment after its repair without the need of dragging out a DMX desk to do so.
It is a very simple circuit as to keep size/cost down I have not included isolation like you really should with DMX. The most expensive component used is the Amphenol 5 pin XLR (over 50% of total cost).
It uses the Leonardo Pro Micro as it has native support for USB and also has a UART serial so I could easily use an off the shelf DMX library and still have Serial to/from a connected PC.
The software I wrote is a quick and dirty job but seems to work okay. It basically reads lines of serial typed by the user through the serial monitor in a syntax reminiscent of etc connect's RFU we use.
A line like 'c1-25@50' will set all channels in the range 1-25 to a level of 50
A line like 'c1,100,200-250@50' will set channel 1, channel 100 and channels 200-250 to a level of 50
There are a few other commands to set all channels to full 'f', all channels to zero 'z', all channels to a random level 'r'.
'h' will list a simple syntax help and 'd' will dump the DMX universe values to the Serial monitor.
In the future I might expand the software so you can switch it to a DMX slave mode and use it to check a DMX master device is sending what your expecting.
£0.05 MAX485 DIP-8 RS-485/RS-422 Transceiver
£2.88 Leonardo Pro Micro ATmega32U4
£4.62 Amphenol AC5FDZ XLR socket, 5pin panel
£0.87 9746mm of 3D printer filament
Stripboard, resistors & hookup wire.
Very nicely packaged device. I have been looking for a DMX solution for an Arduino project, but never found anything cheap enough.
Perhaps you can turn it into a general-purpose DMX interface for the Arduino. I mean that this device is made to talk to another Arduino.
Your interface would need to do things like sent all the DMX channel data to the 2nd Arduino when requested. Or perhaps accept a command to just provide a sub-set. S10-20 (i.e. Send channels 10 through 20
As a send-unit, continuously send the DMX data, and accept commands like C2,155 (Channel to value of 155). by the way, I would not do a "full on" for every channel at once.
In regards to your existing command to bring all channels to full; perhaps provide a variation to bring them to full more gradually. Perhaps do them in banks of 10 channels at once. So, that channels 1-10 ramp up to full over a 1/2 second, before you bring channels 11-20, etc.
Is there an existing serial DMX device with a text oriented command set? That may be the best approach, as it may make your device compatible with their software.
My own project was to control a motor with a PID type servo system. (i.e. the Arduino controlled a regular DC motor using either a potentiometer feedback, or perhaps a quadrature encoder). There are DMX to RC Servo and DMX to Stepper type devices our there already. But, nothing for DC motor control. I abandoned the DMX aspect of the project because the DMX stuff started to get more complex and/or expensive.
Good point about the setting an entire universe to full but as I only use it to test individual LED/Florescent on the bench it saves me working out the channel(s) to use.
I'm not fully understanding your idea about using this to send channel data to another Arduino.
I don't know if there is a current device using text commands.
With a little code changing this thing could receive DMX and decode/ack upon the data.
In regards to standard, I really am pretty ignorant of them. I know there are several USB based DMX interfaces. But, I don't know the nature of their communication.
In regards to what I mean by sending channel data to another Arduino; I am referring to the idea of your device really only acting as a stand-along DMX interface that is easy to connect to an Arduino. The reason I suspect it is best to keep them separate, is because I have read that DMX is a timing-critical system. So, that while your device is sending or receiving a DMX packet, it cannot be interrupted. So, this can create some problem with other time-critical things.
In my case, I was hoping to do a PID control loop on two different motors that had quadrature encoding. I and was getting concerned that the amount of processing I would need might interfere with the DMX. The quadrature encoders can also be demanding in terms of timing.
I just did a little more research, and I see that prices have come down, or perhaps I did not come across some of the cheaper units when I looked before for a DMX interface to use in my project. So, your own effort to make something like them may not be as beneficial to others.
Also, I just came across the serial commands that EntTec uses for their interface. For your reference. ENTTEC | Designs and manufactures a range of LED lighting & control equipment : ENTTEC So, theoretically, if you code your interface to use the same command set, then any lighting console that talks using EntTec's serial commands should be able to work with your own Arduino-based interface.