For an event here in my home town (Eletrónica e Informática, pela AICB), I decided that I wanna do some Bluetooth project and while browsing through a Chinese store, I stumble into a wood phone booth – and it just hit my mind – another RGB lamp, controlled with Bluetooth and an Android app. I did the wiring and the programming, my lovely wife has taken care of the aesthetics .

Hardware needed

  • 1x Arduino Micro (any other could do – but beware of the pwm pins)
  • 1x Bluetooth 4.0 LE HM-10
  • 1x Adafruit Neopixel Ring 16 x 5050 (or anyone compatible with WS2812 5050)
  • 1x Power Supply 5V, 2A for Arduino Micro (the end mus be micro usb)

Bluetooth HM-10

The HM-10 bluetooth 4.0 LE module is a small chip ( made by Jinan Huamao) that uses a Texas Instruments BLE (Bluetooth Low Energy) chip. Has TX and RX Pins. Data passing through will be sent over bluetooth to a device and vice-versa. It uses serial communication.

Since this chip is 4.0 (LE) it can also take advantage of the new functionalities.

Here’s the pinout for the chip:

Image from
Image from

For this small project, we just need to use (and solder) the pins from the left side – TX, RX, 3.3v and GND. More information about the chip and other things you can solder into the chip, please visit HANGAR42.



Here’s a schematic for the RBG Lamp



IMG_20160319_123517 IMG_20160319_123741

Phone Booth

I put the NeoPixel ring in a wood phone booth that I bought for about 7€ in a Chinese Shop (there are a lot of them here in Portugal) and added some “makeup” to appear like a English Phone Booth.

Wood phone booth
The “raw” phone booth

After the first coat of red paint

After the paint dried and with a coat of clear varnish

Putting the white vinyl letters

Inserting the components – the Neopixel ring above the bottom plate and bellow, the arduino

The bottom plate in place and the Arduino power already in place

The Phone Booth ready and shinny !


The Bluetooth APP (for Android) that I used to control the RGB light was taken from the excellent Instructable Control RGB lights from Android with Arduino & Bluetooth LE (BLE), by danasf.

You can head to his instructable and download the application from there. Since is not on Google Play, you have to enable “Install from Unknown Sources” in your device.  I’m starting to learn how to program Android and after I’m confortable with it, I will develop my own application and change the code to use it. 🙂


I’ve changed my code (and used some of his) to match the incoming data from danasf application. I’ve added a small feature that, when the colors are 0, it performs a small loop with all the color on the NeoPixel ring. It is taken from the Adafruit examples for the NeoPixel RGB leds.


#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>

SoftwareSerial bt(9,8); // RX, TX

int red,green,blue;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, 7, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.println("Lets light the world");
  // set the data rate for the SoftwareSerial port - Bluetooth

  //Strip LEDs
  //start doing something
  colorSet(strip.Color(random(1,255), random(1,255), random(1,255)), 0); 

void loop() { // run over and over
  if (bt.available() > 0) {
    // Get the colors
    int red = bt.parseInt(); 
    // do it again:
    int green = bt.parseInt(); 
    // do it again:
    int blue = bt.parseInt(); 
    // look for the newline. That's the end of your
     if ( == '\n') {
      // sends confirmation
      // constrain the values to 0 - 255
      red = constrain(red, 0, 255);
      green = constrain(green, 0, 255);
      blue = constrain(blue, 0, 255);
      //create some codes here:
      //if all 0, lets create some sequence
      if (red == 0 && blue == 0 and green == 0) {
      else {
        // fill strip
        colorSet(strip.Color(red, green, blue), 0); 

// Fill strip with a color
void colorSet(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

And the final work

IMG_20160329_221127 IMG_20160329_221118 Phonebooth

Hope you like it !

Some References

Danasf instructable