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

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

BUY

4

Wires

Several

5

Digital Servo Motor

1

6

Photoresistor

2

Wiring

4.webp__PID:3d147482-8613-4d59-bdd2-1de4d7329c66

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);
    }
  }
}