Introduction: Stepper Motor + Arduino + Solar Tracker (EV)

Picture of Stepper Motor + Arduino + Solar Tracker (EV)

This instructable is the translation of another that was originally written in Spanish, so I beg your pardon if I have many grammatical errors, if so off I'd love to suggest me to edit it. I just do it because I like to share my projects.

It is a solar tracker, but not before mentioning my inspiration were devices by geo bruce and aplavins, except in my case use stepper motors, which can reduce the price of motors and increase capacity for freight or moving ;).

We all know that the trackers have the advantage of increasing the efficiency of capturing solar energy, as the Earth continues its noble movement, the project reflects the importance of this phenomenon and try to design a simple tracking system that can facilitate the installation. I hope I can be as explicit as possible and try to eliminate all doubts.

Step 1: Materials

  • Aluminum plate
  • Aluminum bar
  • Angle aluminum
  • stainless steel cylinder 316
  • stainless steel plate Nylon 6.6
  • bar screw 1/2 "x 21/2"
  • drywall screw 1 "
  • long screw 7/16 "x 21/2"
  • nut 7/16 "
  • lock washer 7/16 "
  • bearing R10RS UCF
  • oarlock 3/4 "
  • pulleys
  • timing belts
  • worm-gear system
  • LDRs
  • limit switches
  • connectors
  • Resistors (10K, 1K, 100Ω, 800Ω)
  • stepper motors
  • ULN2803
  • L298N
  • LM324N
  • BPW34 photodiode
  • Schottky diodes
  • transistor BC547C
  • Capacitor (220pF, 1nf)
  • Arduino UNO R3
  • wire
  • wood
  • paint
  • Truack safe w / outer 5/8 "

Step 2: Structure Design

Picture of Structure Design

The proposed design consists of a system with biaxial rotation with a cylindrical base, which allows to track the sun in an efficient, in addition to being compact as possible to avoid a large space area.

In principle, I will simulate the prototype, it is a way that I have taken to prevent the fewest errors (although often it slip :)), try to use other materials if they deem fit, provided that enable run movements chords.

Step 3: Solar Panel

Picture of Solar Panel

To fasten the solar panel will be used a base formed by L profiles, better known in the market as angle, which rest the photovoltaic module. This base will be supported by a pair of square bars to the ends of this, so that the weight can be balanced throughout the system and in turn this will be subject to an axis to perform the azimuthal movement. It is important to note again that the entire assembly described will be very light to avoid the use of motors with large dimensions, since it would increase the cost and complexity of the system.

The pair of bearings facilitate it operation, which it will support on top of the cylinder. For this a couple of bearings that will remain fixed to the base is employed. Using the bearings can lay the ball bearings and the shaft to rotate and rest at a time.

Step 4: Azimuthal Movement

Picture of Azimuthal Movement

To seat the bearings, a few pieces of stainless steel having the same outer diameter having the cylindrical base, in this way are used, the bearings can rest on small surfaces, it is important to note the cuts made in the base, some will allow crossing the axis, while others are only to reduce the weight of the device (also I did it for aesthetic ;)).

With these elements we can achieve the azimuthal rotation, just need to have a circular transmission mechanism, either through a system of gears or pulleys with belt. For simplicity and softness, it is necessary to use the second system, ie, we can hold the shaft holding the base of the solar panel in the middle, by a driving pulley. To prevent slippage cause a toothed belt pulley and a belt with the same feature is used.

Step 5: Zenithal Movement

Picture of Zenithal Movement

The next step is to run the other movement (zenith), this in turn shows no big deal and can be performed with different mechanical elements. It was decided to use a transmission mechanism circulated through a system of worm-gear at the bottom of the structure. This set is used when you want to transmit large efforts and increase transmission power. Usually works in intersecting axes to 90⁰.

There are many difficulties when a gear system is used, but the most common problem is when you work with variation between their centers of operation, so it must be assembled precisely to ensure a smooth operation.

