Arduino Solar Tracker

460,681

711

286

About: Hello, I'm Bruce. I'm a student in Belgium. I have a wide variety of interests: electronics, computers, technology, ... In my spare time I spend a lot of time on: projects, exploring the internet, cycling. ...

Step 1: How It Works

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

Just hot glue it together!!! 

Step 4: The Circuitry

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 <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);




Celestron Space Challenge

Runner Up in the
Celestron Space Challenge

18 People Made This Project!

Recommendations

  • First Time Author

    First Time Author
  • Toys Contest

    Toys Contest
  • Make it Glow Contest 2018

    Make it Glow Contest 2018

286 Discussions

0
None
TomDunlap

5 years ago on Introduction

Just finished it and got it debugged. Really cool. Now I'm going to try to use it to build a Solar Forge and or a Solar Sand Sinter 3D Printer. Should be a snap. ;-)

14 replies
0
None
ShreyasP4TomDunlap

Reply 2 years ago

Hey Tom, We are right now making a Solar sand sinter 3D printer. We have finished making the coordinate plate and are working on the tracking system now. Would like to get your inputs. Best,

0
None
BalaJ11ShreyasP4

Reply 2 years ago

hi dude ,

what is the rate and power of servo motor which u have used.. can u give me some details.. i have to do this as mini project

0
None
TomDunlapShreyasP4

Reply 2 years ago

Good luck with your project. I have not been able to pursue this one so not much more to add. Everything you need should be available online now. Except time and money. You'll have to come up with those. ;-)

0
None
TomDunlapgeo bruce

Reply 5 years ago on Introduction

Another development, I used a Makerbot Replicator to print a replacement for the foam core sensor holder. Here is the Sketchup pic of it. The two pieces glue together. The center top hole is for a fifth sensor to shut the system down if clouds block the sun so it doesn't try to point at the brightest cloud.

Pyramid 3.png
0
None
geo bruceTomDunlap

Reply 5 years ago on Introduction

Nice!!!

It's cool to see your instructable finished by someone else :D
it means i've helped someone ^^ or someone liked my project! :D

0
None
TomDunlapgeo bruce

Reply 5 years ago on Introduction

It's really helpful to get me started toward my other goals.
Next I want to modify the code to operate some 12V drill motors with a MotorShield or the like if I can find one that will handle the 3-4A current.

0
None
Sallu Khan

15 days ago

There is a problem was occurred & still occurring to make this project. I am working to make this project as bigger type. I used generic high torque continuous (360 degree) servo motor (SM-S4303R) for rotating the panel. But a problem is occurring. That's is when servo motor started again it's rotates according to LDR's lighting action but the motors aren't stop. It's continuously rotates if once the LDR is lighted. I used this code for my project. What's the problem? Please help me .

0
None
DaudE1

Question 6 weeks ago

Hello its really a nice project.
What i have to do if i wnat to use motor controller instead of servo?
Please reply

0
None
BrahimB13

7 weeks ago

please can you help me
the code in matlab !

0
None
Djeffers12

Question 9 months ago on Step 4

I'm curious to know if this Arduino has the same capability as the Uno when it comes to control systems. Do you need to have the Uno hooked up to a laptop?

1 more answer
0
None
AbhishekS19Djeffers12

Answer 8 weeks ago

which arduino are you talking about? the author is using arduino uno. according to the code, it doesnt seem like the UNO needs to be hooked up to the laptop. u can power it via the barrel plug or directly into the Vin pin using some battery.