Introduction: DIY Solar Tracker

About: I am a graduate student in the Mechanical Engineering department at MIT, with aspirations of improving the world. I was raised in Durham, North Carolina and I enjoy building things, learning about entrepreneur…


We aim to introduce young students to engineering and teach them about solar energy; by having them build a Helios as part of their curriculum. There is an effort in engineering to push energy generation away from the use of fossil fuels and towards greener alternatives. One option for greener energy is to use a device called a heliostat, which uses a mirror to direct the sun’s light onto a target throughout the day. Such a device can be used for many applications, from concentrating solar energy onto the heat reservoir of a power plant to illuminating areas that are blocked from the sun.

In addition to the number of uses of this technology, there is also a diverse range of structures that have been designed to enable solar tracking. The physical structure of Helios’s design, as with other heliostat designs, functions to mount a mirror onto two controllable axes. The mechanism will track the sun by using a program to calculate the star’s location in the sky thought the day, based on the global position of the Helios. An Arduino micro-controller will be used to run the program and control the two servo motors.

Design Considerations

To ensure that this project is widely dispersed, considerable effort went into designing the Helios to be built with common tools and cheap materials. The first design choice was to build the body almost entirely out of foam core, which is rigid, affordable, easy to acquire, and easy to cut. Also, for maximum strength and rigidity, care was taken to design the body so that all of the foam parts are either in tension or compression. This was done to take advantage of foam core’s strength in tension and compression, and because the adhesive that was used is more effective at supporting a load in tension than in bending. Additionally, the shaft that is attached to the mirror is powered through a timing belt, which allows for a small alignment error between the motor and the mirror, the servo motors are accurate to within 1 degree, and the platform runs on the open source Arduino platform. These design choices, along with a few other considerations, make the presented design a durable and affordable, educational tool.

Our open-source promise

The goal of Helios is to promote engineering education. Because this is our main focus, our work is licensed under the GNU FDL license. Users have full rights to reproduce and improve on what we have done, as long as they continue to do so under the same license. We hope that users will improve the design and continue to evolve Helios into a more effective learning tool.

Epilog Challenge VIAn Epilog Zing 16 Laser would allow me to complete higher quality projects, , and increase the amount of impact that I have with interesting large scale things, and to tinker more effectively in general. An Epliog Laser would also allow me to build more interesting things and write more cool Instructables, such as this one about a Kayak that I refurbished. My next goal is to build a kayak from laser cut plywood that is reinforced with carbon fiber or glass fiber, as well as a cardboard surf board that is wrapped in structural fiber.

I've also entered this instructable in the Tech and the Teach It contests. If you enjoyed this post, please vote!

Step 1: Table of Contents

Table of Contents:

  • Introduction: DIY Solar Tracker
  • Table of Contents
  • Tools and Bill of Materials
  • Step 1-16 Hardware Assembly
  • Step 17-22 Electronics Assembly
  • Purchasing Links
  • Works Cited
  • Thanks for your Support!!!

Step 2: Tools and Bill of Materials

All of these tools can be purchased at local stores or at the links in the reference section. The total cost of these materials is approximately $80, if they are all purchased online at the given links.


  • Power Drill
  • Drill Bits (.1258”, .18”, and .5” Diameter)
  • Screwdriver Set
  • Straight Edge
  • Box Cutter
  • Large Vice Grips
  • 2 Foam Core Sheets (20” X 30”, ~.2in thick)
  • 9.5” Long by 1/2” Diameter Rod
  • Square Nut (7/16” -14 Thread Size, 3/8” Thick)
  • Vigor VS-2A Servo (39.2g/5kg/0.17 sec)
  • Tape
  • Timing-Belt Pulleys (2), 1” OD
  • Washers
  • Krazy Glue
  • Timing-Belt 10"
  • Templates (Files attached)
  • Mirrored Acrylic Sheet (6” X 6”)
  • Krazy Glue Gel
  • 8 Machine Screws (4-40, 25mm long)
  • 8 Nuts (4-40)
  • 1.5" long Nails
  • Starter Kit for Arduino Uno
  • Real Time Clock Module
  • Wall Adapter Power Supply (5VDC 1A)
  • 9V battery
  • 3.3 KOhm Resistor (2)

Step 3:

Print the templates in the attached file.

Note: These have to be printed in full scale. Compare the printouts with the PDFs, to ensure that your printer has not changed the scale.

Step 4:

Secure the templates to the poster board as shown in Figure 1 and, using the center lines as guides, drill the .18 inch and .5 inch holes.

Note: Drill the .5 inch holes with the .18inch drill bit first for increased accuracy.

Step 5:

With a sharp box cutter, cut out the individual components.

Note: Cut the foam core with multiple passes of the box cutter, this will result in a much cleaner cut. Don’t try to cut through the whole sheet in one pass.

Step 6:

Glue the matching cutouts together as shown in Figure 2, using the super glue. You should be able to look through the cutouts and see that all of the holes are aligned, the base of parts 1 and 2 should be flat, and one template on part 3 should be facing out.