The system worm pinion allow rotating the device, thanks to the mount to polymer disk, ie, the axis of the crown is coupled as male, whereas polymer disk fit as female (hopefully to appraise in :( images) Since the diameter of the disc is similar to the inner diameter of the cylinder and this is very large, the polymer disc should be reduced so that it can seat a bearing with a smaller diameter.

Actually the UCF oarlock subject the disk by a set screw, while the cylinder is held by the latter by set screws. Basically, using these two systems we can provide the required movements in the project.

Step 6: Prototype

Picture of Prototype

Finally one can notice the device assembly, in the first figure I put a transparent material so that they can be seen the assembly of the mechanical components, as for the second figure, is a prototype simulation.

So they can appreciate views of the prototype, I leave the video below:

[Play Video]

Step 7: Operation

Picture of Operation

LDRs help to determine where there are more light during the day, these were placed in the corners of the panel, grouped in such a way that can be seen in the previous figure, that is, a pair at the top and a pair at the bottom. For greater accuracy as to the brightness measuring, photoresists should be cover to avoid picking around the diffuse solar radiation, in other words, the propagation of light (electromagnetic waves) that are scattered and reflected in the atmosphere.

Grouping the sensors allow to determine and execute both movements, for example, groups of LDR called left and right, are compared and if a higher or lower range determined to sensitivity difference then be executed a corresponding movement, of equally to the groups of top and bottom sensors, only these will determine the movement of the other axis.

I also determined the average radiation between the four sensors, for what ?, so the idea is that at the end of the day, when solar projection is zero, the panel base rotate in the opposite direction, in dawn, hoping the next day, the sun comes out again.


I also make use of a photodiode, it is the BPW34, also deals in control, if you wish, you can skip this sensor, since the main application which I used it was for to measure the solar spectrum and record amounts of radiation solar which was subjected to the photovoltaic module. Remember to modify the code if you do not use it.

Step 8: Electronic Design

Picture of Electronic Design

In this step I show the circuits that were used to develop the prototype, don't forget to check the datasheets of drivers, that to determine whether they are able to move the engines that will occupy.

Step 9: Code

Picture of Code

I leave the control code, I hope I have not missed anything, because the editor turned my whole haha XD.

//Stepper Motor Solar Tracker by hectorhhg

#include //Integrating library for dealing Stepper.h stepper motors

#include //Integrating design math.h library for basic mathematical operations

//Declaring Constants

#define motorStephor 200 //steps for horizontal motor

#define motorStepver 200 //steps for vertical motor

//Digital pins

#define motor1hor 6

#define motor2hor 7

#define motor1ver 8

#define motor2ver 9


int prom; //Average of four LDR

int pyr; //BPW34 photodiode

int h=60; //Steps executed by the horizontal motor

int v=5; //Steps executed by the vertical motor

int ltsensor; //Value of the top left LDR

int rtsensor; //Value of the top right LDR

int rdsensor; //Value of the bottom right LDR

int ldsensor; //Value of the bottom left LDR

int sen=50; //Sensibility

int dil; //Average set of LDR left

int dit; //Average set of LDR top

int dir; //Average set of LDR right

int did; //Average set of LDR bottom

int diff; //Difference between LDR above the bottom

int diff2; //Difference between LDR left to right

int pup; //upper switch

int pdown; //lower switch

Stepper horStep (motorStephor, motor1hor, motor2hor);

Stepper Stepper verStep (motorStepver, motor1ver, motor2ver);

//Program initialization

void setup ()


horStep.setSpeed (30); //RPM horizontal motor

verStep.setSpeed (10); //RPM vertical motor

//Serial Port


//Pins configuration

pinMode (pyr, INPUT);

pinMode(ltsensor, INPUT);

pinMode(rtsensor, INPUT);

pinMode(ldsensor, INPUT);

pinMode(rdsensor, INPUT);

pinMode(pup, INPUT);

pinMode(pdown, INPUT);


void loop ()




pyr = analogRead(0); //Reading analog inputs

ltsensor = analogRead(1)*1.022; //(constant is to calibrate the LDR)

rtsensor = analogRead(2)*1.007;

ldsensor = analogRead(3);

rdsensor= analogRead(4)*1.013;

pup = digitalRead (3); //Reading switches

pdown = digitalRead(4);

prom= (ltsensor + ldsensor + rtsensor + rdsensor)/4; //Average LDR

dit = (ltsensor + rtsensor)/2; //Average sensors up

did = (ldsensor + rdsensor)/2; //Average sensors down

diff =(dit - did); //Difference between the level of radiation

delay (50);

if ((pyr==0)&&(pup==HIGH)&&(prom<=8)|| (pyr==0)&&(pdown==HIGH)&&(prom<=8)) //If the value of pyr is zero and the average of the sensors is equal or less than 8 and the switches have the range

mov(); //mov function


while ( (pyr==0)&&(pup==HIGH)&&(prom<=8)|| (pyr==0)&&(pdown==HIGH)&&(prom<=8));

if (-1*sen > diff || diff > sen) //If the measured difference between the set of sensors is greater or less than the sensitivity value


if(dit < did) //If the mean value of the above sensors is smaller than the bottom sensors


if (pdown==HIGH)


verStep.step (0); //Stop vertical motor

delay (10);



if (pdown==LOW)


verStep.step (v); //Turn motor up

delay (50);



else if(dit > did) //If the average value of bottom sensors is smaller than the above sensors


if (pup==HIGH)


verStep.step (0); //Stop vertical motor

delay (10);


else if (pup==LOW)


verStep.step (-v); //Turn motor down

delay (50);



else //any other case


verStep.step (0); //Stop vertical motor

delay (10);



delay (10);

pyr = analogRead (0); //Sensor readings again for possible change

ltsensor = analogRead(1)*1.022;

rtsensor = analogRead(2)*1.007;

ldsensor = analogRead(3);

rdsensor= analogRead(4)*1.013;

dil = (ltsensor + ldsensor)/2; //Average sensors left

dir = (rtsensor + rdsensor)/2; //Average sensors right

diff2 = (dil - dir); //Difference between the level of radiation

delay (50);

if (-1*sen > diff2 || diff2 > sen) //If the measured difference between the set of sensors is greater or less than the sensitivity value


if(dil < dir) //If the average of the left sensor is smaller than the right sensor


horStep.step (h); //Turn motor right

delay (10);



if(dil > dir) //If the average of the left sensor is larger than the right sensor


horStep.step (-h); //Turn motor left

delay (10);


else //any other case


horStep.step (0); //Stop horizontal motor

delay (10);





// “mov function”

void mov ()


if (pup==HIGH)


verStep.step (72); //Turn 72 steps up (are the steps to change position once hide the sun)

delay (50);


else if (pdown==HIGH)


verStep.step (-72); //Turn 72 steps down

delay (50);


delay (10);


Step 10: Process and Assembly of Mechanical Parts

Picture of Process and Assembly of Mechanical Parts

Well, it was time to pass the ideas to reality;). Needless to emphasize the coupling of the mechanical elements (I hope you have understood in the simulation), just show them some of the machining processes you use to create the pieces. And I can assure you that working with stainless steel is hard :(, but the finish is great, besides being a material that supports the extreme weather.

I share you the design files that I used for the prototype, these are in Spanish but you will have no problem interpreting, all dimensions are in milimeters..

Step 11: Final Tests!

Picture of Final Tests!

Finally, when the mechanical part is finished, it is time to place each of the sensors and electronics. At the moment I do not have a solar panel :(, but I used a foam plate :) finally paint, looks great, What do you think? XD. I suggest that the resistors having the configuration of pull ups for LDR and switches, place them as close to these, I realized that it generated erroneous data when put to a longer distance.

What is the function of limit switches?, prevent the panel moves down and can collide with the base of the prototype, is why a piece of washer was placed concentric to the axis and while it rotates, reaches the point where pressing switches are subject to the bearing, so that is the displacement limit of the solar panel.

Keep all electronic components in a case, keep doing magic those with 3D printers or laser cutters and avoid using a box of chocolate like me :( haha.

To close with a flourish, I leave a video where he did some tests follower :). See you soon!

[Play Video]


ArfaA (author)2017-09-18

Which stepper motor should required for 100W solar panel?

Tchakounte Hyacinthe (author)2017-06-27

i dont see very well the name of the Ampli op you are using. Please i need to download the datasheet and make the connection i am a beginner.

Tchakounte Hyacinthe (author)2017-06-27

is it possible to displace 100-150W, 12V solar panel?

Tchakounte Hyacinthe (author)2017-06-27

Great work at all. Thank for sharing. Please, i would like to know the name and the characteristics of the stepper motors you are using

humayoung (author)2017-03-31

hi,you have made a great work,also the mechanism used is a brillient one.

I wanted to know what was the specification of the stepper motor and please sent me schematic diagram

ShiroK1 (author)2017-01-15

hi sir! this project is nice and we're planning to make a prototype of this. can i see your full schematic diagram of this project from LDR to arduino? pls ty

KubaS20 (author)2017-01-03

Do any of you have Solidworks or Inventor project design files? That would be really helpful for me because I don't want to design it from the beginning but I would like to redesign some part of this project.

hirshad (author)2016-05-28

I need the internal wiring diagme it mean connecting with the arduino and with other circuit

VirendraD (author)2016-02-04

hi,you have made a great work,also the mechanism used is a brillient one.

I wanted to know what was the specification of the stepper motor,and if i changed the motor to somewhat big specification that that,will the motor driver required would be same?

i also wanted to know what dimensions of the pulley and timing belt were?

thank you :)

