Arduino Solar Tracker

What is does:
It searches for the brightest light source like the sun.

There is a newer and better version of this project: https://www.instructables.com/id/Dual-Axis-300W-IOT-Solar-Tracker/

In modern solar tracking systems, the solar panels are fixed on a structure that moves according to the position of the sun.

Arduino Solar Tracker

Let us design a solar tracker using two servo motors, a light sensor consisting of four LDRs and Arduino UNO board.

Step 1: How It Works

Arduino Solar Tracker

How it works:
I’d made a sensor of 4 LDRs with sheets between them

The white dots are the LDRs When the stick on top is righted to the sun or the brightest point
the four LDRs get the same amount of light on them.


Example1 when the light is left on top:
right-top, right-down, left-down are in the shadow
and left-top get the most light

Example2 when the light is on top
left and right down are in the shadow and top is in the light

Step 2: Parts List

Step 3: The Set-up

The Set-up of Arduino Solar Tracker

Step 4: The Circuitry

The Circuitry of Arduino Solar Tracker

Step 5: The Code

you can download the code down this page

/* this code is written by geobruce
for more info check my site http://xprobe.net
*/

include // include Servo library

Servo horizontal; // horizontal servo
int servoh = 90; // stand horizontal servo

Servo vertical; // vertical servo
int servov = 90; // stand vertical servo

// LDR pin connections
// name = analogpin;
int ldrlt = 0; //LDR top left
int ldrrt = 1; //LDR top rigt
int ldrld = 2; //LDR down left
int ldrrd = 3; //ldr down rigt

void setup()
{
Serial.begin(9600);
// servo connections
// name.attacht(pin);
horizontal.attach(9);
vertical.attach(10);
}

void loop()
{
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down rigt

int dtime = analogRead(4)/20; // read potentiometers
int tol = analogRead(5)/4;

int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right

int dvert = avt – avd; // check the diffirence of up and down
int dhoriz = avl – avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol) // check if the diffirence is in the tolerance else change vertical angle
{
if (avt > avd)
{
servov = ++servov;
if (servov > 180)
{
servov = 180;
}
}
else if (avt < avd)
{
servov= –servov;
if (servov < 0)
{
servov = 0;
}
}
vertical.write(servov);
}

if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = –servoh;
if (servoh < 0) { servoh = 0; } } else if (avl < avr) { servoh = ++servoh; if (servoh > 180)
{
servoh = 180;
}
}
else if (avl == avr)
{
// nothing
}
horizontal.write(servoh);
}
delay(dtime);
}

Source: Arduino Solar Tracker

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top