Home >> Heliostat Projects >> Arduino Sun Tracking / Heliostat Electronics Control System


 Arduino Sun Tracking / Heliostat Electronics Control System

The rat nest of wires and electronics you see in the picture below is what I use to control my heliostats. (Click picture for larger image) This page will give you an overview on how it all works and information for putting together your own heliostat / sun tracking control system.

This is what I use, but there are a lot of variations on it that could also work. I'm not an electronics expert, so don't take my way as necessarily being the absolute best way. In fact, I'm sure it isn't. I do know that it works though, so I don't complain.


Although it might look complicated to the uninitiated, it is really only made up of several simpler circuits. Also, depending on your application, you might even be able to leave out parts of it.


Arduino and DS1307 Real Time Clock

The brains behind it all is the Arduino Duemilanove. I added a DS1307 Real Time Clock to it so that the Arduino will keep the correct time. The time is used when the Arduino calculates the sun's position, so it is important that it is kept accurately.

To learn how to wire the DS1307 Real Time clock to the Arduino, check out this site http://www.glacialwanderer.com/hobbyrobotics/?p=12 This is where I myself learned how to use it. It is also where the code for controlling the DS1307 in the "Arduino Sun Tracker" sketch comes from.

I bought my DS1307 from Sparkfun. Here is the link http://www.sparkfun.com/commerce/product_info.php?products_id=99

Driver Board

I use two simple DIY driver boards to power the stepper motors. Since I am controlling multiple heliostats, I use relays to turn the power on and off between different sets of motors. This way I can essentially control as many stepper motors as I could ever practically need while still only using just the two driver boards.

I have the Schematics and pictures for the driver board I am using on this page Arduino Stepper Motor Driver Board.


It is possible to buy already assembled driver boards at various places online, but I'm not sure what I would recommend for this application. The driver boards that I have used personally keep the stepper motors powered on constantly. Since the whole point of this project is to reduce energy consumption, it doesn't seem very smart to leave them on 24 hours a day.

If you are using relays to control multiple solar machines like I am, these types of driver boards have another disadvantage. With the power left on, the relays will spark across their contacts every time they are turned on or off. This sparking will reduce the life of the relays.


Shift Registers

The Arduino has a limited number of outputs but more can be added by using shift registers. I use two of them with my Arduino for 16 additional output pins (not counting the few that are used up on the Arduino to control the shift registers).

I use these pins to turn relays on and off, one at a time. Each time a relay turns on, power is supplied to another pair of stepper motors and the driver board is then able to control another solar machine. Since I have 16 outputs, I can control 16 different machines.

I stopped at two shift registers, but more can be chained together to give even more outputs. This would theoretically allow me to control as many solar machines as I could ever practically need.

Of course, depending on the number of outputs you have leftover on your Arduino and the number of machines you want to control, you might not need to bother with shift registers at all. You would need to modify the Arduino Sun Tracker sketch for this to work though if you just wanted to use straight Arduino pins to control multiple machines.

The circuit for attaching the shift registers to the Arduino can be found on the Arduino website at http://www.arduino.cc/en/Tutorial/ShiftOut. Try it out with the LEDs first to make sure you have it working. Once it's finished, you can swap the LEDs for the relays. IMPORTANT: This is written in big red letters because you will be confused if you miss it. The latch pin in the circuit at the link (green wire) needs to be attached to pin 10 instead of pin 8 when using the Arduino Sun Tracking program. It was moved because it was in the way of the stepper motor wires.

Here is the link to where I bought my shift registers. http://www.alliedelec.com/search/productdetail.aspx?SKU=2361860

I haven't tried it, but it might also be possible to use an Arduino Mega instead of the shift registers to extend the number of outputs. It would require the Arduino Sun Tracker Sketch to be modified though.



It is possible to control multiple solar machines without having to add more driver boards by using relays.

I have the schematic for the relay circuit I used along with information on how it works on the page "Using Relays to Control Multiple Solar Machines".


Limit Switches

Wiring the limit switches is pretty straight forward. The schematic below only shows one of them set up. To add more though, you just have to wire them in series. The pin used on the Arduino for the limit switches is pin 13.

Arduino Switch Circuit


Switches for Changing Heliostat Targets

The switches are only necessary if you are controlling a heliostat(s) and want to be able to Switch between different targets.

Check out the page "Switches for Changing Heliostat Targets" to see how I have them wired to my Arduino.


Unipolar Stepper Motors

I found my unipolar stepper motors on eBay and managed to get a lot of 12 for about $35. This gives me enough to make six different solar machines. They work fine for what I'm using them for, but they have a low resolution of 7.5 degrees per step. I'm guessing that they are fairly old.

The exact type is Astrosyn Stepper 28BB-H151-11. I actually tried these stepper motors with two different driver boards that I had purchased and, for whatever reason, they didn't work. They work fine with the driver board I explained above though.

Stepper Motor28BB-H151-11




Home >> Heliostat Projects >> Arduino Sun Tracking / Heliostat Electronics Control System