Introduction: Glowing Picture

For this project you are constructing a picture with a light up background. The purpose of this project is to have a background that changes color depending on how much light is in the room. This is a really cool effect and can be used on almost any picture. I have my project next to my bed and when I turn the lights off it glows and I can use it like a night light.

Materials

  • See through paper
  • Picture (best if it is a picture that also looks good as a silhouette)
  • A frame that fits the size of the picture you want.
  • Conductive thread
  • Thin thread
  • Gemma board
  • Light sensor
  • Neopixels (atleast 5) (any small light that can be connected to a circuit through electrical thread preferably neopixels)
  • Sheets of felt (no more than 3)
  • 2 sheets of white cardstock paper
  • 1 sheet of white printer paper
  • Glue
  • Tape
  • Access to a printer and computer

Resources

Step 1: Choosing a Photo

The first step is to find a photo you want to use in your creation. I have only used one type of picture for this project so I don't know what different variations of images will work and not work. My best advice is to pick a picture that will also look good as a silhouette. For example I chose a sunset picture which works well because when its dark in the room the foreground still looks good when the background (the sky) is lit up.

Step 2: Frame

Once you find the photo you want, print it out on the thinnest and most transparent piece of paper you can get your hands on. Normal print paper will work, however your background will not glow as bright. After you printed out the photo find a frame that fits it. I went to a Goodwill and found a decent frame for $1 that worked pretty well. The most important thing when picking out a frame is that the photo fits in it well and the back is either open, or the back can be removed.

Step 3: Felt Sleeve

Next take a piece of white paper and make sure it is just slightly less wide than the width of the frame. This is going to be the back of your light-box. Take the felt and wrap it around the piece of paper till it reaches all the way around. This may mean combining two or more pieces of felt. Make sure it fits snug around the piece of paper. To connect the felt around the paper I used staples but sewing would also be a good option. Now you should have a felt sleeve for your piece of paper.

Step 4: Programming

You need to program your gemma so that it can tell your lights what to do depending on how much light the light-sensor detects. Below I have copied the code I used for my project feel free to copy it or use it as a template. I would suggest that in each loop you create a gradient of colors so it looks more natural, however it's completely up to you this is where you can get really creative. If I were to do this project over I would make the lights change for a smaller amount of light change. I say this because when the light is sensing the most amount of light to change the colors of the neopixels, it's so bright that you cannot even see that the background of the picture has changed. Also it would be cool to add a loop where if its too bright in the room to see the background it turns off, this way you could have it always plugged in but it'd only turn on if it got dim in the room.

Code used in CodeBender (feel free to copy)


link: https://codebender.cc/sketch:100071

#include

#define PIN 1//This is the data pin connected to arrow on first NeoPixel

// Parameter 1 = number of pixels in strip // Parameter 2 = pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ800);

const int numReadings = 5;

int readings[numReadings]; // the readings from the analog input int index = 0; // the index of the current reading int total = 0; // the running total int average = 0; // the average

int inputPin = A1;

// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(inputPin, INPUT); //Serial.begin(9600); // We'll output some information over serial only on LILYPAD for (int thisReading = 0; thisReading < numReadings; thisReading++) readings[thisReading] = 0; strip.begin(); }

// the loop routine runs over and over again forever: void loop() { //This Section before the if statement smooths the data by taking the averge of 5 values // subtract the last reading: total= total - readings[index]; // read from the sensor: readings[index] = analogRead(inputPin); // add the reading to the total: total= total + readings[index]; // advance to the next position in the array: index = index + 1;

// if we're at the end of the array... if (index >= numReadings) // ...wrap around to the beginning: index = 0;

