Wooden solar tracker – prove of concept

Project goal

I want to build a simple and cost-effective wooden dual axis solar tracker, suitable for personal use or for small businesses. From this goal I can derive the following constraints:

  • Heavy machinery is not always or easily available for our target audience, hence tracker should be small enough to be installed on the site by at most 2 people, using only muscle power. Solar panel rated ad 600KW has dimensions approximately 2m x 1.5m, and weight of ~30kg. A pair of such panels can be handled by a pair of human hands, so we set tracker’s total output for ~ 1Kwh. (2 panels)

  • Tracker should have the option to be easily mounted on rooftops, in addition to the apparently common option of “burying” pedestal in the soil.

  • Both mechanical and software parts are in the scope of the project. The software should be capable of managing field of 8 - 32 trackers.


It’s not very common to see solar panels with dual axis trackers, and there is a reason for this: trackers are expensive, while solar panels are relatively cheap. Usually it’s economically not worth to invest in dual axis trackers - buying additional panels is more profitable. So why doing this?

  1. Wood is cheap and easy to process. I want to test my idea that wooden tracker could be made of commodity components in a regular woodworking shop, and the final cost will be low.

  2. Software is also part of the project. It might has it own value, regardless of wooden tracker.

Road map

I will build at least 1 dual axis wooden tracker at 1/3 of target size. The sizes are clear: it should carry 2 panels of 700x500mm, the weight and capacity to stand wind load are not so obvious… 1/3 in panel’s length and height yields 1/9 of area, so I leaving this question open.

I will evaluate several mechanical designs (tentative)

My vision of software architecture is as follow: must be a central computer that orchestrate the entire solar field and provides management and monitoring capabilities to the operator. It will be connected to an anemometer (wind speed sensor), and sun position sensor (or GPS sensor + astronomical algorithms for sun position calculation). This control center will handle strong wind escape maneuver, snow shake movement, broadcast sun position, etc… Also, it will record performance data and will serve an entry point for the operator.

Each tracker will be equipped with a pair of linear actuators (or pair or DC motors), tilt sensor (or accelerometer), a LED to indicate tracker’s motion (awesomeness!), temperature sensor, electric sensor, and networking device. Also, I gonna need Arduino board for each tracker to manage aforementioned components and communicate with the control center.

What has been done so far

On the image: pre-alpha of dual axis tracker almost done. Waiting for second linear actuator to arrive (already ordered).

Will keep posting as the project evolves.

Constructive discussion is welcome

1 Like

Arduino Road Map

After completing building the mechanical part of the tracker (pre-alphfa version), I reached the point where I needed to attach the “head” to it. Below is my current vision of the control module implementation. Community feedback and/or constructive criticism is highly appreciated.

In the nutshell, I want to do the following: every X minutes, the controller will receive the current Sun’s elevation angle and azimuth angle, will read tracker’s aiming, and will adjust the surface of the panel accordingly.

Azimuth/elevation angles – I have not decided yet from where to obtain those angles. Known (to me) options are: the solar position algorithm (SPA), predefined table, and solar tracker sensor.

  • Sensor – at first glance this option seems to be the most natural. Every project that shows up when I google for “arduino solar tracker” uses some sort of light sensing device. Looks simple and effective, but… I must bear in mind, that a real world tracker should be able to perform a wind-escaping maneuver: position a panel parallel to the " floor" surface in order to stand in strong wind loads. Such positioning reduces the “sail” effect and will prevent mechanical destruction. It seems to be mandatory for trackers to be capable of this maneuver, which is obviously not the case when the position of the panel is determined exclusively by sensing Sun light. On the other hand, if 16-32 trackers are connected to a single cluster, it is possible to have one sun sensor, assuming each tracker reads the panel’s position using an accelerometer.

  • Predefined table – IMHO is a great way to solve the problem. There is abundance of resources all over Internet where anyone can download such a table for free for any region on Earth. Let’s evaluate the size of data: if we want to correct the tracker’s position every 15 minutes, we need 4 rows for every daylight hour, approximately 12 hours for 365 days of the year. This yields 365 days * 12 hours * 4 records = 17520 rows. Each row comprises of 3 fields: datetime (4 bytes), elevation (2 bytes), azimuth (2 bytes). ~ 140K for whole year. Great when trackers are in mini-clusters, but not convenient when each tracker is “sovereign”.

  • SPA – seems a great way too. There are several open source implementations in c/c++, which should be easily adaptable for Arduino, if not done already. Convenient for both clustered and sovereign trackers. Things to bear in mind: it requires GPS position of the site. Sun position depends on date, time and geolocation!

