RGB Flashlight




This flashlight can produce hundreds of different colors based on the rotation of a potentiometer. It uses one three watt RGB led to create bright colors.

Parts list:
1x Arduino UNO
1x Atmega328 with arduino bootloader
     If you need help buring the boot loader chech out this site http://arduino.cc/en/Tutorial/ArduinoToBreadboard
1x 16 Mhz crystal
2x 19-22 picofarad capacitors
1x 28 pin dip socket
1x 3 watt RGB LED
3x b337 npn transistor
1x lm7805 5 volt regulator
3x 470 ohm 1/8th watt resistor
4x 10 ohm 1/2 watt resistor
2x 22 ohm 1/2 watt resistor
1x Flashlight case, I used a flashlight that took d-cell batteries.
1x Toggel switch, Unless you want to use the switch that is built into the case
1x 9 volt battery
1x 9 volt battery clip
1x 3x3 perfboard
1x 5k ohm potentiomotor
Extra wire 

Soldering iron
Hot-glue gun
Wire cutter
Wire stripper

Step 1: The RGB Sketch

This step explains how the arduino program works, you can skip to the next page if you want.

Basically the code allows you to control the RGB led's Color with one variable instead of three.
Most of the code is dedicated to following the graph I included,it shows what color is generated by mixing different amounts red, green, and blue light.

Program steps:  
1. Read the potentiometer's value
2. Convert the potentiometer's value to a more usable number range
3. Using if statements generate the red, green, and blue analog values for each color.

You can copy and paste the code or download the included zip file.
int rpin = 6;//can be any PWM pin
int bpin = 3;//can be any PWM pin
int gpin = 5;//can be any PWM pin
int rcolor = 255;// holds the coresponding brightness for each color
int gcolor = 255;
int bcolor = 255;
int start = 100;// used for the option startup code
int potv = 0;// Potentiometer voltage
int color =0;//mapped pot value

void setup(){
  pinMode(rpin, OUTPUT);
  pinMode(gpin, OUTPUT);
  pinMode(bpin, OUTPUT);
  // color check leave this commented out unless you want to
  // have the flashligth cycle through the colors at the beging
//  //red
//  analogWrite(rpin, 0);
//  analogWrite(gpin, 255);
//  analogWrite(bpin, 255); 
//  delay(start);
//  //yellow
// analogWrite(rpin, 0);
// analogWrite(gpin, 0);
// analogWrite(bpin, 255); 
//  delay(start);
//  //green
// analogWrite(rpin, 255);
// analogWrite(gpin, 0);
// analogWrite(bpin, 255);  
//  delay(start);
//  //cyan
// analogWrite(rpin, 255);
// analogWrite(gpin, 0);
// analogWrite(bpin, 0);
//  delay(start);
//  //blue
// analogWrite(rpin, 255);
// analogWrite(gpin, 255);
// analogWrite(bpin, 0);  
//  delay(start);
//  //magenta
// analogWrite(rpin, 0);
// analogWrite(gpin, 255);
// analogWrite(bpin, 0);
void loop(){
potv = analogRead(A0); //read Potentiometer position
color=map(potv,0,1023,0,1530);// change input number range

if(color>= 0 && color <=255){
  //red to yellow
  gcolor = map(color,0,255,255,0);
  analogWrite(rpin, 0);
  analogWrite(gpin, gcolor);
  analogWrite(bpin, 255); 
if(color>= 255 && color <=510){
  //yellow to green
 rcolor = (color - 255);
 analogWrite(rpin, rcolor);
 analogWrite(gpin, 0);
 analogWrite(bpin, 255); 
if(color>= 510 && color <=765){
    //green to cyan
    bcolor = (color - 510);
    bcolor = map(bcolor,0,255,255,0);
 analogWrite(rpin, 255);
 analogWrite(gpin, 0);
 analogWrite(bpin, bcolor);  
if(color>= 765 && color <=1020){
    //cyan to blue
    gcolor = (color - 765);
 analogWrite(rpin, 255);
 analogWrite(gpin, gcolor);
 analogWrite(bpin, 0);
if(color>= 1020 && color <=1275){
  //blue to magenta
  rcolor = (color - 1020);
  rcolor = map(rcolor,0,255,255,0);
   analogWrite(rpin, rcolor);
 analogWrite(gpin, 255);
 analogWrite(bpin, 0); 
if(color>= 1275 && color <=1530){
  //magenta to red
  bcolor = (color - 1275);
   analogWrite(rpin, 0);
 analogWrite(gpin, 255);
 analogWrite(bpin, bcolor);


Step 2: Uploading the Program

Grab your atmega328 with bootloader and insert it into your Arduino Uno.

First to make sure you atmega328 is working upload the blink sketch from the examples menu in the Arduino IDE. After you have confirmed that you chip works upload the RGB sketch and remove the atmega328 from the Arduino Uno for later use.

Note: I originally configured my Flashlight's atmega328 run on its internal clock, while this eventually did work it was no easy task.

Step 3: Modify the Flashlight Case

First you have to decide if you are going to use the original switch or replace it with your own toggle switch. I replaced my switch because I didn't want to try to solder to the old switch.

After that you can drill a hole for your potentiometer and maybe a switch. Make sure to test fit all your parts.

Next you need to replace the original light bulb with your high power led. Each flashlight will be different but for mine I removed what the old light bulb screwed into and used hot glue to attach the new led.

Finally take your perfboard and cut it so that it will fit in the flashlight tube I like to use wire cutters for this step.

Step 4: Place Componets

I drew the schematic in a rather unconventional way so if you have any questions please ask and I will try to answer them. The numbers by the resistors are their values in ohms and the 22 ohm resistor pair is for the led's red channel.

I highly recommend that you actually have a plan before you start to solder parts to your perfboard. I did not and I had trouble fitting the parts into the flashlight at first. I recommend that you put all of your parts in the board and tape them down. Then plan as much of your soldering out as is possible by using a permanent marker to draw paths.

Step 5: Solder

Now its time to solder, hopefully your board will be a little bit more organized then mine but if it works who cares.

To go longer distances across the perfboard I like to use pieces of wire and bent leads. After you solder cut any extra leads and insert your programmed atmega328 into its socket.

Make sure to double check your circuit to prevent damage to the circuit.
If all looks well power up your circuit to test it.

Step 6: Install

Fitting every thing in can be tricky at first. I started by attaching my switch and potentiometer. Then I dropped the 9 volt battery in and slipped in the perfboard. If it doesn't fit you can try bending some parts down, but you might need to get your soldering iron back out and move some things. Finally screw on the lid.

Step 7: Color With Light

Now that you have your flashlight built turn it on and have some fun with it.



    • Pie Contest

      Pie Contest
    • Paper Contest

      Paper Contest
    • Remix Contest

      Remix Contest

    8 Discussions


    4 years ago on Step 2

    I don't' have a atmega328 with bootloader can I use a breadboard instead?

    If so, please send me a picture of the circuit, thanks.


    4 years ago on Introduction

    This is amazing! I wish I knew wtf was going on so I could make one!


    5 years ago on Introduction

    Why not an arduino, the resistors, a potentiometer and an rgb led. You dont have to solder the pieces together.

    2 replies

    Reply 5 years ago on Introduction

    I soldered it together because I wanted a more permanent project and because my arduino uno wasn't going to fit into the flashlight case.


    5 years ago

    Why the AtMega and not a AtTiny? Seems like a little overkill...

    1 reply