Arduino Project
Light Tracker 2.0
Course Introduction
This Arduino project uses two photoresistors (LDRs) to detect light direction and control a servo motor.
The servo turns smoothly toward the side with brighter light, allowing the system to follow changes in lighting. By adjusting the target angle gradually, the code ensures stable and jitter-free movement. This setup is great for building light-seeking robots or automatic sun trackers.
Note
If this is your first time working with an Arduino project, we recommend downloading and reviewing the basic materials first.
1.1 Install Arduino IDE(Important)
1.2 Introduction of Arduino IDE
Wiring

Common Connections:
Digital Servo Motor
Connect to breadboard’s positive power bus.
Connect to breadboard’s negative power bus.
Connect to 9 on the Arduino.
Photoresistor Module
Connect to A0 on the Arduino.
Connect to breadboard’s negative power bus.
Photoresistor LEFT
Connect to A5 on the Arduino.
Connect to breadboard’s negative power bus.
Writing the Code
Note
You can copy this code into Arduino IDE.
Don’t forget to select the board(Arduino UNO R4 Minima/WIFI) and the correct port before clicking the Upload button.
#include
Servo myservo;
int angle = 90; // current servo angle
int targetAngle = 90; // target servo angle
unsigned long lastMoveTime = 0;
const int moveInterval = 30; // time between movements (ms)
const int step = 1; // servo moves 1° each time
void setup() {
Serial.begin(9600);
myservo.attach(9);
myservo.write(angle); // set initial angle to 90°
}
void loop() {
int sensorLeft = analogRead(A0); // read left photoresistor (A0)
int sensorRight = analogRead(A5); // read right photoresistor (A5)
// print both sensor values
Serial.print("A0: ");
Serial.print(sensorLeft);
Serial.print(" A5: ");
Serial.println(sensorRight);
// set target angle based on light level
if (sensorLeft > 950) {
targetAngle = 180; // if A0 is bright, turn right
} else if (sensorRight > 950) {
targetAngle = 0; // if A5 is bright, turn left
}
// move servo gradually without delay
unsigned long currentTime = millis();
if (currentTime - lastMoveTime >= moveInterval) {
lastMoveTime = currentTime;
if (angle < targetAngle) {
angle += step;
if (angle > targetAngle) angle = targetAngle;
myservo.write(angle);
} else if (angle > targetAngle) {
angle -= step;
if (angle < targetAngle) angle = targetAngle;
myservo.write(angle);
}
}
}
