Solar Tracking System
Build a Dual-Axis Solar Tracking System Using Arduino
In this project, we'll create a DIY dual-axis solar tracking system that adjusts a solar panel's orientation in two directions for optimal sunlight capture. By using light-sensitive sensors and Arduino, the system dynamically tracks sunlight to maximize energy generation.
How the System Works
The dual-axis system uses four LDR sensors and four resistors in voltage divider circuits to measure light intensity from multiple directions. These readings are processed by the Arduino, which controls servo motors to adjust the panel's horizontal and vertical positions for optimal sunlight exposure.
Materials Required
- Arduino UNO - Buy Here
- Solar Panel - Buy Here
- Breadboard - Buy Here
- SG90 Servo Motors - Buy Here
- LDR Sensors - Buy Here
- 10k Resistors - Buy Here
- Jumper Wires - Buy Here
- Battery - Buy Here
3D Model Files
Download the 3D printable files for the project enclosure and mounting brackets:
Google DrivePrint these files using JLCPCB's 3D printing service:
Order NowCircuit Diagram
🎥 Watch the video above for full assembly and demonstration.
Arduino Code
#include <Servo.h>
Servo horizontal; // Horizontal Servo Motor
int servohori = 180;
int servohoriLimitHigh = 175;
int servohoriLimitLow = 5;
Servo vertical; // Vertical Servo Motor
int servovert = 45;
int servovertLimitHigh = 100;
int servovertLimitLow = 1;
// LDR pin connections
int ldrlt = A0; // Bottom Left LDR
int ldrrt = A3; // Bottom Right LDR
int ldrld = A1; // Top Left LDR
int ldrrd = A2; // Top Right LDR
void setup() {
horizontal.attach(2);
vertical.attach(13);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
int lt = analogRead(ldrlt); // Top left
int rt = analogRead(ldrrt); // Top right
int ld = analogRead(ldrld); // Bottom left
int rd = analogRead(ldrrd); // Bottom right
int dtime = 10;
int tol = 90; // Tolerance value for adjustment
int avt = (lt + rt) / 2; // Average value of top sensors
int avd = (ld + rd) / 2; // Average value of bottom sensors
int avl = (lt + ld) / 2; // Average value of left sensors
int avr = (rt + rd) / 2; // Average value of right sensors
int dvert = avt - avd; // Difference between top and bottom
int dhoriz = avl - avr; // Difference between left and right
if (abs(dvert) > tol) {
if (avt > avd) {
servovert = ++servovert;
if (servovert > servovertLimitHigh) servovert = servovertLimitHigh;
} else {
servovert = --servovert;
if (servovert < servovertLimitLow) servovert = servovertLimitLow;
}
vertical.write(servovert);
}
if (abs(dhoriz) > tol) {
if (avl > avr) {
servohori = --servohori;
if (servohori < servohoriLimitLow) servohori = servohoriLimitLow;
} else {
servohori = ++servohori;
if (servohori > servohoriLimitHigh) servohori = servohoriLimitHigh;
}
horizontal.write(servohori);
}
delay(dtime);
}
Code Explanation:
Setup:
Initializes the servo motors and sets their initial positions. The horizontal servo starts at 180 degrees and the vertical servo at 45 degrees.
Loop:
Continuously reads the four LDR sensors, calculates average light intensities from different directions, and adjusts the servo positions accordingly to maximize sunlight exposure. The system compares light intensity differences and moves the panel toward the brighter direction within predefined limits.
Why Choose Dual-Axis?
- ✅ Improved Tracking: Captures sunlight from both vertical and horizontal directions, maximizing energy generation
- 🔄 Scalability: Can be adapted for larger panels or more sensors for higher precision
- 🌞 Higher Efficiency: Increases solar energy capture by up to 40% compared to fixed panels
Key Benefits
This system provides an excellent opportunity to explore renewable energy technologies while increasing the efficiency of solar panels. It's an engaging and practical project for anyone interested in Arduino and sustainable energy solutions.
Thanks a lot! :)
ReplyDeleteme puedes decir si genera energÃa, y la puede almacenar ? por favor, gracias
ReplyDeletesi
DeleteNice bro!
ReplyDeleteCan you make a smart army tank with max features bro pls?
ReplyDeleteno se
DeleteHi I'm need to use stm32f103c8t6
ReplyDeleteHow do I change the code for this micro?
hi
ReplyDeletethank you this helped me and my school group a lot
ReplyDeletehow do i open the 3d model of the arms and other?
ReplyDeletehow do i get the 3d model? the google drive link dont work
ReplyDeleteI need to use rain sensor also how can it be done
ReplyDelete