LDR Photovoltaic Solar Tracker




This Instructables is a Solar Tracker for PV Panel based on LDR (Light Dependent Resistor) Sensors.

A Solar Tracker aims to increase energy generation by pointing the PV Panel straight to the sun providing more light to it.

Despite the energy required for the control system, the comparison between a static panel and the other with Solar Tracker represents a 15% average increase of generation for the one with Solar Tracker.


Step 1: LDR Sensor Board

It was choosen three 7mm LDRs in series with 10 kΩ resistors in a board. This board was located with the PV Panel to collect data for the solar tracking.

In a nutshell, this circuit is a voltage divider, once the LDR behavior is known (lower resistance with higher light incidence), the LDR with higher light incidence shows the higher voltage, with the maximum voltage limited on 5V to comply with Arduino input requirements.

Due to sensor dimensions, the differences of voltage between the LDRs could be small once side by side. To overcome this, it was installed some "bulkhead" to reinforce the difference in the small scale representation.

Remembering that the objective is to keep the central LDR with the higher light incidence.

Step 2: Step Motor Driver

The step motor selected was reused. After some internet search it was found that it is a SANYO C-60X 891012, with Supply Voltage of 12 V, coil resistance of 48 Ω and step of 1.8º.

To create this circuit it was used the ICs L297 and L298 with some diodes as presented on L297 Application Note.

Step 3: Arduino Controller

The Arduino is responsible to receive the data from LDR Sensor Board, compare the values and take action to move the PV Panel pointing to the sun.

Controller Step-by-step (Continuous Loop)

  1. Start
  2. Read LDRs Voltages
  3. If central LDR has the greater value, return to step 2
  4. Right LDR has greater value ? If yes step 5, if no step 6
  5. Move one step to the right, back to step 4
  6. Left LDR has greater value, if yes step 7, if no, step 2
  7. Move one step to the right, back to step 6

Arduino pin-out

Analog Pins

  • Central LDR - 4
  • Right LDR - 5
  • Left LDR - 3

Digital Pins

  • Clockwise/Counter-Clockwise - 13
  • Speed (Clock) - 11
  • Enable/Disable - 12

Arduino Source Code

//Analog Pins int pinLdr_1 = 3; int pinLdr_2 = 4; int pinLdr_3 = 5; // ENABLE, HALF-FULL, CW-CCW, CLK int pinCwCCW = 13; int pinCLK = 11; int pinEnable = 12; int ldr1 = 0; int ldr2 = 0; int ldr3 = 0; void setup(){ pinMode(pinLdr_1,INPUT); pinMode(pinLdr_2,INPUT); pinMode(pinLdr_3,INPUT); pinMode(pinEnable, OUTPUT); pinMode(pinCwCCW, OUTPUT); pinMode(pinCLK, OUTPUT); } void reads(void){ ldr1 = analogRead(pinLdr_1); ldr2 = analogRead(pinLdr_2); ldr3 = analogRead(pinLdr_3); } void steps(int nro){ int i; //200 steps = 360 degress (full step) digitalWrite(pinEnable,HIGH); for(i=0;i<nro;i++){
digitalWrite(pinCLK,HIGH); delay(10); //10ms digitalWrite(pinCLK,LOW); delay(10); } digitalWrite(pinEnable,LOW); } void loop(){ reads(); digitalWrite(pinEnable,HIGH); Serial.begin(9600); if (ldr3 > ldr2 && ldr3 > ldr1){ moveL(); } else if (ldr1 > ldr2 && ldr1 > ldr3){ moveR(); } delay(500); } void moveL(){ reads(); digitalWrite(pinCwCCW,HIGH); while (ldr2ldr3) return; } } void moveR(){ reads(); digitalWrite(pinCwCCW,LOW); while (ldr2ldr1) return; } }

Step 4: Conclusion

This project proved that Solar Tracking increases the PV Energy Generation.
It is also a simple project that can be used as a didatic tool to explain more about Solar PV Energy been presented as an "electronic sunflower".

Solar Contest 2017

Runner Up in the
Solar Contest 2017



    • Classroom Science Contest

      Classroom Science Contest
    • Fandom Contest

      Fandom Contest
    • Woodworking Contest

      Woodworking Contest

    3 Discussions


    1 year ago

    Depending on the angle of the sun in relation to the sensor in the morning then you may miss some of the energy at that time. One way to get around this is to have the solar panel return to a set 'start' position once the amount of ambient light falls below a certain level, ie dusk.

    I have seen systems using your method of 'morning detection' that have not had enough power left in the batteries to actually move the panels towards the sun once it has risen in the morning. Resetting the panels before any load can drain the batteries completely ensures that there will always be some charge current available as early in the day as possible.


    1 year ago

    What is the acquisition angle of your solar sensor? For example in the afternoon it points west, then the next morning the sun rises in the east but this sensor won't see it because it is still pointing west.

    1 reply

    Reply 1 year ago

    Dear @wains, on the morning (sunrise) with PV panel facing west (due to prior day), the LDR closest do east will receive the initial sunbeams compared with central LDR (reinforced by bulkhead introduced) which induces the panel to moves toward east.