loading
Have LED lights always fascinated you? Well they have for me ever since i wired my first circuit with my dad in grade 1.until now i have always been searching for an idea that is simple ,made out of cheap easy to get materials uses an arduino micro controller and looks great.

The basic layout of this design is an Archimedes spiral descending inwards with an arduino controling individual tri-color LED`s inside each bottle.Through this instructable i will show you how to replicate this idea and hopefully you can build on it yourself making it bigger and better!
 
Remove these adsRemove these ads by Signing Up

Step 1: Parts list:

Picture of Parts list:
DSC05517.JPG
1. Tri-color common anode LED`s X 12
2. 2 pair (four core) phone wire 4-5m
3. Arduino Duemilanove or perf board equivalent
4. 12v dc converter 
5. Screw top glass bottle (plastic is ok to) X 12
6. Frosting spray
7. Small cable ties
8. Solder
9. Heat shrink tubing
10.Brass hook large
11.Brass hook small X 3
12.Perf board(Helpful for making buses)
13.Metal cable with 5 small chock blocks and some nylon cord.
14.Circular wooden board about 0.5" thick by 11"wide.


Tools:
1. Electric hand drill
2. Drill bit diameter of your wire
3. Pliers
4. Side cutters/Wire strippers
5.soldering iron

Step 2: Wooden base drilling and bottle preparation

Wooden base

This is to be the base of your lamp from which all the bottles hang so it is important that this is strong and ascetically pleasing.

1.  Print out the attached image`s (spiral1 and Spiral2) ,cut out the pages and stick the together with sticky tape or glue.
2.  Now place this template in the center of your wood on the top.
3.  Mark the hole locations with a pen.
4.  Now drill the holes with the bit that is the same size as your wire.
5.  Paint or varnish the wood now if you want.
6.  Screw in the small brass hooks into three evenly separated locations .

Bottle prep

1.  Remove any labels from the bottles with hot water.
2.  Clean the bottles removing all glue residue and dirt.
3.  Dry the bottles completely inside and out.
4.  Remove screw caps.
5.  Spray the outside of the bottle, with the frosting spray, in even coats until fully frosted.
6.  Allow to dry
7.  Now take the screw caps and drill holes through the center of them with the wire diameter drill.

Step 3: Wire cutting and soldering to LED`s

Picture of wire cutting and soldering to LED`s
DSC05524.JPG
DSC05515.JPG
DSC05519.JPG
DSC05518.JPG
DSC05530.JPG
1.Cut lengths of your wire of  8.5" ,10" ,11.5" ,13" ,14.5" ,16" ,17.5" ,19" ,20.5" ,22" ,23.5" ,25" long with you side cutters.
2.Strip the ends of each length.
3.Working one by one place a short length of heat shrink tubing on each of the four LED legs
4.Solder the legs to their respective wire (see picture)
5.Slip the heat shrink over the bare connection and heat with your soldering iron or a heat gun.
6.Place a cable tie just above the connection.
7. Slide the bottle cap onto the wire from the opposite side to the led.
8. Now starting from the smallest wire measure and mark the wires from the bottle cap top at 2.5" for the shortest one and  4" for the second and so on with the measurements 5.5" ,7" ,8.5" ,10" ,11.5" ,13" ,14.5" ,16" ,17.5" ,19".



Step 4: Assembly

Temporary hanging for assembly
1.Cut two 15" pieces  and one 35" piece of the steel cable.
2.Make a 10" loop in the 35" piece 
3.Slide a chock block over the loop and tighten.(make sure it grips well)
4.Slide a loose chock block over the loose end of th long wire.
5.Make a 2" loop on the other end of the 35" piece and on one of the ends of both 15" pieces slide chock blocks over the loops and tighten.
6.Align the three small loops then use the loose chock block from earlier to bind them all together at the ends of the short cables.
7.Screw the large hook into a wooden beam or sealing were you want to hang your chandelier. 
8.Hook the small loops over the three brass hooks on the wood base, then hook the large loop over the large hook. Adjust the the large loop until it is at your preferred height.
9. For now we must lower the base to be able to work on it. So take a piece of nylon cord and tie it to the large hook and the large cable loop. leaving the base board about chest height off the ground.


Placing wires
1.Starting with the shortest wire in the outermost hole of the spiral. Pull each wire through the spiral holes until the previously made mark.
2.Place a cable tie on the wire above the piece of wood to hold the wire in place.
3.Screw the bottles onto their caps


Step 5: Wiring and Programing

Picture of Wiring and Programing
Wiring 
We now have twelve wires sticking out the top and for wires coming from each of those.
Starting with the outermost LED number the LED leads from 1 to twelve spiraling inwards.
 LED`s 1,3,5,7,9,11 must have a common RED GREEN and BLUE bus (ie. the RED wires are all joined together the BLUE wires are all joined together and the GREEN wires are all joined together we will call them the A ,buses) and LED`s 2,4,6,8,10,12 have a common GREEN RED and BLUE bus (B ,buses).
Attach the LED`s common anode wires and buses to the following arduino pins.
LED1 anode = 0;
LED2 anode = 1;
LED3 anode = 2;
LED4 anode = 4;
LED5 anode = 7;
LED6 anode = 8;
LED7 anode = 12;
LED8 anode = 13;
LED9 anode = 14;
LED10 anode = 15;
LED11 anode = 16;
LED12 anode = 17;
RED bus A = 3;
GREEN bus A = 5;
BLUE bus A = 6;
RED bus B = 9;
GREEN bus B = 10;
BLUE bus B = 11;

