Hello guys,In this post we will tell you how you can create your Solar Tracker project using arduino.
Circuit diagram and source code is given below.
Subscribe our blog so that you can't miss any update from us.
Note- Please Check The Code And Do All Thing As Written There.
Material required-
1-Arduino Development Board
2-Some LDR
3-Servo motor
4-Solar panel
5-Jumper wires
Circuit Diagram-
Source Code-
#include <Servo.h> | |
//defining Servos | |
Servo servohori; | |
int servoh = 0; | |
int servohLimitHigh = 160; | |
int servohLimitLow = 20; | |
Servo servoverti; | |
int servov = 0; | |
int servovLimitHigh = 160; | |
int servovLimitLow = 20; | |
//Assigning LDRs | |
int ldrtopl = 2; //top left LDR green | |
int ldrtopr = 1; //top right LDR yellow | |
int ldrbotl = 3; // bottom left LDR blue | |
int ldrbotr = 0; // bottom right LDR orange | |
void setup () | |
{ | |
servohori.attach(10); | |
servohori.write(0); | |
servoverti.attach(9); | |
servoverti.write(0); | |
delay(500); | |
} | |
void loop() | |
{ | |
servoh = servohori.read(); | |
servov = servoverti.read(); | |
//capturing analog values of each LDR | |
int topl = analogRead(ldrtopl); | |
int topr = analogRead(ldrtopr); | |
int botl = analogRead(ldrbotl); | |
int botr = analogRead(ldrbotr); | |
// calculating average | |
int avgtop = (topl + topr) / 2; //average of top LDRs | |
int avgbot = (botl + botr) / 2; //average of bottom LDRs | |
int avgleft = (topl + botl) / 2; //average of left LDRs | |
int avgright = (topr + botr) / 2; //average of right LDRs | |
if (avgtop < avgbot) | |
{ | |
servoverti.write(servov +1); | |
if (servov > servovLimitHigh) | |
{ | |
servov = servovLimitHigh; | |
} | |
delay(10); | |
} | |
else if (avgbot < avgtop) | |
{ | |
servoverti.write(servov -1); | |
if (servov < servovLimitLow) | |
{ | |
servov = servovLimitLow; | |
} | |
delay(10); | |
} | |
else | |
{ | |
servoverti.write(servov); | |
} | |
if (avgleft > avgright) | |
{ | |
servohori.write(servoh +1); | |
if (servoh > servohLimitHigh) | |
{ | |
servoh = servohLimitHigh; | |
} | |
delay(10); | |
} | |
else if (avgright > avgleft) | |
{ | |
servohori.write(servoh -1); | |
if (servoh < servohLimitLow) | |
{ | |
servoh = servohLimitLow; | |
} | |
delay(10); | |
} | |
else | |
{ | |
servohori.write(servoh); | |
} | |
delay(50); | |
} |
Comments