Portable 2-Axis Solar Tracker

A cheap, portable solar tracker to allow off-grid power usage globally.

Similar projects worth following
This project is an Open Source 2-axis solar tracker, designed to provide the optimal amount of power output for a portable setup. This has wide-ranging uses from camping to developing countries. My goal is to develop a combination of Open Source software and hardware to enable Makers globally to make and improve the design.

Problem: In too many places, the only way to generate electricity is through fossil fuels. This means that the users are subject to the limitations and the pollutants that come with fossil fuels. For traditional power, an extensive, cost intensive infrastructure must be put in place. This means that for developing countries, electricity is limited to a single bulb or brand new buildings.

Solution: To take a simple solar setup and deliver it to families globally. This means a system that is autonomous and doesn't need frequent maintenance. This enables solar power generation in a system that can be carried.

The concept is not a new one, but rather an existing idea using a novel approach. Solar panels generate much less power when the sun is "off axis" and at an angle to the panels. By pointing the panel at the sun, we get the best power for the given panel. Depending on where you are and how long you have line of sight to the sun, you have a much longer period of power generation, especially during morning and late afternoon hours.

You can find even more photos and some additional details on my blog here.

This project does this by using pre-programmed GPS coordinates to calculate the sun's position. This is done via the Open Source Python library Pysolar. By using a simple web interface, the device can be programmed to reliably predict the location of the sun without anomalies that usually come from optical or GPS receivers. With a Raspberry Pi, IMU and high current motor controller, we can easily move a 30 lb. panel. The entire setup is designed to break down as needed and fit in the trunk of a car, but also weatherproof enough to spend all year outdoors.

The Solar Robot 7 project can be divided up into the following categories:

  • Open hardware design of circuits and mechanical components
  • Open Source publishing of underlying design components
  • Optimization for cost
  • Optimization for reliability
  • Enabling use of the project by non-profit organizations and Makers

The project in itself works, and works well. It's been in development for 2 years as a hobby, and I think this is a great time to share it with other Makers. The idea is simple, to collaborate and simplify the design, make it cheaper and easier to deploy for developing countries and enthusiasts alike.

The project has a working prototype, but it is still bulky and very expensive. I am working to reduce the parts and overall cost of the project.

