Superman's Desk Lamp

by mogrinz in Circuits > LEDs

529 Views, 7 Favorites, 0 Comments

Superman's Desk Lamp

preview4.jpg
Superman's Desk Lamp

(Be sure to watch the video to see all the cool animation effects!)

My older daughter and I recently visited a Rock & Gem show near her university. I noticed a vendor selling "selenite rods" (or more accurately "satin spar"). It looked like they would be a good diffuser of light, so we did a quick test with the flashlight on her iPhone. Success! The light scattered inside the crystal and it glowed. I proceeded to purchase 11 of the rods for around $40 and brought them home while thinking about what I could make with them.

The collection of different-sized rods reminded me of the crystalline design of Superman's Fortress of Solitude. The lamp draws inspiration from such a haven, combining the ethereal beauty of satin spar with the vibrant versatility of LEDs. At the base of each crystal is an individual Neopixel. When combined with a microcontroller, we can achieve all sorts of awesome color and lighting effects. Best of all, the selenite diffuses light so well that you can enjoy this sculpture day or night.

Supplies

This project should be very reasonable, cost-wise. I purchased 11 rods for about $40, and the rest of the parts used were less than $20. Of course, some of the items below are only solid in multiples.

  • ESP8266 (such as these, on Amazon) (You can also use an ESP32 if you would prefer)
  • 30AWG wire - or any thin/flexible wire. I used this (Amazon link)
  • For stripping the insulation off very thin wire, I like this tool (Amazon link)
  • Round WS2812 NeoPixels (Amazon link to a 100 pack)
  • Selenite rods: Many sources on Etsy. Here are some on Amazon
  • Optional: Matte spray-on or paint-on polyurethane finish for crystals
  • Optional: Spray-on stone texture, paint for base

You'll also need a USB cable and USB power supply for the lamp. A hot-glue gun is optional to help secure the lights in place. I recommend soldering all connections.

You will need access to some type of CAD software to design the base. I use an individual license to Autodesk Fusion 360. We'll discuss this more in Step 2.

Ready the Rods

IMG_2288.jpg
IMG_2287.jpg
IMG_2286.jpg

Lay out all of your selenite rods, and determine which end will be the top and which will be the bottom in your final sculpture. Take a pencil and number each rod on the bottom. This will not affect the glow, and it will make your life much easier later (trust me).

Take a sheet of paper, and trace the bottom of each rod with a pencil. Next to each outline, write the number of the rod that you traced. You should also measure the length of each rod and note that next to each outline.

Optional: Selenite rods can be very fibrous or flaky. If you wish, you can paint or spray on a coat of clear polyurethane to seal each rod. Personally, I decided to skip this step because once the light is assembled I don't imagine the crystals will be handled much. If you do decide to seal the rods, I would test one first to make sure the polyurethane doesn't add any unwanted tint or color to the crystals.

Oh, You CAD

cad1.png
cad2.png

Since each rod is as distinctive as the superheroes in the Justice League, I can't give you a pre-designed STL file to 3D-print. Plus, how you arrange your crystals will vary depending on how many you have and what you find aesthetically pleasing. This means you will need to design and print your own base. The cool thing is that this means your light will truly be one-of-a-kind.

It's beyond the scope of this Instructable to teach you Fusion 360, and you might have a different CAD program you already know how to use. There are many other Instructables and YouTube videos out there that can get you started with CAD. What I can do to help is outline the steps I took in Fusion, and at each stage include "search tips" and links that you can use to find helpful tutorials related to that activity. This is not complicated CAD work. If CAD is your Kryptonite, fear not—helpful tutorials are your ally, and even a basic design can become a masterpiece.

  1. Import the rod outlines into Fusion 360 as a Canvas (Fusion docs, search: Fusion 360 import image canvas)
  2. Create a sketch on the same plane as the Canvas image (Fusion docs, search: Fusion 360 create sketch)
  3. Using the sketch tools, create a closed outline around the tracing of each rod (search: Fusion 360 trace around canvas)
  4. Finish the sketch and return to the Design editor in Fusion. Now, extrude each outline individually, starting with your first crystal in order through the last. When you extrude a sketch to create an object, Fusion will automatically name it Body 1, Body 2, etc. These numbers should match the number you wrote on the bottom of the particular crystal. The length of the extrusion should be set to the length of the rod you measured earlier. (Fusion docs, search: Fusion 360 extrude sketch)

