Bluetooth Controlled RGB LED strip

RGB LED strips such as this are available for a low price.They are generally bundled with a IR controller and a power supply to power the LEDs and to change the color ,display various colour sequences etc.The IR Receiver is  similiar to those used in TV and requires line-of-sight for reliable operation . I wanted the strip to be Controllable via a PC or a Mobile Phone.So I decided to make my own RGB LED strip Controller and to enable wireless control  i used Bluetooth technology.The device can be controlled using a PC or a mobile phone with Bluetooth having a suitable graphical  user interface.

The Hardware needed for this build is pretty simple and uses commonly found devices and may be salvaged from old electronics.

  1. Atmega8L-8PU 8-bit AVR microcontroller
  2. LM1117-3.3 3.3V LDO regulator
  3. IRF640 N-Channel MOSFET(salvaged from an old Uninterrupted Power Supply-Thanks Kushal for that Dead UPS! )
  4. Connecting wires ,Berg strips,etc.
  5. 12v 1A+Wall wart.

The Firmware for the ATmega8L micrcontroller was developed with Arduino 0023 and also with Arduino 1.0 (Can be downloaded for your OS of choice from HERE).The GUI for the Windows PC was Developed using the GTK+ toolkit using the python bindings available via pyGTK(Get it from here).The GUI was designed for running on nokia s60 devices using  pyS60.

The arduino Firmware

The arduino is an awesome prototyping platform.Churning out prototypes from Ideas is very fast since all the hardware and other functions are pretty much abstracted out and only the Application Logic needs to be implemented.

The Firmware performs the following basic functions.Handle the communication routines,Control the LED brightness for each of the Colors RED,GREEN and BLUE and also be able to display the various sequences of colors of light.

I have a Arduino Duemilanove that came with an Atmega328P processor onboard.The Atmega 328P would have been an overkill for this project so i decided to replace it with an Atmega8L.The mega8 has only 3 v/s 6 PWM  channels and 8K v/s 32K of flash program memory of the mega328.To verify the firmware I set up a simple testbench with three LEDs one each of RED GREEN and BLUE LEDs plugged into a breadboard connected to the Digital pins 9,10,11 of the arduino.These Correspond to the PWM Pins on the atmega8. The Communications with the controller was tested with the standard serial port given by the FTDI interface of the arduino.

Once The test bench was setup I could move on to Actually Writing the Firmware.The Setup section consists of all the PWM pins being set as Output and the Serial Port opened to Communicate at 9600 Baud.The Main while Loop has a Non-blocking delay section in which the Functions are updated at a User changeable delay.The more the delay the more slowly the color transition takes place and viz.This is necessary because if a delay is not present then the transitions would be so fast that it would appear as if the LEDs are blinking.I have NOT used the default delay function of the arduino library because of it blocking nature(Here’s a good article about Non-blocking code).The delay would block the processor by executing a number of instructions with a known execution time to get the specified time delay and only then execute the next instruction.This blocking delay would cause problems when data arrives at the serial port and the processor is busy executing the delay.Hence the data will be missed by the processor or will be processed only when the delay loop completes execution thus introducing lags between the user giving input and the suitable function being executed.Non-blocking Delay is hence used to prevent these problems and to provide reliable communication.And Precisely for this reason I have avoided Blocking codes in my Firmware.

The CellPhone GUI

The Cellphone GUI is a  pyS60 script with five consecutive dialog boxes for mode selection,red value,green value,blue value and the update delay value  respectively.The mode selection selects one of three modes.Mode 0 is the default mode  will fire up if no bluetooth device is connected for control .In this mode the entire colour spectrum is traversed starting from red end of the spectrum.The transition goes on in a infinte loop.Mode 2 is a mode where each color namely Red,Green,Blue and White Respectively “breathe” i.e. the intensity of each color goes from zero to maximum and back to zero.Check out the Video to see it in action.The Mode three is the Color Chooser Mode. In this mode the User can choose the color.Set the value of the respective color from 0 for completely off to 255 for fully bright.

Also the Update delay can be set in milliseconds.This is used for setting the Delay Between Each color transition.the more the dealy the more slower will be the colour change. An update delay of around 5 to 20 milliseconds has a pleasing effect.

[Screenshot]The Pys60 Script Running on my S60 3rd Edition Nokia N78.


The PC gui was created Using PyGTK and UImanager Tools for GUI Creation. The PC GUI runs well on Windows (and probably also on Linux).I have tested it on my Windows Seven Home Premium 64-bit laptop .For Running the Application on Linux Small Amount of changes will have to be made ,Like changing the serial port label(on linux the PORT variable would be something like  dev/ttyUSB0) etc. But other than that it would work fine on linux too.The GUI has three sliders for Color selection and a Bunch of radio Buttons for Mode selection.The Sliders are active only in the color selection mode.Check out the Source code included in the Zip file attached

[Screenshot]The Python Gui running on A win7 Home Premium x64 Machine

Hardware Design

the Hardware basically consists of a Atmega8L Microcontroller (with an Arduino Bootloader on-board which i have  included in the file) and three  IRF640 N-channel MOSFETs ,One Each for Driving Each  Color on the RGB LED strip .There’s also Lm1117 3.3V power regulator for powering up the Logic and a Berg connector for connecting the RX,TX,GND and VCC lines of the Bluetooth Module with the Atmega.I did Not make a schematic since i did not want to etch a PCB.Instead i just built the entire circuit on a perf-board and used flexible wire to build the circuit.The Entire Circuit is designed to be powered by an 12V DC Supply.I checked the Power  Consumption of the entire circuit with a Multimeter and it was found to be around 1Amp.I used a 12v 2 Amp SMPS based supply.