VirendraD (author)2016-02-04

hi,you have made a great work,also the mechanism used is a brillient one.

I wanted to know what was the specification of the stepper motor,and if i changed the motor to somewhat big specification that that,will the motor driver required would be same?

i also wanted to know what dimensions of the pulley and timing belt were?

thank you :)

Stephen Dodd (author)2015-02-01

I have had solar panels on my roof for 12 years. There is very little to be gained my a moving mount. It is the brightness that matters and that can be somewhat diffuse. As the day proceeds only the middle is of great value anyway. While one may call a fourteen hour period 'day' only six hours or less may be available for solar. I live in Oregon. The darkest portion of the year is fall and not winter as some imagine. The sun is not only lower at that time of year but also of short duration. It may seem that Oregon in the north has low solar possibilities. However, in the spring, summer and fall the days are MUCH longer and the sun higher than at an equatorial location. So I make up for the northern latitude then. Arizona, for instance may seem sunnier. But not always. Moving panels around only gains a few percentage points at the extremes becasue most of the day is not useful anywhere even if located in the tropics. Indeed the tropics can often be wet and cloudy. In such case it might be 105 degrees with no solar generation at all. In an off-grid system such as mine solar is often best applied to slowly top off the batteries in the morning. I usually add bulk for twenty minutes from a generator at dawn while showering and getting ready for work. Then I let the solar cells bring up full charge in the midday. I suggest for the cost involved, it is better to just put them up and direct them to the center of the best area and leave it that way.