These connections must be right as i have not used resistors instead i have used the pwm function of the Arduino to control the current.
Arduino sketch programing

(for information on loading sketches in arduino see http://www.instructables.com/id/Arduino-Making-a-set-of-traffic-lights/step8/Programming-Arduino/)


 int value = 0; 
  int LED1 = 0;
  int LED2 = 1;
  int LED3 = 2;
  int LED4 = 4;
  int LED5 = 7;
  int LED6 = 8;
  int LED7 = 12;
  int LED8 = 13;
  int LED9 = 14;
  int LED10 = 15;
  int LED11 = 16;
  int LED12 = 17;
  int RED1 = 3;
  int GREEN1 = 5;
  int BLUE1 = 6;
  int RED2 = 9;
  int GREEN2 = 10;
  int BLUE2 = 11;

void setup() 

  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
pinMode(LED6,OUTPUT);
pinMode(LED7,OUTPUT);
pinMode(LED8,OUTPUT);
pinMode(LED9,OUTPUT);
pinMode(LED10,OUTPUT);
pinMode(LED11,OUTPUT);
pinMode(LED12,OUTPUT);

digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,LOW);
digitalWrite(LED7,LOW);
digitalWrite(LED8,LOW);
digitalWrite(LED9,LOW);
digitalWrite(LED10,LOW);
digitalWrite(LED11,LOW);
digitalWrite(LED12,LOW);

Red1Off();
Blue1Off();
Green1Off();
Red2Off();
Blue2Off();
Green2Off();
}

