Save money on your purchases by earning redeemable points with Progressive Rewards!
Solar power is one of the most accessible types of renewable energy and is rapidly increasing in efficiency and affordability. 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.
There are three simple steps in converting solar energy to electrical energy. Each step is performed by an individual component as listed:
1. Sungold Solar Panel SGM-90W-18V: absorbs photons from sunlight, and converts it 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 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.
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).
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 increase. 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. Please note that the photoresistor is very sensitive and you may need to limit the light received from the sun. For our application, we found that pointing it to the side of the panel and covering it with translucent tape worked best."
Set WASP_Power and WASP_Ground to output in order to drive the WASP controller, sensor_west_pin1 and sensor_east_pin2 to input to take readings from photoresistors light sensors.
To determine which direction the solar panel should be facing, we are using two photoresistors as light sensor to read the light intensity of each side of the solar panel. The program 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.
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 value from both sensors on the west side 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.
One more feature we can implement with the solar tracker is a reset function. Basically if the solar tracker was left to run over a few days’ period, we 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 nighttime, and the solar tracker will reset to its initial position and wait for the following day's daylight.
Please see the code we used attached below for this iteration of our solar tracker. The value can always be changed to accommodate different regions and seasons throughout the year.
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>
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.
We hope you enjoyed our article and video on creating a Portable Solar Tracker. Subscribe to our channel and follow us on social media so you can be the first to see all of our latest automation videos and articles.
Please wait...
...