Brian Chamberlain
Published © MIT

Ambient Web Connected Color Orb

I wanted to experiment with NeoPixels from Adafruit and the Particle Core so I built a color changing ambient light orb.

IntermediateShowcase (no instructions)2,044
Ambient Web Connected Color Orb

Things used in this project

Hardware components

Spark Core
Particle Spark Core
×1
Adafruit Neo Pixel - 4 pack - Breadboard friendly
×1
Adafruit 8 channel - Bi-directional Logic Level Converter
×1
LED Glow Orb
Buy this on amazon and gut the electronics. The translucent shell works really great!
×1

Software apps and online services

Heroku
Firebase

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

Picture of circuit

Code

Particle code

C/C++
Paste this code into the Particle IDE for your project
#include "neopixel/neopixel.h"

// IMPORTANT: Set pixel COUNT, PIN and TYPE
#define PIXEL_PIN D2
#define PIXEL_COUNT 4
#define PIXEL_TYPE WS2812B

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

int r = 0;
int g = 0;
int b = 0;

void setup() 
{
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}
void loop() 
{
   Spark.function("color", ledControl);
   if (r == 0 && b == 0 && g == 0) {
     rainbow(20);
   }
}

int ledControl(String command){
  int i;
  String rs = String(command.substring(0,3));
  String gs = String(command.substring(3,6));
  String bs = String(command.substring(6));
  r = (int)rs.toInt();
  g = (int)gs.toInt();
  b = (int)bs.toInt();
  for(i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, strip.Color(r,g,b));
  }
  strip.show();
  return 1;
}

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));
    }
    strip.show();
    delay(wait);
  }
}

// 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) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

Orby Hue App

This is the code you'll need to run on heroku (or other service) if you want a webUI to change the color of your orb

Credits

Brian Chamberlain
11 projects • 21 followers
Hi! I am a software engineer who enjoys hacking on hardware on the side. My interests are in DIY projects for the home, IOT, and 3D printing
Contact

Comments

Please log in or sign up to comment.