hectorhhg (author)Stephen Dodd2015-02-01

It is a fact that not all geographic areas have the same amount of sunlight, even so, I think Oregon has a good location. Maybe you can increase efficiency thinking about a single axis.

Stephen Dodd (author)hectorhhg2015-02-01

Through the yearly cycle I believe the amount of solar impact on the earth is about the same overall. Even in the arctic where it is dark for months and then light for months. Photovoltaic panels work more efficiently in cooler weather by the way. But my comment would be that adding more cells will get you a lot more bang for your buck than expensive maintenance burdened gimbals. Such directional gains are fractional while a new panel is a quantum leaps. Just my take on 12 years of solar.

simonlukic (author)Stephen Dodd2015-05-26

Having lived in Stockport, Cheshire and Cadiz, Cadiz I can tell you , Stephen, that my impression is that not all places have the same amount of sun .Andalucia has blue sky and killer sun all year round. It would be worth having tracking here I think as the sun is unobscured for 280 days a year. Read it and weep.

They say the Britons were the first atheists. When the folk of southern europe were worshipping the sun, thousands of years ago, the britons said -Nah, it doesn't exist!

Stephen Dodd (author)simonlukic2015-05-26

I live in Oregon and have spent my life from Vancouver to Alaska except service overseas in the Middle East. Andalusia would be a great place for solar. But I doubt tracking wold add much. Here we have dark falls seasons, which in fact is the dark period not winter. The dark period is October to December. In winter we begin to add sun. But later we have better sun than the tropics. I lived in St. Andrews for a while. There were good periods there too. I believe that is about the latitude of Southeast Alaska. Tracking would be irrelevant there as predicting the cloud cover is impossible. But you could still expect bright sun on some days for 12+ hours. It would tend to be in the same location but elevating or lowering might help a bit. In fact the sun simply seems to make a circle in the sky there.

