Light-Controlled Box

by jenii337 in Circuits > Audio

2630 Views, 12 Favorites, 0 Comments

Light-Controlled Box

photo-5-2.JPG
I came up with the idea of a smart device that would sense the natural light outside of a room and adjust the brightness of the lighting inside to maintain a constant brightness. Also, if it exceeded a certain brightness outside, it would lower a shade over the window. For this project, I made a model of this, using a small box to represent a room. 


In order to make this device, you will need the following materials:

- Arduino Uno microcontroller
- breadboard
- jumper cables
- servo cables
- 2 LEDs
- photoresistor
- servo motor
- 2 470 Ω resistors
- 1 10 kΩ resistor
- small box
- paper
- small piece of cloth

Connect the LEDs

photo 1 copy.JPG
LED.png
Set up your two LEDs on the breadboard following the circuit diagram in the second photo. First, run jumper cables from the positive rail of your breadboard to the 5V pin and from the negative rail to ground. Connect the positive ends to 470Ω resistors and into digital pins 10 and 11. Then connect the negative ends to the negative rail on the breadboard. When you are finished, your breadboard should look something like the first photo. 

Connect the Photoresistor

photo 2 copy.JPG
photresistor.png
Now, add your photoresistor to the circuit. Connect one end to the positive rail of your breadboard, and the other end to analog pin 0 and a 10 kΩ resistor. Then connect the other end of the resistor into the negative rail, as show in the second photo. 

Program the Arduino to Fade the LEDs

Screen Shot 2013-12-08 at 10.26.35 PM.png
First, we will program the Arduino to take in an input from the photoresistor and dim or brighten the LEDs accordingly. Enter the following code:

int sensorPin = 0; //connects the photoresistor to pin A0
int ledPin = 10; //connects the LEDs to pins D10 and D11
int ledPin2 = 11;
int sensorValue = 0; 
int fadeAmount = 5; 
void setup() {
  pinMode (ledPin, OUTPUT); //declares pins D10 and D11 as outputs
  pinMode (ledPin2, OUTPUT);
  //Serial.begin(9600);
}
void loop () {
  sensorValue = analogRead(sensorPin); //reads the input of the photoresistor
  //Serial.println(sensorValue);
  fadeAmount = map(sensorValue, 0, 1000, 500, 0); //maps the input of the photoresistor to a corresponding brightness
  analogWrite(ledPin, fadeAmount); //brightens or dims the LEDs according the the photoresistor input
  analogWrite(ledPin2, fadeAmount);
}

You can map the input of your photoresistor by uncommenting the following two lines in your code:

Serial.begin(9600);
Serial.println(sensorValue);

Then, open the serial monitor and expose your photoresistor to various amounts of light. Decide on the range that you would like to use, and enter the values in the following line:

fadeAmount = map(sensorValue, [lower value], [upper value], 500, 0);

Connect the Servo

servo.png
photo 3 copy.JPG
fritzing.png
Now that we have the LEDs working, add the servo to your circuit. Connect the white wire to digital pin 9, the red wire to the positive rail (5V), and the black wire to the negative rail (GND). Your completed circuit should look something like the third photo.

Program the Servo to Turn at a Certain Brightness

Screen Shot 2013-12-09 at 1.30.03 AM.png
Add the following bolded lines to your code:

#include <Servo.h>
Servo servo;

int pos = 0;
int sensorPin = 0; 
int ledPin = 10;
int ledPin2 = 11;
int sensorValue = 0;
int fadeAmount = 5;

void setup() {
  servo.attach(9); //connects servo to pin 9
  pinMode (ledPin, OUTPUT); 
  pinMode (ledPin2, OUTPUT);
  servo.write(pos);
  //Serial.begin(9600);
}

void loop () {
  sensorValue = analogRead(sensorPin);
  //Serial.println(pos);
  fadeAmount = map(sensorValue, 0, 1000, 500, 0); //maps input
  analogWrite(ledPin, fadeAmount); //adjusts brightness of LEDs based on input
  analogWrite(ledPin2, fadeAmount);
 
  if ( (sensorValue > 500) && (pos == 0)  ) { //turns servo 180° in increments of 1° if input is greater than 500 and the position of the servo is at 0
   for (; pos < 180; pos +=1) {
    servo.write(pos);
    delay(10);
    } 
  }
  if ( (sensorValue < 400) && (pos == 180)  ) {
//turns servo back 180° in increments of 1° if input is less than 400 and the position of the servo is at 180
   for (; pos > 0; pos -=1) {
    servo.write(pos);
    delay(10);
    }
  }

}


This will be used to lower a shade if the brightness sensed by the photoresistor is greater than 500 and raise the shade if it is less than 400.

Set Up the LEDs and Photoresistor in the Box

6-3.JPG
6-2.JPG
6-1.JPG
Find a small box and cut a hole in one side to represent a window. Then poke two pairs of small holes in the top of the box. Put the LEDs through the holes and put the photoresistor in a bottom corner of the "window." Connect them back to the breadboard using servo cables. 

Set Up the Servo and Shade in the Box

7-1.JPG
1-2.JPG
For the last part of this project, we need to set up a window shade.  First, cut a small piece of cloth in the shape of your window. Then roll a small piece of paper into a tube that will fit around your servo. This will function as a "curtain rod." Attach the servo to the inside of the box, next to the window. With the servo rotated 180° in the "lowered" position, tape the cloth to the rod.