// calculate the average: average = total / numReadings; // send it to the computer as ASCII digits //Serial.println(average); //only on LILYPAD delay(500); // delay in between reads for stability if(average > 75 && average < 200)//this is our middle range value { //if the tech puts a little hot air over the temp sensor it will raise to at least 170 strip.setPixelColor (0,50,120,0); //first neopixel in strip strip.setPixelColor (1,70,100,0); //second neopixel in strip strip.setPixelColor (2,90,80,0); //third neopixel in strip strip.setPixelColor (3,110,60,0);//fourth neopixel in strip strip.setPixelColor (4,110,60,0); strip.setPixelColor (5,90,80,0); strip.setPixelColor (6,70,100,0); strip.setPixelColor (7,50,120,0); strip.show (); //this is like hitting send on a text to neopixels but the text tells the lights what to do } else if (average >= 200 ){ //this is our high value strip.setPixelColor (0,150,0,30); //first neopixel in strip strip.setPixelColor (1,150,0,60); //second neopixel in strip strip.setPixelColor (2,150,0,120); //third neopixel in strip strip.setPixelColor (3,150,0,180); strip.setPixelColor (4,150,0,180); strip.setPixelColor (5,150,0,120); strip.setPixelColor (6,150,0,60); strip.setPixelColor (7,150,0,30);//fourth neopixel in strip strip.show (); //this is like hitting send on a text to neopixels but the text tells the lights what to do } else{//this is our low value, anything below 160 strip.setPixelColor (0,0,0,150); //first neopixel in strip strip.setPixelColor (1,0,50,150); //second neopixel in strip strip.setPixelColor (2,0,100,150); //third neopixel in strip strip.setPixelColor (3,0,150,150); strip.setPixelColor (4,0,150,150); strip.setPixelColor (5,0,100,150); strip.setPixelColor (6,0,50,150); strip.setPixelColor (7,0,0,150);//fourth neopixel in strip strip.show (); //this is like hitting send on a text to neopixels but the text tells the lights what to do } }

Step 5: Circuit

You are going to sew your circuit onto your felt sleeve. The outside part of the sleeve needs to be long so that the sensor can be placed near the top of the frame. Both the sensor and gemma board will be on the outside of the sleeve and the lights will be on the inside. Follow my drawing to help you. As you can see the lights are ran in a parallel circuit and wrap around connecting to the gemma. Make sure that on the inside there is an even amount of space between each light so that an equal amount of light will shine onto the back of the picture. When sewing this circuit be sure to wrap around each pin hole multiple times to ensure a strong connection.

Step 6: Battery Pouch

I'd recommend using some of the left over felt to create a pouch for your battery. This way it won't flap around or accidentally become disconnected. I simply sewed some felt onto my sleeve that was slightly bigger than my battery so my battery could slide inside. Line up the battery and make sure it can connect to the gemma and then trace around it with marker onto the felt so you know where to place the pouch.

Step 7: Silhouette

Next we will add black cardstock and attach it to the back of the picture wherever we don't want the picture to glow. For a scenery picture this would mean tracing the foreground onto black cardstock paper which would then be glued to the back and matched up with the shape of the foreground. If you are having trouble cutting the foreground perfectly to match the picture, it may be easiest to also print the picture onto the black cardstock making it easy to cut the foreground out.

Step 8: Light-Box

Your light-box can be any shape of your choosing, as long as it traps the light. What I did was curve the back of the light-box so that it would reflect off the white pieces of paper and hit as much of the photo as possible. Take your white sheet of paper that you used earlier to determine the size of your sleeve and put it through the sleeve. Next, line the paper up to the back of the frame vertically so each end of the paper is at the top and bottom of the frame. The paper should be much longer than the frame so that you have room to curve it. The amount of space between the lights and picture is up to you and will depend on how bright your lights are. My recommendation is to turn your lights on and adjust the distance between lights and picture till the picture glows bright without the circles of light shining through. Then you can use either glue or tape to attach the piece of paper at the top and bottom of the frame. You should now have a curved back of your frame. Next attach pieces of white paper to the sides of the light-box so almost no light can shine through the sides. You may need to tape the top of the sleeve to the top of the light-box so that it won't slide down.

Step 9: Finished!

Now you should have your finished product! Go test it out by putting it in a dark room and shining different amounts of light onto the sensor changing the color of the background. You may want to tweak the light-box or programming but you should now have a functioning glowing picture.

Enjoy!