"I doubt that it would add much...", yet you speak with such absolute authority! I live in Albuquerque, and have had 12 panels on my roof for a bit over 20 years now. Not only have I had them longer, but we get more good sun. Ipso facto, My opinion must be worth more, right? Sorry, there is no logic there. My engineering degree may count for something, not my possessions.

By the way, adding a 'few percentage points', every day for the three hundred plus days that are good and clear here is not insignificant. It's what engineers get pad to do.

junkhacker (author)Stephen Dodd2015-02-01

Panels that track the movement of the sun throughout the day can receive 10% (in winter) to 40% (in summer) more energy than fixed panels.

Stephen Dodd (author)junkhacker2015-05-26

The dark period in the north is not winter. It is October to December. After January we add about 3 minutes a day of light here.

Stephen Dodd (author)junkhacker2015-02-01

Have you considered the huge difference in amount of atmosphere between 100 miles over head to a thousand miles lower in the sky. Again pointing is only part of the issue. I emphasize that I have had panels for 12 years and have the Pentametric recording system which graphs output on one's computer. That is about 4,000 days of watching the graph. I also have some free standing panels for water supply and such. It is easy to see that there is not much to be gained by moving the panels around. The sweet spot is usually the most cost effective. You rarely see "professional" systems on institutional buildings on gimbals. There is a reason. An off-grid system is a huge burden for infra-structure. Anything that moves costs a lot and breaks. The solar system is about 5% of the effort needed for ditch digging, road repair, chainsawing, roofing, plumbing, wiring, heating and so on. You can't call a plumber up in the woods. You have to do it. I do believe every building in a modern country should have some panels. But getting the power without the hassle is the real trick. I'll see if I can post the articles I did for Homepower magazine back in 1004.

Stephen Dodd (author)2015-06-20

Again and aging "tower" engineering all gets recovered. But that is not where the difficulty lies. One has to be getting direct brilliant sun and as the sun passes through the lower levels it becomes useless. I just saw an argument based on solar energy in Uganda. I looked up Uganda on Accuweather and discovered that four days of thunderstorms are expected. One cannot get much energy from clouds and rain.

Stephen Dodd (author)2015-06-20

A common disappointment with solar systems is that people resort to calculations instead of direct observation when predicting results. For one to get solar power in Oregon the sun has to be out.

Stephen Dodd (author)2015-06-20

I think if you examine the Accuweather in Uganda where they are taking as the example, you will find they are experiencing four days of thunderstorms and I doubt you'll get much energy from that.

BrownDogGadgets (author)2015-03-01

Steppers are great, but I prefer using servos since they're easier to control, power, and cost a lot less. This is what I came up with.

Looks great! I agree that the servos are easier to control, but I don't think it are cheaper than stepper motors, servos are cheap for hobbyist projects, but when it comes to moving heavy weights clearly stepper motors are the best option.

Very very true. I usually only think small scale. Steppers are quite great at moving stuff around.

