0% found this document useful (0 votes)
89 views

Instructable Arduino Solar Tracker Sketch

This code controls two servos - a horizontal and vertical servo. It reads light levels from four LDR sensors and calculates the average readings on top, bottom, left and right sides. Based on the differences between these averages, it adjusts the servos to point in the direction of greater light by increasing or decreasing the servo angles. The servos are written to using the calculated angles and a delay is added between adjustments based on a potentiometer reading.

Uploaded by

Emmanuel Samuel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
89 views

Instructable Arduino Solar Tracker Sketch

This code controls two servos - a horizontal and vertical servo. It reads light levels from four LDR sensors and calculates the average readings on top, bottom, left and right sides. Based on the differences between these averages, it adjusts the servos to point in the direction of greater light by increasing or decreasing the servo angles. The servos are written to using the calculated angles and a delay is added between adjustments based on a potentiometer reading.

Uploaded by

Emmanuel Samuel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

/* this code is written by geobruce

for more info check my site http://xprobe.net


*/
#include <Servo.h> // 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);

You might also like