How to Build a Cloud Lamp with Sound Reactive Lightning

James Bruce 09-10-2014

A few months back, a $3000 thunder and lightning mood lamp went viral in the maker community. It was a stunningly beautiful light, but the price tag left it out of the reach of anyone with their sanity intact. What we’ll make today isn’t exactly the same – we’re making something more practical, instead of an art piece, but it’s going to be a whole lot cooler and more customizable.


I’ve chosen to omit speakers on the assumption that you probably already have a good pair of speakers in your room which you’d rather use, and frankly putting a speaker in a lamp is kind of weird. Instead, I’ll be adding a microphone that will allow the lightning to react automatically to loud noises – either from an actual thunderstorm, or a soundtrack played from your PC or stereo.

We’re also going to use a strand of full RGB Neopixel LEDs (WS2812B), so we can reproduce colours other than white and have control over every pixel.

Warning: the power supply I’ve used in this project has screw terminals that connect to a live AC wire. If you don’t feel confident wiring a plug, please ensure you buy a fully enclosed power supply. At the very least, you’ll need to enclose the PSU within a secure project box.

Step 0: Introduction

Here’s a demo video of the finished project. I’ve implemented a few different modes so far, from the standard lightning to a trippy acid cloud and a colour fading mood lamp, which can be chosen from the remote control.

The full code and libraries needed are available for download from this Github repository.


Step 1: You Will Need

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp materials

  • WS2812B strand, typically priced at about $50 for 5 metres. Don’t worry if you have another type of Neopixel strand, it’s almost certainly supported by the FastLED interface, but your wiring may be different (you may require a sync line in addition to the signal, for example).
  • 5V, 10A+ power supply – I bought some 15A units for $11 each. They take 120-240V AC input, and produce a hefty 5V output which will be more enough to power all our pixels at full brightness, and the Arduino.
  • Electrical cabling, plug and inline switch
  • Project enclosure
  • Two Arduinos. $10 Funduino clones are fine. The second is necessary for remote control, while the first controls the main logic and LEDs.
  • Two 2.2k (or thereabouts) Ohms resistors – the exact value doesn’t matter so much, around 1.5k up to 47k should work.
  • Breadboard
  • TSOP4838 IR receiver
  • IR remote – I bought in bulk for about $2 each, but any remote should work with code modifications.
  • Large microphone module
  • Scrap MDF wood to cut your base from, and a jigsaw.
  • Polystyrene packing material / box inserts.
  • Polypropylene cotton pillow stuffing. I pulled more than enough from a few horrible old cushions. If thats not an option, you should be able to buy some new for about $10, or use even cheaper cotton wool. I tried with both – the cotton wool needed more work in having to tease it out and wasn’t as fluffy, but in a pinch, it will work.
  • Chain and hooks to hang the cloud – should hold up more than 5kg.
  • Glue gun with low temperature setting
  • Spray glue – easier to stick the stuffing onto your cloud with this, but a glue gun could also work.

The total cost is around $100 not including tools, but most of this I scrounged from around the house. All of the electronics components are commonly available; the microphone can be found in a sensor kit or bought individually.

Step 2: Cut the Base

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp 1 cutting the base

Cut out a rough base from a scrap piece of MDF with a jigsaw – the exact shape is obviously up to you, but for some reason a cloud is kidney-bean shaped in my mind. We’ll be attaching some hooks into this for hanging, but otherwise it just provides a solid base to build on. The central area will be reserved for the electronics, PSU and to hand the chain from, so ensure you have enough space to place at least your project enclosure with some hooks surrounding it. 


Step 3: Layer on Polystyrene

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp 2 layer on polystyrene

This is most difficult and creative step, but we’re really just creating something solid and kinda-sorta cloud-shaped to glue the LED strip onto. Glue large pieces of polystyrene packing on to the base (and under it), using a low heat setting on your glue gun. If you don’t have a low setting, turn off the heat gun and let it cool a little before attempting to glue. If the temperature is too high, you’ll simply melt through the packing material.

Ensure each piece is solid before gluing the next, and it’s best to stick more on than not enough.

Again, remember to leave a large enough cavity inside the cloud to fit the electronics, chain and hooks.


Step 4: Carve a 3D Cloud Shape

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp 3 carving out a cloud

Use a carving knife to neaten up your cloud by rounding off the corners and cutting unnecessary material away, until you’ve achieved a rough 3D cloud shape. It doesn’t really matter how rough this is since we’ll be covering everything in stuffing later – you can easily hide mistakes.

Step 5: Fix Hooks, Tidy Up

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp 4 spray white

Finally, fix three or four hooks to the MDF base, from inside each corner of the cavity of the cloud. You’ll need to drill a small pilot hole as MDF is difficult to screw straight into.


I also gave everything a simple coat of white spray paint to ensure a uniform colour base, but I’m not sure it was actually necessary.

Step 6: Glue LED Strips

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp 5 glue on led strips

Before you begin applying glue to the LEDs, either start from a new strip or count how many LEDs you have in total – you’ll need to work out how many you’ve used later in the programming step. Cut a small hole in the side of your cloud and poke through the wires that make up the beginning of your LED strip into the cloud cavity. Be very careful that you’re starting from the correct end – the LED strips are direction sensitive, so ensure the signal arrows point away from the cavity.

Working slowly, stick the LED pixels to the polystyrene base in a circular pattern, before pulling the strip down to the base to cover the underside. Again – you don’t need to be perfect here, because once we’ve diffused everything and smothered it with stuffing, it all looks rather stunning anyway.

I used a total of 85 LEDs, or just over 2.5m, having encircled the main body twice and used a single string of LEDs on the underside.

Step 7: Wiring Diagram

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp wiring diagram

The wiring is complex, but easily broken down into sections.

First, get the power supply wired in and secured, preferably in a separate project case. I’m not going to lecture you on the safety of live AC wires, so I’m going to assume you can handle this part, and you have a 5V and GND line from it.

IMPORTANT: when programming and testing the Arduino, the 5V from your power supply should remain isolated from the Arduino’s (the GNDs are all connected, though) – it should only be powering the LED strip, while the Arduino uses the 5V supplied over USB. When you’re done programming, the USB should be disconnected, and will no longer provide 5V to the Arduino – at this point, you should connect the 5V from your supply to the 5V rail on the left side of the breadboard.

Start by connecting the ground and 5V pins from each Arduino to the left side rails of the breadboard. They will share the same power source, whether that’s the external PSU we have or USB plugged into one of them.

Next, complete the I2C wiring section – this is what allows our two Arduinos to communicate. Take the A4 pins from both Arduinos onto a single row on the breadboard, then connect a 2.2k resistor from that row to 5V rail. Repeat for A5, connecting them on separate row, with another 2.2k resistor again to 5V.

Connect the IR receiver next – check pin configuration if you have another model, but basically the signal pin should go to D11 on one Arduino. Upload the thundercloud_ir_receiver.ino sketch to this Arduino (all code here), then unplug the USB since we no longer need it.

On the other Arduino, connect the Data In signal pin from the start of your LED strip to D6. The GND from your LEDs should be common with all Arduinos, but at this point the 5V will come directly from the PSU.

Also on this Arduino, plug the microphone module into A0. Upload the other thundercloud.ino sketch, and keep the USB plugged in for now while you debug. Begin by changing the NUM_LEDS variable appropriately.

Step 8: Glue on the Stuffing

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp 7 gluing on stuffing

As a final step, glue on your stuffing. There’s no particular technique here – just spray the cloud with a layer of glue and grab a handful of stuffing on. It’s easier to work with stuffing if you’ve already teased it out to increase the surface area, though.

If you’ve used the same remote as I did, the STROBE button puts it into sound reactive cloud mode; FLASH is the trippy colour mode, and FADE is the slow fading colour mood lamp.

Step 9: Code Explanation

How to Build a Cloud Lamp with Sound Reactive Lightning acid cloud demo

Why two Arduinos? Both the infrared receiver programming and the WS2818B pixel driver library are very sensitive to timing – if the timing is delayed, the IR signal is corrupted. By giving each circuit it’s own micro controller and letting them to talk over the I2C protocol, we can ensure timing is perfect on each. You may also find separate IR modules with their own micro controller built-in, but my research found those actually cost more than a simple Arduino clone and IR LED. The thundercloud_ir_receiever shouldn’t require explanation, though you may want to read up on I2C basics first.

On the main thundercloud controller, we define different operating modes, such as ON (the lightning effects are not sound activated), CLOUD (the lightning is sound activated only), ACID (the cloud shows trippy colours), or simple single colour modes. To define a new mode, add to the enum first, then open up the console and find a remote control button to map it to – each remote press should print a line of debug. In the receiveEvent() method, we map those key presses to a mode, so add an additional switch statement there. Finally, in the main loop() method we route those mode selections to different display functions.

The microphone smoothing code is originally from Adafruit – I simplified it for our needs, and added a trigger when a louder than average noise is heard.

Step 10: Lightning Modes

How to Build a Cloud Lamp with Sound Reactive Lightning cloud lamp demo

The lightning displays combine three different “types” of lightning to achieve something sufficiently realistic, or at least pleasing to the eye. The first type is crack(), where every LED is briefly turned on for between 10-100ms. The second type is rolling() –  where each LED has a 10% chance of activating, and the entire loop is repeated 2-10 times, with a 5-100ms delay between each cycle. The third type is thunderburst(), which picks two different sections of the strip, each between 10-20 LEDs, flashes these sections briefly from 3-6 times. Examine these methods in detail to see how individual LEDs are activated – the HSV colour wheel is used throughout (so white is H=0,S=0,V=255). I’d encourage you to tweak or write new lightning displays, then share them in the comments if you make one you like.

Each time lightning is triggered or the loop is run, the cloud randomly chooses between the three types of lightning. Finally, a reset() method turns off all the lights, otherwise they’ll “remember” their previous state.

Questions or problems – please get in touch in the comments and I’ll do my best to help. If you have a Github account, feel free to post bugs or problems to the issues tracker instead. If you’ve made any modifications or written some new lighting functions, please share a link to your code on Gist or Pastebin.

Related topics: Arduino, Smart Lighting.

Affiliate Disclosure: By buying the products we recommend, you help keep the site alive. Read more.

Whatsapp Pinterest

Leave a Reply