void loop()
{

LEDOn(LED1);
LEDOn(LED2);
LEDOn(LED3);
LEDOn(LED4);
LEDOn(LED5);
LEDOn(LED6);
LEDOn(LED7);
LEDOn(LED8);
LEDOn(LED9);
LEDOn(LED10);
LEDOn(LED11);
LEDOn(LED12);

FadeUp(RED1,RED2,2);
delay(2000);
FadeDown(RED1,RED2,2);
FadeUp(GREEN1,GREEN2,2);
delay(2000);
FadeDown(GREEN1,GREEN2,2);
FadeUp(BLUE1,BLUE2,2);
delay(2000);
FadeDown(BLUE1,BLUE2,2);

Magenta1On ();
Magenta2On ();
delay (2000);
Magenta1Off();
Magenta2Off();
Cyan1On ();
Cyan2On();
delay (2000);
Cyan1Off ();
Cyan2Off();
Yellow1On ();
Yellow2On();
delay (2000);
Yellow1Off;
Yellow2Off();


Blue1On();
Cyan2On();
delay (2000);
Blue1Off();
Cyan2Off();
Green2On();
Yellow1On();
delay (2000);
Green2Off();
Yellow1Off();
Red1On();
Magenta2On();
delay (2000);
Red1Off();
Magenta2Off();
White1On();
White2On();
delay(2000);
White1Off();
White2Off();


Blue1On();
Cyan2On();
delay (2000);
Blue1Off();
Cyan2Off();
Green2On();
Yellow1On();
delay (2000);
Green2Off();
Yellow1Off();
Red1On();
Magenta2On();
delay (2000);
Red1Off();
Magenta2Off();
Red1On();
White2On();
delay(2000);
Red1Off();
White2Off();



LEDOff(LED1);
LEDOff(LED2);
LEDOff(LED3);
LEDOff(LED4);
LEDOff(LED5);
LEDOff(LED6);
LEDOff(LED7);
LEDOff(LED8);
LEDOff(LED9);
LEDOff(LED10);
LEDOff(LED11);
LEDOff(LED12);
Red1Off();
Blue1Off();
Green1Off();
Red2Off();
Blue2Off();
Green2Off();
White1Off();
White2Off();
Red1Off();
Green1Off();
Blue1Off();
Red2Off();
Green2Off();
Blue2Off();


Red1On();
Red2On();
LEDSp(125);
Red1Off();
Red2Off();
Blue1On();
Blue2On();
LEDSp(125);
Blue1Off();
Blue2Off();
Green1On();
Green2On();
LEDSp(125);
Green1Off();
Green2Off();
Magenta1On ();
Magenta2On ();
LEDSp(125);
Magenta1Off();
Magenta2Off();
Cyan1On ();
Cyan2On();
LEDSp(125);
Cyan1Off ();
Cyan2Off();
Yellow1On ();
Yellow2On();
LEDSp(125);
Yellow1Off;
Yellow2Off();
White1On();
White2On();
LEDSp(125);
White1Off();
White2Off();
Blue1On();
Cyan2On();
LEDSp(125);
Blue1Off();
Cyan2Off();
Green2On();
Yellow1On();
LEDSp(125);
Green2Off();
Yellow1Off();
Red1On();
Magenta2On();
LEDSp(125);
Red1Off();
Magenta2Off();
Red1On();
White2On();
LEDSp(125);
Red1Off();
White2Off();
Red1Off();
Green1Off();
Blue1Off();
Red2Off();
Green2Off();
Blue2Off();
Green1On();
Blue2On();
LEDSp2 (200);
Green1Off();
Blue2Off();
Green1On();
Blue2On();
LEDSp2 (200);
Green1Off();
Blue2Off();







}
void LEDSp (int x) { // spirals on from 1-n
LEDOn(LED1);
delay(x);
LEDOn(LED2);
delay(x);
LEDOn(LED3);
delay(x);
LEDOn(LED4);
delay(x);
LEDOn(LED5);
delay(x);
LEDOn(LED6);\
delay(x);
LEDOn(LED7);
delay(x);
LEDOn(LED8);
delay(x);
LEDOn(LED9);
delay(x);
LEDOn(LED10);
delay(x);
LEDOn(LED11);
delay(x);
LEDOn(LED12);

delay(x);
LEDOff(LED1);
delay(x);
LEDOff(LED2);
delay(x);
LEDOff(LED3);
delay(x);
LEDOff(LED4);
delay(x);
LEDOff(LED5);
delay(x);
LEDOff(LED6);
delay(x);
LEDOff(LED7);
delay(x);
LEDOff(LED8);
delay(x);
LEDOff(LED9);
delay(x);
LEDOff(LED10);
delay(x);
LEDOff(LED11);
delay(x);
LEDOff(LED12);
}

