Light Tracker 2.0
Note
🌟 Welcome to the SunFounder Facebook Community! Whether you’re into Raspberry Pi, Arduino, or ESP32, you’ll find inspiration, help ideas here.
✅ Be the first to get free learning resources.
✅ Stay updated on new products & exclusive giveaways.
✅ Share your creations and get real feedback.
Kit purchase
Looking for parts? Check out our all-in-one kits below — packed with components, beginner-friendly guides, and tons of fun.
Name |
Includes Arduino board |
PURCHASE LINK |
|---|---|---|
Elite Explorer Kit |
Arduino Uno R4 WiFi |
|
3 in 1 Ultimate Starter Kit |
Arduino Uno R4 Minima |
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.
Required Components
In this project, we need the following components:
SN |
COMPONENT INTRODUCTION |
QUANTITY |
PURCHASE LINK |
|---|---|---|---|
1 |
Arduino UNO R4 WIFI |
1 |
|
2 |
USB Type-C cable |
1 |
|
3 |
Breadboard |
1 |
|
4 |
Wires |
Several |
|
5 |
Digital Servo Motor |
1 |
|
6 |
Photoresistor |
2 |
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 RIGHT
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.h>
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);
}
}
}