All of the sheet metal components were cut on a waterjet using Big Blue Saw's service- the current design has many parts that have been bent at a machine shop, but the cost of that doesn't scale vs. Big Blue Saw's method for parts that can be bolted together. That's another optimization that is in process.

  • Suspending Work

    Jay Doscher08/24/2015 at 18:29 0 comments

    I have unfortunately have not made the cut for the Hackaday 2015 Prize. I am suspending work on the project indefinitely, but you can see all my work files here on Github ( You can also reach me at if you have interest in the project or would like to contribute.



  • Code updated on Github

    Jay Doscher08/23/2015 at 22:39 0 comments

    I've published all of the core components on Github, including the web control panel. I've also moved to the smaller 10W solar panel and I'm currently using plywood to test a new component layout. The IMU is too unreliable inside the main enclosure, so it's been moved outside. This will increase component cost from the additional enclosure, the cable glands, cable, etc. but it seems unavoidable. You may notice that the lower bracket is empty- this is where the main panels will go later- the small setup you see here is tracking setup only.

  • IMU fixed

    Jay Doscher08/19/2015 at 18:29 0 comments

    I've updated the layout internally, keeping the IMU away from the Raspberry Pi. We seem to be getting good readings, and the tracker is following the sun. Next up on the to-do list:

    • Add the cable glands for the solar connectors
    • Replace the makeshift solar connectors with proper ones
    • Rewire the panning motor with new cable, connect to main box
    • Connect the linear actuator to the main box
    • Remove the motor junction box
    • Create the wood mock-up for the tracker solar panel
    • Attach the main box and solar panel to the wood bracket
    • Resize/modify the bracket design as needed
    • Order the new aluminum bracket
    • Never-ending code optimization
    • Clean up design files

  • Disabled Wi-Fi Power Saving

    Jay Doscher08/17/2015 at 22:34 0 comments

    It looks like the Edimax Wi-Fi adapter likes to go into low power mode, which has been creating issues for the robot today. Here' a link on how to fix it. (link)

  • New IMU placement

    Jay Doscher08/17/2015 at 18:22 0 comments

    We've moved the IMU outside the enclosure and we're back to getting accurate readings. Here's a shot of the new setup. We'll take another shot at rearranging the components tonight, as two enclosures increases cost and parts count. You can see our fancy painter's tape holding the smaller enclosure in place.

  • New hardware deployed

    Jay Doscher08/17/2015 at 02:54 0 comments

    I've deployed new hardware, and you can track it on Twitter at @solarbot7. I think the IMU may still be too close to the electronics, as I am getting some funny behavior this evening. Since the robot sleeps (set to inaction) overnight, I should know more tomorrow. The IMU may have to go in an external housing or spaced out further from the other electronics. You'll notice that the lower cases are gone (still on Twitter as @fieldunit), so the wire tangling issues should be behind us for now.

    Here's a photo of the old configuration and the tangled wires- not good! It breaks stuff when it does this.

  • Revision B Installed

    Jay Doscher08/16/2015 at 22:34 0 comments

      I've installed revision B which uses several different components:

      1. Pololu high current motor controller has replaced the Open Electrons version
      2. Replaced the Raspberry Pi 2 with an A+
      3. Removal of the Analog sensors, including current (this may be added back later)
      4. Change in chassis
      5. Replaced the 9Ah battery with a 2Ah battery (this only needs to last the Pi overnight)

      Here's a shot of the inside of the chassis. The compass is likely going to have to get moved, I think there is too much EM interference in this enclosure.

  • Upcoming Build

    Jay Doscher08/13/2015 at 01:18 0 comments

    Here's a photo of the upcoming build, which uses a Raspberry Pi A+ for a lower power footprint. This means that the battery can be smaller, reducing size and weight of the overall device.

  • Pan and Tilt Proof of Concept Test

    Jay Doscher08/13/2015 at 00:56 0 comments

    Here's a video of a proof of concept test for the pan and tilt system:

View all 9 project logs

Enjoy this project?



fred frazelle wrote 02/28/2016 at 00:42 point

Just a note to let you know that we have been able to

use your solarrobot program in Python3.  We just finished
last night finally figuring out some errors and the only
thing that seems to still be happening is that we haven't
initialized the rrtool database and don't see any code of
yours where that happens.  We get six errors where it
seems to want to write to the database and can't find it.

    We have also been using a 12V 1Amp DC motor to move
our parabola.  It has worked just fine be we see that you
have chosen other type of motor and were wondering if we
should switch to this type of motor (i think it is of the
"step" type) or whether the dcmotor program will work with
our DC motor.  We don't have anything connected yet
because we've been looking for someone here in Mexicali
with a little more soldering experience with small joints
than what we have.
    Thought you'd like the update.
    Have a great afternoon!
    With warmest greetings,

P.S.  You're email address do not seem to be active any more.

  Are you sure? yes | no

bandit wrote 08/30/2015 at 06:02 point

Where did you get the sun position algorithm from? NREL? PSA?

And the comments about trig lookup tables and fixed-point math are spot-on. The Atmels have plenty of power if you are clever about the way you do the trig functions - you do not need FP hardware.

  Are you sure? yes | no

Jay Doscher wrote 08/30/2015 at 15:12 point

As mentioned in the project details above, I am using the Pysolar library.  Keep in mind that as also mentioned above and below, fixed tables would require recalculating them and reprogramming them every time you want to take it somewhere else.  This configuration needs only a device with wifi and a web browser to reprogram, allowing the use of tablets and phones.  As mentioned in the blog post, I've already done this with Arduino- and although it's novel to reduce the build cost by $20 by using a cheap Arduino instead of a $25 A+, you lose too much functionality, flexibility, and capability by doing that.  Arduino web servers are quite poor compared with an Apache2 server, which the A+ does well and at no additional cost.  

If you're interested in pre-programming solar positions for every major city for the next 50 years and sharing those tables, I'd love to see it.

  Are you sure? yes | no

bandit wrote 09/01/2015 at 02:48 point

I don't know about the Pysolar library. the two I mentioned, esp the
PSA only need the current (local standard) time and the lat/lon. The
fixed tables are for trig functions. So, I do not understand your
statement, other than you are assuming you need to create the table
exclusively for the specific location. These algorithms will give you
the zenith/azimuth quickly. The PSA runs 20x of the NREL and is easier
to use. (PSA runs 5 milliSec vs SPA/NREL 100 milliSec on an AVR32 w/ 12
MHz clock). Even if it takes 30 seconds to execute, that is good enough
for this kind of app.

Also - for ethernet - look at the
Wiznet chips. Sparkfun has the Wiznet 5100 mounted on a board with an
RJ45 connector for about $25. Sparkfun has an adapter for mounting it on
a Teensy 2.0++


www (dot) psa (dot) es (slash) sdg (slash) sunpos (dot) htm (C++, easy to convert to C)
for the paper. google 10022519534118276 (dot) pdf

  Are you sure? yes | no

fred frazelle wrote 08/27/2015 at 02:38 point

So sad you're not going to be able to continue with this.  We've been trying to build a solar hot water heater for some 3 years now.  We've got one that works, but all of a sudden (maybe it's the time of the year???) are having problems with our LEDs getting confused by the parabolic trough reflection, so we've been looking for "another way".  We were thinking about putting a compu on this anyway in order to feed the before and after temps to the "clients" - lol via the internet, so we have been looking for just a one-axis tracking system with the GPS coordinates and time of day.  Since we don't do programming, much less engineering, we've just been scanning the forums for someone else to come up with the answer.  

