Arduino Solar Tracker

450,507

708

283

Hello, I'm Bruce. I'm a student in Belgium. I have a wide variety of interests: electronics, comp...

Intro: Arduino Solar Tracker

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

  • Plastics Contest

    Plastics Contest
  • Optics Contest

    Optics Contest
  • Electronics Tips & Tricks Challenge

    Electronics Tips & Tricks Challenge

283 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
Djeffers12

Question 7 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 2 days 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.

0
None
NuggetMop

6 months ago

Is it possible to do this without a potentiometer? Im a very noobish beginner at these things, can you help?

1 reply
0
None
AbhishekS19NuggetMop

Reply 2 days ago

Yes you can. the pots, as i see, are used for giving a threshold value and delay time. so the threshold value is a fixed value and if the difference between current reading and previous reading is below the threshold value, it will be ignored. and the delay time is the time to wait before taking next reading. so both of these can be hardcoded and wont require an external input imo.

0
None
MohammadT43

Question 4 months ago

hi.thanks for this amazing tutorial.i was wondering what program do u use to make the picture in step4???

the one of the circuit and the components.