Note: After applying glue to one surface, join the parts and press them together for 30 seconds. Then, allow the glue to set for five minutes.

Step 7:

Using the superglue gel, glue parts 1, 2 and 3 together as shown in Figure 3. Be sure that the parts are arranged so that the .5” diameter holes are closest to the section of the base that is labeled short, also be sure that the template on the base is facing down/out. Allow the glue to set for five minutes. After the glue has set, insert 3 nails through the base and into each of the uprights for added support.

Step 8:

Cut through the top layer of both cross beams and insert them into the Helios as shown in Figure 4. Apply superglue gel to joints between the cross beams and the walls of the Helios, and the surface shared between the two cross beams, as indicated in blue. Allow the glue to set for five minutes.

Step 9:

Place a piece of tape along the cuts, as shown in Figure 5.

Step 10:

Superglue the spacer to the base, by lining it up with the template as shown in Figure 6, and allow the glue to set for five minutes.

Step 11:

Center the largest servo horn onto the bottom base and secure it with the superglue, as shown in Figure 7. Allow the glue to set for five minutes.

Step 12:

Bore out one of the timing belt-pulleys to a .5” diameter hole using the .5 inch drill bit, and check that it fits onto the .5” diameter shaft. It should either press on, or have a gap small enough to fill with super glue. If the drilled hole is too small, sand down the outer diameter of the shaft by hand.

Step 13:

Carefully bore out two square nuts to .5” diameter holes and check that they fit snuggly onto the shaft.

Note: Clamp the nut to a sacrificial surface, with a pair of vice grips, and progressively increase the diameter of the hole with multiple bits until a .5” diameter hole is left. Remember to plunge the drill bit into the nut slowly.

Step 14:

Attach a servo horn to the timing belt pulley as shown here, being careful to center the servo horn’s axis with the pulley’s, as shown in Figure 8.

Step 15:

Assemble the shaft and servo, with no glue, and align the two timing belt pulleys as shown in Figure 9. Some of the rod should be exposed from the wall opposite the pulley.

Note: Screw the servo into the uprights, being careful not to force the screws through the foam core, and screw the servo horn into the servo. You may use superglue instead of screws , however you won’t be able to easily disassemble the unit.

Step 16:

Once the shaft’s pulley is aligned with the servo’s pulley, slide the inner set of washers against each wall and glue them to the shaft using the superglue gel. They will keep the shaft from sliding out of alignment. Also, glue the pulley to the shaft using the super glue. Let the glue set for five minutes.

Step 17:

Shorten the timing belt to the correct length, around 7.2 inches, and use the superglue gel to make a loop that connects the shaft’s pulley to the servo’s pulley, as seen in Figure 10. First, wrap the belt around both pulleys and take out the slack. Now, cut the belt just after the teeth on both ends, the ends of the belt to just reach each other. Now cut around .5” of belt from the piece you just removed. Finally, bring both ends together and glue them with this extra length of belt, image 2. Once the glue dries, place the belt around the pulleys. It should be such a snug fit that you will have to unattach the pulley from the servo to fit the belt on. If it fits, place it to the side for later.

Step 18:

Glue the mirror template onto the back of the mirror, or draw the center line by hand. Then, using the line as a guide, glue the square nuts onto the mirror with the super glue gel. Make sure that the mirror is able to rotate 180 degrees from facing straight up to facing straight down without interfering with anything, and then glue the square nuts to the shaft with the superglue gel.

Note: The bottom edge of the square washers should be aligned with the dotted line on the template.

Step 19:

Install the final servo, secure the bottom base to the final servo with a screw through the servo horn, and place the timing belt onto the pulleys to complete the Helios.

Note: Once you understand how the electronics and software work, by reading below, you can adjust your Helios to increase its accuracy.

Step 20:

Connect the servos as shown, leaving the power disconnected from the DC jack. (Figure 12)

Note: Connect the 9 volt battery directly to the Arduino through the jack on the board and connect the Arduino to your computer through its USB port. DO NOT connect the 9 volt battery to the prototyping board, as this may damage your real time clock.

Step 21:

Download and Install Arduino Version 1.0.2 from here.

Note: This download includes the Helios control code and all the libraries that you will need to run it. To install, download the folder and unzip it. The Arduino program runs directly out of its directory, no formal installation is required. For general installation directions and directions on how to install drivers for your Arduino, head here.

Step 22:

Run the Blink Arduino Sketch based on the directions here. Once you get this short sketch to work, you can be sure that you have properly connected your Arduino to your computer.

Step 23:

Open the control program (ArduinoCode >Helios_2013) to set the time and location of the Heliostat, and to upload the program onto the Arduino.

1) Choose whether you want Helios to act like a solar panel and track the sun (set the variable heliostat=0) or a heliostat (set the variable heliostat=1)