I made My prototype on a perfboard here’s a Pic of the Top Side.

And the Bottom Side

Working on a PCB using toner tranfer technique to finalise the prototype. All the Python Source Codes and the Hardware schematics and the Layout Diagrams in Eagle Format are included in the attached Zip File .Feedback is appreciated!(Note:a ULN2803 and a 7805 are some extra components on the PCB shown above that i tried out during testing.But are not necessary in this circuit).

Here are some pics of the project in action.

Download all the required Source codes and the hardware design files from here.

UPDATE: Uploaded all the source Code to github

Adding Bluetooth To your Microcontroller projects

Bluetooth has become Ubiqutios these days Bluetooth Wireless technology is present is Most mobile phones today as well as in laptops and in desktop PCs.And If your PC or laptop doesn’t have it then you can get a Bluetooth USB dongle for cheap(like 2-3$ )!

Wouldn’t it be interesting if your mobile phones /PCs could talk to your Micro-controller Projects??

Lets find out how to add Bluetooth capability easily to your existing Micro-controller projects with out many hardware or software changes.

Bluetooth has many ‘profiles’ for communication with various kinds of devices.The profile in which we will be interested in is the Serial Port Profile or SPP for short.This profile simply emulates a standard Serial port over a wireless bluetooth link.

I was working on a arduino project and wanted to eliminate the wired connection to the arduino form my laptop.The laptop had a GUI running which sent data over a serial COM port to the arduino.I got a Bluetooth module from Lamington road,Mumbai for around 850 INR. You could find it for less on ebay or something.The model number of the bluetooth module is AUBTM-20 .Its  a Class 2 Bluetooth SPP module (Class 2 meaning that its range is around 10 meters/ 30 feet).

I added a relimate connector to make it easy to connect it a breadboard or to connect jumper wires.I had the following connections on the module taken to the connectorGND,VCC and the RX and TX connections of the serial port.

Step one : Test the module

Just power up the Bluetooth module(I Fed in power to the Bluetooth Module from the 3.3v output of my arduino ) and scan the bluetooth devices on your PC/laptop.If everything’s done correctly you will be able to find a bluetooth device named AUBTM-20 or something simliar.You will be asked for a pairing code in case of the above model (AUBTM-20)it is 8888 but it might be different if you are using a bluetooth module from another vendor.On my WINDOWS 7 Laptop it showed up as “AUBTM-20” under devices and printers.

Right Click on the device name in the devices and printers folder under the hardware tab .You will find a Standard Serial over Bluetooth Link and the COM port number writeen in brackets. Note down the COM port number.This completes the Basic test.

Step Two: Verify The COM link.

you will need to verify if you are able to send and receive data over the serial port to be able to use the device in your project for that. I used the FT232RL USB to serial converter chip on-board the arduino. But remember to remove the ATmega processor chip from the socket.(You’re out of luck if you have one of those SMD versions of the arduino :( .In this case you will need to get hold of a 3.3V power source such as the lm1117-3.3 and a FT232RL breakout board from here or here ) before you connect the bluetooth module to the arduino. Now Connect the RX line of the Bluetooth module to the TX line of the FT232RL module or you arduino DIgital Pin 1 and the TX line to the RX line of the  module or to that of the arduino.

Now open a terminal application such as TeraTerm (You can download it from here) select the serial port on which you connect your arduino/FT232 module(you can get the com port number of the FTDI device in the device manager under COM ports -> USB serial Port).Open a terminal with the COM port number of the The FTDI device and set the baud rate to 9600 ,8bit -data,Parity- none,1 -stop bit,Flow control -None.

Now open another COM port,this time with the for the serial COM port of your bluetooth device that you had noted down in the first step. The settings of this COM port will also be the same as above FTDI device. IF all the connections are proper and the link is established then anything you type in the FTDI COM terminal should appear on the Bluetooth COM terminal and vice-versa

The +CON:1 is something that the Bluetooth module gives out on the COM port whenever a device is connected .This Proves that the device can successfully communicate over the serial port

Step Three: Finally connecting the Bluetooth module to the Micro-controller.

Here’s a quick arduino script to verify everything’s fine .

void setup() {
  Serial.begin(9600);      // open the serial port at 9600 bps:

void loop() {
    if( byte( == 'a' )) {
        Serial.print("nHey!");       // print Hey

Just open the arduino IDE and open the serial terminal.Set the COM port number that you noted down in the First Step and the baud rate to 9600. Just type an “a” without the quotes  in the terminal and you should get a reply with a ‘Hey!’.A word of caution the Bluetooth module works at the CMOS voltage range of 3.3V and can take only upto 3.7v max so while interfacing with TTL level devices such as the ATmega8/168/328 of the arduino level conversion will be required (check out this app note from NXP).I chose to use the 3.3v Level Atmega8L instead since the device can work at 3.3V no level conversion would be required.This is the final device that i made uses the LM1117-3.3 as the power regulator to regulate the 12v from the wall wart.

For microcontrollers such as LPC1768 and LPC2148 which run at 3.3v levels no level conversion or modification would be required at all.All that would be needed to be done is to connect the rx,tx and the ground lines of the Microcontroller to the Bluetooth module and you would have  a Bluetooth enabled microcontroller project!

The board was first designed with the Atmega8 then i added the 3.3v regulator and switched over to the Atmega8L.The Mosfets and other devices onboard are for another project that i’m currently working on.Will Post about the project in my next post.Post in the Comments below what you think about it !