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.

  • 👉 Need faster updates or support? Click [here] join our Facebook community

  • 👉 Or join our WhatsApp group: Click [here]

Kit purchase

Looking for parts? Check out our all-in-one kits below — packed with components, beginner-friendly guides, and tons of fun.

../_images/ultimate_sensor_kit.png

Name

Includes Arduino board

PURCHASE LINK

Elite Explorer Kit

Arduino Uno R4 WiFi

BUY

3 in 1 Ultimate Starter Kit

Arduino Uno R4 Minima

BUY

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

BUY

2

USB Type-C cable

1

3

Breadboard

1

BUY

4

Wires

Several

BUY

5

Digital Servo Motor

1

BUY

6

Photoresistor

2

BUY

Wiring

../_images/Light_Tracker2.0_bb.png

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