A few weeks ago I received a last minute invite to participate in a PhabLabs Hackathon at Science Centre Delft in the Netherlands. For an enthusiastic hobbyist like me, who can normally spend only a limited amount of time on tinkering, I saw this as a great opportunity to schedule some dedicated time to turn one of my many ideas, within the scope of the Hackathon: Photonics, into an actual project. And with the great facilities in the Makerspace at Science Centre Delft it was just impossible to turn down this invite.
One of the ideas I already had for a while related to photonics was that I wanted to do something with Persistence of Vision (POV). There are already tons of examples available online of how to build a basic POV display using some basic components: microcontroller, old fan/hard disk/motor and one string of leds connected perpendicular to the axis of the rotating device. With a relatively simple setup you can already create an impressive 2 dimensional image, e.g.: https://www.youtube.com/watch?v=QAGnpKz7zvY
Another variation of POV displays connects a string of leds parallel to the axis of the rotating device. This will result in a 3 dimensional cylindrical POV display, e.g.: https://www.instructables.com/id/3D-POV-Clock-fro...
Instead of connecting the string of leds parallel to the axis of the rotating device you can also arc the string of leds. This will result in a spherical (globe) POV display, e.g.: https://www.instructables.com/id/POV-Globe-24bit-... The next level is to build several layers of led strings to create a volumetric 3D display. Here are some examples of such volumetric 3D POV displays which I used as inspiration for this specific project:
As the makers of the examples above provided very useful information, it made a lot of sense to remix parts of their projects. But as a Hackathon is supposed to be challenging, I also decided to build a different type of volumetric 3D POV display. Some of them were using rotors and lots of hot glue to keep the components from flying around. Others created custom PCB’s for their project. After reviewing some of the other 3D POV projects I saw room for some “innovation” or introduce some challenges for myself:
- With no prior experience of creating customised PCB’s and due to the time constraint of the Hackathon I choose to follow a more basic prototype approach. But instead of creating actual rotors I was curious about how such a volumetric 3D POV display would look like when using a cylinder build out of layers of acrylic plastic.
- No use or else minimum use of hot glue to make the device less dangerous
Step 1: Material and Tools Used
For the Motor Controller
- Arduino Pro Micro 5V/16Mhz
- Small Breadboard
- 3144 Hall Effect Switch Sensor
- Magnet with Diameter: 1cm, Height: 3mm
- Toggle Switch - MTS-102
- 10K Potentiometer
- Dupont Jumper Wires
- 16 x M5 Nuts
- LCD display module with blue backlight (HD44780 16×2 Characters)
- 10K Resistor - Pull Up Resistor for the Hall Effect Sensor
- 220Ohm Resistor - For controlling the contrast of the LCD Screen
- Threaded Rod Diameter: 5mm
- Plywood, Thickness: 3mm
For the Platform Base
- Piece of Scrap Wood (250 x 180 x 18 mm)
- Mean Well - 12V 4.2A - Switching Power Supply LRS-50-12
- Power Plug Cable 220V
- DC-DC Wireless Converter - 5V 2A (Transmitter)
- Turnigy D2836/8 1100KV Brushless Outrunner Motor
- Turnigy Plush 30amp Speed Controller W/BEC
- Terminal Blocks Connectors
- 12 x M6 Nuts to secure the platform using the threaded rods with a diameter of 6mm.
- 3 x M2 Bolts (18mm length) for securing the bolt-on adapter to the brushless motor
- 4 x M3 Nuts and Bolts for securing the brushless motor to the piece of scrap wood
- Threaded Rod Diameter: 6mm (4 x length 70 mm)
- Threaded Rod Diameter: 4mm (1 x length 80 mm)
- Plywood, Thickness: 3mm
For the Rotating Casing
- DC-DC Wireless Converter - 5V 2A (Receiver)
- 3D Printed Bolt On Adapter (PLA Filament, White)
- Teensy 3.6
- IC 74AHCT125 Quad Logic Level Converter/Shifter (3V to 5V)
- 10K Resistor - Pull Up Resistor for the Hall Effect Sensor
- 1000uF 16V Capacitor
- Threaded Rod Diameter 4mm
- Magnet with Diameter: 1cm, Height: 3mm
- Plywood, Thickness: 3mm
- Plywood, Thickness: 2mm
- Acrylic Sheet, Thickness: 2mm
- Steel Rod Diameter: 2mm
- Nuts & Bolts
- 0.5 meter ledstrip APA102C 144 leds / meter
- Merlin Laser Cutter M1300 - Laser Cutting Plywood and Acrylic Sheet
- Ultimaker 2+ for 3D Printing the Bolt On Adapter
- Soldering Station and Solder
- Table Drill
- Heat Shrink Tubing
Step 2: Motor Controller Unit to Regulate the Rotation Speed
The Motor Controller Unit sends a signal to the Turnigy Electronic Speed Controller (ESC) which will control the number of rotations provided by the brushless motor.
Additionally I also wanted to be able to display the actual rotations per minute of the POV cylinder. That's why I have decided to include a hall effect sensor and an 16x2 LCD Display to the Motor Controller Unit.
In the attached zip file (MotorControl_Board.zip) you will find three dxf files which will enable you to lasercut one base plate and two top plates for the motor controller unit. Please use plywood with a thickness of 3mm. The two top plates can be placed on top of each other which will allow you to screw in the 16x2 LCD Display.
The two holes in the top plate are meant for one on/off toggle switch and one potentiometer to control the speed of the brushless motor (I haven't wired the on/off toggle switch myself yet). To construct the Motor Controller Unit you need to saw the threaded rod with a diameter of 5mm into 4 pieces of the desired height. Using the 8 M5 nuts you can first fasten the base. Then I attached the small breadboard to the base plate using the two sided adhesive sticker that was provided with the breadboard. The attached schematic shows how you should wire the components so it can work with the source code (MotorControl.ino) attached to this step. I've used a 10K pull up resistor for the hall sensor. An 220 Ohm resistor worked good enough to make the text visible on the LCD screen.
Please make sure that you isolate the pins of the hall effect sensor using heat shrink tubes, just as shown on the pictures. The correct functioning of the hall sensor will rely on a magnet that will be placed in the rotating case at step 3.
Once the wiring is completed you can secure the 2 top plates with the LCD Display, Switch and Potentiometer using again 8 M5 nuts as shown on the pictures.
Pending on the model of your motor used, you might need to adjust the following line of code in the MotorControl.ino file:
throttle = map(averagePotValue, 0, 1020, 710, 900); <br>
This line of code (line 176) maps the position of the 10K potentiometer to the signal for the ESC. The ESC accepts value between 700 and 2000. And as the motor I used for this project started to turn around 823, I limited the RPM's of the motor by limiting the max value to 900.
Step 3: Building the Platform for Wireless Transmitting Power
Nowadays there are basically two ways to power devices which needs to rotate: slip rings or transmitting power wirelessly via induction coils. As high quality slip rings which can support high RPM's tend to be very expensive and more prone to wear and tear I opted for the wireless option using a 5V Wireless DC-DC converter. According to the specifications it should be possible to transfer up to 2 Amps using such a converter.
The Wireless DC-DC converter consists of two components, a transmitter and a receiver. Please be aware that the PCB connected to the transmitting induction coil is smaller than the one receiving.
The platform itself is build using a piece of scrap wood (250 x 180 x 18 mm).
On the platform I screwed on the Mean Well 12V Power Supply. The 12V output is connected to the ESC (see the schematics at Step 1) and the PCB of the transmitting part of the Wireless DC-DC Converter.
In the attached Platform_Files.zip you find the dxf files to lasercut the platform out of plywood with a thickness of 3mm:
- Platform_001.dxf and Platform_002.dxf: You need to place them on each other. This will create a recessed area for the transmitting induction coil.
- Magnet_Holder.dxf: Lasercut this design three times. One of the three times, include the circle. In the other two lasercuts: remove the circle from being cut. After cutting, glue the three pieces together to create a holder for a magnet (diameter 10mm, thickness: 3mm). I used superglue to glue the magnet in the Magnet holder. Please make sure that you glue the correct side of the Magnet to the holder as the hall sensor will only work with one side of the magnet.
- Platform_Sensor_Cover.dxf: This piece will help you to keep the hall sensor attached to the Motor Control Unit in place as shown in the first picture.
- Platform_Drill_Template.dxf: I used this piece as a template for drilling the holes in the piece of scrap wood. The four larger 6 mm holes are for the supporting threaded rods with a diameter of 6mm to support the platform. The 4 smaller holes are for securing the brushless motor to the piece of scrap wood. The largest hole in the middle was required for the axis that sticked out of the brushless motor. As the bolts for the motor and the threaded rods for the platform need to be secured on the bottom of the platform, it is necessary to enlarge those holes for a few mm deep to allow for the nuts to fit in.
Unfortunately the shaft of the brushless motor stuck out of the 'wrong' side for this project. But I was able to reverse the shaft with the help of the following instruction I found on Youtube: https://www.youtube.com/watch?v=4jSix3rUI2E
Once the motor and supporting rods are secured, the platform can be constructed using the lasercut platform pieces. The platform itself can be secured using 8 M6 nuts. The Magnet holder can be glued to the platform at the border as shown in the first picture.
The attached file "Bolt-On Adapter.stl" can be printed using a 3D printer. This adapter is necessary to attach a threaded rod with a diameter of 4mm to the Brushless Motor using 3 x M2 bolts with a length of 18mm.
Step 4: Rotating Casing
The attached Base_Case_Files.zip contains the dxf files to laser cut the 6 layers to construct the case for the components controlling the APA102C led strip.
Layers 1-3 of the Case design are meant to be glued together. But please make sure that a magnet (diameter 10mm, height: 3mm) is put into the circular cutout in Layer 2 before glueing the three layers together. Also make sure that the magnet is glued with the correct pole to the bottom, as the hall effect sensor placed on the platform constructed in Step 3 will only respond to one side of the magnet.
The design of the case contains compartments for the components listed in the attached wiring schematics. The IC 74AHCT125 is required to convert the 3.3V signal from the Teensy to the 5V signal required for the APA102 led strip. Layers 4 and 5 can also be glued together. Top layer 6 can be piled upon the other layers. All layers will remain in the correct position with the help of 3 steel rods with a diameter of 2mm. There are three small holes for the 2mm steel rods surrounding the larger hole for the rotating 4mm threaded rod attached to the brushless motor. Once all components are soldered according the schematic, the complete case can be put on the bolt-on adapter printed in Step 3. Please make sure that any open wires are properly insulated using heat shrink tubes. Please be aware that the correct functioning of the hall sensor of this steps depends on the magnet placed in the magnet holder described at step 3.
The attached proof of concept code 3D_POV_POC.ino will lighten up some leds in red. The sketch results in a square being displayed once the cylinder starts to rotate. But before the rotating starts the leds which are required to simulate a square are turned on by default. This is helpful to test the correct functioning of the leds in the next step.
Step 5: Rotating Cylinder With the Led Strips
The attached Rotor_Cylinder_Files.zip contains the dxf files for cutting a 2mm thick Acrylic Sheet. The resulting 14 discs are necessary to build the transparent cylinder for this POV project. The discs need to be piled upon each other. The design of the cylindric discs allow 12 led strips to be soldered together as one long led strip. Starting from disc one a small led strip containing 6 leds need to be attached to a disc using the adhesive stickers on the led strip. Solder the wires to the led strip first before attaching the led strips to the disc using the adhesive stickers. Else you run the risk that the solder gun will melt the acrylic disc.
Once disc #13 is piled upon the transparent cylinder, the 2mm steel rod used to keep all layers in the correct positions can now also be cut to the right length, aligned to the the top of disc #13 of the cylinder. Disc #14 can then be used to keep the 2mm steel rods in place with the help of two M4 nuts.
Because the amount of time required to construct the whole device, I haven't been able to program more stable visually interesting 3D displays yet within the timeframe of the hackathon. That is also the reason why the provided code for controlling the leds is still very basic to proof the concept, showing only a red square 3 dimensionally for the time being.
Step 6: Lessons Learned
- I ordered a Teensy 3.5 for this project, but the supplier sent me a Teensy 3.6 by mistake. As I was eager to finish the project within the timeframe of the hackathon I decided to move forward with the Teensy 3.6. The reason why I wanted to use the Teensy 3.5 was because of the ports, they are 5V tolerant. This is not the case with the Teensy 3.6. That is also the reason why I had to introduce a bi-directional logic converter to the setup. With a Teensy 3.5 this would not have been required.
- Power Ramp Up issue: When turning on the device there is a power ramp up via the wireless dc-dc charging module to power the Teensy 3.6. Unfortunately the ramp up is too slow for the Teensy 3.6 to startup correctly. As a workaround I currently have to power up the Teensy 3.6 via the micro USB connection and then plug in the 12V Power Supply feeding the wireless dc-dc transmitter. Once the wireless dc-dc receiver is also supplying the power to the Teensy I can unplug the USB cable. People have shared their hack with a MIC803 for the slow power ramp up issue here: https://forum.pjrc.com/threads/44704-Boot-on-Power-Up-Problem-with-three-T3-6s
LCD Screen Module
- Erratic behaviour on external power. The screen works correctly when powered via USB. But when I power the LCD screen via the breadboard using the 5V supplied by the BEC or an independent Power Supply, the text starts to get scrambled after a few seconds after the text is supposed to change. I still need to investigate what is causing this issue.
- In order to test my motor controller unit to measure the actual RPM’s, I let the motor spin with the bolt on adapter, bolt and base case attached to the motor. During one of the initial test runs the screws connecting the motor holder to the motor unscrew themselves due to the vibrations. Luckily I noticed this issue in time so a potential disaster was avoided. I solved this issue by screwing the screws a bit tighter to the motor and also used a few drops of Loctite to secure the screws even more.
- When you export Fusion 360 sketches as dxf files for the laser cutter, supportive lines are exported as regular lines.
Step 7: Potential Improvements
What would I have done differently based on the experience I gained with this project:
- Using a led strip containing at least 7 leds instead of 6 leds per layer for some what nicer textual visualisations
- Buy a different brushless motor where the shaft is already sticking out on the correct (bottom) side of the motor. (e.g.: https://hobbyking.com/de_de/ntm-prop-drive-28-36-1000kv-400w.html) This will save you the trouble of either cutting the shaft or pushing the shaft to the correct side like I had to do now.
- Spending more time on balancing the device to minimize the vibrations, either mechanical or model it in Fusion 360.
I have also been thinking about some potential improvements, which I might look into if time allows:
- Actual making use of the SD card functionality on the Teensy to create longer animations
- Increase density of imaging by using smaller leds (APA102(C) 2020). When I started this project a few weeks ago, led strips containing these small leds (2x2 mm) were not readily available in the market. It is possible to buy them as separate SMD components, but I would only consider this option if you are willing to solder these components on a custom PCB.
- Transfer 3D images wirelessly to the device (Wifi or Bluetooth). This should also make it possible to program the device to visualize sound/music.
- Convert Blender animations to a file format that can be used with the device
- Put all led strips on the base plate and focus the light to the layers of acryl. On each different layer small areas can be engraved to reflect the light when omitted from the leds. The light should be focused to the engraved areas. This should be possible by creating a tunnel guiding the light or using lenses on the leds to focus the light.
- Improving the stability of the 3D Volumetric display and regulation of rotation speed by separating the rotating base from the brushless motor by using gears and a timing belt.
Step 8: Shout Out
I would like to give special thanks to the following persons:
- My fantastic wife and daughters, for their support and understanding.
- Teun Verkerk, for inviting me to the Hackathon
- Nabi Kambiz, Nuriddin Kadouri and Aidan Wyber, for your support, assistance and guidance throughout the Hackaton
- Luuk Meints, an artist and a fellow participant of this Hackaton who was so kind to give me a personal 1 hour introduction speed course to Fusion 360 which allowed me to model all the parts that I needed for this project.