The other problem/challenge we would have is that the Raspi whatever only holds up to 40 degree Celius and we get some days of 50 or 51 - very infrequently - but we'd hate to loose the equipment.  (Hmmmmm... maybe it doesn' t have to be mounted on the collector itself, but could be mounted inside somewhere close. - lol - always thinkin' )

Here's a link to our OpenSource ...

Maybe something there will be of use.

  Are you sure? yes | no

Jay Doscher wrote 08/27/2015 at 02:52 point

I'm not deleting the work I've done, but I have to be realistic about the time and resources I have to put into it.   The Python that I've done isn't terribly complicated, and should be easy to modify to what you need it to do.  As for the temps, I would add a fan and vents to the enclosure for the summer months.  There's nothing that says the Pi, motor controller, battery and charge controller need to be on the chassis- only the IMU.

  Are you sure? yes | no

fred frazelle wrote 08/27/2015 at 03:01 point

Thanks, Jay, for supporting and adding to OpenSource and helping to build a better future for all of us.

  Are you sure? yes | no

Charles Prichard wrote 08/26/2015 at 16:00 point

Cold weather application begs for a composite worm drive to turn the entire support mast East-West. Aiming is not crucial, and can be performed using lookup values for three positions AM-NOON-PM. I see the shaft-actuated positioners freezing after condensation accrues despite weep holes, and new grease. Water gets into the grease in droplets. Composite worm drive turning across teeth localizes the problem to the gearbox portion of the motor.

  Are you sure? yes | no

Jay Doscher wrote 08/26/2015 at 16:58 point

I will admit that I've focused on warm weather areas so far- the panning motor is an area for improvement, but there's significant cost in going with a weatherproof worm drive.  I'd be interested in any suggestions you have that would be cost-effective.

  Are you sure? yes | no

Andy from Workshopshed wrote 08/18/2015 at 05:35 point

I did a photocell based tracker back in 1991 using discrete logic. We never field tried it as we'd not bothered to calculate the loads on the motors and as a result they were under powered.

  Are you sure? yes | no

Valent Turkovic wrote 08/17/2015 at 16:22 point

Hi, this is an awesome project, I would like to try it on few open wifi hotspots what would work with solar energy only. I still don't get how mechanics work for two axis. Can you please go into detail of how mechanic works, show which motors are needed and all other details. I agree Rpi is great choice, my second choice would be TP-LINK WR703 with 8MB of flash so it can run Python.

  Are you sure? yes | no