a. Note: We suggest that you try it as a solar panel first to make sure that it moves how you expect. If one of the axis seems to be off, then you may have put in one of the servos backwards.

2) Gently turn Helios clockwise all the way. Then point the whole machine east.

3) Enter the coordinates of your location.

a. Find the coordinates of a location by Google searching the address. Next, right click the location and select “What’s here?”. The coordinates will appear in the search box, with latitude and the longitude.

b. Change the default latitude and longitude values in the program to the latitude and longitude values of Helios.

4) If you choose to use Helios as a solar panel, then skip this step. If you choose to use Helios as a heliostat, then enter the altitude and azimuth angle of Helios’s target. The coordinate system is defined in Figure 15.

5) To set the Real Time Clock, determine the current time in UTC and replace the corresponding variables with these values, in military time. Then delete the “//” where indicated, upload the sketch, and replace the “//” (Ex. 6:30pm EST is 10:30pm UTC. In the program this would look like hour=22, minute=30, and second=0)

a. After the clock is set, unplug the servos and run the code in “solar panel” mode (heliostat=0). Verify the calculated angles of the solar tracker with something like the solar position calculator from ( “dAzimuth” is the Azimuth angle of the sun as predicted by Helios and “dElevation” is the elevation /altitude angle of the sun. Both Helios’s and the website’s predictions should agree to within around five degrees. Any discrepancy within this range is from the uploaded time being off by a few minutes, and would cause an unnoticeable change in Helios’s behavior.

b. Once Helios’s prediction for the sun’s location is accurate, then replace the “//” to comment out the code that sets the clock. The real time clock only needs to be set once, so it will not have to be updated as you upload new sketches or change targets.

6) Remove the USB and power from the Arduino and connect the servo motors again.

Step 24:

If Helios was assembled correctly, then it should point towards the target that you command and keep the sun’s reflection stationary there when power is applied to the Arduino once again. Helios will correct the sun’s reflection every degree. This means that the sun’s refection will shift until the sun has moved one degree, at this point Helios will move to correct the reflection. Once you understand how the program works, you may want to play with the variables “offset_Elv” (Elevation) and “offset_Az” (Azimuth) to compensate for any assembly error. These variables control the orientation of Helios’s coordinate system.

Step 25: Purchasing Links


Rod: (Part Number: 8528K32)

Box cutter:



Templates: Print the pages at the end of this document. Paper can be purchased online at:

Square nut: (Part Number: 98694A125)

Super glue:

Super glue gel:

Straight Edge:

Power Drill:

Screws: (Part Number: 90272A115)

Nuts: (Part Number: 90480A005)

Mirror: (Part Number: 1518T18)

Screwdriver Set:

2 Timing-Belt Pulleys: (Part Number: A 6M16-040DF25)

Timing-Belt: (Part Number: 7887K82)

Drill Bits:

Washers: (Part Number: 95630A246)

Large Vice Grips:

Nails: (Part Number: 97850A228)

Arduino Kit:

Real Time Clock Module:

Power Supply:



Step 26: Works Cited

4photos. (2112, 07 07). 3d compass navigation. Retrieved June 6, 2013, from 4photos:

Commons, C. (2010, January 1). Real Time Clock Module. Retrieved May 28, 2013, from Sparkfun:

Commons, C. (2011, January 1). DC Barrel Jack Adapter - Breadboard Compatible. Retrieved May 28, 2013, from Sparkfun:

Commons, C. (2013, May 16). Ethernet library. Retrieved May 28, 2013, from Arduino:

ElmarM. (2013, March 24). Haunted Doll. Retrieved May 28, 2013, from instructables:

Gaze, M. (n.d.). STEPsss. Retrieved May 28, 2013, from kennyviper:

sonlineshop. (2012, January 1). Resistor 2.2K Ohm. Retrieved May 28, 2013, from

Step 27: ​Thanks for Your Support!!!

We would like to extend a huge thank you to Alexander Mitsos, our supportive advisor, and all of the people that supported us throughout this project:

  • Whitney Meriwether
  • Benjamin Bangsberg
  • Walter Bryan
  • Radha Krishna Gorle
  • Matthew Miller
  • Katharina Wilkins
  • Garratt Gallagher
  • Rachel Nottelling
  • Randall Heath
  • Paul Shoemaker
  • Bruce Bock
  • Robert Davy
  • Nick Bolitho
  • Nick Bergeron
  • Paul English
  • Alexander Mitsos
  • Matt C
  • William Bryce
  • Nilton Lessa
  • Emerson Yearwood
  • Jost Jahn
  • Carl Men
  • Nina
  • Michael and Liz
  • Walter Lickteig
  • Andrew Heine
  • Rich Ramsland
  • Bryan Miller
  • Netia McCray
  • Roberto Melendez

Tech Contest

Runner Up in the
Tech Contest

Epilog Challenge VI

Runner Up in the
Epilog Challenge VI

Teach It! Contest Sponsored by Dremel

Participated in the
Teach It! Contest Sponsored by Dremel