Magic Light (Capacitance Sensor, First Arduino Project)




This was my very first arduino project.  Its great for beginners. Fade the color or the lights my moving your hands near it.  It fades from a pretty purple blue to a firey red-orange. Its was SUPER easy to build, not to hard to write the code, and its really impresses people!  I gave it to my mother for christmas, and it was a big hit. Watch the video to see it in action! I apologize for the poor quality, I will try to take more pictures.

All you need is:

high resistor (mine is 10 mega ohms)
tin foil or other conductive material

I build a housing for mine using an empty salsa jar and a toilet paper tube that happened to be the perfect size to snap together like legos.

Step 1: Code and Circuit

Set up a breadboard according the  semantic. Download the attached code.
Update: added Fritzing diagram and schematic (Its a great program, check it out

/*this code is a cap. sensor that fades between 2 leds
* set up: pin 8 > high resistor > one wire to foil, one to pin 9
*Led set up pin 2>resistor>led>grnd
*based on,8609.0.html
* ajust if statment to fit resistor, currently using a 10Mohm

Once it is set up, run the code and open the serial monitor.  Move the set up away from your computer to help diminish interference   Note what numbers are being out put when nothing is near the foil sensor, also note what it is when your open palm is extremely close to the sensor.  
Change the int low cap to just above the number output when nothing is near your sensor. 
Change high cap to the number output when you are almost touching the sensor.
You will have to adjust these numbers often to "calibrate" the light.  Many factor interfere with the readings to it needs to be set up whenever it is moved.

Step 2: Housing

To defuse the light coming through the jar I "mod-podged" toilet paper to the inside of the jar. To do this I mixed a little bit of elmers glue or mod-podge with just a tiny bit of water, and painted it onto the inside of the jar.  Then I pressed on ripped up scraps of white tissue paper (actually just 1 ply toilet paper).

To create the tree, I ripped foil into thin strips, about an inch wide, and rolled them between my palms into "wires."  I then hot glued them down onto the jar. To make it wider in places I just glued several of them right next to each-other.  Afterwards to make it apear smooth on top, thinly coat sections with hot glue then press on a small flat peice of foil.  I used my fingernail to score around the ends and tear of excess. 

I covered the cardboard base with paper, with hole for the power and usb wires.

Step 3: That's It!

That's all it is!
It was a great introduction to arduino for me, and I hope it can help you too!
Sorry for the photo quality, will update if I can.
The video is of the light without the base attached.
Eventually, I would like to build my own circuit board for this so I can take out the arduino. I would also like to make it so that it does not need to be "calibrated" (any ideas?)  

Questions, comments and feedback welcome! :]



    • Trash to Treasure

      Trash to Treasure
    • Tape Contest

      Tape Contest
    • Arduino Contest 2019

      Arduino Contest 2019

    21 Discussions


    2 years ago

    The code didn't work? Do you guys have an alternative?

    1 reply

    Reply 2 years ago

    I made this several years ago, so I no longer have it set up. You do have to adjust the capacitance range almost every time you turn it on to get it to work.

    I believe I linked the code I based mine on in thr discription as well.


    3 years ago

    Can u explain this code:

    for (i=0; i < 4 ; i++ ){ // do it four times to build up an average - not really neccessary but takes out some jitter
    // LOW-to-HIGH transition
    PORTB = PORTB | 1; // Same as line below - shows programmer chops but doesn't really buy any more speed
    // digitalWrite(8, HIGH);
    // output pin is PortB0 (Arduino , sensor pin is PortB1 (Arduinio 9)
    while ((PINB & B10) != B10 ) { // while the sense pin is not high
    // while (digitalRead(9) != 1) // same as above port manipulation above - only 20 times slower!
    // HIGH-to-LOW transition
    PORTB = PORTB & 0xFE; // Same as line below - these shows programmer chops but doesn't really buy any more speed
    //digitalWrite(8, LOW);
    while((PINB & B10) != 0 ){ // while pin is not low -- same as below only 20 times faster
    // while(digitalRead(9) != 0 ) // same as above port manipulation - only 20 times slower!

    1 reply

    Reply 3 years ago

    The code was pretty much directly taken from the code credited in the comments. I think the original coder was giving examples of mutliple ways of doing the same thing. I was originally using digitalRead- but this worked better, sorry I cant be of more help.


    3 years ago


    How do u make two individual capacitance function in one program?

    1 reply

    Reply 3 years ago

    This only uses one sensor. It checks to see if it is high or low, and then fades to either red or blue to match. You could probably ad a second sensor on a different pin, if that is what you are asking.

    I really like this project! Im thinking of doing something similar for my senior project in college. I will definately credit you on it :) I just want to add music to it for a more special needs kids based toy. but I'm not sure how to go about doing that. :P

    1 reply
    Kelly Smith

    6 years ago on Introduction

    Cool project! I don't know how to read the schematic however. Or at least I don't have the confidence reading them yet. Do you have a Fritzing project for it?

    4 replies

    Made a quick diagram with it, added it to step 1. They're a bit messy but hopefully Ill play around some more with this program


    Hey! Wow. That's what I needed! Thank you so much. Have fun with Fritzing and will watch for more of your instructables!