void LEDSp2 (int x) { // spirals on from 1-n
LEDOn(LED1);
delay(x);
LEDOff(LED1);
LEDOn(LED2);
delay(x);
LEDOff(LED2);
LEDOn(LED3);
delay(x);
LEDOff(LED3);

LEDOn(LED4);
delay(x);
LEDOff(LED4);
LEDOn(LED5);
delay(x);
LEDOff(LED5);
LEDOn(LED6);
delay(x);
LEDOff(LED6);
LEDOn(LED7);
delay(x);
LEDOff(LED7);
LEDOn(LED8);
delay(x);
LEDOff(LED8);
LEDOn(LED9);
delay(x);
LEDOff(LED9);
LEDOn(LED10);
delay(x);
LEDOff(LED10);
LEDOn(LED11);
delay(x);
LEDOff(LED11);
LEDOn(LED12);
delay(x);
LEDOff(LED12);

}

void LEDOn(int x) {
digitalWrite(x,HIGH);
}
void LEDOff(int x) {
digitalWrite(x,LOW);
}
void Red1On() {
analogWrite(RED1,100);
}
void Red1Off() {
analogWrite(RED1,255);
}
void Green1On() {
analogWrite(GREEN1,100);
}
void Green1Off() {
analogWrite(GREEN1,255);
}
void Blue1On() {
analogWrite(BLUE1,100);
}
void Blue1Off() {
analogWrite(BLUE1,255);
}
void Red2On() {
analogWrite(RED2,100);
}
void Red2Off() {
analogWrite(RED2,255);
}
void Green2On() {
analogWrite(GREEN2,100);
}
void Green2Off() {
analogWrite(GREEN2,255);
}
void Blue2On() {
analogWrite(BLUE2,100);
}
void Blue2Off() {
analogWrite(BLUE2,255);
}
void Yellow1On() {
analogWrite (RED1,100) ;
analogWrite (GREEN1,100);
}
void Yellow1Off() {
analogWrite (RED1,255);
analogWrite (GREEN1,255);
}
void Cyan1On() {
analogWrite (GREEN1,100);
analogWrite (BLUE1,100);
}
void Cyan1Off () {
analogWrite (GREEN1,255);
analogWrite (BLUE1,255);
}
void Magenta1On () {
analogWrite (RED1,100);
analogWrite (BLUE1,100);
}
void Magenta1Off () {
analogWrite (RED1,255);
analogWrite (BLUE1,255);
}
void White1On () {
analogWrite (RED1,100);
analogWrite (BLUE1,100);
analogWrite (GREEN1,100);
}
void White1Off () {
analogWrite (RED1,225);
analogWrite (BLUE1,225);
analogWrite (GREEN1,225);
}

void Yellow2On() {
analogWrite (RED2,100) ;
analogWrite (GREEN2,100);
}
void Yellow2Off() {
analogWrite (RED2,255);
analogWrite (GREEN2,255);
}
void Cyan2On() {
analogWrite (GREEN2,100);
analogWrite (BLUE2,100);
}
void Cyan2Off () {
analogWrite (GREEN2,255);
analogWrite (BLUE2,255);
}
void Magenta2On () {
analogWrite (RED2,100);
analogWrite (BLUE2,100);
}
void Magenta2Off () {
analogWrite (RED2,255);
analogWrite (BLUE2,255);
}
void White2On () {
analogWrite (RED2,100);
analogWrite (BLUE2,100);
analogWrite (GREEN2,100);
}
void White2Off () {
analogWrite (RED2,225);
analogWrite (BLUE2,225);
analogWrite (GREEN2,225);
}

void FadeUp(int colour,int colour2 ,int speed) {
for(value = 255 ; value >= 80;) // fade in (from min to max)
{

analogWrite(colour, value); // sets the value (range from 0 to 255)
analogWrite(colour2, value);
delay(20); // waits for 30 milli seconds to see the dimming effect
value = value - speed;
}

}

void FadeDown(int colour,int colour2, int speed) {
for(value = 80; value <= 255;) // fade out (from max to min)
{

analogWrite(colour, value);
analogWrite(colour2, value);
delay(20);
value = value + speed;
}
}
 

