top of page

Sun Tracking Solar Panel

Updated: May 2, 2020

Components Required:

  • Servo Motor (sg90)

  • Solar panel

  • Arduino Uno

  • LDR’s X 2 (Light Dependent Resistor)

  • 10K resistors X 2

  • Battery (6 to 12V)


In this project, LDR’s are working as light detectors. Before we go into detail, we will have to understand how the LDR’s work. LDR (Light Dependent Resistor) also known as photo resistor is the light sensitive device. Its resistance decrease when the light falls on it and that’s why it is frequently used in Dark or Light Detector Circuit.

The two LDR’s are placed at the two sides of solar panel and the Servo Motor is used to rotate the solar panel. The servo will move the solar panel towards the LDR whose resistance will be low, mean towards the LDR on which light is falling, that way it will keep following the light. And if there is same amount of light falling on both the LDR, then servo will not rotate. The servo will try to move the solar panel in the position where both LDR’s will have the same resistance means where same amount of light will fall on both the resistors and if resistance of one of the LDR will change then it rotates towards lower resistance LDR.

Arduino Code:

#include <Servo.h>      //including the library of servo motor  Servo sg90;             //initializing a variable for servo named sg90 int initial_position = 90;   //Declaring the initial position at 90 int LDR1 = A0;          //Pin at which LDR is connected int LDR2 = A1;          //Pin at which LDR is connected int error = 5;          //initializing variable for error int servopin=9; void setup()  { 

  sg90.attach(servopin);  // attaches the servo on pin 9   pinMode(LDR1, INPUT);   //Making the LDR pin as input   pinMode(LDR2, INPUT);   sg90.write(initial_position);   //Move servo at 90 degree   delay(2000);            // giving a delay of 2 seconds }   void loop()  {    int R1 = analogRead(LDR1); // reading value from LDR 1   int R2 = analogRead(LDR2); // reading value from LDR 2   int diff1= abs(R1 - R2);   // Calculating the difference between the LDR's   int diff2= abs(R2 - R1);   if((diff1 <= error) || (diff2 <= error)) {     //if the difference is under the error then do nothing   } else {         if(R1 > R2)     {       initial_position = --initial_position;  //Move the servo towards 0 degree     }     if(R1 < R2)      {       initial_position = ++initial_position; //Move the servo towards 180 degree     }   }   sg90.write(initial_position); // write the position to servo   delay(100); }

11 views0 comments

Recent Posts

See All
bottom of page