What do you think about using Linear Actuators? I was always under the impression that large tracking systems used those for have lifting.

markmic18 (author)2015-02-19

will that motor work with your code with no changes?

hectorhhg (author)markmic182015-02-20

The L298N driver can work without problems, it's that move the vertical motor, but you can not use that motor with ULN2803.

üdemur (author)2015-02-08

Fantastic job !

hectorhhg (author)üdemur2015-02-09

Thank you!

markmic18 (author)hectorhhg2015-02-19

wow nice job!....

can you give me a link where I can find the motor you used. or specs of it?

can i use this just to control one motor without changing the code?

What a very nice piece of work. Machining all your parts was really good. I am impressed.

Thanks Volthaus!

qxfuse (author)2015-02-01

nice job!

hectorhhg (author)qxfuse2015-02-02

Thank you qxfuse!

rolandcontreras (author)2015-02-01

Very nice work. Could this setup be loaded with a typical commercial solar panel of around 200 Watt sized around 2x1 meter?

Well, this prototype is a small scale, you would have to redesign certain parameters!

MichaelAtOz (author)2015-02-01

There are a number of comments about using a equatorial mount or other single motor designs. That is only good for a fixed location.

This could be useful where the panels are relocated often, like a caravan, or in motion, such as on a boat.

hectorhhg (author)MichaelAtOz2015-02-01

I could not have set a better example, you have given just to the point!

Thank you Michael_oz.

econjack (author)2015-02-01

Nice job! You could save a few dollars by using an Arduino Nano, which are generally cheaper than the Uno. Connections remain the same. I built a 10W panel that is portable, but much less sturdy than this one. Also, because it is only used for a few days at a time, it only is concerned with azimuth is "aimed" each morning and stops at sundown. All of the parts except the panel fit in a tool box, including the battery. It's meant to power a small ham radio. You can see it in chapter 17 of Arduino Projects for Amateur Radio.

hectorhhg (author)econjack2015-02-01

I have planned to use an Arduino Nano when perform a decent case :). I can't find anywhere the project you describe me.

econjack (author)hectorhhg2015-02-01

Go to, search Arduino Projects for Amateur Radio, click on book cover, scroll to chapter 17, and click on that page number. I don't know how much you'll be able to read, but it should help.

Build_it_Bob (author)2015-02-01

Very nice work . I like the shots that show the machining as well. The schematics are very professional and easier to understand in the blocks you made .

Thanks for sharing !


hectorhhg (author)Build_it_Bob2015-02-01

I appreciate it!

Howdenpines (author)2015-02-01

Great bit of work but quite complicated mechanics. A much easier set-up would be a single axis pivot, parallel with the earth's axis. This could be adjusted to cope with the sun's declination over the year, perhaps using a stepper motor on a threaded rod to keep the axis perpendicular to the sun's rays. As one of the other comments says, a balancing weight would be good as well. Your set-up could track the sun all over the sky, but in reality, the sun follows a predictable path and does not go 'all over the sky'!

But very well done to have actually made it! Your knowledge of electronics far exceeds mine...

Sorry about the rudimentary sketch but I hope it shows the principle.

Best regards

PS I think rogerhyam may have just made almost the same reflection......

hectorhhg (author)Howdenpines2015-02-01

Both are right (rogerhyam and you), you can simplify the system with one axis, but you would have to change the position angle of the panel every certain period of the year due to solar declination, this to ensure that the panel is perpendicular to the solar projection.

Bilow (author)2015-02-01

Hi, Which software was used to make the circuit diagrams ? Thank you

hectorhhg (author)Bilow2015-02-01

Proteus design suite software (ISIS)

marcod8 (author)2015-02-01

Great job man, awesome.

hectorhhg (author)marcod82015-02-01

Thank you marcod8!

About This Instructable




Bio: I am an engineer and lover of innovations!
More by hectorhhg:Stepper Motor + Arduino + Solar Tracker (EV) Seguidor Solar con motores a paso + ArduinoDeshidratador Solar + Arduino
Add instructable to: