July 18th, 2021
I love practical effects. I also love my friends. Therefore, I’m excited to show you a new side project I’ve been working on that involves building a practical effect featuring my friends!
In short, this is a 3D printed lantern I designed and built that features interchangeable plastic photo panels, known as “lithophanes,” and a custom RGB LED lighting board that allows you to change the color scheme backlighting the photos to what ever you want.
So, during the pandemic, the world kinda’… well, stopped. Access to friends was limited, so admittedly, it got a bit lonely. However, I had picked up a virtual reality headset earlier in the year and I decided I was going to put it to use playing a social game called “VRChat.” VRChat is basically just a sandbox virtual reality game where you can chose to play as any avatar you want in just about any virtual setting you can image. It’s a fantastic, sureal way to meet new people.
Long story short, I eventually established a robust friend group who I really love being with. Frequently, we visit our friend’s virtual karaoke world to sing songs together (much to the dismay of our neighbors at 3AM). This karaoke world is Japanese themed, and I noticed the little traditional lanterns decorating the level.
In a passing comment, I mentioned that it would be neat to explore lithophanes using a lantern design like this. It didn’t take long after that comment that I started theorizing designs and prototyping to bring my idea to life. I thought to myself, “What if I could create one of these lanterns with interchangeable panels featuring images of my virtual friends? Wouldn’t it be amazing if you could change the color of the lantern to what ever you wanted?” Uh, yeah!
Designing the Lantern Body
I’m not a particularly skilled 3D artist, but I figured that the boxy shape of these lanterns wouldn’t be too difficult to model out. Spoiler: There were a lot of different things to consider about the design other than just the shape.
My tool of choice? Fusion360. As much as I despise Autodesk, there’s simply no contest when it comes to intuitive parametric 3D modeling.
I got to work designing the body and lid. There were a few main considerations for me:
- What is the aspect ratio of the photos I’m going to use for the panels? Answer: 9:16. Therefore, the “frame” of each side of the lantern should be sized appropriately to accommodate a portrait photo.
- How thick will the lithophane panel be? Answer: 3mm. I needed to design a way for the panel to slot-in and friction-fit itself so that it was centered and held-in-place.
- What is the print volume of your 3D printer? Answer: 250 x 210 x 210mm. I needed to keep this in mind so that my 3D printer could actually print the entire body of the lantern and all of its pieces.
- Tolerances. 3D printers are not very accurate when it comes to super close fits, so keeping “wiggle-room” in mind for all of my interference fits was pivotal in making sure the parts fit together properly.
- Aesthetics. These types of lanterns are very pretty when it comes to their proportions and attention to detail. I was fond of the lantern designs that emphasized an even frame size around the panels, so I chose to design my lantern in a similar way.
- How will you light the panels? Answer: Custom lighting board fit to the bottom of the lantern body’s interior.
- How will you power and adjust the lighting board? Answer: Via USB as it’s common and can supply 1-2 Amps of power at 5V, which is what I need. Careful consideration to where buttons and USB ports were going to be laid out was important as type-B USB cables tend to have pretty chunky connectors. Clearances for those parts were definitely thought about in great detail, both for practical and aesthetic purposes. I decided that a USB type-B connector mounted upside down on the bottom of the board facing towards the back of the lantern was best. A notch was designed into the back of the lantern body to accommodate the size of the USB connector. As for color adjustments, I figured a single “setting” button on the bottom of the board would suffice.
- How will light bounce around your enclosure? Answer: That was the most difficult problem to think of theoretically. Bottom-lighting these panels might not work and I may need supplemental lighting or a light-guide to evenly light the panels. I figured a strip near the bottom of each panel paired with a central ring of LEDs would provide enough light to saturate the panels if diffused correctly.
- How will you make the panels interchangeable? Answer: A lid that you can open that features slats that allow the panels to fit snugly inside. The lid will be designed in a way that (mostly) sits flush with the rest of the lantern, preserving the clean, even and proportional aesthetic of the lamp.
I decided to reference lanterns with this type of body as the thin top features of the virtual lantern would be fairly difficult to print due to the large overhangs that would leave lots of visible support material scaring…
Notice the slats along the sides to fit the panels into, the notch in the bottom back side to accommodate the USB socket, the mounting holes for the future PCB, the flush-fitting lid with slats on the inner walls (not seen here), the upside-down pyramid light guide, even the little ledge on the bottom of the base to hold up the lithophane panels. There was a whole lot to consider, and given than this was my first attempt, I’m pretty proud of the result!
Printing the Lantern Body
The design of this lantern makes the printing process relatively straight forward, but very long. The lantern body itself took about 19 hours to print, the lid took another 4 hours, the light-guide another 4 hours still, and each litho panel took about 12-16 hours to print.
Since the lantern body features large overhangs on the bottom section, support material is required, though, due to the boxy, high-surface area shape, supports are really not too much of an issue and are fairly easy to remove. Just be sure to be careful of support material ending up in the screw holes or along the lithophane guide-slats.
Designing the Lighting Controller
Here’s the part I was most looking forward to: the electronics!
There are indeed pre-made products a’plenty out there that would probably get the job done just fine, but where’s the fun in that? Here, we go full custom.
Therefore, I needed to consider my goals once again before I went to work designing this circuit board.
- Dimensions: This was actually premeditated during the design phase of the lantern body. I wanted a circuit board that was under 100 x 100mm, which is around the cut-off point for very cheap PCBs. I also had to consider that the board’s footprint would need to be shaped to the lantern to fit properly.
- LEDs: I wanted addressable RGB LEDs, that way, I could assign a color to every single LED individually. WS2812B’s (AKA, “Neopixels”) worked just fine for this.
- Power: Since I wanted this to run off of USB power, namely, a cellphone charger, I set 5V 1A, or 5 Watts as my power target.
- Heat: 5 Watts isn’t too much heat to deal with, but if it isn’t dissipated correctly, things might get toasty.. melty… burny… I chose to go with a 4-layer PCB to sink away that heat with the extra thermal mass of the inner copper layers. It also made routing easier.
- LED Positioning: Like I mentioned before, I wanted a strip of LEDs on each side plus a ring in the center. Finding an appropriate number of LEDs and spacing them out correctly was another challenge that I needed to consider.
- Microcontroller: So, for something like this, a modern ARM microcontroller paired with a level translator would probably do fine… but uh, as of mid 2021, there is an insane electronics part shortage, so they’re impossible to find. So, I decided that I wanted a 5V microcontroller that was produced in serious volume and is very common. It also had to have enough RAM to handle all of the LEDs I wanted to drive. Hey, the ATMega328p is the same one used in Arduino Unos and is very common! Look, Digikey still has the DIP versions in stock! RAM is a little tight (2K), but we can make it work!
- Programming: I wanted a USB-Serial converter chip so I could program this lighting board directly over USB just like an Arduino. I chose the CH340G, which promptly went out of stock after I designed the board. Oh well, at least I had some spares on hand.
- Light-sensing: This was kind of a last-minute thought, but I figured it might be handy for this lantern to be able to sense ambient light levels so it could turn on when it detects that other lights are on, or vice versa. I added a little photoresistor circuit to the bottom of the board just in case I wanted that feature later.
- Test points for future expansion: Never know when you’re gonna need them! I added test points to allow me to break out the SPI bus and an extra set of test points at the start and end of the LED’s data chain, just in case I needed to add more lights. This is also handy for direct in-circuit debugging if the need arises.
About a week later…
Beautiful! By the way, “Fervid” is my online pseudonym, hence “Fervid’s Lab.” I also play as a virtual tiger, so big cats on the silk-screen!
Let’s get it all put together, programmed up and…
Forgive the camera faceplant. This was just a quick test video and I ran out of hands. But, as you can see, we’ve got a bunch of really pretty, individually programmable lights! Tada!
The order of the LEDs starts at the top right corner (right of the USB socket), and goes clockwise. After the last LED along the sides, the inner ring is addressed starting at the top center going clockwise again.
Creating the Lithophanes
Can you believe that I did all this without testing if I could even make a viable lithophane first? Perhaps that was a poor idea, given how much time and money I’ve put into the project already, but hey, this stuff is exciting.
I’ve never actually attempted to print a lithophane before, so this was going to be an interesting experience.
Simply put, lithopanes are just sheets of 3D printed plastic with photos embedded in them. Dark areas of the photos have thicker plastic, blocking more light, while brighter areas of the photos are thinner, allowing more light to pass through. The result is a remarkably detailed light illusion embedded in a sheet of plastic.
It’s actually not all too difficult to create a lithophane as there are several free websites and programs dedicated to converting your photographs into printable 3D models. My personal favorite is this site: https://lithophanemaker.com/Framed%20Lithophane.html
I feel like these settings worked best for my project. The frames come out perfectly and fit nicely in the lantern. Notice how I’ve rotated my image beforehand. I think this preserves a lot of the detail.
Here was the result:
A panel of the tiger character I play as! I’m always blown away at the level of detail in these lithos. It’s like magic.
After a bit of research, I’ve found that lithophanes print best when they’re printed on their sides, rather than flat on the print bed, which is counterintuitive at first, but makes sense when you consider that the print head moving across your photo would leave unsightly marks if it was flat on your print bed. Therefore, a brim is practically required for your print to stay affixed to the bed while printing. You will also want to make sure that the lithophane’s longer dimension is moving with the print bed (Y-axis) rather than with the print head (X-axis), as you want to reduce the leverage and inertia acting upon the fairly precarious vertical print. PLA is my personal plastic of choice since stringing and warping is minimal.
A layer hight of 0.1mm produces great results. You’ll also want to make sure that your infill is set to 100%.
Here is an example of my Cura slicer settings:
You may want to experiment with your temperatures a bit as I tend to run my PLA a little on the hot side.
A panel sliced and ready for printing. Notice how the panel is on it’s side with a brim and is aligned with the Y-Axis. Send it to the printer and get ready to wait for about 12-16 hours!
After your print is finished, you can remove the brim with a set of needle-nose pliers, a little bit of elbow grease, and a knife to clean up the sides. you want to make sure the brimmed edge is flush to ensure that it fits in the tight-tolerance lantern body slats.
The End Result
Once everything was finally printed out and put together, this was the final result…
…Featuring portraits of lots of my friends in their virtual characters! And, uh oh, looks like one of my LEDs in the center ring died, preventing the others in the chain from lighting up. WS2812’s are sensitive to ESD and heat, so I wonder if I shocked it on accident or if the reflow oven busted it. Oh well, the lantern still looks great and I’ll get that fixed up!
I’m really impressed at how well the lithophanes came out. For example, here’s an original image and the resulting litho…
The ability to change the colors on each panel is super awesome. This was a really fun project with an excellent result for just winging it on a whim. My camera seems to struggle capturing the colors of the lantern as it’s seen in real life, so the colors are much more subtle when viewed in reality.
Still looks amazing though.
…And, the ability to swap lithophane panels is also really cool! Let’s say you’re playing a game of Murder and your friend decides to shoot you in the face for no reason. Well guess what? You can just swap their panel out for a new friend!
Just kidding, Artie. Kind of.
I’m thinking about cleaning up this project and making it open. In its current state, it works pretty well, but isn’t really polished enough for any person to just go out and build one. There’s quite a bit of first-hand knowledge required to get it to run properly, so I’d like to make it a lot easier for others to assemble and program. For now though, I’ll just keep it as a personal project that I thought would be really cool to make and share. Hope you enjoyed learning about the process!