Step 6: Final assembly !

Picture of Final assembly !
Plug the 12v dc converter into the arduino.
Remove the nylon cord and hook the large loop directly onto the roof hook.
Your finished i hope you enjoy this Chandelier as much as i do. 

Please vote for me in the LED contest :)
1-40 of 56Next »
bobica25710 months ago

I have to be nice and constructive :D
But this code is very ugly, you should consider using arrays for pin assingments and for-loops and using only few functions.

kluzz bobica2575 months ago

The code has great potential for improvement! How's that for nice and constructive. :)

starkec (author)  bobica2579 months ago

I agree completely I was only just starting in arduino when I wrote this. Almost four years ago now...

blake.willig7 months ago

What is the brand of the bottles you used? I can't quite make out the logo in the picture. I really like the hourglass shape like the classic coke bottles and haven't been able to find anything similar.

ikalnietis2 years ago
So if you know and you have improved your chandelier. Could you load it?
starkec (author)  ikalnietis9 months ago

Hi Im so sorry but lost all the code a few year back now, I haven't even turned her on in about 2 years :/

It would be intresting to improve mines
KirstenG111 months ago

how deep into the bottle are the led's ?>

starkec (author)  KirstenG19 months ago

They sit right at the top just under the lid, it seemed like the only position that 'filed' the bottle nicely.

spushpala1 year ago

super thx

temp_-1082677213.jpg
starkec (author)  spushpala9 months ago

Fantastic!

starkec (author) 1 year ago
I finally made a video of mine, thank you so much for sharing this great tutorial.

http://www.youtube.com/watch?v=VGHtFJdAG1I
starkec (author) 2 years ago
Hi guys, after leaving this project for a long time I'm thinking about overhauling the design and of course this instructable. I've been working on some pretty awesome upgrades that are easy to implement but will be a huge leap in the chandeliers abilities some of these improvements include multitouch! which only requires 12 extra resistors! Anyway I would really love it if you guys who have made your own could send me some picks to supplement the instructable a bit :) PM me for my email address :) Thanks all
this is my version doing the cable management. it worked great using some cheese platter ( 10 bucks) made out of bambus wood and some wire connectors. the arduino is now in a small box. i used some power pack which can be changed from 3V to 12V, i choose 5V, it worked great.
IMG_3884.jpg
patrickvaz4 years ago
hi,
a bit confusing, is it possible u have a circuit diagram for this,
Do you have a circuit diagram for this project? Thanks
OK this worked out for me: The Arduino Uno doesn't have 17 digital pins. Use the analog pins. Digital 14 = Analog 0, digital 15= Analog 1, digial 16= analog 3, digital 17 = analog 4. This worked for me. great project. I hope you can see how it has to be wired. This worked for me. You have to understand how a prefboard works to understand the wiring diagram.
this one is made using fritzing
Bildschirmfoto 2012-11-17 um 19.46.59.jpg
starkec (author)  WalterBeiter2 years ago
Wow thank you so much would you mind if i added this to the instructable?
go ahead. maybe you should make a notice. i think its a bit hard to understand if one does not understand how the prefboard works.
this is why i made the dirgramm. I really enjoy my lamp. Thanks you for your instructable.
v3nil3 years ago
Hii.. i tried to make this using a AVR.. i used an atmega8 and some shift registers and current drivers... i also added remote control functionality to control the colors.. :D
Kristy19733 years ago
I assume you used the Arduino Duemilanove and micro ATmega328?
starkec (author)  Kristy19733 years ago
No just the Atmega 328
? We bought a factory Arduino Uno board to program the Atmega168 chips. Then each student built there own Hack Arduino boards so they can pop the chip in and keep the $8 boards instead of a $30 board. I am building the LED chandlier my question is with the uno board do we have to load a boot loader so it works in hack board. The code seemed to load correctly but the chandlier isn't working. I double checked the schematic and everything seems to be wired correctly. I am just trying to verify that we programmed the chip correctly. The 328 that was in the UNO board we wired leds up to it directly and played with the code and it worked perfectly but when we programmed the 168 and put it in a hacked board it doesn't work.
I think I just relized what the part is, is it a crystal oss?
Forgot to ask you on your pic of the circuit is that a voltage regulator?? Could you explain what that part is and how to hook it up.