Your email address will not be published. Required fields are marked *

  1. Genevieve
    August 31, 2019 at 3:29 am

    Trying to help my neighbor build one. Her tape has the 4th wire for a sync wire. Where would I land that?

    • James Bruce
      August 31, 2019 at 11:10 am

      Hi Genevieve, very kind of you to help out your neighbour. I believe you might be dealing with an LPD strip, or APA: - details can be found there. You'll need to slightly tweak the code during the setup bit - doesn't really matter which pin you put the clock signal onto, as long as you remember and code it in.

      FastLED.addLeds(leds, NUM_LEDS);

      You should confirm exactly what type of strip it is though to avoid damage.

      Also, we've had a lot of reports of the remote control code being kinda funky. If you're able to modify the code confortably, I'd suggest adding remote web control via an ESP12E based board rather than two Arduinos. Otherwise, ignore and have a go!

  2. Travis
    April 22, 2019 at 8:50 am

    Hey! I was wondering if there was a way to bring down the intensity of the "acid cloud" lighting burst?

    What setting would I need to alter to have it not trigger as often?

    • James Bruce
      April 22, 2019 at 10:18 am

      This is a good opportunity to start playing with random variables in the function and see what happens!

      But anyway, line 220:


      This says each LED has a 10% chance of activating (pick 1-100 random, if greater than 90, do something). So, you could change that to 95, 97 etc to reduce frequency of flashes.

  3. Eyal
    March 19, 2019 at 8:50 pm

    Hey James,

    Thanks you so much for this guide! My cloud turned out beautiful and Im very pleased:)

    But I have a little annoying bug- when the cloud is in "on mode", the lights are not completely white. they sometimes light up in cold white and then a moment later they light in warm yellowish white.
    In the sound reactive mode this is not the case and the cloud is in sound reactive mode- the all the lights are always light up in cold white...
    Do you have any idea why?

    (could it be related to the fact that in the solid color mode the lights have a tiny bit of flickring as well?)

    Thanks a lot!!

    • James Bruce
      April 22, 2019 at 10:16 am

      Very odd. The code should be functionally identical, its just copy pasted without the sound trigger. Is your power supply putting out enough voltage? Perhaps try reducing the string length (just in code, I mean, don't actually cut the number of lights). Put it to half of what you have now and see if the problem still occurs. If not, could be either voltage drop (reinject the + line halfway through) or not enough to start with (bigger PSU needed).

  4. Mark
    February 11, 2019 at 7:12 pm

    Hello James
    hope you still monitor these posts haha. I have built this setup and most everything is working except the remote control. When i test and watch in serial monitor all i get is backward question marks, on every button. I have tried a couple other IRRemote code and it seems to work, but this one has me stumped.

    Hope you have an Idea lol

    • James Bruce
      February 13, 2019 at 5:34 pm

      Hi Mark, that sounds a little like a mismatch between the port speed set in the program and the serial monitor dialog box. Double check those numbers match.

      • Mark
        February 19, 2019 at 7:02 pm

        you sir are correct!!! Thank you

  5. Tyson Dore
    October 15, 2018 at 11:10 pm

    Hey James, this is a great tutorial. I have a question, what If I didn't need the IR component? For instance I'm making my 3 year old son a cloud for Halloween, I just need it to turn on and respond to sound (would be nice but not deal breaker). Could be just the lights. I'm greener than green, so any help would be great, from anyone!

  6. Sean
    October 14, 2018 at 3:55 am

    When I upload the sketch, the LEDs continuously cycle through the 3 thunder variations rather than respond to sound. Firmata test shows that A0 is getting sound through the mic. I've tried adjusting the mic sensitivity, but it doesn't seem to have any effect. Do you have any tips for solving this?

    • Sean
      October 16, 2018 at 12:10 am

      I was able to get audio reactivity by erasing much of the code that samples periods of time and weighs changes in volume against an average. Instead, I made a variable and gave it a threshold value of 120. If n>threshold then trigger. Bingo! This works very well. It reacts and looks like I would imagine it should. I'm now wondering what nuance I might be missing out on that the original code implements. Is there a potential downside to my caveman solution?

  7. Devin
    October 2, 2018 at 7:26 pm

    I have it all working and just need to build the cloud. is there a way to add programming with the remote to dim or brighten the lights??? I am very new at this so a detailed explanation would be needed. Thank you.

  8. Robert Hampton
    August 28, 2018 at 1:13 am

    I have used a variation of your sketch for a bluetooth-enabled cloudlamp and it works magnificently. Am now attempting to modify it for a variant that uses a pushbutton to switch between modes in case switch. The other patterns seem to work fine but constant_lightning is randomly freezing in Thunderburst at (used several Serial.prints to pinpoint the freeze location). Sometimes it happens the first time it hits TB, sometimes it will run a few times. As I said, it works fine in my bluetooth sketch and run it where constant_lighting is called from void loop where it will run for hours at a time. Any suggestions on what might be causing the freeze? I have posted a simplified version of my code I'm using to troubleshoot on Github. Thanks!

  9. Michael
    January 31, 2018 at 10:59 am

    Hi. I can't understand how sound works here? Seems like there is no sound at all. So how sound works here? It just blinks when hear thunder somewhere else? Or it generate thunder sound itself?

    • James Bruce
      January 31, 2018 at 11:00 am

      It reacts to sounds heard through the microphone, yes. The sound is generated elsewhere.

  10. Danny
    December 15, 2017 at 7:24 am

    Hi James,

    Great build!

    just wanted to know, you think one can incorporate a bluetooth enabled speaker and program it to strobe with the music? if so, briefly, can you give an insight into how to go about integrating it, assuming the same circuitry is used as you demonstrated above.

    much appreciated


  11. jarred
    October 5, 2017 at 4:27 pm

    Is it possible to make this portable for a halloween costume? If, so could you briefly recommend your best solution?

  12. Massimo
    September 10, 2017 at 7:22 am

    Hi James, what a wonderful project. I have already built a couple of them. Now I want to tweak it a little bit. The question is: do you think is it possible to use wemos d1 instead of arduino?

    • James Bruce
      September 12, 2017 at 9:23 am

      Yes, if I were to repeat the project today, I would likely use one of the newer NodeMCU or other ESP8266 based boards in order to get Wi-Fi rather than IR remote control. That said, I haven't tried the microphone with them, so I'm not sure of compatibility there. I know the strip lights will work fine.

      • Massimo
        September 18, 2017 at 9:12 am

        Done it! I used a wemos d1 mini. Everything works fine, even the microphone. I've been even able to control it with a smartphone using blynk. And last but not least, since this is a very small cloud I only use 30 leds, the strip is powered directly via wemos 5v gpio.

        • Kris Whitaker
          December 19, 2017 at 12:03 am

          Any chance of the code used with the wemos board being uploaded as that would be very helpful. Cheers

        • Ravil Patel
          August 29, 2018 at 10:05 pm

          Loved it. Could you kindly share your code for use with wemos d1 mini? Also do you know of any idea on how to incorporate built in speaker?

  13. Tony
    August 25, 2017 at 5:09 pm

    Man oh man I hope you will get back to me on my question.

    I have followed the tutorial about a year ago and made a working lamp.
    I noow want to ad an adafruit sound fx board into the mix. I have it setup prepared with a sound clip, however I just want the sound board to ba activated at the same time as the sound reactive mode is activated by the remote. Any simple way to do this?


    • James Bruce
      September 12, 2017 at 9:24 am

      Ahh, I'm afraid I've not played with the Sound FX board ever. I imagine as long as they provide the libraries with a simple "play()" function, you could easily program that in. Might be incompatible because of timings required though, so it'll be a case of trial and error for you I'm afraid. Let us know how it goes!

  14. Jun R
    May 15, 2017 at 3:02 am

    Hello James,

    I have setup my cloud following your steps and I tested each component to make sure there are not any hardware issues. The only problem I am having is getting my IRremote to change the modes. In other words, changing mode CLOUD to FADE for example. To test that my LED strip was working I went to line 20 and changed mode mode CLOUD to FADE and it does indeed work. Since I was curious I used the serial monitor to see where in the loop the functions messes up on. I noticed that the loops does not resume (irrecv.resume(); // Receive the next value). What do you suggest I do?

    Thank you!

    • Ndudde67
      October 10, 2017 at 7:00 pm

      I have now made a post about this issue, if it helps!

  15. Jason R
    April 25, 2017 at 6:27 pm

    Hi James,
    I have setup my cloud as far as I can tell just like yours, however I cannot get the LEDs to respond to the remote. Unfortunately I am new to Arduino and I haven't had much luck figuring out where the issue is. I can see in the monitor that the IR sensor is working and receiving the proper command codes that were described in your code, but the LEDs do not turn on or respond as expected. The only time they flash is briefly when power is first supplied to them or the board is reset. I assume the issue is between the two boards communicating with each other but I am not sure how to test this. Any ideas on how to fix this issue would be appreciated.


    • James Bruce
      April 26, 2017 at 6:43 am

      Hi Jason. Start by checking if the strip is ok, by changing line 20 from

      Mode mode = CLOUD;

      to Mode mode = ON;

      Reupload, and this should go straight to random thundercloud mode when on. Usually it goes to sound reactive mode, so if youre not getting anything from the lights the first time, but you do when changing to ON mode, it means your mic levels are wrong. You'll see a big in the code to debug that. Finally, once you've checked all that is working, watch the codes you get from the IR remote in the debug screen, and make sure the last two digits of each correspond with the mode switch statement.

      • Jason R
        April 26, 2017 at 1:19 pm

        Hi James,
        Thanks for the fast response. I was able to test the strip and the mic (both worked) and both are now working correctly once I re-uploaded your code. Now I seem to be having a problem with the remote ( I bought the one that you linked to in your description), it seems to send "random" codes some of the time (verified via the serial monitor). When I was doing some testing I came across this page ( and when using the page's Decoding IR data code the serial monitor always showed that the code from the remote was as expected and consistent. Could the issue be somewhere in the decoding? If so, do you have any ideas on a fix or a workaround or should I just live with it since eventually the correct code will be sent (at least so this is the case)?

        Thanks for the help,

        • Ndudde67
          October 10, 2017 at 7:01 pm

          I have now made a post about this issue, if it helps!

  16. John Rob
    February 28, 2017 at 3:56 am

    Hey Bruce, I am working on setting up my Remote to my IR sensor. The problem is I am getting hex values such as 0xFF3AC5 which exceeds the hex limit. I am not that experienced with coding so I am not sure how I can fix this issue. I get a large integer implicitly error.

    • Ndudde67
      October 10, 2017 at 7:01 pm

      I have now made a post about this issue, if it helps!

  17. prychol
    January 29, 2017 at 7:16 pm

    Uploading white color already mastered. Could someone suggest how to add to your program an example of a library FastLED, for example. DemoReel100?

  18. prychol
    January 26, 2017 at 10:17 pm

    I would like to apologize in advance for my English, but this is a google translation :)
    The design is great, I was able to run it. I would like to add color white that was the key in, and maybe some other effects that are as examples in the library FastLED. Unfortunately, I do not know how to do it. Could somebody help with this?

    • Jari
      August 8, 2017 at 1:59 pm

      The provided code modifies only hue (H in HSV). To get white you need to modify Saturation to 0.
      Any color with saturation 0 is white (e.g. 0,0,255 or 255,0,255).
      This requires some tweaks in the code but you'll manage :)

  19. PJ Brand
    January 11, 2017 at 8:27 pm

    Hey DIY'ers,

    I am facing problems with my LED strip.
    Using the project file doesn't work for me because the colors are all tripy and I can't get the strip to show one single color.

    However I have checked the remote control with the serial monitor and it delivers the codes I expect. Therefor I will exclude this in my further tries.

    Then I tried the "FirstLight" example. This works perfect with "Blue" color.
    If I choose "Red" it shows green (I could avoid that by changing from RGB to GRB).
    But if I choose "Green" the one running spot is green but other leds light up as well in multiple colors. Same with "White" -> the running spot is white but other leds still light up in different colors.

    Does anybody has faced same issues?
    Any suggests?

    Kind regards

    • PJ Brand
      January 11, 2017 at 10:05 pm

      Ok, now I checked everything with the example "Blink" program. I started at led 150 which is my last led on the strip. CRGB Red, Green, Blue works - then I tried every 10th led (140, 130,...) till 81 every thing works well with this 3 colors.
      At address/led 80 "Green" starts to trigger other random leds as well (different colors), Red and Blue mode still works perfect till address / led 0.

      Lets say I try a different color like yellow, pink, white - doesn't matter which led i choose this will always light up multiple leds on various addresses in my strip.

      Paranormal activity ....

      • James Bruce
        January 12, 2017 at 9:06 am

        So, either a faulty strip, or the library is being weird. Have you tried Adafruit's neopixel library instead of FastLED? That would narrow it down to hardware, I think.

        • PJ Brand
          January 12, 2017 at 9:01 pm

          Hey James,

          thanks for your help.
          Since I couldn't get the neopixel lib to run, I tried it again with the actual FastLED 3.1.3 and guess what - it is running perfectly.

          Ok one Led has a defect blue part but the rest is fine :)

          I really appreciate your work here and how you still keep up with the people facing problems during the build.

          kind regards


  20. Ali
    January 4, 2017 at 10:23 pm

    Hi James, what kind of cable do you use?

  21. Nathan
    January 3, 2017 at 10:57 am

    Hello James,
    Thank you very much with this project! But I wanna ask why if i use num_leds 90 the lightning color was red but if i use num_leds 10 the color was fine (white color). I also make a code for single white color; if 90 leds there was red but if i use 10 leds it was perfect white color. I want to use 90 leds :( any suggestion James? Thanks

    • James Bruce
      January 5, 2017 at 8:34 am

      That's very strange - are you supplying enough voltage? And that voltage is coming externally, not from the Arduino?

  22. Grant
    January 2, 2017 at 12:01 pm

    Hi, can i use neopixel library instead of fastled? if so, do I have to modify all the code?
    Thank you.

    • James Bruce
      January 2, 2017 at 1:22 pm

      Hmm, I can't remember why I didn't use the Adafruit library, but I do remember there was a good reason! You would need to modify the code, and to be honest the FastLED is faster, better, and worth learning.

  23. Sean Girvan
    December 20, 2016 at 4:34 am

    Hey everyone,

    This is my first time using Arduino, I've got all the wiring set up correctly, but when I'm uploading the programming for the "thundercloud" I get this error below, I'm really hoping this is some dumb new guy thing I missed that can be sorted out.

    Arduino: 1.6.13 (Windows 10), Board: "Arduino/Genuino Uno"

    In file included from C:\Users\SEANGI~1\AppData\Local\Temp\arduino_modified_sketch_224263\sketch_dec19e.ino:1:0:

    C:\Program Files (x86)\Arduino\libraries\FastLED/chipsets.h:266:12: error: missing binary operator before token "("

    #if NO_TIME(500, 1500, 500)


    C:\Program Files (x86)\Arduino\libraries\FastLED/chipsets.h:273:12: error: missing binary operator before token "("

    #if NO_TIME(350, 350, 550)


    C:\Program Files (x86)\Arduino\libraries\FastLED/chipsets.h:280:12: error: missing binary operator before token "("

    #if NO_TIME(400, 400, 450)


    C:\Program Files (x86)\Arduino\libraries\FastLED/chipsets.h:287:12: error: missing binary operator before token "("

    #if NO_TIME(800, 800, 900)


    C:\Program Files (x86)\Arduino\libraries\FastLED/chipsets.h:294:12: error: missing binary operator before token "("

    #if NO_TIME(750, 750, 750)


    exit status 1
    Error compiling for board Arduino/Genuino Uno.

  24. Do it all
    December 20, 2016 at 12:31 am

    Inherited the cloud project from son. What do I need to do to get the sketch to load and run. Never used Arduino before.

  25. Joe
    December 15, 2016 at 3:20 am

    Hi there! I'm having a problem with my cloud. After completing the wiring and uploading the codes, I can't get anything but multicolor on my LED's. The patterns are correct, the sound reactivity works... I just can't figure out how to get just white...what am I doing wrong?

    • Joe
      December 15, 2016 at 3:48 am

      BTW, I changed all the values to 0,0,255 and am still getting this result.

      Thank you.

    • James Bruce
      December 15, 2016 at 10:51 am

      That's the oddest problem I've heard of yet. Are you sure you're using WS2812B strips? I would suggest stripping back all the code and just use some basic FastLED examples to display a single color, then revisiting this. You may have a slightly different strip type, which needs a different definition here:

      FastLED.addLeds(leds, NUM_LEDS);

      It might be WS2811 or just WS2812. This is probably the easiest one to try:

      Moves a white dot along your strip. Be sure to change the pin number and number of LEDs.

      • Joe
        December 15, 2016 at 4:09 pm

        Thank you for getting back to me.

        I purchased 2 sets and both seem to not be giving me a white only:

        They both say ws2812B on them

        The other code that you gave me also does not produce a white LED but multiple LED colors.

        The strips have 5 wires coming out of them. I am using the 3 in the middle, leaving the other + and - disconnected, is that correct?

        Using the IR Controller also does not produce the correct effect either. This is my first time trying out an Arduino Board so perhaps I have something wrong. It truly is a lot of fun playing with tho :)

        Any help would be awesome.

        • shysting
          January 5, 2017 at 10:20 am

          i am running into the exact same problem. if you solve it please Post it

        • joe
          January 5, 2017 at 2:13 pm


          We solved this problem by putting a wire from the gnd of the arduino to the negative on the power supply. Worked immediately after that.

  26. Al Po
    December 4, 2016 at 4:38 am

    not programming related, but I'm a little unsure of how the hooks are fixed in the corners of the MDF base. it looks like the chain is coming up from a single point in the middle. clarify please? thanks!

    • James Bruce
      December 4, 2016 at 8:22 am

      Three hooks in the base in sensible places, which lead then to a single chain.

      • Al Po
        December 4, 2016 at 9:27 pm

        thanks! also, i never saw the point at which the inline switch and plug were added? sorry, I'm entirely new at this.

  27. Kyle D
    November 18, 2016 at 6:37 am

    Are there settings / codes to run the Lightning on a continuous cycle without sound reactivity?

    • James Bruce
      November 18, 2016 at 9:37 am

      Yes, the code includes that. Switch it to mode ON for lightning, or ACID for acid cloud, both without sound activation.

  28. Kyle D
    November 18, 2016 at 6:15 am

    I was wondering if there are settings/codes to operate the LEDs on a countinious cycle without sound activation. Basically to click the light on and have it run through the thunder cycle for as long as I would like, then turn it off

  29. Jay Rechek
    October 31, 2016 at 3:51 pm


    I give you all of the credit for this build and I am very happy that you shared it with all of us. I had a lot of troubleshooting issues early on, but the more I played the more things made sense. When adding the Ox code only add the last 2 digits as those are the only two passed from one Uno to the other. Plus I wanted to eliminate the cord for the power supply. Now I have it battery powered, so I can put it anywhere.
    Thank you very much for providing the instructions, greatly appreciated. Here's a link to my Instagram video:

    Jay R

    • Brian
      November 3, 2016 at 5:24 pm

      Any tips? I'm about to FINALLY start mine and would love comments on the troubleshooting portion.

      • Jay Rechek
        November 3, 2016 at 5:51 pm


        I bought almost exactly the same components and copied the wiring the same as the schematic. Any misplacement of a wire can throw off everything so take the time to make sure it is all connected correctly. Someone brought this point up, but when you are adding the RF codes into the program code only add the last 2 digits after the
        Example: case 0x3f:
        If the mic is triggering consistently (verified by the serial monitor) try to adjust the small screw on the mic.
        It's pretty sweet once finished, good luck.

        Jay R

  30. Jeff Tycz
    September 29, 2016 at 11:22 pm

    If I dont want to use the microphone can I cut this down to 1 board? How will the wiring differ without it?

    • James Bruce
      September 30, 2016 at 7:00 am

      Unfortunately, the timing for the infra-red remote and the strips is very precise, which is why they're on different boards. If there is a way to cut this down to one board, I don't know of it.

  31. Anonymous
    August 23, 2016 at 12:49 pm

    Hi James Bruce,

    as first very very great Work and love it to build.
    With ur Code is all ok and runs Perfect !!!( but makes 2 modes little bit slower by delay)
    I want my Cloud spend a sd musicplayer(WTV020SD) and little a speaker for a own Thundermode with Sound and three sample for the 3 kinds of Thunderlights.
    But i dont knowHi James Bruce , really i can include in ur Code. i am not the best in codeing ^^
    Can u help maybe ?

    best Regards and BIG Thanks


  32. Jakob
    August 12, 2016 at 6:44 pm

    Hi, Thanks for this cool project! I have a problem with the upload of "thundercloud". It says "reset" was not declared in this scope. Any of you guys know what this means?

    • James Bruce
      August 15, 2016 at 5:08 pm

      Are you downloaded the whole code and didn't just copy a little bit? reset() is a function in that file used to black out all the pixels. It might also not be declared if you modified something before it, and caused a different error ...

      • Jakob
        August 15, 2016 at 6:57 pm

        I downloaded and uploaded the code without modifikations. But I just tried reinstalling the arduino software and installing the libraries in your zip. I can now upload the code without any errors, so it must have been my libraries :-) Now I just ran into some problems with the receiver/remote not giving any respons :-( Tried a simpel code instead, same issue, will tried again later. Thanks for your reply :-)

  33. Rob
    July 8, 2016 at 9:12 am

    A complete novice here! Can this be powered by an independent PSU? For both arduinos? If so, what sort and size/power are required? I've only recently discovered those usb chargeable power packs. Could one of these power this setup?

    Many thanks and awesome lamp!

    • thomas
      August 31, 2016 at 5:46 am

      Most powerbank operate on 5V and between 1-2 A. You can mount it, if I haven't overseen anything. If you keep both Arduinos connected on the breadboard as illustrated in the schematic above you are able to power both arduino with the same power supply

  34. mr light
    June 25, 2016 at 3:24 am

    this is the best project I ever build it came up so awesome
    instructions are great . I have modified it with more lighting patterns and more leds and of course bigger size,in addition i have used trinkets pro.
    lamp is in the babys room, everyone is complementing and some asked me to build one for them

    • John
      July 16, 2016 at 4:33 pm

      Do you have the code for the extra lighting modes ?

    • Grissus
      September 14, 2016 at 8:55 pm

      Here is my code for a slight twist to the rolling light sequence. I combined it with the fade lighting sequence to produce a hypnotic pattern. Based off the Acid mode. I find the Acid mode is too intense. lol. Please see code below.

      void acid_fade_rolling(){
      // a simple method where we go through every LED with 1/10 chance
      // of being turned on, up to 10 times, with a random delay between each time
      for(int r=0;r<random(2,10);r++){
      //iterate through every LED
      for(int i=0;i90){
      leds[i] = CHSV( fade_h, 255, 255);
      //dont need reset as we're blacking out other LEDs here
      leds[i] = CHSV(0,0,0);


      if(fade_h >254){
      fade_direction = -1; //reverse once we get to 254
      else if(fade_h < 0){
      fade_direction = 1;

      fade_h += fade_direction;;


      • Ndudde67
        October 10, 2017 at 6:30 pm

        Grissus, in trying to include your code, I found several errors upon compiling. I think you missed a few things when putting your code on here ;)
        The code should read as follows:

        void acid_fade_rolling(){
        // a simple method where we go through every LED with 1/10 chance
        // of being turned on, up to 10 times, with a random delay between each time
        // but with color now being determined by the method used in the Fade code
        // additional mode written by Grissus and edited by Ndudde67
        for(int r=0;r<random(2,10);r++){
        //iterate through every LED
        for(int i=0;i90){
        leds[i] = CHSV( fade_h, 255, 255);
        //dont need reset as we're blacking out other LEDs here
        leds[i] = CHSV(0,0,0);


        if(fade_h >254){
        fade_direction = -1; //reverse once we get to 254
        else if(fade_h < 0){
        fade_direction = 1;

        fade_h += fade_direction;;


        You had the NUM_LEDS variable (i90){" missing.

        For anyone implementing this code, you will also need to change/write the additional supporting code:
        1)In the switch(mode) loop, you need to add the line:
        case ACIDFADE: acid_fade_rolling();reset();break;
        2)You need to define the button being used to engage the ACIDFADE mode, located in the switch(received) section:
        //Quick button
        case 0x17:
        mode = ACIDFADE; break;
        (I have added the comment "Quick button" so that it makes it easier for me to remember how I have mapped the generic remote I bought so that I can label it properly later, but you can leave that one line off)
        3)In the "mode enumeration" section of the code, add ACIDFADE to the list of modes. My code looks like this:

        If you are having issues with the lighting modes, ensure that you have updated the FastLED library and have the NUM_LEDS variable set to the correct total number of lights in all of your LED strips.

      • Ndudde67
        October 10, 2017 at 6:59 pm

        I struggled for a long time with how I was supposed to define the remote buttons in the code, but finally figured it out, and this may help others here, so I figured I'd post the solution.

        1)To find out what codes your remote is sending, you need to have the arduino with thundercloud.ino plugged into your computer, running the Arduino IDE. Make sure that the correct port and board are set in the Tools menu, and then, still in the Tools menu, select 'Serial monitor'. In the lower right-hand corner, select a baud rate of 115200. You should now begin to see a bunch of text saying TRIGGERED and Thunderburst scrolling up your screen. If not, back up and reread this section.
        2)Point your remote at the IR Reciever, and press whatever button you want to map one of the CloudLamp's mode functions to. You should see a different line appear in the Serial Monitor that says something similar to 'Receiving IR hex: 97'. That Hex code is what you need to modify in thundercloud.ino in order to properly map your remote buttons.
        3)Find the section in the code that says:
        void receiveEvent(int bytes) {

        // Here, we set the mode based on the IR signal received. Check the debug log when you press a button on your remote, and
        // add the hex code here (you need 0x prior to each command to indicate it's a hex value)

        Below it, you will see several lines with 'case 0x' etc. This is where you will need to put the 2 character code you found in step 2. It will now look something like this:
        case 0xFD:

        4)That's it! I also put a comment before each button mapping so that I could easily label the generic remote I bought later, so my code ended up looking like this:

        //Red power button
        case 0xFD:
        mode = ON; break;

        //Black skip button
        case 0x7D:
        mode = OFF; break;

        //Red up button
        case 0xD7:
        mode = CLOUD; break;

        Thanks again to James for this wonderful guide!

  35. Adele
    June 3, 2016 at 4:51 pm

    Thanks for your tutorial James,

    I have checked the sketch of thunderstorm.ino, but why in constant lightning mode there's red light in crack/thunderburst? I think it should be just white led

    • Adele
      June 16, 2016 at 5:46 pm

      When I reduce the number of leds to 30 (i used 90 before), there is no more red light and it's perfectly white light. Is it because not suitable of ampere supply or must use Adafruit_Neopixel instead FastLED library?
      (I used high ampere 20A from 10A but was still red)

      My LED Strip size 30 LED / metre and 1.8 A / metre

      Please help me :(

      • Eyal
        March 20, 2019 at 10:41 am

        I have the same problem....did you manage to fix it?

  36. Sound
    May 31, 2016 at 9:53 am

    Where is the button for sound reactive? Here's my button and the effect:
    On = constant lightening (no sound reactiveness)
    Flash = "no effect"
    Smooth = "no effect"
    Strobe = constant trippy lightening
    Fade = fade
    R= constant red
    G= constant green
    B= constant blue

  37. Dre
    May 29, 2016 at 3:28 pm

    Hello James,

    thank you for the tutorial. I am having a hard time testing just the LED lights. I have connected ground and 5V to the breadboard and also added a capacitor since I read online the leds are susceptible to damage. I turn on the powersupply but nothing happens, not sure if I have connected anything wrong.

    this is what I got

    • Merlin Knight
      May 30, 2016 at 6:21 pm

      If the yellow is neg, - or ) vdc it needs to be tied to Common. The one you have it ties to is earth ground.

      • Drops
        May 30, 2016 at 8:07 pm

        Same here, I can't turn on the LED :(
        So the GND LED must connect to GND or V- in power supply?
        I have tried to turn on the LED standalone by connect the DIN LED to D6 Arduino, connect the 5v LED to V+ in power supply, and GND LED to GND or V- in power supply, but nothing happens.
        Is it the wrong wiring system or the LED itself?

        • Merlin Knight
          May 30, 2016 at 11:06 pm

          In the picture the yellow wire is going to earth ground. This is not the neg. The one that say Com is Neg.
          Also remember there is a signal in and signal out on addressable leds.
          They will not work if you are trying to put the communication signal into the leds out.

        • Merlin Knight
          May 30, 2016 at 11:12 pm

          Where the schematic shows GND tie to Com.

      • Dre
        June 27, 2016 at 4:24 pm

        I got it to work but half of the LEDS do not light up

        • SimonFront
          July 4, 2016 at 10:57 am

          Dre, just jumping in here to ask if you changed the number of LED´s in the script?

          The unmodified script only adresses the first 85 LED's, and a standard 5M spool has, what? 150 LED's (or more depending on which density the strand is).

          Change the number to match your strand length/density of LED's...

    • James Bruce
      May 31, 2016 at 6:32 am

      Also, skip the capacitor, it's really not needed. My LEDs never work when I use one!

  38. George
    May 23, 2016 at 4:59 am

    Hi, first thank you for putting this tutorial up and for putting up with all of the questions. I need some guidance. I did all of my wiring, uploaded the two .ino files to their proper Arduino after adding the libraries to each one. They uploaded with no issue. The two lights come on each Arduino and i disconnected the USB power and finished linking the power supply by attaching the last wire. I have rechecked all of my connections three times. I still do not have any lights. I know the lights work because before I put them in the project I used a 5v power supply to check them. This is how I connected the lights to the bread board and Arduino. I sued the three wires that were attached to the plug that allows the lights to be daisy chained and did not do anything with the two wires that have the female socket attached in order to plug directly into a power supply. I changed my IR receiver in case it was bad. I ordered the TSOP 4838 IR receivers by following the link on the parts page. I noticed that on the wiring diagram the IR Receiver referenced is the TSOP 1378. Everything else that I ordered was through the links on the parts page. Am I missing something that I should do to get the remote working. I figured since I got the same remote that the code that was in the .ino file would suffice. Any help will be greatly appreciated.

    • James Bruce
      May 23, 2016 at 6:32 am

      Hi George. You've got a fundamental wiring error if nothing is coming on the lights at all. The remote would be used to switch modes, but it defaults to cloud mode anyway. Check the signal pin is the same as the one defined in the code, and check you're not powering the strip through the Arduino.

      I'd suggest loading just the Adafruit colorswirl example to test the lights with. If that doesn't work, upload a photograph of what you've wired, and copy your full code somewhere so we can have a look. Good luck!

      • George
        May 25, 2016 at 6:03 am

        Thanks for your reply. I am out of town but when I return home. I am sure that the lights are not powered through the Arduino. I set it up like the example so the powe is attached to the side of the breadboard where the outside power is coming in and the 3rd wire for the lights, DIN, is connected to thundercloud.ino Arduino.

        I will check the signal pin and download the Adafruit.



  39. Pascal
    May 19, 2016 at 12:58 pm

    Interesting lamp! But, I have a problem with Strip LED, it's hard to find the 5v Strip LED :(

    Is it possible to use 12v Strip LED?

    If so, what are the changes of your procedures, wiring diagram, or the other materials?


    • James Bruce
      May 19, 2016 at 1:00 pm

      No, 12V ones would be completely different, as they're all the same colour, and not individually controllable. It wouldn't look nearly as good, and would be a complete code rewrite from the ground up. Sorry!

  40. Lady D
    May 4, 2016 at 6:32 am

    I am really interested in doing this project but am uneasy about any type electric wiring. Is there a reasonably priced fully enclosed ready to go lighting systems that can be programmed with the lightening that I could simply insert into my cloud design. Or even a 3 part system that is relatively easy to connect together such as the light is one the motion sensor another and the program part to control the color, speed and frequency.

  41. Brian
    April 27, 2016 at 8:27 pm

    Ordered all the parts today, now the wait game begins!

    • Jazmin
      September 28, 2016 at 3:39 pm

      From where did you order these parts? How much was it? Thanks!

    • Brian
      September 28, 2016 at 3:47 pm

      Parts were Googled, mostly from eBay, Amazon, and AliExpress. Some of the parts do come from China so may take longer...

  42. Adrian
    April 21, 2016 at 9:35 am

    HEY ,

    Thank you for the project. I've made it a bit different using foam spray to shape the cloud.

    It seems like i can't make the light start by sound.... The cloud thunder-strikes no matter if is quiet in the room or someone talking.

    What should i change to make the light start when i talk.? Please help me figure out what needs to be changed.

    PS: My friends are amazed by the cloud :D

    • James Bruce
      April 21, 2016 at 1:52 pm

      Find the bit in the code that says uncomment it if you're having trouble. Check what levels and averages you're seeing on the serial monitor. It's likely the microphone isn't working or wired up right, so it detects either random noise all the time, or 0, and triggers anyway.

      • Adrian
        April 21, 2016 at 2:41 pm

        I checked the serial monitor. I se the modes triggerd... but the problem is they are triggered even if is quiet.
        I've tried to adjust from the screw in the microphone... It seems that I've managed to make it less sensitive. I also moved the microphone outside the box.

        I was wondering what happens if i change the samples? I would like to adjust somehow the triggering moment from the code. Like increase / decrease the average that triggers the thunderstorm.

        Thank you for your time!

        • James Bruce
          April 21, 2016 at 3:08 pm

          It actually runs a basic smoothing algorithm, so it should always trigger at just above "normal" sound level. You could simplify the code if you wanted to just manually specify a level at which to trigger, by changing the bit that says if(n>average) to if(n>whatever), whatever being the level you want to manually specify.

  43. Tyler
    March 29, 2016 at 7:23 pm

    You should just use an IR receiver that has UART (e.g. ), and then you can eliminate the second Arduino and I2C complication. Using the Arduino's UART buffer will let you make the timing as lax as possible. You're also oversampling the audio, which is probably making your timing tougher than it needs to be - reduce the sampling rate and increase the threshold if your timing is still too tight.

  44. Agnieszka
    March 4, 2016 at 8:04 pm

    I have a problem with communication between arduinos. One with IR receives hex codes, but the second one only works with mic (it writes one of three modes in the serial) but it does not put even "Receiving IR hex: " when I push the buttons. I've checked everything multiple times wiring, code, but nothing is working. Any ideas what could cause this?

    • James Bruce
      March 5, 2016 at 9:27 am

      Are you sure the other Arduino is being powered correctly? Other than faulty wiring, there's really no reason this won't work if they're both working over USB when you plug them in, but it's possible you've forgotten to wire power to the one that isn't plugged in over USB.

      • Agnieszka
        March 5, 2016 at 9:42 am

        Thank You for fast reply. I am sure both of arduinos are powered correctly, they are lighting when I plug only one of them info USB. I realy have no idea what can be wrong. But it occured that I have also a problem with ws2812b, it does not light at all! In The serial everything (but the hex codes) looks fine, is it possible I burned them?

        • James Bruce
          March 7, 2016 at 8:34 am

          I think you need to go back to the basics and try every part of the project individually - check out a basic I2C communication tutorial, try the WS2812B / Neopixel test code until you've nailed all of those.

          I've reversed the polarity of neopixels before, and it didnt burn them, so you should be alright, though it's possible you've killed that pin (if not the whole arduino). Again, try the test code, and only turn 1 or 2 or them on. Try a different pin. Make sure you're not trying to power the whole string from the arduino - they must have an external power supply.

        • Agnieszka
          March 8, 2016 at 11:47 am

          I have solved the problem with the pilot (I bought funduino and they have other pins for I2C protocol). Everything is working fine in the serial, but leds do not light at all. I've tried literally everything. I'am stuck.

        • James Bruce
          March 8, 2016 at 11:54 am

          Well, glad to hear you got one bit sorted. Have you managed to get the lights working on other test code, or do they not work with anything? Can you post a picture of how you've wired them and the relevant code lines where you set it up?

        • Agnieszka
          March 8, 2016 at 10:54 pm

          I've solved all my problems! Led strip wasn't working at all, I've tried many different codes and nothing was appening. I cut off the connector from led strip, it seemd to be too easy to disconnect. When I plugged cutted cables directly into beradboard everything is woriking just fine. Thank You very much for your replies and most of all for the great tutorial!

    • Grissus
      September 9, 2016 at 1:35 am

      Hi Agniezka,

      I am having the same problem as you, I can't seemed to get the I2C to work. I am using a funduino uno. You said that you used different pins. what would those be?

      As the wire library says A4 and A5.

      I managed to get everything to work except changing the modes via IR as the two boards are not communicating.

    • Grissus
      September 14, 2016 at 8:46 pm


      I solved my issue with I2C via using wire library.
      There was no need for pull up resistors. 4A to 4A and 5A to 5A seems to work.

      Thank you anyways!! :D

  45. Mathumbo
    February 25, 2016 at 9:53 pm

    Thank you again for the great tutorial!

    Everything worked out very fine so far, I only have one problem: The sound reaction is not sensible enough: The light only triggers, if I blow right into the microphone. I tried to adjust sensibility with the little screw on the mic, but still, it only works if I make a noise right into the mic. Any ideas how to correct it?

    Thank you!

    • James Bruce
      February 26, 2016 at 10:04 am

      Hmm - have you enabled the debug mode and check the console to see what levels are being reported in the code? I commented some lines out, you'll want to re-enable those and see what levels the code is detecting. Is it possible you're using a clap sensor rather than a microphone?

      • Mathumbo
        March 8, 2016 at 5:11 pm

        Dear James, to be honest - I am not so much into programming and debugging the arduino - so I was very happy it almost worked perfectly so far.... So regarding the microphone, i bought a new one:

        Now i have constant flashing... I do not get what the problem is...

        Any ideas??

        Thank you!!

        • john
          July 27, 2016 at 3:14 am

          I had a problem with constant flashing or no flashing you have to adjust the little dial on the mic it took several turns in one direction till one of the lights on the mic turned off then back in the other direction slowly to find the sweet spot

  46. Mathumbo
    February 10, 2016 at 11:18 pm

    Thank you for the great tutorial!

    Do you think I am ok with a 5V power supply, that has only 8A output? Or do I need 10A or more?

    Thank you so much!

    • Mathumbo
      February 11, 2016 at 12:01 am

      Or, I can find a 5V 10A 50W PSU. Is that ok?

      • James
        February 11, 2016 at 8:39 am

        Allow 60mA per LED, so if you only have 8A (8000ma), you can use 130 LEDs max.

  47. Matt
    January 31, 2016 at 12:12 pm

    Hey James,

    I can't find any enclosed 5v 10a PSU's but there are plenty of 12v 10a PSU's. Would this be safe to use for this project?

  48. Nate W
    January 2, 2016 at 10:14 pm

    What if I wanted to make it bigger/add more leds, would I need a bigger psu?

    • James Bruce
      January 3, 2016 at 9:22 am

      Yes. I think the absolute maximum draw is about 60mA per LED, so to use the full 250 LEDs on max brightness white, you'd need 15A supply (75w). Scale appropriately, and note that if you are adding more, you'll need to supply those separately (or re-inject the power if it's on the same supply). With every metre you add, the voltage drops and the colors are a bit off.

  49. Colin Cooper
    December 26, 2015 at 12:43 pm

    Hi, great idea and tutorial, thanks a lot. Bit of a novice at this so perhaps you can help me. On attempting to upload the thundercloud.ino to the board I get the following error:

    In file included from C:\Users\Col\Documents\Arduino\libraries\FastLED/pixeltypes.h:5:0,

    from C:\Users\Col\Documents\Arduino\libraries\FastLED/chipsets.h:4,

    from C:\Users\Col\Documents\Arduino Sketches\thundercloud\thundercloud.ino:1:

    C:\Users\Col\Documents\Arduino\libraries\FastLED/lib8tion.h:2:2: error: #error WTH? led_sysdefs needs to be included first

    #error WTH? led_sysdefs needs to be included first

    Is there any modifications you need to make to the code other than number of LED's? Like I said, i'm a bit of a novice at this so any help appreciated.

    • James Bruce
      December 27, 2015 at 8:52 am

      Looks like the most recent Arduino 1.6.6/1.6.7 introduces this problem:

      Either downgrade to 1.6.5, or try downloading the latest version of the library - the developer says he updated it yesterday.

      • Colin Cooper
        December 27, 2015 at 11:33 pm

        Yes I was in touch with the developer (that's me that started that thread) and it appears that was the problem. I solved it by downgrading to 1.6.5.

        The problem I have now is with the remote. It appears my remote (which looks the same as the one you used) is transmitting random values so I am unable to program the various functions. Is there a workaround for this or is it purely a case of the ability of the remote?

        I have tested it with other remotes and it appears some transmit consistent values whilst others do not. Maybe best to find an old Panasonic remote or other specified by the library just to be sure.

        • Colin Cooper
          December 29, 2015 at 8:20 pm

          ok I've got a Sony remote and I can get the codes from it for the keys. The problem is ( i think) thundercloud.ino only looks at the last two digits and codes i'm getting for the remote all end in "10". I'm guessing the solution would be to get the values in a different format such as raw and use that but that's a bit above my skill level right now but i'm working on it.

        • James Bruce
          December 31, 2015 at 9:18 am

          Ahh,that'll be it, sorry Colin I was in a hurry to get it finished at that point so didn't worry about why it only sent the last two digits. It might have something to do with datatype not being big enough? Perhaps:

          unsigned int received =;

          Mine cloud is still in the box after moving so I can't test, but that might nudge you in the right direction. Let us know if you have any luck!

        • Colin Cooper
          December 31, 2015 at 5:25 pm

          Sorry but i'm a bit of a coding novice. What would I do with that line of code? is it to replace a line in the ir receiver code or in the main code? And what would it do to help?

        • James Bruce
          January 1, 2016 at 10:31 am

          This link explains some modifications needed, but it's beyond me at the moment:

          Basically, we're using I2c to communicate, and it only sends one byte at a time, but the hex codes are longer than one byte... and that's about as far as I've got.

          Easier just to try another remote!

        • Colin Cooper
          January 5, 2016 at 8:35 pm

          Having read a couple of paragraphs of that article i'm inclined to agree!

        • Colin Cooper
          January 7, 2016 at 10:05 pm

          FYI I've gone back to the remote you used and its working ok but has a tendency to send "random" codes which sometimes can operate the wrong function. Also, other remotes can send codes which affect the cloud but its no big deal really. I've also managed to add a bit of variation in colour and brightness to the lightning modes.

          It also wasn't triggering easily enough but that was fixed using the adjustment screw on the mic as described by others.

          Just got the arty bit to do now.

        • Colin Cooper
          January 20, 2016 at 12:01 am
  50. Jeremy Abraham
    December 22, 2015 at 10:13 pm

    Can't get thundercloud ir reciever code to upload keep getting error tkd2 not declared in this scope. Any help would be appreciated. Also when trying to upload thundercloud code I get error message fast led h is missing help please.

    • Alex
      December 22, 2015 at 11:18 pm

      Hi Jeremy, I believe I can answer all of your questions. The ir receiver code requires the IRRemote library, and the thundercloud code requires the FastLED library. Both of the libraries are found as folders by the same names in the same github location as the thundercloud.ino and receiver.ino files. You need to find where you saved the folder containing all of your Arduino info, and copy those folders into the folder marked "Libraries" in your Arduino folder on your computer. Now open thundercloud.ino in Arduino, go to "Sketch", and click on "Include Library". All the way at the bottom should be the two libraries you just added. Click on the FastLED to include that library. You will now notice at the top of your code that there is a whole bunch of stuff marked with #include. Delete all of it except for #include This should now solve your error as well as your missing FastLED error. The process for your receiver error is likely the same thing. Follow all the above steps, except the library to include for this code is the IRRemote library, and the only file you need is #include Hope this helps!

    • Geoff
      December 31, 2015 at 3:47 am

      I was getting the same error. It's a conflict with another library called "RobotIRRemote". Move that folder out of the libraries folder and you should be able to compile without an error.
      Hope this helps,

  51. Jeremy Abraham
    December 22, 2015 at 5:36 pm

    When I try to upload code for the thundercloud.ino as well as thundercloud ir reciever I get exit status 1 error does anyone know how to fix this.

  52. Jeremy Abraham
    December 22, 2015 at 5:21 pm

    When I try to upload ir reciever code I get error message code 1. Not sure how to fix this any help would be greatly appreciated.

  53. Christie
    December 22, 2015 at 8:20 am

    Dear Wayne,

    Here from Taiwan~
    I'm so happy to see this amazing and cute lamp.
    I'm trying to do the same lamp with sound reactive but have some problem can't find the way to solve it.

    Is there any way to make lamp with sound reactive function without really play out the music?
    Because some of people like to listen to the music by using headphone at night before they sleep, because they can't play voice loud in order to prevent bothering other people. in this condition, i thought maybe it's good way to use cell phone to connect to the cloud lamp via WIFI or Bluetooth, which could pass the music signal to lamp instead of play out the voice.

    (Rough concept: People using headphone to listen the music, but lamp still can get the music signal via any connection way, such as WIFI or BT)

    But i think Bluetooth can't work, since cellphone will auto stop play out the music once Bluetooth has connected with any device.

    Is that possible for you to share your suggestion if you have any?
    Thank you so much for your help~~

  54. Alex
    December 21, 2015 at 8:30 pm

    So i wired everything up and coded everything, and using the same remote that you have in the parts list diagram, I hit the "ON" button, and the lights came on no problem in a random lightening display. Here's what I've found for my buttons:

    On = constant lightening (no sound reactiveness)
    Flash = "
    Strobe = constant trippy lightening
    Fade = fade
    R= constant red
    G= constant green
    B= constant blue

    I can't figure out how to get the sound reactiveness to work. Is there something that needs to be added to the code? Other than the sound implementation, everything appears to be working perfectly

    • Alex
      December 21, 2015 at 9:00 pm

      After some debugging, I have found that the microphone is triggering constantly. How do you recommend lowering its sensitivity? Note: I have all the same equipment that you have shown in the directions above.

      • James Bruce
        December 22, 2015 at 9:00 am

        Hi Alex, that definitely shouldnt be happening because it's programmed to take averages of 10 samples and will only trigger if it's above the average. Have you enabled the debug block, which will output levels to the serial console? Look for this line:

        // If you're having trouble getting the cloud to trigger, uncomment this block to output a ton of debug on current averages.

        and uncomment the big block that follows it. I suspext the microphone is faulty or perhaps just on the wrong pin - but lets see the output first.

        • Alex
          December 22, 2015 at 5:52 pm

          Hi James, yes I looked at everything with the debug block, and found that the it's triggering constantly because it's always above the average for some reason. I am using the A0, +, and G pins on the microphone so I don't believe that's the issue. Also, I unplugged the microphone completely from the circuit, and when the whole thing is in CLOUD mode it still somehow triggers. Could there be noise in the circuit itself causing it to trigger?

        • Stuart
          January 18, 2016 at 9:48 pm

          I had a similar issue and found that instead of +5v I was using +3.3v, when I changed to +5v it started to behave better :-)

          Thanks for a great write-up...

        • Stuart
          January 18, 2016 at 9:52 pm

          Meant to say it was the microphone module power supply that was incorrectly wired.

  55. Alex
    December 21, 2015 at 5:43 pm

    Great idea with great instructions. I'm having an issue with the code though for anyone who can help. When I went to upload thundercloud.ino I received the following error:

    Arduino: 1.6.7 (Windows 7), Board: "Arduino/Genuino Uno"

    In file included from C:\Users\Alex\Documents\Arduino\thundercloud\thundercloud.ino:1:0:

    C:\Users\Alex\Documents\Arduino\libraries\FastLED/chipsets.h:266:12: error: missing binary operator before token "("

    #if NO_TIME(500, 1500, 500)


    C:\Users\Alex\Documents\Arduino\libraries\FastLED/chipsets.h:273:12: error: missing binary operator before token "("

    #if NO_TIME(350, 350, 550)


    C:\Users\Alex\Documents\Arduino\libraries\FastLED/chipsets.h:280:12: error: missing binary operator before token "("

    #if NO_TIME(400, 400, 450)


    C:\Users\Alex\Documents\Arduino\libraries\FastLED/chipsets.h:287:12: error: missing binary operator before token "("

    #if NO_TIME(800, 800, 900)


    C:\Users\Alex\Documents\Arduino\libraries\FastLED/chipsets.h:294:12: error: missing binary operator before token "("

    #if NO_TIME(750, 750, 750)


    exit status 1
    Error compiling.

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.

    Anyone know what this is or how to fix it?

    • Alex
      December 21, 2015 at 8:26 pm

      Nevermind! I figured out the issue

      • James Bruce
        December 22, 2015 at 9:04 am

        For future reference - what was the solution?

      • Alex
        December 22, 2015 at 5:54 pm

        Silly error. Essentially, when I clicked to include the FastLED library from within the Arduino program, I included every .h file that was in that library rather than just using FastLED.h. I removed all the other .h files and it corrected the issue.

  56. Jonathan
    December 17, 2015 at 5:50 am

    This is a great tutorial. Your code was a lifesaver. I am building a simplified version of this with a single Arduino, bluetooth speaker, and USB hub for simple and safe power. I think I will just add a physical push button to toggle between modes. You rock!

  57. Anonymous
    November 27, 2015 at 10:51 pm

    Thanks for the great tutorial. I have an issue where on the sound reactive mode it is always lighting. I added some debugs and it only triggers periodically but just keeps rolling. Did you experience any behavior like this? Also did you enclose the PSU or did you just mount it to the MDF?

    • James Bruce
      November 30, 2015 at 8:51 am

      I haven't enclosed anything yet, but I plan to at *some point* ;)

      What's your default mode set to? Try to narrow down the problem and see if it's actually a problem with sound reactive mode, or if it's just defaulting to rolling and perhaps an issue with the remote not switching modes properly. I havent experienced the issue you mentioned specifically, but there is a more general issue of mode functions locking up the rest of the functionality until they've finished running, so the remote doesn't always work right. I'm not a good enough programmer to make it more efficient :(

      • Ndudde67
        October 10, 2017 at 7:12 pm

        I think I have fixed the issue of the code breaking when changing modes. There was a space in the 'default' line in the 'switch(mode)' section of the code that I deleted. It was between 'detect_thunder();' and 'reset();break;'

        The code now looks like this:
        case FADE: colour_fade();break;
        case ACIDFADE: acid_fade_rolling();reset();break;
        default: detect_thunder();reset();break;

  58. Shane
    November 24, 2015 at 11:48 pm

    Any advice on roughly what size enclosure I would need to buy? The enclosure's I'm seeing all look to be quite small. Also, how do you mount the power supply and boards into the enclosure?

    • James Bruce
      November 30, 2015 at 8:52 am

      I'm afraid I never took that step. A fully enclosed power supply is probably the easiest option - the 5v of the Arduino and strips needn't be enclosed, it's only the mains voltages that are dangerous.

  59. Anonymous
    November 2, 2015 at 10:23 am

    Hi there James, so while I am pretty comfortable learning about electronics and learning wiring and all that jazz ( that is to say I'm not afraid of getting shocked ) I don't know too much about it and this tutorial is a bit over my head. That being said I really love this lamp idea and I have a friend who I know would be really surprised and happy if I managed to make this for her. Would you mind making some suggestions how I can build the same product but with little to no wiring that I have to do myself? I know that's likely a little more expensive but it beats 3k I'm sure.

    • James Bruce
      November 2, 2015 at 10:52 am

      There's really no way to build this without the requisite wiring skills - ignoring the AC power input because you buy an enclosed one there so no lethal shocks, you would still need to know how to wire up the ELDs or you'll damage them in the process. Sorry - start simple, work up to something like this!

  60. Anonymous
    October 28, 2015 at 3:40 pm

    Is it even possible to connect this type of power supply to this project?

  61. Anonymous
    October 27, 2015 at 6:12 pm

    If I have a fully enclosed power supply like this one: do I still have to wire it to the breadboard as shown in the diagram or is there another way to connect it??

  62. Anonymous
    October 27, 2015 at 3:44 pm

    Thank you! So it does not matter which of the arduino's 2.1 mm DC outlets I plug the power supply into once all of the coding is finished?

    • James Bruce
      October 27, 2015 at 3:53 pm

      Check the wiring diagram above: don't plug the external supply into the Arduino DC port, as that would pass it through the Arduino regulator, which will blow it up when you try to pull 10a through it. The external power supply is put onto a breadboard, then pulled directly into the Arduino 5v pin.

  63. Anonymous
    October 27, 2015 at 12:09 am

    Forget my first question. If I can not find a way to make it battery powered I am going with a fully enclosed power supply instead so I am wondering which arduino does it plug into: the one with the receiver or the one with the LEDs? Like I said though, I would prefer to make it battery powered if possible.

    • James Bruce
      October 27, 2015 at 12:50 pm

      You could use a battery, but you still need one with enough power for all the LEDs, capable of 10amps @5v. I suspect this would be very expensive. If it was a smaller project, you could get away with any mobile phone charger, but those are limited to about 2A.

      Whether you use a battery or enclosed power supply doesn't matter; when not plugged into USB, all the 5v lines should be tied together, as should the ground lines. Look at the circuit diagram above. The only warning is not to connect both the external 5v line and the USB (which also provides 5v) at the same time, as the LEDs may try to draw too much current through the arduino's power regulator. Whichever Arduino is plugged into USB should not be tied to the main 5v input line (it will be powered over USB). Once you unplug USB, reconnect it to the main 5v input.

  64. Anonymous
    October 27, 2015 at 12:01 am

    Lastly, is there a way to build this project where it is battery powered and does not have to be plugged into the mains of my house? I would prefer not to have an extension cord running from it. Any help is appreciated. Thanks!

  65. Anonymous
    October 26, 2015 at 11:50 pm

    Also, in the wiring diagram right above the red text that says "IMPORTANT...", there is a red wire that is connected to the farthest bottom right outlet on the breadboard but does not lead anywhere else. What is this for?

  66. Anonymous
    October 26, 2015 at 9:14 pm

    First off, great project! I am wondering, what is the switch for/ where do I connect it and where did you get your wiring?

  67. Anonymous
    October 23, 2015 at 11:27 pm

    Hi James, I have just finished my cloud and everything is fine whilst its still plugged into the pc, but when I disconnect it and run everything from the 5v power the lighting in cloud mode turns to reds and yellows. Any help would be appreciated, this is the last thing I have to sort out, everything else I've managed to find by reading the past comments. The fact I've managed to make this with your guidance is amazing, thank you for posting it.

    • Anonymous
      October 25, 2015 at 4:01 am

      No worries, all sorted.

      • James Bruce
        October 25, 2015 at 9:28 am

        Hi Oliver, apologies for not getting back to you sooner. I was going to suggest maybe grounds not connected together - did you identify the problem or did it just start working?

  68. Anonymous
    September 18, 2015 at 12:10 pm
    • Anonymous
      September 18, 2015 at 12:11 pm

      It's Ashley. My mom was using my phone obviously ha!

    • Anonymous
      September 20, 2015 at 3:10 pm

      I marked it as public? I'm not sure. When I get home on the computer I'll check it out.

  69. Anonymous
    September 17, 2015 at 2:24 am

    Hi James! I wanted to thank-you so much for being so patient with all of us (and for you being so responsive with all our questions to boot) I just took apart my cloud (because I was having that trouble with the remote) and I realized I messed up on the I2C wiring! How silly of me. Now my remote works flawless and I have the coolest cloud. Once I get it all back together I'll be sure to show you my work. Thanks again! I'm so proud of my first arduino project and it was all because of you I was able to learn arduino... now to start some more projects of my own :)

    • James Bruce
      September 19, 2015 at 7:16 am

      So glad you got it worked out. But your video is marked as private! Can you change that so we can see it?

  70. Anonymous
    September 13, 2015 at 12:26 am

    Thank you guys for the help loading the code :) Got it loaded but now I'm having trouble with the remote. As I said before this is my first Arduino project but I'm not giving up. Almost there lol. I've got the same remote you used James. I'm confused about how I'm supposed to find the hex code for the button or how to get it to work with the Arduino boards. Any help would be greatly appreciated.

    • James Bruce
      September 14, 2015 at 7:44 am

      Hi Micheal. First, plug the USB cable into the Arduino with the IR receiver sensor, and open up the serial console. Press some buttons, and make sure it's actually picking them up. If not, youve got a hardware problem as the Arduino code there is pretty simple.

      Now switch the USB cable over to the other Arduino, and do the same. The Arduino with IR sensor should transmit the codes it gets over the special connection between the Arduinos, and you should see some IR codes also in the debug console - probably only the last few letters. It's these you'll plug into the mode switch statement. If there's nothing in the console, the connection between your Arduinos is wrong, so check that wiring.

  71. Anonymous
    September 10, 2015 at 1:33 am

    Hi I'm trying to program and keep keeping this error msg.

    Arduino: 1.7.6 (Windows 7), Board: "Arduino Uno"

    Build options changed, rebuilding all

    Using library Wire in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire

    C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10706 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire C:\Users\MICHAE~1\AppData\Local\Temp\build7763531569372598353.tmp\sketch_sep09d.cpp -o C:\Users\MICHAE~1\AppData\Local\Temp\build7763531569372598353.tmp\sketch_sep09d.cpp.o

    sketch_sep09d.ino:13:21: fatal error: FastLED.h: No such file or directory

    compilation terminated.

    Error compiling.

    Can anyone help plese!

    • Anonymous
      September 10, 2015 at 1:35 am

      I'm putting the code in like this.

      [Comment mod: Hi Michael, please use Pastebin for all code in the future, I've done it for you this time :) ]

    • James Bruce
      September 10, 2015 at 9:24 am

      Hi Michael. It sounds like you haven't download FastLED library to your Arduino libraries folder. It's included in the Github repository, but you'll need to manually move it to the libraries folder, wherever that is on windows.

  72. Anonymous
    September 3, 2015 at 8:23 pm

    Hi James, first off I'd like to thank you for uploading the guide I've always wanted a cloud but the $3500 was a little out of my price league.
    I know you decided not to add to speaker to yours but I was wondering whether to have one on mine. I was thinking of a Bluetooth speaker. If I decide to add one would I need a separate arduino. This is my first project and I know it's a challenging one to start with, but so far I think I'm doing quite well I just need your advice on adding a Bluetooth speaker and any coding (or where to find it ) to operate it.
    Once again thanks for the upload and your guideance you've offered to others.

    • James Bruce
      September 10, 2015 at 9:27 am

      The easier way would literally be to just put a commercially available Bluetooth speaker into the cloud. Connect the USB plug straight to your 5v power line and it should stay on, then you can connect to it from your phone etc.

      If you're asking how to play the sounds from the Arduino, you're then looking at something like an SD card to store the sounds, and it all gets horribly complicated for a rather rigid solution. Best just to go with a portable speaker that will work with any source.

      • Anonymous
        September 15, 2015 at 10:46 pm

        Thanks James I've taken your advice and have ordered a off-the-shelf BT speaker with extra bass, I'll let you know how it sounds. I do have one more question if I may, I've got the mic module the same as you have pictured, however it has 4 connecters on I think they are AO (audio out) + G and DO. What connects where From the arduino to the mic module?

  73. Anonymous
    August 28, 2015 at 12:47 pm

    Hi James,

    Thanks so much for posting this tutorial! I'm trying to build a cloud with no sound reactivity, just lightning with a limited range of colors (white, blue, green, and purple) but I'm having a hard time editing the code. Any advice on simplifying it down to just the constant lightning mode?

    • James Bruce
      September 10, 2015 at 9:31 am

      With remote control too or without?

      • Anonymous
        September 20, 2015 at 4:44 pm

        Without remote control. Every time I try to edit it down I get errors or nothing lighting up at all.

  74. Anonymous
    August 26, 2015 at 3:43 am

    Is it possible to program this with one arduino? if so could i see a diagram of how it is set out?

    • James Bruce
      August 26, 2015 at 7:26 am

      Not if you want the remote control functionality. If you cut that out and hardwired a switch (or just left it in one mode, or cycling the modes automatically), it would work without the second one. It's just the timing issues with remote control libraries that mean it needs a second.

      But you can grab an Arduino clone for a few dollars on eBay or AliExpress, so if cost is the issue then don't feel you need to use a $30 official Arduino board.

  75. Anonymous
    August 26, 2015 at 12:16 am

    Hi James!

    I've got everything wired up and programmed but I'm not registering any of the remote key presses in the debug console. I've got the USB plugged into the Thundercloud arduino and not the Thundercloud IR Reciever arduino. I did do a quick IR remote test on another arduino with a simple remote reciever sketch and I know the remote and the IR reciever module are working properly.

    I'm stumped as to why I'm not reading any key presses on the main controler.

    Any ideas???

    • James Bruce
      August 26, 2015 at 7:27 am

      I'd double check the wiring of communication between the Arduinos. Are you sure the second one is powered on?

      • Anonymous
        August 26, 2015 at 7:07 pm

        I've checked and rechecked the wiring and rebuilt the sketches to make sure when I was cut/pasting the info that I didn't miss a } somewhere. I did have to download a previous version of the ld.exe file in order to get the Thundercloud_ir_reciever.ino to compile without an error. I wouldn't think that would affect anything???

        • James Bruce
          August 26, 2015 at 7:43 pm

          Can you send a screenshot of what happens when you open the serial console and press some buttons on the remote?

        • Anonymous
          August 26, 2015 at 8:53 pm

          I'll be happy to but there's nothing to see :-\ When I have the USB plugged into the main Thundercloud.ino board and have the serial console open all I get is the Triggered and Rolling or Thunderburst outputs. Remote keypresses don't register at all. If I plug the USB into the Thundercloud_ir_receiver.ino board the serial console registers only the first keypress, just the hex code for that particular let, but then nothing else. Just to verify, both boards, ir sensor and mic are connected together exactly as in your illustration and are only powered by the USB. The lights are being powered separately by the PSU.

        • James Bruce
          August 26, 2015 at 9:02 pm

          Only the first keypress is registered? Ok, so it sounds like the problem originates there. However, I've not seen that issue before - almost like the Arduino is crashing? Is this the same remote as I've used, or somethign else? Do you know how modify the code to output raw IR codes, and something in the loop just to show the Arduino is still on and working (like a heartbeat)? That might indicate whether it's crashed or not. I need to sleep, but if you don't know how to modify it I'll see I can have a go tomorrow.

          I wonder if the compilation error you mention is related. What's ld.exe? Do you mean the Arduino IDE?

        • Anonymous
          August 26, 2015 at 9:29 pm

          Yes, the first keypress registers then nothing else. I have set up a basic ir reciever program on that arduino just to map the keypresses and it runs fine for as long as I want to sit and press buttons. I used that to verify my hex codes matched the ones in your code.

          The ld.exe is the linker and I had to downgrade that in order to get the thundercloud_ir_receiver.ino to compile without throwing an error- "collect2.exe: error: ld returned 5 exit status" I googled around about the error and that was the recommended workaround. It would not surprise me if that is where the problem lies.

          Thanks for taking the time to work with me on this. Get some sleep and we can work on this tomorrow!

        • Anonymous
          August 26, 2015 at 11:50 pm

          I've tracked down the problem. The resistors were mis-labeled on the package. I was using 2.2 ohm not 2.2 kohm resistors. Couldn't figure out why I still had voltage going to both boards when I pulled the 5v lead off of one and only the grounds and I2C wiring was connected to both.

          Now just trying to track down why Crack is causing the roll of leds to light white for the first 25-30 and the rest are orange to red .

        • James Bruce
          August 27, 2015 at 8:16 am

          Nice! Glad you got that bit sorted. Have you modified the Crack function code yet? Was there a break in the string of LEDs at that point where it changes color? Is the voltage sufficient? There's usually some advice about adding a cpacitor and resistor inbetween the LED string and Arduino, though I'm not sure exactly as I've never found the need for it, but it might help in your case. Here's a link to the values it should be:

        • Anonymous
          August 27, 2015 at 7:05 pm

          I can't believe that I pulled my hair out for two days because of midlabeled resistors......guess I better start double checking the color codes.

          I think you are correct on the voltage drop causing the orange/red color. Currently I have the code set to light the entire reel which is 300 leds. If I'm going to use all 300 I will either need to source a power supply with a higher amperage rating or change the Crack code to light fewer leds at one time.

          Once I get all that sorted out I'm going to work on putting sound in the cloud for thunder claps.

          Thanks for working up this build and all of the advice you have provided!

        • James Bruce
          August 28, 2015 at 7:21 am

          300?! Wow, sounds like an entire sky full of clouds! Good luck~

        • Anonymous
          August 29, 2015 at 2:31 am

          It would definitely make for a good show but I don't thinkI will be able to use all 300 unless I get a larger power supply......or split the strand and use two.

  76. Anonymous
    August 24, 2015 at 11:06 am

    I can see a future project with adding a Raspberry Pi to download the weather conditions and display them on the cloud. If rain is in the forecast when you get up, the cloud is dark. Sunny, the cloud is white. Thunderstorms coming, the lightning is activated.

    • James Bruce
      August 26, 2015 at 7:29 am

      You've inspired me to add a network adapter and replace the remote with web control - hopefully I can figure out how to hook this into OpenHAB. If successful I'll write about the process for an upcoming OpenHAB advanced guide (not the beginner one that'll be coming out soon). Thanks!

  77. Anonymous
    August 23, 2015 at 9:21 pm

    I cant wait to try this, My kids are gonna love it. Way cheaper than the 3K I saw on other sites this thing was going for.

  78. Anonymous
    August 7, 2015 at 4:23 pm

    First up, thanks for making this tutorial !

    I have all the parts on order now to make 2 clouds, will update once they come in and I complete!

    Best Regards


  79. Anonymous
    July 28, 2015 at 8:18 pm

    Hi James i have been at this project for a while now had a few smoking wires haha and also realised i had the wrong lights now thats all sorted I cant get the ligths off white. The remote only lights up the arduino once but then unresponsive is there anything i can do this ive used the window that tells me what its doing and it only does thunderstorm and rolling. this is the first time ive ever done a project with arduinos so im a complete novice.
    Please help!!! :D

    • James Bruce
      July 30, 2015 at 10:40 am

      Have you checked it's actually getting a signal from the remote? If you try changing the default mode to off, then directly selecting one of the other modes from the remote, does that work? If it's only launching immediately into the default mode, it sounds like the remote isn't hooked up right. That means either:

      1. The second Arduino isn't powered, or plugged into the first Arduino incorrectly - check the wiring.
      2. The remote codes are incorrect - debug by opening the console, check what it's receiving, and change the switch function accordingly.

      You're very brave for making this your first project. I certainly wouldn't have tried to tackle it as an absolute beginner...

  80. Anonymous
    July 22, 2015 at 5:45 pm

    Great Job James! have you ever thought about selling the programmed electronics for this? for those of us techno challenged? I would certainly buy it. Thank you.

    • James Bruce
      July 23, 2015 at 7:35 am

      Thanks Dennis. I really wish I had the time to commercialize some of these things, but between the making, the writing, the editing of everyone else's projects, and being lead developer... well... yeh. :)

      • Anonymous
        August 19, 2015 at 9:59 pm

        Wanted to update you ,ordered parts put it together programmed it and works!!! :) This was my first project using Arduino's, had to make a few adjustments as you can expect, but thrilled with the results! Thanks again James, it was a fun project and Tested me. love that everything on the remote works well!

        • James Bruce
          August 20, 2015 at 9:59 am

          Fantastic, glad to hear it Dennis!

  81. Anonymous
    July 14, 2015 at 9:00 pm

    Please do a tutorial of a 'cloud' with speakers and Bluetooth capability ?

  82. Anonymous
    July 13, 2015 at 4:01 am

    Do all the FastLED and IRRemote libraries in the link all need to be added to the Arduino's library?

    • Anonymous
      July 13, 2015 at 4:33 am

      nevermind...i got it

  83. Anonymous
    July 2, 2015 at 7:01 pm

    I finally got everything wired and I tested the sound reactive and it worked! The remote works too...but....for some reason the other colors/modes are not working... You can see the remote is communicating with the arduino but it's not doing anything. Any Ideas?

    • Anonymous
      July 2, 2015 at 7:25 pm

      Do I put the full hex codes in? In your code its only one or two letters....i used the same remote as you did.

    • Anonymous
      July 2, 2015 at 7:35 pm

      // Here, we set the mode based on the IR signal received. Check the debug log when you press a button on your remote, and
      // add the hex code here (you need 0x prior to each command to indicate it's a hex value)
      unsigned int received =;
      Serial.print("Receiving IR hex: ");
      lastMode = mode;
      case 0xF7C03F:
      mode = ON; break;
      case 0xF740BF:
      mode = OFF; break;
      case 0xF7D02F:
      mode = CLOUD; break;
      case 0xF7F00F:
      mode = ACID; break;
      case 0xF7C837:
      mode = FADE; break;
      case 0xF7609F:
      mode = BLUE; break;
      case 0xF7A05F:
      mode = GREEN; break;
      case 0xF720DF:
      mode = RED; break;



      • James Bruce
        July 3, 2015 at 8:05 am

        Last two letters only. You can open up the debug console to see what it's receiver from the other Arduino.

        • Anonymous
          July 3, 2015 at 1:41 pm

          I tried the last two letters. It's not working... I have the debug console open and I put in the values. I'm stuck.

        • James Bruce
          July 3, 2015 at 1:52 pm

          Whatever is shown in the console is what you need to put after the 0x. Can you upload a screenshot showing your console output next to the code block?

        • Anonymous
          July 9, 2015 at 10:00 am


          Did ye get any further than this? I am at the exact same point and am stumped!

          Any and all help greatly appreciated.

          Also James, why have you set the baud rate @ 115200 instead of 9600? Or does it matter once its consistent across both codes?

        • James Bruce
          July 9, 2015 at 10:19 am

          Doesn't matter, as long as it's the same in the console as it is in code. I believe her issue was that she either didn't have two Arduinos, or had the wrong one plugged into USB - the output was showing from IR_receiver, instead of the main thundercloud code. You need to look at the debug from the main app, to see what it's receiving from the other Arduino.

        • Anonymous
          July 9, 2015 at 7:55 pm


          That is bang on and now its all working perfectly I may add. I had a wire in wrong slot. I am having a sensitivity issue on the mic (have the same one as you). when I play the music close to it the leds come up but anything further than 5 c.m. away and nothing. I've trimmed the mic unit itself so that the analogue led on the mic lights up to the music beats so I think thats right? (God forgive my blisfull ignorance here) How do I get over this issue. I want to probably have the sound up to 2 m away at most. Any ideas?

        • Anonymous
          July 20, 2015 at 2:41 pm

          On the microphone module, there is a small screw. That will make the microphone less or more sensitive.

          I will have to look over what you did...because I have two arduinos. Not one. And it was programmed correctly. I had erased my arduinos and started over and I had the same result.

        • Anonymous
          July 20, 2015 at 3:00 pm

          Ashley, I used the 2 as well.

          Got it all working except the microphone. No amount of turning (any direction btw - and I tried a different one incase mine was broken) will make it sensitive enough to pick up sound from say 3m away.

          Any solution ot this would be great.

          If not then I'll just integrate speakers into the lamp and put them beside the mic.

        • James Bruce
          July 3, 2015 at 2:25 pm

          Looks like you're getting the full number there. And you tried pasting those? So the first one should be 0xF7C03F

        • Anonymous
          July 3, 2015 at 2:36 pm

          Yep. Tried change from the remote. :(

        • James Bruce
          July 3, 2015 at 3:59 pm

          I'm out of ideas here. Did you modify anything else? You could try posting your code to a pastebin to see if there's any obvious problems I can see, but if nothing else has changed I'm not sure what there'd be left for me to check...

        • Anonymous
          July 3, 2015 at 5:44 pm

          (edited and pasted here:

        • James Bruce
          July 4, 2015 at 10:55 am

          Hang on Ashley, something's bugging me about the screenshot you posted earlier. In the code for thundercloud, it should be outputting "Received IR event: F7C07F", not just "F7C07F" part. If thats all you're seeing, you have the wrong Arduino plugged in.

          Double check please: you should have two Arduinos. One has the IR adapter and is powered from the breadboard. It should not be plugged in through USB, but the output you posted is from this board, meaning I think you had it plugged in instead.

          The other Arduino should be plugged in through USB, and is running the main thundercloud.ino code, which you just pasted in. It's the debug from that whcih you need to look at to figure out the correct codes to paste into the switch statement.

  84. Anonymous
    July 1, 2015 at 12:28 am

    Okay I only need a little bit more help I made two more functions I made an all white color one and I made a acid thunder fuction I added them to the enum and added them to the switch when i go to upload them it tells me

    Arduino: 1.6.3 (Windows 8.1), Board: "Arduino Uno"

    Build options changed, rebuilding all

    thundercloud.ino.ino: In function 'void loop()':

    thundercloud.ino.ino:109:27: error: 'acid_cloud' was not declared in this scope

    thundercloud.ino.ino:121:29: error: 'white_color' was not declared in this scope

    Error compiling.

    • James Bruce
      July 4, 2015 at 10:57 am

      Can you post your code to It's saying it can't find the function called acid_cloud(), but that's definitely in my code so it could be that you've not closed a bracket properly.

  85. Anonymous
    June 29, 2015 at 9:46 pm

    I got all the parts, exited to begin this project but could not upload the thundercloud_ir_receiver.ino.

    I receive Error compiling message.

    Did any one encounter this issue?

    • Anonymous
      June 29, 2015 at 10:08 pm

      Make sure it is uploading to COM 4 under the ports menu of the Arduino

      • Anonymous
        June 30, 2015 at 7:48 am

        the error pops up while white i verify the code, i tryed also changing the port but it had no effect...


        • James Bruce
          June 30, 2015 at 8:24 am

          Compiles fine here, so I'm guessing you're missing the IRRemote library. Did you place that in your Arduino libraries folder?

        • Anonymous
          June 30, 2015 at 9:13 am

          That was the problem,
          works now, THANKS

  86. Anonymous
    June 25, 2015 at 3:12 am

    Im stuck on the decoding of the IR led sensor I'm not getting any hex values instead im getting æâââàìæáèçåìåèáàåáááãåèæèååå with each char representing a different button pressed on the ir led remote.

    • Anonymous
      June 25, 2015 at 3:32 am

      One button when pressed repeatedly gives off ÇÜ[?[êÿ7hl{ª‹äSÙ[*¶÷)ÿþlûÍþlíŸü{ªSÙ>íSÙ!²wþí‹ä>éû‹ä[ªËìÏ©¶Sd{ª[Ù‹äSÙášÿ>í÷šÿûó¶[?[ÿìC’["[?“ÿ[‘>íl7hËì¶ûÍÿ¶SÙ—ÿ7h¶[° in the serial monitor how am i supposed to turn this into hex

    • James Bruce
      June 25, 2015 at 7:10 am

      Change the baud rate of your serial console to match that defined in the code. Serial.begin(115200); - so select "115200" from the drop down.

      • Anonymous
        June 25, 2015 at 7:56 am

        Thanks so much I got it working one more question is there any way to increase the sensitivity of the microphone mine only pickes up if you clap like right next to it?

        • James Bruce
          June 25, 2015 at 8:15 am

          Depends on your sensor - there may be a little dial you can adjust. Have you checked the analog values it's outputting in the debug? It may also be that you're using a "loud noise detector" rather than a microphone with pre-amp. The two are a little different. Do you know exactly which module you have?

        • Anonymous
          June 25, 2015 at 8:48 pm

          this is the exact mic I bought it does have a dial but it doesnt change it enough

        • Anonymous
          June 25, 2015 at 8:56 pm

          It wont let me post the link but if you amazon "Sound Detection Sensor Module Sensor Intelligent Vehicle Compatible With Arduino by Atomic Market" it is that mic it does have a dial but, it doesnt do much.

        • James Bruce
          June 26, 2015 at 8:52 am

          I'd recommend trying a basic analog input example before trying to wire it into this. Debug on something simple - that dial seems like it should do something, but you need to know the range of values you're working with.

        • Anonymous
          June 27, 2015 at 3:54 am

          for current it hovers around 489 and for average it stays at 491 no matter how much noise i make around it but it if rub the microphone itself it seems to go or at random times?

        • Anonymous
          June 29, 2015 at 5:40 pm

          One more question I couldn't get the mic to work but if I was to want all the lights on white color what number would I send in? thank you for all the help already

        • James Bruce
          June 29, 2015 at 8:57 pm

          You mean the HSV command? CHSV( 0, 0, 255); would be white.

  87. Anonymous
    June 14, 2015 at 1:23 am

    Okay, I am a complete newbie when it comes to soldering and wiring. Do you recommend me trying to attempt a project like this, or are there a few things that I should know about before my first attempt?

    • James Bruce
      June 14, 2015 at 8:41 am

      There isn't much to solder as it mostly involves jumper wires and a breadboard, however it does have AC120/240v electricity, so if you're not confident handling high voltage wires or wiring a plug then I wouldn't recommend it (or at least, spend more on a completely enclosed power supply). If this is your first Arduino project, I would look elsewhere as it is rather complex. Try some of the easier ones here: // - specifically to practice soldering, the 4x4 LED project is great.

  88. Anonymous
    June 9, 2015 at 6:48 am

    Are there some people who get the job done with one Arduino Uno?

  89. Mario Amicarelli
    May 30, 2015 at 5:46 pm

    So the power supply and the LED strand from those sellers at aliexpress are totally legitimate, correct? Sorry, I'm just nervous since the sellers are not in the U.S. and I'm used to ordering through Amazon and getting my stuff in two days.

  90. Jackson
    May 22, 2015 at 11:23 pm

    Hey James, did you stick on the LEDs with the spray glue or hot glue? The spray glue doesn't seem like it'd be strong enough and the hot glue probably would need to cool a bit. I was thinking about buying some long staples to secure them onto the styrofoam.

    • James Bruce
      May 23, 2015 at 7:04 am

      I think I used superglue in the end. Hot glue fell off after a few weeks. The styrofoam idea sounds very sensible, though I'm not sure staples would stick to it... What about some thin wooden fibreboard/MDF?

  91. Andrew
    May 19, 2015 at 4:17 pm

    Ahna Whim, you read my mind.

    I was considering to buy the actual lamp until I found your tutorial. You could make a killing selling it for half the price of the actual lamp. If you'd consider it, I'm sure Ahna and I will jump aboard.

    For now, I'm ordering the parts to attempt this project and thanks for providing a cheaper option for all of us than the $3K cloud.

  92. Ahna Whim
    May 12, 2015 at 5:05 am

    Can I just pay you to make this for me? I don't even need speakers or anything but the white lightning flashes. No colors or sounds unless you can put thunder sounds in it. I just want a simple Thunder and Lightning cloud.

    • James Bruce
      May 12, 2015 at 6:31 am

      Awww come on, that's no fun. Making it yourself and learning in the process is what it's all about!

    • Ahna Whim
      May 12, 2015 at 6:44 am

      No... Not really. Lol. Since I'm an artist of words, my ability to create anything that can't be read or spoken tend to end up looking nothing like what I'm attempting to make but costing me more in the end, due to the fact I have to purchase what I want anyway. Lol. Some people got it, others don't. I'm the artistic don't...

  93. Ashley
    April 25, 2015 at 12:03 am

    HELP! I am trying to put in the code for the IR remote and I keep getting the error "

    C:Program Files (x86)ArduinolibrariesRobotIRremotesrcIRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope
    int RECV_PIN = TKD2; // the pin the IR receiver is connected to"

    What am I doing wrong ?

  94. Buk Li
    April 17, 2015 at 2:57 am

    I can not the IR receiver to work for the life of me. I uploaded the thundercloud_ir_receiver.ino to one board and got the hex codes. I then put those hex codes into the switch case function in the thundercloud.ino and loaded that onto the other arduino board. Everything else seems to work, but I can't get the modes to change. Please help!

    • James Bruce
      April 17, 2015 at 7:00 am

      The switch statement in the main app only looks at the last few characters of the hex codes, so if you pasted the full code in it would never match. Add a debug line to see whats being passed into the function.

  95. Chris P
    April 3, 2015 at 2:07 pm

    Here's both videos i uploaded set to public

  96. Craig C
    April 3, 2015 at 2:06 pm

    Question regarding the microphone. Your wiring diagram shows just three legs, but your parts list(and the one I purchased) is four legs. From left to right is A0, G, +, D0. If your diagram is valid, it shows A0 as being tied to the Arduino, but what of the D0? Should it be tied to the A0? Should it be left open? Should it be tied to ground?
    Cool project, I'm going a little over the top with mine. It should be interesting.

    • James Bruce
      April 3, 2015 at 3:23 pm

      In theory, most of the sensors offer both an analogue (A0) and digital (D0) output. However, they don't all offer that; in this case, I couldnt get the D0 output working, so I used the A0. They're either / or, you don't need both - just leave open.

  97. Jackson
    March 31, 2015 at 8:13 am

    Hey Bruce, this is the LED strip I ordered -

    I've tried everything and for some reason only half the strip lights up. All modes are working correctly and sound activation is working fine....but the other half of the LED strip does not light up at all. I don't believe it's a power issue as there is no fade. Just no activation period.

  98. Joe
    March 25, 2015 at 6:40 am

    Hello, I got everything to work perfectly while my arduinos, microphone, and ir reciever are powered via the arduino's usb and the lights are powered separately by the power supply. The problem is once I make everything run off the power supply and I switch to lightning mode it will just run continuously without stopping.

    • Jackson
      March 31, 2015 at 2:07 am

      Same exact issue. Can't figure out why it would be this way.

    • Jackson
      March 31, 2015 at 7:20 am

      Nevermind. Definitely was an issue with the microphone. If your microphone isn't properly powered and connected to the properly coded board it will run continuous. I got mine powered correctly and continuous mode stopped.

      That being said, I noticed only half my LED strip was lighting up. So I plugged in the identical connectors on the far end of the strip and then only that half worked. I ordered the exact same strip described in the tutorial.

    • James Bruce
      March 31, 2015 at 7:35 am

      Hi Joe - the microphone setup is the most difficult part of this proejct, and you may find you need to uncomment the debug section which I left in for this reason. Uncomment it, open up the Serial monitor, and check what values you're getting. It could be dodgy wiring, or it could just be an overly sensitive microphone which is triggering all the time - you'll need to tweak the values you find, then comment out the debug code again (it makes everything run very slowly), and test again.

    • Jackson
      March 31, 2015 at 5:25 pm

      Disregard that last comment about only half the LEDs powering on. I checked the code and noticed it was set for 85 LEDs instead of 150. Changed the value and everything is working fine now. Is there a reason you have it set at 85 even though your strip you linked to is 150?

    • Chris P
      April 1, 2015 at 2:34 pm

      Jackson, you can cut it at various points along the strip. I happened to cut mine in half leaving me with 2 strips of 75. Right above the wiring diagram Bruce said he used 85 leds.

    • Chris P
      April 1, 2015 at 2:58 pm

      I finished my cloud about a week ago. Then I figured I could add some different lighting colours. I can't get the microphone to work properly either but, it's not a big deal at all. I decided to combine the random flashes of the constant lightning with the random colours of the acid cloud. I also added a solid aqua colour and yellow-orange. So i now have constant lightning, acid cloud, acid lightning, blue, green, red, aqua and orange. Here's the video of the new colours:
      I'm also reading and trying to learn how to program the remote so all the solid colours will cycle through using one button on the remote, just like tv channels. Originally the off button wasn't responsive and found under void loop() switch(mode) that there was no space between "OFF:" and "reset ()". Added a space and the off button works great now. Awesome tutorial, parts are on the way to build another cloud!

    • Jackson
      April 2, 2015 at 6:12 pm

      Hey Chris, wow man I thought I had read the build through and through 50 times and somehow missed that. Appreciate it! I was sitting there looking at how long the strip is and looking back at the build photos thinking "this strip seems way long enough to go around more than just a couple times!" Makes sense now.

      BTW your YouTube video is private still, gotta make it public or at least 'public with the link'. Also, care to share the code for your new lighting modes? Especially the acid lightning? I myself thought about adding some yellow/orange LEDs to the randomization during reactive mode the LEDs lining the bottom of the cloud to help simulate a little more realistic storm cloud look. But figured I'd get done with the actual build first.

  99. Ken
    March 22, 2015 at 1:27 pm

    I just ordered all the stuff to build one. My question is do you put a all the electronics in the box? Being that they give off heat, especially the power supply, and you're putting them in an insulated box is there a risk of overheating? Also what's the wire that comes with the remote? Is that used at all?

    • James Bruce
      March 23, 2015 at 8:32 am

      The remote was just a spare I had lying around; it's actually for some plain RGB strips, so the wire and box that comes with a new remote is a controller for RGB.

      Overheating shouldn't be an issue if you leave the top of the cloud open, since no one can see up there anyway - or if you'd rather leave the power supply somewhere else and just run the power cable up there then that would work too.

  100. Travis
    March 21, 2015 at 3:26 am

    Forgive the ignorance, I'm new to coding. When setting the IR Remote Control button, where do you find the debug line. I know you mentioned open the console, but what does this mean?

    • James Bruce
      March 21, 2015 at 8:30 am

      My wording is wrong, sorry - it's called "serial monitor", the icon in the top right of the arduino window that looks like a little magnifying glass.

  101. Brad
    March 17, 2015 at 6:33 pm

    Got my cloud up and running, my wife loves her Birthday gift. Thank you for posting the tutorial.
    Here is a video of it working.

    • James Bruce
      March 21, 2015 at 10:21 pm

      Awesome - looks fantastic Brad, thanks for sharing!

  102. anthony duck
    March 17, 2015 at 7:36 am

    just a quick question i live in australia and want to build this but i am unsure where to get the lights from and what sort of power supply to use. than you :)

    • James Bruce
      March 21, 2015 at 10:20 pm

      Hi Anthony - the links provided ship to Australia, and you'll be paying a heavy markup if you tried to source locally. 5 volt 10 amp power supply is needed - if you're not confident messing with live wires, please ask a local hardware store for one that's fullly enclosed and to those specs.

  103. Joe
    March 9, 2015 at 11:33 pm

    Sorry, I've only had a little expirience with coding and arduinos. It turns out everything works correctly while the thundercloud.ino Arduino is plugged into my computer via usb and the psu 5v is not bridged. Once I unplug the usb and bridge the 5v so it all runs off the psu, the cloud function just runs continuosly insead of with sound activation. I have a hunch it has something to do with the "void constant_lightning" but I'm not sure. Either way thank you for your last fast response, this is an awesome project and it's awesome you've been so helpful on the comments!

  104. Joe
    March 7, 2015 at 3:36 am

    I've got everything wired correctly but I'm a little lost on the remote control. When I turn everything on through the power supply, six buttons on my remote work to change the LED's effects/colors but as far as I can tell sound does not trigger them, they just seem to light up repeatedly in there designated patterns. Is there a button that turns on the microphone functionality or is it an adjustment to the code I have to make?

    • James Bruce
      March 7, 2015 at 7:55 am

      One of the buttons should map to the CLOUD mode, but if there's a problem with the microphone it wont be activating. Did you confirm the cloud mode and microphone are functioning properly? Try without the IR stuff, manually force it into cloud mode in the code, and uncomment the thing that checks for microphone trigger levels (around line 150, where it says if youre having trouble getting it to trigger - uncomment that and check the debug output)

  105. Brad
    March 6, 2015 at 6:48 pm

    Thanks, I will let you know how it turns out. Good luck in the move.

  106. Brad
    March 6, 2015 at 5:11 pm

    Great post, I am building one and would like to know, how big is you mdf base?

    • James Bruce
      March 6, 2015 at 5:30 pm

      Hmm, I believe mine was about 25cm x 40cm at the widest, but I'm afraid it's all packed up in a box right now as we're in the middle of moving. ;)

  107. Stephen
    March 6, 2015 at 3:34 pm

    Great! Thanks for the fast response. That is pretty simple.

  108. Stephen
    March 4, 2015 at 11:54 pm

    Thanks for the awesome guide, James! I built my cloud lamp last week for my wife's birthday and she loves it.

    I was wondering if you would know of a way to dim the brightness of the LEDs using the code in the Arduinos. I'm wanting to dim the brightness mainly on the flashing modes. I had some basic classes about programming a few years ago, so some of this code structure looks a little familiar, but I'm unsure how to go about this. I tried looking it up online but haven't had any luck. Any help would be greatly appreciated. Thanks!

    • James Bruce
      March 5, 2015 at 9:04 am

      Sure - the LEDs are lit using the function CHSV( 0, 0, 255); - where the numbers are hue, saturation, and "value". You want to reduce the final number to make it less bright - so 0,0,255 is full on white; 0,0,0 is off; 0,0,127 would be half on. Just find all the calls to that function that you want to dim, and reduce the final number. If you see something other than 0 in the first two numbers, it's doing colours.

    • Chris P
      April 1, 2015 at 2:24 pm

      First number is the hue, 0 being red, 64 being yellow, 160 being blue all the way up to 255 being a shade of red just under the original 0. You can find the hue values chart at:
      Second number is the colour saturation, 0 being no colour and 255 being full color. The third is the brightness of the led. Hope that helps you.

  109. hannah
    March 4, 2015 at 1:46 am

    How long does the battery last

    • James Bruce
      March 4, 2015 at 8:09 am

      It runs off mains power; no battery.

  110. Stanton
    February 28, 2015 at 4:33 am

    I'm wondering if it would be possible to program this to check the weather and activate when there is a chance of rain?

    • James Bruce
      February 28, 2015 at 7:33 am

      Yes, but you'd need something like a Raspberry Pi in there. Check the weather in Python or Node.js, then use a GPIO library to communicate with the Arduino. You could lose the second Arduino and implement remote control stuff on the Pi too, but I'm afraid I don't do much GPIO work with Pi - you should be able to find a tutorial about connecting Pi/Arduino easy enough.

  111. Jackson
    February 21, 2015 at 10:09 am

    Just ordered all my supplies, will wait until I receive before sourcing the MDF, cotton, packing material and hanging hardware. I don't believe the wiring will be much trouble but I've never really messed with code extensively. I ordered all the exact same supplies so hopefully any debugging will be minimal!

  112. anonymous
    February 16, 2015 at 7:19 pm

    With this being used in a 120v outlet is there anyway I can get more information on the power source as far as adapters go and suppliments for power supply? fairly new and this is a big step up from a 9v and i do not want to destroy boards or potentially kill myself. Eager to try new things and this is a big but good step! totally like this project and it has a lot of creative attributes.

    • James Bruce
      February 16, 2015 at 9:23 pm

      You should be able to find a fully enclosed 5v 10a power supply, though it'll likely cost a lot more.

  113. Chris
    February 3, 2015 at 2:03 pm

    I took a closer look at the strip and each lead on the 3lead connector runs to 5v, DIN and Grd. What threw me off was the wires were coloured R, G and B, respectively. The other connector just a power connector that connects to the same points as the red and blue wires on the other connector.

  114. Chris
    February 3, 2015 at 12:43 pm

    Yeah, sorry I couldve made myself clearer as well. I'll have to look at it again but, im sure i saw a plastic connector with 3 leads that have a red, blue and green wire leading to it, in addition to having a second connector with 2 leads that have a red and black wire. Ill unroll the entire strip off the wheel to double check when i get a chance to.

    • James Bruce
      February 3, 2015 at 1:59 pm

      Yep, that sounds right. Red +, green signal, blue -, the other red and black are also wired to +/-ve and terminate in a DC socket in case you have one of those enclosed power supplies. The one I used is just bare wires so I ignored the DC socket.

  115. Chris
    February 3, 2015 at 12:28 pm

    That's a little dissapointing seeing as how i bought the exact same led strip that you described above. 5m DC5V WS2812B led pixel srip,IP68 in silicon tube,30pcs WS2812B/M with 30pixels;36W;white pcb.

    • James Bruce
      February 3, 2015 at 12:34 pm

      That is the correct strip, yes. Maybe I'm misunderstanding you here. The strip doesn't have 3 inputs for RGB - it has one for the signal, one for ground, and one for the +5v. Only one is directly connected to the Arduino, which carries the signal. The others go to the external 5v power supply.

      Are you seeing the images above? You can see the WS2812B bit of the diagram, which shows the 3 inputs for the strip. Signal (middle, I believe) to pin 6 on the arduino, send the others off to + and - on the power supply (and indirectly to the arduino, but not while plugged into usb)

  116. Chris
    February 2, 2015 at 11:10 pm

    The LED strip has 3 outputs fire RGB, in your picture you only show one. Do you tie all 3 into the 6 pin or do you have the sketch written for 6,7,8?

    • James Bruce
      February 3, 2015 at 9:36 am

      Hi Chris - that's a different type of LED strip. The one you're referring to has all the lights the same color (any RGB colour, but all the same). This project is built using Neopixels, where each LED has a control chip so you can change them individually. For this strip, you need a 5v power line, a ground, and digital signal line on pin 6. For the strips you're referring to , you would need an LED signal amplifier and 3 pins, as you've described, each for a different colour. This project could certainly be rewritten to work with those, but you'll need to figure that bit out on your own. First you'll need an RGB signal amplifier that takes the 5v output of the arduino PWN pins and changes it to the 12v needed. Most of those strips actually work with a negative signal, so you provide the common +12v power lines and the pin provide a varying minus (that's probably not the technical term).

      I did something similar here, but used the wrong transistors - using a signal amplifier is much easier : //

  117. Sean
    January 24, 2015 at 4:38 pm

    How could/would you add sound? Thunder sound with the above functionality?

    • James Bruce
      January 25, 2015 at 8:56 am

      A couple of approaches you might take:
      - Arduino Wave Shield from Adafruit. I'm not sure if this is compatible with the delicate timing aspect of the WS2812B controller though (which is why we needed a separate IR controller). You could add it to the IR controller and establish 2 way communications, I guess. Speakers would add a lot of weight though - perhaps just a line out cable going to your speaker system would be best.
      - Integrate a Raspberry Pi, possibly to replace the Arduino IR controller. This would have a number of functions, including playback of thundercloud sounds, or even acting as a streaming receiver/playback as in this project (// Coding that is well beyond my abilities though ;(

    • Lunchbox
      February 25, 2015 at 4:03 am

      What about a small Bluetooth speaker and sending the White Noise app sound to it? Like the Nakamichi round speaker or some that were on SlickDeals. Charge it via USB. And can't you just get the old sound reactive lighting for cars? I remember them at Walmart, back in the day, like $20. Coat a pillowcase with epoxy resin so it's translucent and put the lights inside. The entire unit will light up. Get a power supply for that, and you're good.

  118. Anonymous
    January 10, 2015 at 10:32 pm

    I'd like to get started with Arduino, but I'm considering buying a clone to save some money. I've seen Funduino mentioned several times, but I haven't seen links or where to buy. Please advise me on a reputable place (I don't want my first purchase to be soured by a bad clone of a good clone.)

  119. Andrew
    December 15, 2014 at 8:05 am

    Hey there, I'm pretty new to the Arduino thing but I'm attempting this project and I have a 12 volt light strip that has the sync line would you know how I'd go about getting it connected and coded.

  120. Danny-0
    October 10, 2014 at 11:58 am

    You be awesome. Me be envious. Keep making magic junk. Yarr.

  121. Eric
    October 9, 2014 at 11:18 pm

    Wow the new layout for tutorials is cool!