top of page

TUTORIAL: LED Cloud Lamp

How to make a changing cloud lamp using an Arduino, addressable LED, buttons, and photoresistor! Using very minimal and basic skills.

So you’ve decided that you want to make a cloud lamp! You’ve come to the right place. In this tutorial I will walk you through all the steps of crafting a cloud lamp, including variations on material, style, and craft.

This project was completed in October 2021 as an assignment for the Physical Computing class at ITP in Brooklyn, New York. The original intent was to design a color-changing lamp that could also play a song to match the mood of the lighting. I hope that this tutorial can be updated one day to include the audio functionality.

Design your cloud shape!

This cloud shape was designed by Tony Li, my classmate at ITP. Use a 3D modeling software to design your cloud shape! My preferred software is Rhino for 3D modeling, but Tony used Cinema 4D. Once you have your cloud shape, we have to talk about how you’re going to make it.

Build the cloud!

This is the most important part of the process. Craft is everything, and without it, all our work would be an arts and crafts project. We 3D printed our cloud in transparent PLA, and had to scale it down to fit the printer bed. Remember that this cloud is also a container - you have to craft it so that it can hold lights and has a bit of transparency so that the lights can glow through. Another idea would be to make perforations in the model that let light pierce through.

  1. Ways to Make It: 3D printing 3D printing is really simple if the machine is well-calibrated. If it’s not, it can be an absolute nightmare. If you have never 3D printed something before, I recommend having an assistant on hand to help you out if things go wrong. It took me 2 weeks and 3 full attempts to print each half of the cloud lamp, not even counting the minute fails, and I used to run the 3D printer lab in architecture school. Plus, on a machine that you’re unfamiliar to, it will take a while to understand its weird little habits. If you already have your 3D model ready, you have to export it as an STL file, and ‘slice’ it in a proprietary software so that the printer can read the file. Ultimakers and Ender models use Cura; Makerbots use Makerbot software; Prusa machines use Prusa 3D. I opted for a quick low-res print at a 0.2mm layer thickness to emphasize the low-res nature of the cloud form. The Makerspace at NYU had transparent filament loaded on just one Ultimaker, so I cycled through that machine several times. TIP: Add more support than you think you need! Supports are designed to be easily removable and they will add time to your overall print, but it’s definitely better than reaching the end of your print and having it fail. I printed my pieces with the interior facing the bed so that support would be added to the interior face of the model, and the exterior would have a nicer finish Note: There are many other ways to 3D print this, including SLA and resin printing, which produce very smooth and clean surfaces that may be optimal for light to pass through. TIP: The more space there is between the exterior shell and the interior container, the more diffused the light will be. Or paint the model in a light speckled coat of paint to diffuse the exterior surface.

  2. Ways to Make It: Vacuform One idea that I had was to take a huge block of wood and craft it into a cloud using power tools. You can do it by hand or with a CNC! This entire cloud has to be split half and placed in a vacuform machine that will heat up a sheet of plastic and cool it to the shape of the form. This is an awesome way to make many cloud models en masse! Note: You cannot mold plastic with a plastic form. If you try to mold a 3D print, the print will melt with the forming plastic.

Assemble the Cloud!


  1. What parts do you need?

  2. The physical cloud model

  3. Addressable LED strip - I used WS2812B lights

  4. Arduino UNO (or Nano)

  5. Breadboard

  6. 5V power supply

  7. Photoresistor

  8. Buttons! (I used 3)

  9. 220 Ohm Resistors

  10. 1000 uf capacitor

  11. How will you attach everything together?

  12. How are you displaying your cloud?

  13. If you’re going to hang it, drill a hole at the top of the cloud to let cables out

  14. If it will sit on a stand, drill a hole at the bottom of the cloud

  15. Stick your LEDs in there

  16. If the cloud will sit on a stand, it’s nice to stick the photoresistor on the top face of the cloud. This will require a small hole to let it come out.

  17. The Breadboard Reference these tutorials to get the breadboard straight:

  1. Connect the Arduino to ground and have your power source ready (either through the port or the power pin)

  2. All components need to be connected to power and ground!

  3. The LEDs need a 5V power source and a 1000 uf capacitor

  4. The output pins send values through ground

  5. Resistors are connected on the ground line

Code the Cloud!

Here are the components for my file:

#include <FastLED.h>

//define how many LEDs you are using on the strip

#define LED_COUNT 15

#define LED_PIN 5

//include this line to link FastLED and the LED count

CRGB leds[LED_COUNT];

  • Write your global variables for the pins, their “read” values, and the light mode

//led reads

int green = 2;

int greenRead;

int red = 3;

int redRead;

int blue = 4;

int blueRead;

int photo = A0;

int photoRead;

int mode =0;

//mode 1 = calm - blue button

//mode 2 = work - green button

//mode 3 = party - red button

  • Set up the pin inputs and outputs

void setup() {

// put your setup code here, to run once:

pinMode(green, INPUT); //green button

pinMode(red, INPUT); //red button

pinMode(blue, INPUT); //blue button

pinMode(photo, INPUT); //photoresistor

pinMode(LED_PIN, OUTPUT); // LED strip

//this line is specific to the LED strip, and can be edited using notes from FastLED

FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, LED_COUNT); //LED strip

}

  • The main event! For every LED, if the light in the room is dim, the lights will turn on. If a button is pressed, then the color mode for the LEDs will change. If the light in the room is high, the lamp will not be lit. The color modes reflected in this sketch are very simple - ‘red,’ ‘green,’ and ‘blue.’ I encourage you to watch the FastLED tutorials to design your own lighting schemes, that’s where the real fun lies!

void loop() {

// put your main code here, to run repeatedly:

//is the light on? photoresistor

photoRead = analogRead(A0);

//print the photoresistor value in the Serial Monitor.

//check the photoresistor values every time you run the sketch in a new place. they're very sensitive and might need to be replaced

Serial.println(photoRead);

//turn on the lamp when it's dark

for(int i=0; i < LED_COUNT; i++){

greenRead = digitalRead(green);

redRead = digitalRead(red);

blueRead = digitalRead(blue);

//this if loop turns the cloud on when the lights in the room go out

//the photoread value will need to change based on the photoresistor you're using

//and the light levels in the room

if(photoRead<600){

//the green, red, and blue buttons change the mode when they are pressed

if(greenRead == HIGH){

mode = 1;

} else if(redRead == HIGH){

mode = 2;

} else if(blueRead == HIGH){

mode = 3;

}

if(mode==1){

//mode 1 leds

leds[i] = CRGB::Green;

FastLED.show();

} else if (mode==2){

//mode 2 lights

leds[i] = CRGB::Red;

FastLED.show();

} else if (mode==3){

//mode 3 lights

leds[i] = CRGB::Blue;

FastLED.show();

}

} else {

leds[i] = CRGB::Black;

FastLED.show();

}

}

}

Here's a link to the code!

11 views1 comment

Recent Posts

See All
bottom of page