Thanks for taking the time to help.

Kristy
A couple more questions.

Which Arduino programmer do you recommend? Uno or Duemilanove

Also,I am a little confused on the pinout please reference the correct reference designator below. Thanks Kristy

LED1 anode = 0;
LED2 anode = 1;
LED3 anode = 2;
LED4 anode = 4;
LED5 anode = 7;
LED6 anode = 8;
LED7 anode = 12;
LED8 anode = 13;
LED9 anode = 14;
LED10 anode = 15;
LED11 anode = 16;
LED12 anode = 17;
RED bus A = 3;
GREEN bus A = 5;
BLUE bus A = 6;
RED bus B = 9;
GREEN bus B = 10;
BLUE bus B = 11;


pin 1- (PCINT14/RESET) PC6
pin 2 -(PCINT16/RXD) PD0
pin3- (PCINT17/TXD) PD1
pin 4- (PCINT18/INT0) PD2
pin5 -(PCINT19/OC2B/INT1) PD3
pin 6- (PCINT20/XCK/T0) PD4
pin 7- VCC
pin 8- GND
pin 9- (PCINT6/XTAL1/TOSC1) PB6
pin 10- (PCINT7/XTAL2/TOSC2) PB7
pin 11- (PCINT21/OC0B/T1) PD5
pin 12- (PCINT22/OC0A/AIN0) PD6
pin 13- (PCINT23/AIN1) PD7
pin 14- (PCINT0/CLKO/ICP1) PB0

pin 28 PC5 (ADC5/SCL/PCINT13)
pin 27- PC4 (ADC4/SDA/PCINT12)
pin-26PC3 (ADC3/PCINT11)
pin 25- PC2 (ADC2/PCINT10)
pin 24- PC1 (ADC1/PCINT9)
pin 23- PC0 (ADC0/PCINT8)
pin 22- GND
pin 21- AREF
pin 20 - AVCC
pin 19 - PB5 (SCK/PCINT5)
pin 18 PB4 (MISO/PCINT4)
pin 17 - PB3 (MOSI/OC2A/PCINT3)
pin 16 - PB2 (SS/OC1B/PCINT2)
pin-15 -PB1 (OC1A/PCINT1
david7974 years ago
Es una idea genial!!
reyman12184 years ago
I'm having problems printing the template for the spiral. I used the PDF options but it wasn't the right size so I'm not really sure what i need to do to get this to print out full size. Great instructable!
Grumpy Mike4 years ago
Without current limiting resistors you will damage your arduino. PWM does not limit the current to a safe level for the arduino. See http://www.thebox.myzen.co.uk/Tutorial/LEDs.html
starkec (author)  Grumpy Mike4 years ago
The amount of time that current is applied for is minimal. I have been running it for years now and many other LED arrays use the same principle and i am yet to see a problem caused by it. So I really dont think its a problem to be honest.
kho24 years ago
how to program it??with software or??emergency...pls help..thx
acosicris4 years ago
oops.. there's an available Arduino here but through online. Kinda expensive for me.
acosicris4 years ago
Fantastic instructable. I want to buid mine using ping pong balls, but I think there's no available Arduino here. Too bad.
dmeyers14 years ago
Is there a .pde file that can be downloaded and loaded up on the arduino?
Vinsu4 years ago
Whoah, that pretty. Great job!
abdbtech4 years ago
Great project. I am curious how to hook up the wires. The duemilanove board I have only has 13 digital pins is it possible to use with this project?
starkec (author)  abdbtech4 years ago
The duemilanove has 13 pins labeled digital however the analogs can be used as digital as well ie analog 0 is digital 14 :)
1-40 of 56Next »