How to couple a servo to a photo-resistor on an Arduino board

2011 Sep 09

After using the great examples provided in the Arduino kit, I decided to create my own circuit (nothing very fancy) by combining 2 examples and see if it’s going to work.

So I first draw the schema:

Components:

  • 10k ohms resistor (R1)
  • photo-resistor (LDR)
  • Servo motor (Servo)
  • Arduino UNO or alike

Then tested it. And it worked the first time :)

Pretty nice to see the servo moving when the light goes down or up.

Here is the code I’m using:

#include <Servo.h>    
Servo myservo;
int pos = 0;
int lightPin = 0;

void setup() {
  // attach the pin 9 to the servo
  myservo.attach(9);
}

void loop() {
  // read the current voltage at lightPin (0) 
  int lightLevel = analogRead(lightPin); 
  
  // make sure to constrain the value from 0 to 360 
  // this analog pin has 1024 values (10 bits)
  lightLevel = map(lightLevel, 0, 1023, 0, 359);
  pos = constrain(lightLevel, 0, 359);
  
  // finally set the servo angle
  myservo.write(pos);
  delay(100);
}

I guess now it’s time to create something more complex! :-)

Update - 2011/09/07:

I’m adding also the breadboard view made with Fritzing:

I have also fixed the source to take account that the analog pin is encoded with 10 bits and therefore goes from 0 to 1023.

The resistance R1 is actually 10k ohms and not 330 … sorry about that.