Jay Doscher wrote 08/17/2015 at 16:25 point


I will be adding the motor and other details in the coming two weeks.  Keep in mind you also need a motor controller that can handle high current, so the TP-LINK may be excluded here.  From a 2-axis standpoint, the Pysolar provides a heading and elevation for the position of the sun relative to the position of the tracker.  Using an IMU, I turn until I get to the proper heading, then tilt until I get to the proper elevation.

  Are you sure? yes | no

Eric wrote 08/15/2015 at 03:12 point

Hey, in the old days, we used tables of sin/cos/tan and just looked up the values....also we did fixed point math, instead of floating, were able to make some really good video games back with a 6502/Z80 with no multiply (tables of logs adding is multiplying :-)

  Are you sure? yes | no

Jay Doscher wrote 08/15/2015 at 15:02 point

That sounds cool- with the Raspberry Pi A+ I'm planning for the next version, we're bringing costs down considerably, very close to what a microcontroller with lots of memory has.  The other challenge with building tables manually like you mention is that we'd have to load them for the entire world- this device is meant to be used globally.

  Are you sure? yes | no

siluxmedia wrote 08/13/2015 at 23:34 point

why not to use 3 tilted photo resistors and sense which is getting more light? then an arduino controls a servo to move to the best position.

  Are you sure? yes | no

Jay Doscher wrote 08/13/2015 at 23:45 point

Hi and thanks for the comment! There are several reasons:

1.) Arduinos can't reliably handle the math required since it requires extensive floating point math, something Arduinos handle poorly.

2.) Photo sensors can be fooled by shade, clouds and other interruptions.

3.) Photo sensors need to be kept clean.

4.) Adding photo sensors to the project would actually add cost to the project rather than reduce it, since there currently are no sensors of that kind on the project.

  Are you sure? yes | no

Marcus Szolkowski wrote 08/14/2015 at 03:45 point

I wouldn't rule out floating point math on an arduino.  My latest project is doing voltage/current monitoring, and the arduino is taking 16x samples of 8 analog channels, averaging all 16 values and then doing floating point scaling and adjustment.  All of the math for all 8 channels, plus another 10 or so derived floating point parameters (power, amp-hours, runtime etc), takes less than 2ms to execute.

Secondly, the low power consumption of an arduino would give you even better efficiency on this project.

  Are you sure? yes | no

Jay Doscher wrote 08/14/2015 at 05:24 point

Thanks for your reply!  The issue is one of using tan,cosin, atan and other math functions.  It's not a question of doing *some* floating point, but it's the ability to precisely measure the location of the sun.  I actually started out with an Arduino on this project:

For the current project I chose a Raspberry Pi 2 for a proof of concept, but in the log you can see I am using an A+ for power efficiency.  The A+ also gets me a full Linux OS, so I can implement a web browser with authentication, access control, web control over variables, and especially SSL.  

Additionally, the compute unit isn't drawing very much power- it's the high current motors that eat most of the juice.  I'm open to using a different motor controller, but the two different models I have are actually lasting all day on a fairly small battery.

  Are you sure? yes | no

siluxmedia wrote 08/14/2015 at 23:48 point

for web wifi control you may be interested about the new nodemcu boards, which have a programmable ESP8266 onboard. However they still don't beat a Raspberry pi A as a web server, but draw less current.

  Are you sure? yes | no

siluxmedia wrote 08/14/2015 at 23:40 point

I mean photoresistors, which are really small and cheap, 2dollars for 100.Solar panels too need to be cleaned, and some of them may sense if there's clouds,  estimate light and find if something is blocking sun.

  Are you sure? yes | no

Jay Doscher wrote 08/15/2015 at 00:25 point

You could do an Arduino one with photoresistors, but that's a different project.  Since I am using math to calculate the position of the sun, there are no sensors to clean- plus adding analog circuits onto the A+ adds components and cost- I am going for barebones here.

I am always on the lookout for ways to set the time, latitude and longitude with switches or knobs, but it turns out that's a ton of switches when you can log in with a smartphone and change as you want that way.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates