Photo of solar panel on side river

How To Build A Portable Solar Tracker?

Zuriel Gonzalez
Zuriel
PA Engineer

Unlike fossil fuel and nuclear energy, solar energy is safe and clean. Additionally, it helps to prevent the destruction of habitats while also combating climate change. The importance of solar energy is simply not in its cheapness and reliability, but in the fact that it helps to preserve man’s home. With industries already sensitized, it remains to be seen whether the world will make a permanent shift to renewable energy. In this project, we will show you how we used our PA-14 Mini Linear Actuator to follow the sun through a single axis of motion. Doing this increases the power yield of the solar panel by up to 25% more than a fixed solar panel. We have also attached a ‘how to’ video below for further explanation.

What is a Solar Tracker?

A solar tracker is a device used to incline the solar panels in the direction of sunlight. Solar trackers, therefore, follow the sun the entire day and ensure the solar panels capture or gather as much energy as possible. Their sole purpose is simply to maximize output. The good news here is you can make your own solar tracker at home. With the right kind of tools, most importantly, solar panels and linear actuators, you can create your solar tracker and ensure your solar panels are capturing the maximum amount of sunlight.

 

Benefits of Using Linear Actuators in a Solar Tracking System

While making your solar tracking system, it is indeed advisable and beneficial to use the 12v linear actuators. 12v actuators are usually used in solar trackers as they help to ensure or enhance the effectiveness of the solar panels. Therefore, while looking for an actuator for the solar tracking system, always consider the 12v solar tracker actuator.

One of the main benefits of the 12v actuator is that it achieves the desired movements with higher precision. Therefore, regardless of the sun’s position, these actuators will ensure your solar panels are slanted or inclined in the best position possible to enhance their effectiveness in capturing sunlight.

Converting Solar Panel Power

There are three simple steps in converting solar energy into electrical energy. Each step is performed by an individual component as listed below.

  1. Sungold Solar Panel SGM-90W-18V. This absorbs photons from sunlight and converts them to electricity which is outputted as a varying DC voltage.
  2. Solar Charge Controller Genasun GV-10 regulates the DC voltage from the solar panel to charge the battery.
  3. 12VDC Lithium-Ion Battery stores the electricity for use immediately or at a later time.

In our system, we attached a car cigarette lighter connector to the battery. This allows us to easily connect 12V automotive accessories to the solar panel. In our video we used an oscillating fan, a high-power LED spotlight and even a phone charger.

 

How to Build a Portable Solar Tracker

Control System

The linear actuator is controlled by an Arduino microcontroller using a Wasp motor controller. It takes the reading from photoresistors to determine which side of the panel is receiving light and adjusts the position of the solar panel until the photoresistor readings are fairly equal. This ensures that the solar panel is pointed directly at the sun and yields maximum power.

Diagram of connecting solar panel to automotive accessories

 

 

Components

  1. 1x PA-14 mini-linear actuator – 6 inch – 150 lbs force.
  2. 1x Sungold SGM-90W-18 90 Watt Solar Panel.
  3. 1x Genasun GV-10 12VDC Solar Panel Charge Controller. 
  4. 1x Arduino Micro PLC.
  5. 1x Wasp Motor Controller.
  6. 2x 10k Ohm Photoresistor and 2x 7k Ohm Resistor. 
  7. 1x 12VDC Lithium Rechargeable Battery. 
  8. 1x cigarette lighter connector for 12V accessories (optional).
Photo of a mini linear actuator and control system components

 

Motor Controller

For the control portion of this solar tracker, we will be using the Arduino Micro and WASP Motor Controller. The Wasp Motor Controller is controlled by the Arduino Micro using Pulse Width Modulation. The Wasp then takes power from the 12V battery to extend and retract the PA-14 mini-linear actuator. We chose the 150 lbs force actuator since it draws less current compared to a 35 lbs force version for the load we have.

Diagram of connecting solar panel to microcontroller and linear actuator

Light Sensor

To detect the light intensity from the sun, we used a 10k Ohm photoresistor. A photoresistor behaves like a variable resistor controlled by light. The resistance will decrease as the light intensity increases. We will need two sensors, one on the east side of the panel and the other on the west to be able to determine the position of the sun.

Connect the one 10k ohm photoresistor and one 7k Ohm resistor in series and supply a 5V signal from the Arduino Micro. Take the voltage reading across the 7k Ohm resistor using an analog input on the Arduino Micro. Since the circuit behaves exactly like a voltage divider, the analog reading from the 7k Ohm resistor will increase as the light intensity increases.

Note that the photoresistor is very sensitive and you may need to limit the light received from the sun.

Schema of connecting the light sensor

For our application, we found that pointing it to the side of the panel and covering it with translucent tape worked best.

Programming

The complete program can be found in the next section under the ‘Source Code’. This section of the article will explain the individual components of the program.

Servo Library

The Servo.h library enables the Arduino Micro to control RC servo motors through single line commands as follows:

myservo.writeMicroseconds (1000); // Actuator full speed backwards (1000)

myservo.writeMicroseconds (1520); // Actuator stop (1520)

myservo.writeMicroseconds (2000); // Actuator full speed forwards (2000)

Pin Assignments

Pin 10 and 11 on the Arduino Micro are set to power and ground to drive the WASP controller. Pin 6 and 8 on the Arduino Micro are assigned to analog 7 and 8, which is set to take readings from the light sensor west & east.

 

Variable Declaration

In this section, variables are declared and initialized. They will be used in the functions to store readings from the light sensors. The sample time and adjustment interval are also declared here. Their value can be changed to set the intervals time between each reading and the time between each angle adjustment made to the solar panel. The initial value is set to take a reading every 10 seconds and adjust the solar panel position every 10 minutes.

 

Set Input & Output

Set WASP_Power and WASP_Ground to output in order to drive the WASP controller. Set sensor_west_pin1 and sensor_east_pin2 to input to take readings from photoresistors light sensors.

 

Sensor Readings

As stated before, to determine which direction the solar panel should be facing, we are using two photoresistors as a light sensor to read the light intensity of each side of the solar panel. The programme we used will take a sample reading every 10 seconds for 10 samples, and then take the average readings from the two photoresistors to compare.

 

Solar Panel Movement

With the Arduino Micro, we are using PWM control to drive the actuator. It is a simple and reliable method to control the linear actuator. Depending on the value we set for PWM we can extend, retract, or stop the actuator for any period of time as long as it does not exceed the duty cycle of the actuator.

From our sensor readings, we have two averaged light intensity values from both sensors on the west and east side. It will then execute the movement command to extend, retract or remain stationary depending on the difference between the two sensors’ reading. This set of commands will run every 10 minutes to ensure the solar panel is always getting the most amount of sunlight.

 

Overnight Position Reset

One more feature that can be implemented with the solar tracker is a reset function. If the solar tracker was left to run over a few days, one would need to ensure that it will reset to its initial position the next morning. For this, we will use a simple counter function that will reset the position if the solar tracker has not moved for the past 10 hours. That will indicate it is night, and the solar tracker will reset to its initial position and wait for the following day's daylight.

Please see the code below for this iteration of our solar tracker. The value can always be changed to accommodate different regions and seasons throughout the year.

 

Source Code

Please see the code we used below for this iteration of our solar tracker. Keep in mind that the values can always be changed to accommodate different regions and seasons throughout the year.

<p>/*<br>  This program will allow the solar panel to track the sun, and drive the actuator using
  pwm. Readings from two photoresistors will be taking from each side of the solar panel.
  A number of samples will be taken, and a average reading will be calculated in order
  to determine which side has a higher sunlight intensity. The linear acutor will then
  either extend or retract to angle the solar panel so it is facing the sun. 
  A reset function is implemented so it will move the solar panel to its defult position.
  This allow the solar panel ready to charge in the morning after remain stationary during
  night time.  </p><p>  Hardware used:
                 1 x Arduino Micro
                 1 x WASP Motor Controller
                 1 x PA-14-6-150 Linear Actuator
                 2 x Photoresistors
                 2 x 7k ohm Resistors
*/
/*
            SERVO LIBRARY 
            
   Include the Servo library and create the servo object.
*/</p><p>#include 
Servo myservo;                                        // Create servo object to control a servo</p><p>/*
            PIN ASSIGNMENTS 
            
   Assign pins from WASP Controller and Arduino Micro to appropriate variable.
*/</p><p>const int WASP_Power = 10;                           // Assign pin 10 to Power for the WASP controller
const int WASP_Ground = 11;                          // Assign pin 11 to Ground for the WASP controller
const int sensor_west_pin1 = 7;                      // A7 pin 6 sensor input 1 west
const int sensor_east_pin2 = 8;                      // A8 pin 8 sensor input 2 east</p><p>/*
            VARIABLE DECLARATION
             
   Delcare variable that will be used in the functions later and initilize them.
*/</p><p>int sensor_west[10];                                 // 10 sample readings from sensor on the west side
int sensor_east[10];                                 // 10 sample readings from sensor on the east side
int reset_counter = 0;                               // Time counter for resetting the solar panel position
const int sample_time_interval = 10000;              // Change this value to set the interval between each sample is taken (ms)
const long solar_panel_adjustment_interval = 600000;  // Change this value to set the interval between each adjustment from the solar panel (ms)</p><p>void setup()
{</p><p>/*
            SET INPUT & OUTPUT 
            
   Set the input and output to the variables and pins.
*/</p><p>  myservo.attach(9);                                 // Attaches the servo on pin 9 to the servo object
  pinMode(WASP_Power, OUTPUT);                       // Set Power to output
  pinMode(WASP_Ground, OUTPUT);                      // Set Ground to output
  digitalWrite(WASP_Power, HIGH);                    // Set 5V to pin 10
  digitalWrite(WASP_Ground, LOW);                    // Set GND to pin 11
  pinMode(sensor_west_pin1, INPUT);                  // Set sensor west pin to input
  pinMode(sensor_east_pin2, INPUT);                  // Set sensor east pin to input
}</p><p>void loop()
{
  
/*
            SENSOR READINGS
            
   Take 10 sample readings from both sensors, and take the average of the inputs.
*/</p><p>  int solar_input_west = 0;                                     // Sun light intensity readings from sensor west
  int solar_input_east = 0;                                     // Sun light intensity readings from sensor east</p><p>  for( int i=0; i<10; i++)
  {   
    sensor_west[i] = analogRead(sensor_west_pin1);              // Taking the analog readings from sensor west
    sensor_east[i] = analogRead(sensor_east_pin2);              // Taking the analog readings from sensor east
    solar_input_west = sensor_west[i] + solar_input_west;       // Sum all the inputs from sensor west
    solar_input_east = sensor_east[i] + solar_input_east;       // Sum all the inputs from sensor east
    delay(sample_time_interval);
  }</p><p>  solar_input_west = (solar_input_west) / 10;                   // The the average of input signals from sensor west
  solar_input_east = (solar_input_east) / 10;                   // The the average of input signals from sensor east</p><p> /*
            SOLAR PANEL MOVEMENT
            
   The solar panel will tilt toward west if the sunlight intensity detected on the west side of the panel is greater than the
   one detected on the east side. The solar panel will tilt toward east if the sunlight intensity detected on the east side
   is greater than the one detected on the west side. However, if the readings from both side are similar, the solar panel
   will remain stationary.   
*/</p><p>  if( solar_input_west - solar_input_east > 20)                // If the sunlight intensity is higher on the west side of the panel
  {
    myservo.writeMicroseconds(2000);                           // Full speed forwards (2000) signal pushing the solar panel to the left(west)
    delay(500); //0.5 seconds  
    reset_counter = 0;
  }
  
 else if( solar_input_east - solar_input_east > 20)           // If the sunlight intensity is higher on the east side of the panel
  {  
    myservo.writeMicroseconds(1000);                          // Full speed backwards (1000) signal pulling the solar panel to the right(east)
    delay(500); //0.5 seconds  
    reset_counter = 0;
  }  </p><p>  else                                                        // If ther sunlight intensity is similar from both side of the panel
  {
    myservo.writeMicroseconds(1520);                          // Stationary (1520) signal stop the solar panel from moving
    reset_counter++;
  } 
  
 delay(solar_panel_adjustment_interval);                      // Delay before another adjustment will be made</p><p>/*
            OVERNIGHT POSITION RESET</p><p>   If the solar panel will be used overnight, the controller will detect the panel remained stationary for more than 10 hours,
   It will then reset the solar panel to its default position facing east.
*/
 
 if( reset_counter > 60)                                     // After the solar panel remained stationary for more than 10 hours, it will move to its default position
  {
    myservo.writeMicroseconds(1000);                         // Full speed backwards (1000) signal pulling the solar panel to the right(east)
    delay(12000); //12 seconds
    myservo.writeMicroseconds(1520);                         // Stationary (1520) signal stop the solar panel from moving
    delay(500);  //0.5 seconds   
    myservo.writeMicroseconds(2000);                         // Full speed forwards (2000) signal pushing the solar panel to the left(west)
    delay(1000); //1 seconds  
    reset_counter = 0;
  }
}</p>

 

 