You now have a set of bodies in Fusion 360 that match your selenite crystals. After we design our base, we are going to use these as cutting tools to make holes in it to hold the selenite rods. We need to make sure the holes are slightly bigger than the rods, so that they will slide in easily. To do this, we're going to want to scale each body in our model to make it just a little bigger.

Repeat this process for each rod: Select the a rod and scale it up by 10% (Fusion docs, search: Fusion 360 scale body)

Arrange the Crystals

cad7.png
cad8.png

Now it's time to arrange the rods. Maybe you want them all arranged vertically, or maybe you want them to appear like a natural crystal (as I have done). It's completely up to you. Use the Fusion 360 Move command (search: Fusion 360 move body) to arrange all of the bodies. Play close attention to make sure the bodies never intersect with one another. If they do, it will be impossible to assemble the crystals in the real world.

Once you are happy with your crystal arrangement, it's time to make the base.

All About That Base

cad9.png
cad4.png
cad5.png
cad3.png
cad6.png
cad11.png
cad10.png
cad12.png
cad13.png

I'm going to give you two options; one is very simple and one is a little more complex:

  • Option 1: Create a simple, rectangular base. To do this, you will need to create a new sketch in Fusion 360, draw a simple rectangle, and extrude it into a block (see sample image). Since you've already drawn the outlines of the crystals and extruded them, you already have the skills to complete this task.
  • Option 2: If you want a more natural, rock-like form, you can use Fusion 360's "Create Form" capability to sculpt something more organic (Fusion docs, search: Fusion 360 sculpt object)

I've included sample renderings of a rectangular base and a sculpted base that I made. Notice in the sample image (with the see-through blue base) that I arranged my crystals so that they don't pass all the way through the base.

Once you have a base designed around the rods, we need to "cut" the holes in it. We'll use Fusion 360's "Split Body" command (Fusion docs, search Fusion 360 split body). Select the base as the "Body to Split" and select all of your crystals as the Splitting Tools (do not check the Extend Splitting Tools box). When the command is complete you can hide all the pieces that have been cut out. You can hide the crystals now too - we don't need them anymore. You will be left with just 1 body visible in Fusion - the base- with the openings for the crystals.

Now we have a solid base with openings for the crystals. We need to slice off a little piece of the bottom to make a cover-plate (to enclose the electronics).

Create an offset plane in Fusion (Fusion docs) about 5-10mm from the bottom of your base, and then use it to split the base in 2 pieces. For illustrative purposes, I've included a sample image of my base with the top half of the cut in green, and the bottom half of the cut in red. Once you've made this cut, hide the bottom object in Fusion (Fusion docs)

Now we need to cut some holes in the top half to mount the NeoPixels in the each opening.

Using Fusion 360's Hole command (Fusion docs) cut a counterbore hole (see image for dimensions) in the center of bottom of each hole. The hole is designed to fit the size of the Neopixel. Make sure the depth of the hole is long enough to pass through the entire body.

There's one last thing we need to do! What you have now is the top part of the base with openings to hold the crystals, and holes to mount the Neopixels. But there isn't any room for the electronics and all the wiring yet.

I'll be brief here because at this point you've already used all of the steps necessary in getting this far. You need to:

  1. Create a sketch on the flat bottom surface of your model (the top half of the base)
  2. Draw some rectangles on the sketch to mark the area(s) you will remove from the top
  3. Extrude them into the base to cut out some openings (see sample image)

Make sure that the area you cut out covers all of the holes you made so that you'll be able to keep all the wiring enclosed.

