Magic Light (Capacitance Sensor, First Arduino Project)





Introduction: 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! :]



    • Spotless Contest

      Spotless Contest
    • Space Challenge

      Space Challenge
    • Science of Cooking

      Science of Cooking

    We have a be nice policy.
    Please be positive and constructive.




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

    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.

    Where will I attach the battery?

    I didn't use a battery, I powered it off USB

    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!

    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.


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

    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.

    no, im sorry. wish i could help.