Determining the panels’ position in space – I want to use a 3-axis accelerometer ADXL345. (Cost on Amazon: 5.59$)
The sensor should be attached to the tracker in such a way, that the plain defined by solar panels is parallel to the sensor’s XY plain, while the tracker’s spine is aligned with the south-north line, as in the drawing below. Panels are attached on top of the rips. Movement of the “spine” (up and down 0 – 90 degrees) is called “tip”, movement of the “rips” (side to side, ideally 0 – 180 degrees) is called “tilt”. Tip/tilt angles are sometimes called pitch/roll.

Sun position is given as elevation + azimuth angles. We need to translate those angles into cartezian coordinates in order to compare Sun’s position with the accelerometer’s vector. Accelerometer gives normal to the panels surface.

The reading from the statically positioned accelerometer looks like this:

X: 0.71 Y: 4.39 Z: 8.43
X: 0.75 Y: 4.43 Z: 8.43
X: 0.71 Y: 4.43 Z: 8.43
X: 0.71 Y: 4.39 Z: 8.43
X: 0.71 Y: 4.39 Z: 8.51
X: 0.71 Y: 4.39 Z: 8.43
X: 0.71 Y: 4.39 Z: 8.43
X: 0.78 Y: 4.43 Z: 8.43
X: 0.75 Y: 4.35 Z: 8.39
X: 0.71 Y: 4.43 Z: 8.39

Data is taken once in a half second. As we can see, the reading fluctuates a little, while it should be stable (accelerometer not moving). On the other hand, the fluctuation is less than 1%. It’s not critical for solar trackers, it is conceivable that I do not necessarily have to address this issue. Here I want to emphasize what the “issue” is.

When panels are static, I can improve reading in a number of ways:

  • take several readings, then produce an average
  • take several readings, then take only the most common. (0,71, 4.39, 8.43 in the case above)
  • etc…

This is not the case when a linear actuator moves – there is physical movement between reads. Reading is supposed to change.

I see 2 strategies to overcome this fluctuation:
1 – Simply ignore it, since it is relatively small.
2 – move in small bursts, and take measurements only between those bursts.

First, I will try to ignore fluctuations. There is a chance it is not a problem.

Moving actuators are done using L298N motor driver. A single driver can move 2 actuators. I think all I need is once a day to set the tip angle (up & down), then change only tilt (side to side) from sunrise until sundown.

Based on all said above, I set my next milestone as follows:

  • The tracker must be able to perform a wind escaping maneuver (parallel to the “floor”).
  • The tracker must be able to set the slope once a day.
  • The Traker must be able to set tilt (side to side) based on azimuth/elevation angles.

w.r.t a light sensor, you’re optimizing for the sensor position, not the panel position (let’s hope they are fully aligned).

But generally, why not simply measure the panel output current and maximize on that? just tile a little bit and find the maximum position. This way you optimize your real output variable, not some approximation of it.

An ACS712 hall sensor is 1.8$+free shipping on aliexpress.

Also I assume that for your app an L298N is OK because it is hardly used, but in general it’s an ancient, inefficient, bipolar driver that wastes energy on heat (very relevant to battery operated projects).

Hi, Udi

  1. Thanks to your question, I will clarify my current vision and the role of the light sensor in it.
    I don’t want to apply light sensors to each tracker (described in the longtext), I might use a single
    light sensor + single wind sensor in the whole mini-cluster of 16-32 trackers.
    Single control center will read the position of the Sun from the sensor, let’s say each 10-15 minutes,
    and will broadcast to all trackers in the cluster elevation/azimuth. Each tracker will adjust his position according to those angles.

The control center has an anemometer, so if and when wind speed reaches a dangerous level, let’s say 9-10 m/s, the control center will broadcast the command “panels up”, and every tracker will align panels parallel to the “floor”, in order to reduce sails effect.

  1. Aligning panels by measuring maximum output looks awesome if the panel moves on a single axis. It might be a great solution for titled tracker. For dual axis tracker it looks questionable…
  • on what trajectory it must move and how many moves it will take? In the morning? In cloudy weather?
  • how to perform the wind-escape maneuver (parallel to the floor)? At night?

Besides, with accelerometer I am not making an approximation. It gives me a pretty good position.
I was complaining about fluctuations in values when accelerometer is not moving, but the error is less then 1%.
Quite precise.

  1. I am a complete noob at electronics and will gladly take advice for better replacement of L298N.
    L298N is used because it can power 2 linear actuators 12V DC, which is mandatory for my tracker.

It’s alive!

Position error < 2 degree (on each axis). I can do much better in next version.