Now you can un-hide the bottom part of the base you hid earlier. Export both of these objects (Fusion docs) from Fusion 360 to STL files, and you can print them out on a 3D printer. Huzzah! The base is done!

Some Optional Finish Work

stone.jpg

Making the base is probably the hardest part of this Instructable, particularly if you haven't done much CAD work. Once you have 3D-printed the model, it's up to you if you want to do any additional finish work to enhance its appearance. Some people go crazy sanding their prints to reduce visible layer-lines. In my case, since I wanted the base to look like natural stone, I sprayed on some textured paint made by Rustoleum. Once that dried, I sprayed on two additional coats of white. The texture nicely covered any imperfections in the printing process.

Ready the Microcontroller!

WLED1.png
WLED2.png
WLED3.png
WLED4.png
WLED5.png

A few years ago, we would have to write all the code to control the lighting effects ourselves. Today, we have the benefit of great software such as WLED which will take care of all the hard work for us. You can even install it onto the ESP8266 right from your web browser (which is exactly what we're going to do).

Connect your ESP board to your computer over USB, and surf over to https://install.wled.me/ .

Chose a version of the software to install from the dropdown (I used 0.13.3) and click the install button.

After the software finishes installing, you can also configure it to connect to your local wifi network. You will then be given the option to "Visit the Device". Click that link, because we have a few things to configure.

Quick Tip: Make a note of the address of your device in your browser. You may want to bookmark this page so you can visit the device later to select and configure different lighting effects.

On the WLED homepage for your device, there is a Config button at the top of the screen. Click it.

We're going to change a couple of the settings. On the next screen that appears, click the "LED Preferences" button.

In the Hardware section, in the Length field, enter the number of LEDs you are using. Assuming you are lighting each crystal, this is also the same as the number of crystals that you are using.

Then scroll down to the Defaults section and set the default brightness to 255. We want these crystals to really glow!

Save your settings by clicking the Save button at either the top or bottom of this page. You can then disconnect your ESP board and set it aside for the next step.

Neopixel Installation (Part 1)

neopixel.png
neopixel1.png
neopixel2.png
base1.jpg
pre-pigtail.jpg
ESP8266.png

Set aside a separate Neopixel for each selenite crystal. These LEDs are often sold in sheets, so you will need to gently break each one away from its neighbors.

Take a look at the back of each Neopixel. There are 6 solder pads. If you orient yours the same as the picture I have attached to this step, then the top 2 pads are for 5 volts, the bottom 2 pads are for Ground, and the middle 2 pads are for Data. Specifically, the left-middle pad is for "Data In" and the right-middle pad is for "Data Out".

The Data-In and Data-Out pads are how we will chain the Neopixels together, and it's with this data line that the ESP will be able to communicate with each LED individually.

Before we start soldering wire, let's agree on a few wire-color standards that will make life easier down the road:

  • Red will be used for 5V. And we're only going to solder Red to the top-right solder pad.
  • Black will be used for Gnd (Ground) and we're only going to solder Black to the bottom-right solder pad.
  • Green will be used for Data-In, and we'll only solder it to the middle-left pad
  • Yellow will be used for Data-Out and we'll only solder it to the middle-right pad.

Go ahead and solder a short section of wire to your red, black, green, and yellow Neopixels. The length of the wire needed depends a lot on how big you have made your base. I used about 6" and I had a lot of extra wire left over. I could have trimmed it, but honestly it's so thin and flexible I just stuffed it all into the bottom (see photos).

My light uses 11 crystals, so I made 11 of these little guys.

Now it's time to install the Neopixels into the base. For each "crystal holder" in the base, gently thread the wires through the hole and out the back (see picture).

Now connect all of the Black wires together in 1 giant clump, and solder them together so they don't come undone. Also connect a short (2") single black wire to this bundle that we will later use to connect to the ESP board. Follow this same process for the Red wires. Connect them all together, and add a single red wire to connect to the ESP board. When you bundle multiple wires together like this and run off a single wire to connect elsewhere, it's called a pigtail.

You can now solder the Black pigtail wire to the GND connection on the ESP board. Solder the Red pigtail wire to the 5V connection on the ESP board. This step was a lot of work! Grab a quick snack and we'll finish wiring the lights

Neopixel Installation (Part 2)

FU0IZBDLUJTIWZD.png
test3.jpg
test1.jpg
test2.jpg
glue.jpg

It's time to connect all of the Neopixels together. You have 2 remaining wires coming from each one: green and yellow.

Recall that Green is connected to Data In, and Yellow is connected to Data Out. In practical terms, this means that we will always connect a Yellow wire to a Green wire. We will never connect a Green to a Green or a Yellow to a Yellow.

Pick one NeoPixel (it doesn't matter which) to be your starting point. Solder its Green wire to "Arduino Pin 2" of the ESP board you are using. On the board I am using, Arduino Pin 2 is actually labelled D4 on the board itself (see picture). Isn't it nice how manufacturers love to make our lives interesting? When in doubt about which pin on your board is Arduino Pin 2, consult the board's reference diagram.

Note: we are using pin 2 because it's the default setting in the WLED software. You can use another pin # if you want, but you will have to change the WLED settings under Config.

Next, take the Yellow wire coming from the same Neopixel and connect it to the Green wire of the next Neopixel (again, this can be any one you want). Take the Yellow wire from that Neopixel and connect it to the Green of another, and so on until you have connected all the Neopixels together. That last Neopixel will have an unused Yellow wire coming off - you can just snip it. I like to temporarily twist the wires together at this stage, but I'll solder them once I know all the lights are working.

Now the fun part: testing.

Connect a USB cable to the ESP board (and plug it into a USB charger). Gently turn your base over and.. not all the lights are on. Well, that's what happened to me anyway. If one or more lights aren't on then you have to retrace your steps. When you get to the last working light before the first dead one, you should re-check your connections. For me, it took a few tries. In one case one of the wires had untwisted itself. In another, the Neopixel itself was bad and I had to replace it.

When all the lights are operational, you can use a dab of hot glue on the wires to make sure the Neopixels stay snuggly in place. Then you can gently tuck all the wires into the bottom, and glue on the lower part of the base.

Insert the Crystals!

You can insert the crystals without having the lights on, but this step is more fun if they're active.

Once the board is powered up, you can connect to it (using the address from Step 6) and trigger one of the many cool lighting effects available from the WLED software.

Now it's time to gently slide the crystals into their new home. Thank goodness you numbered them all - that's going to be a huge help.

In your Fusion 360 drawing, click on Body 1 (that should be the crystal you numbered as 1). The body will be highlighted in Fusion - this will help you see where the crystal inserts in the base. This basic process (highlight the body/crystal #, then see where it fits) will help you easily install all the crystals. And they will start to glow as soon as you slide them into their openings. What a feeling of power!

Conclusion and Enhancement Ideas

IMG_2278.jpg

Congratulations! You now have a piece of superhero-inspired décor that's sure to spark conversations (and perhaps a bit of envy from your arch-nemesis).

I'm really happy with the glow the Neopixels produce in the crystals. Whether you choose to have them all a solid color or cycle in an animated pattern, I hope you'll enjoy this unique light.

Of course, there are always possible improvements, so I want to leave you with a few ideas to explore:

  • You can make a sound-responsive version of this light by adding a microphone (note: you need to use an ESP32 for this and a later version of the WLED software)
  • If you're comfortable writing more code, you could also program specific crystals to light different colors based on external inputs. For example, maybe a certain crystal blinks red when you have unread emails? Maybe another crystal pulses blue when rain is in the forecast?
  • Buttons could be added to the bottom of each crystal holder so that the corresponding Neopixel turns off when the crystal is pulled out, and turns back on when it's re-inserted.

I'm sure you'll have other great ideas and suggestions. Please share your thoughts and feedback in the comments :)