Single-Axis Tracker Hardware

There are countless ways to create a single-axis solar tracker. The easiest method would be to construct the frame using PVC pipes and PVC angled joints. The most important part is the ability to track which can be achieved by using a simple PA-14 mini-linear actuator and a BRK-14 bracket.

For our build, we chose a tripod frame and used 3D printed parts to create the joints and mounts. This allowed us to create a very portable solar tracker frame with the optimum amount of tilt and tracking ability. For a visual overview of our build process, check out our YouTube channel.

Components

  1. 3/4" Copper pipe.
  2. 1x 3/4" Copper pipe end cap. 
  3. 3x 3/4" Gear clamp. 
  4. 3/4" PVC pipe.
  5. 1x 1 Gear clamp.
  6. 5x M6 bolt, nut, and washer.
  7. Various 3D printed brackets.
  8. 2x Actuator mounting pin (can be found in the set BRK-14).
  9. 1x PA-14 mini-linear actuator.

    Photo of mini-linear actuator and components for build portable solar tracker

    Optimum Tilt

    Aside from adding the ability to track the sun, another way to increase the efficiency of the solar panel is to adjust the fixed tilt based on your location. The optimum tilt is determined by your location’s latitude. More information on this can be found at this link: Solar Panel Tilt.

    Here we have a dimensional drawing from the side perspective to show how we calculated our tracker’s tilt. You can calculate Length B using the following equation:

    Drawing from the side perspective solar panel

     

    Fabrication and Assembly

    For a visual overview of our build process, we have uploaded a YouTube video.

    Steps

    1. Calculate the lengths needed to achieve the optimum tilt.
    2. Gather all the components needed.
    3. Attach brackets to the solar panel by drilling holes and fastening them with the appropriate bolts. 
    4. Cut the copper and PVC pipes to length.
    5. Paint and sand the copper and PVC pipes.
    6. Attach the brackets to the pipes and secure them with gear clamps. 
    7. Mount the PA-14 mini-linear actuator and secure using the BRK-14 actuator mounting pins.

     

    Conclusion

    he truth is solar energy will indeed replace fossil fuel energy in the near future. With people already coming up with new ways of increasing the effectiveness of solar panels, it remains to be seen what the future holds for the energy industry. We hope you enjoyed our article and video on creating a portable solar tracker.