Introduction: Mover3D: the 3D Printed, DMX Controlled, Desktop Moving Light
This is Mover3D. A 3D printed moving light using the industry standard DMX-512 communication protocol for lighting control. Thus, it can plug in to any standard lighting control console, creating the ultimate lighting desk toy.
Mover3D features full RGBW color mixing and 180° of pan and tilt.
This is the MK1 of Mover3D. A larger, better MK2 is in the works, featuring a 14,000 lumen (white only) output with slip rings and stepper motors for 360°+ pan and tilt, but that is quite a way off. For now, here is the MK1.
Step 1: Parts!
This project does require several printed parts, as well as other electronics to make it work. The printed parts are available on my Thingiverse page, here.
Non-Printed parts include:
Step 2: Assembling the DMX Decoding and LED Control Circuitry
While everything is printing, putting together all the electronics is a good way to use the time. The 2 above schematics detail all the main circuitry inside this moving light,. The DMX decoding circuit, and RGBW LED control circuit. There is also the servo splitter board, detailed in the next step.
Step 3: Finished DMX Decoding and LED Control Circuitry
Unlike the schematics suggest, I assembled the power regulator for the RS-485 transceiver on the same board as the transistor array, with the RS-485 chip on its own board. That was due to the blurred out power regulator that I didn't end up using. I would recommend putting everything on 1 board if possible, to reduce the number of wires running around in the case. Either way, the above pictures show how parts ended up looking.
There is an additional board in here which the schematics aren't included for. That's the servo splitter board. This allows both servos to be powered from 1 set of power wires, and for all servo wires to converge on 1 board, greatly decreasing the number of wires crammed into the base. It is simply 4 groups of 3 male headers soldered onto a small piece of perf board. 2 rows are soldered all the way across to make a +5V and GND rail, with the other 2 being split in the middle so each servo receives its own signal.
As a note, I would recommend waiting until after you have inserted the DMX connector into the base before you solder wires to it. If the board it is connected to is smaller than the jack itself, this won't matter as I can be passed through the hole for the DMX jack.
Step 4: LED Wiring
As the last step before assembling the 3D printed parts, the LED needs to be wired up. As seen in the picture, each anode (-) of the LED was soldered to its own wire, and all the cathodes (+) were soldered together. The copious amount of hot glue visible in the picture is strain relief for the wires, although the final model has a pair of slots for a zip tie for this purpose.
Step 5: Head Assembly
The assembly of the head requires the following parts:
3D Printed Parts: Head Top Shell, Head Bottom Shell, LED Barrel, & LED Clamp
Hardware: 1x 608zz Ball Bearing, 8x 25mm M3 Bolts, 8x M3 Hex Nuts, & 1x (Prewired) RGBW LED
First, place the "LED barrel" on the front of the LED, and then place this into the front of the "head bottom shell." Then, using the "LED clamp," 2x 25mm M3 bolts, and 2x M3 hex nuts, secure the LED and barrel into place. Using a zip tie (or other method), secure the LED wires down to the shell.
Next, place 1x 608zz ball bearing into one side of the assembly (it's not particularly important which side). Run the LED cables through the center of the bearing, as it won't be possible after the head is closed.
Finally, attach the "Head Top Shell" using the remaining 6x 25mm M3 bolts & M3 hex nuts.
Step 6: Fork Assembly
The assembly of the fork requires the following parts:
3D Printed Parts: Fork Pin Upper, Fork Pin Lower, Fork, Tilt Servo Hat, Head Securing Pin, & 2x Head Wire Guide
Hardware: 3x M3 Brass Threaded Inserts, 5x 16mm M3 Bolts, 2x M3 Hex Nuts, & 1x Servo
The first part of the fork assembly is assembling the fork pin, which is 2 separate parts. Each half should have 1 M3 brass threaded insert pushed in. Depending on the tolerances of your 3D printer and its printed parts, you may or may not need to use a fair amount of force for this. After both ends have an insert fully pushed in, they need to be bonded together into 1 piece. If printing with ABS, they can be acetone welded together. If using PLA or PETG, super-glue (CA glue) will work.
After the adhesive used to bond the fork pin parts together has cured, it can be inserted into the fork, with the thinner end pointed down. 1 of the 16mm M3 Bolts can then be screwed into the pin to hold it into the fork.
Next, slide 1 of the "Head Wire Guide" parts down onto the side with the cutout for the servo. The other one will be added later. Then, put the servo in slot made for it, securing it with 2x 16mm M3 bolts & hex nuts. Once the servo is secured, the "Tilt Servo Hat" can be pushed onto the motor and secured with an additional 16mm M3 bolt.
Next, slide the head into place over the servo hat. Then, being sure to slide the other "Head Wire Guide" in place first, feed the wires from the head through the hole in the fork. Following this, the remaining M3 brass threaded insert can be pushed into the hole for it, just above the wires. If you like, you can push in the final M3 brass threaded insert before you put the head into place, but it isn't critical that you do so.
This step is likely the most difficult of the entire build. The wiring coming out of the head through the bore of the 608zz bearing must be fed through the "Head Securing Pin", which can be a tight fit if the connectors on the wires are large. It is possible, and feeding them through one at a time makes it much easier. After all the wires have been fed through the head securing pin, it can be secured in place with the final 16mm M3 bolt.
Step 7: Base Assembly
The assembly of the base requires the following parts:
3D Printed Parts: Base & Pan Servo Spur Gear
Hardware: 6x 12mm M3 Bolts, 3x M3 Hex Nuts, 1x Arduino Uno, 1x DMX Connector, & 1x Servo
First, the Arduino needs to be mounted onto the base. It is already quite a tight press fit, and may require that you rotate it to get it into place, as pictured. Once it is in place, it can be secured with 1 of the 12mm M3 bolts and an accompanying hex nut. The DMX jack can then be slid into its slot, and is then secured with 2 more of 12mm M3 bolts & matching nuts. The servo can now be inserted, feeding the wire through the notch in the mount for it before sliding it into place. As the wire does have some thickness, the center mount may flex a bit when the servo is being inserted. After the servo has been pushed all the way into place, it can then be screwed into the mount using 2x 12mm M3 bolts. Lastly, the "pan servo spur gear" can be fitted to the top of the servo, using the final 12mm M3 bolt to secure it.
Now would be a good time to insert all the remaining electronics into the base, and solder wire to the DMX connector. I secured the RS-485, power board, and servo splitter to the base with hot glue, but any form of adhesive will work.
Step 8: Final Assembly!
Almost there! The final step of the assembly requires the following parts:
3D Printed Parts: Fork Pin Retainer & Fork Spur Gear
Hardware: 1x 16mm M3 Bolts, 4x 25mm M3 Bolts, 4x M3 Hex Nuts, 1x 608zz Ball Bearing, and all previous assemblies.
First, the "Fork Spur Gear" should be slid onto the bottom of the fork, and secured in place with some sort adhesive. If printed in ABS, acetone welding is an option, or superglue (CA glue) if you are using another plastic. The 608zz bearing can then be pressed into the lid. If the part is not a tight press fit, some superglue around the edge to hold it in place is required. The lid and bearing can now be slid onto the fork pin, ensuring to put the half-circle slit on the side of the fork where the wires are. Then secure it in place using the "Fork Pin Retainer" and the 16mm M3 Bolt. After connecting the wires through the lid to the base, the two parts can be put together, and held together with the 4x 25mm M3 bolts and hex nuts.
Step 9: Firmware
Before straying into the real firmware, run and upload the test code, available here. This will move both servos from 1 limit to the other, then go through all the LED colors and then color mixing. This will allow you to confirm the pan, tilt, and RGBW controls all work.
This project uses the DMXSerial library created by Matthias Hertel, a helpful library that makes DMX reception (and various other functions) on 16 MHz Atmega powered Arduinos very easy. His page describes many of its other features which I am not fully taking advantage of, and the download for the library is on his Github, available here.
The code is quite simple. Thanks to the DMXSerial library, all the code does is copy the DMX values and paste them into the intensity values for the LED's, and convert them for the servos. That being said, you can do whatever you like with this code, available on my Github here. By default, the DMX addresses for the light are as follows:
Red Intensity: 1
Green Intensity: 2
Blue Intensity: 3
White Intensity: 4
You can change these to whatever you like by adjusting values in the highlighted area. Once you set the addresses you desire, or keep the defaults, upload it to your Arduino, and the build is completed!
Step 10: Finished!
The attached GIF shows the short test code running, and what it should look like if everything is working correctly. If everything works, you can upload the real firmware and plug it into a 5 pin DMX cable and a 12v power adapter. Assuming you've patched everything on your DMX transmitter correctly, the light will move to whatever position you desire and switch to whichever color is selected. Should it not receive DMX, the LED will turn red and both servos will move to center.
What you do with it is up to you, but don't get too over-zealous. This is intended to be a toy or model unit, and doesn't put out a huge amount of light. With that in mind, it does make a very interesting desk toy.
If you make one, please post a make so we can all see it!