
Solar Tracker
An active solar tracking system designed to optimize photovoltaic energy collection by continuously aligning solar panels with the most intense light source.
- Size
- 50 × 50 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 17
- Nets
- 30
- Pads
- 76
- Tracks, vias
- 0, 0
- Routed
- Not yet
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 8 Jun 2026
- Updated
- 15 Sep 2026
Overview
Solar Tracker is an open-source printed circuit board by mbendari7, from the mbendari7/Solar-Tracker-Project repository on GitHub. It is a 2-layer board of 50 × 50 mm with 17 parts on 30 nets.
It is built around the INA219AID. Its parts include 9 resistors and 7 connectors. It belongs with the power boards and the ESP32 and AVR (ATmega, ATtiny) boards of this library.
Main components
1README
README.mdSolar Tracker Project
An active solar tracking system designed to optimize photovoltaic energy collection by continuously aligning solar panels with the most intense light source. This repository contains the complete project files, including custom PCB schematics, C++ firmware, and 3D-printable mechanical assemblies.
The system utilizes closed-loop control, reading environmental light gradients through an array of sensors and actuating motors to maintain optimal panel orientation.
Project Architecture
The project is divided into three main engineering domains: electrical hardware, mechanical design, and embedded firmware.
1. Hardware and Electronics
The circuit design and PCB layouts were developed using KiCad. The hardware system is responsible for signal acquisition and motor power distribution.
- Microcontroller: Arduino-compatible MCU for processing ADC readings and generating PWM control signals.
- Sensors: Light Dependent Resistors (LDRs) arranged in a directional array with voltage divider networks to measure horizontal and vertical light differentials.
- Actuators: Servos (or stepper motors) to control the pan (azimuth) and tilt (elevation) axes.
- Power Management: Isolated power routing to prevent motor current spikes from inducing noise or brownouts on the logic circuit.
- Design Files: Schematics, PCB layouts, and Gerber files are located in the
hardware/directory.
2. Embedded Firmware
The control logic is written entirely in C++ and focuses on efficiency and preventing mechanical jitter.
- Platform: C++ (compiled via Arduino IDE or PlatformIO).
- Control Loop: The firmware continuously polls the analog pins connected to the LDRs, calculates the light differential across the axes, and updates motor positions accordingly.
- Hysteresis Implementation: A software-defined deadband is included to filter out minor lighting fluctuations (like passing clouds or sensor noise). This prevents continuous, unnecessary motor twitching, which saves power and reduces mechanical wear.
- Source Files: All code, including headers and main operational logic, can be found in the
firmware/directory.
3. Mechanical Design
The physical chassis is custom-designed for structural rigidity and minimal weight, ensuring the motors do not experience excessive torque loads.
- Fabrication: Designed for Fused Deposition Modeling (FDM) 3D printing. PLA or PETG is recommended for durability.
- Components: Includes the base mount, azimuth rotation brackets, elevation tilt brackets, and the solar panel mounting plate. A cross-shaped LDR shadow shield is also included to cast distinct shadows over the sensors when the panel is not perfectly aligned.
- CAD Files: STL files and step files are provided in the
cad/directory.
Repository Structure
├── cad/ # 3D printable models (.STL files for chassis and mounts) ├── hardware/ # KiCad schematic files, PCB layouts, and gerbers ├── firmware/ # C++ source code for the microcontroller ├── docs/ # Wiring diagrams and supplemental documentation └── README.md # Project overview
Setup and Assembly
Mechanical Assembly
- Print all components located in the
cad/directory with a minimum of 20% infill for structural integrity. - Assemble the base and mount the azimuth motor.
- Attach the elevation bracket and corresponding motor.
- Mount the LDR array and attach the cross-shield to ensure accurate differential shading.
Electronics Wiring
- Open the KiCad schematics in the
hardware/folder to review the pinout. - Wire the LDR voltage dividers to the analog input pins of your MCU.
- Connect the motor control lines to the designated PWM output pins.
- Ensure the motors are powered by an adequate external power supply with a common ground shared with the MCU.
Firmware Flashing
- Open the
firmware/directory in your preferred IDE. - Verify that the assigned pin definitions in the header files match your physical wiring.
- Adjust the threshold and delay variables if your specific ambient lighting environment requires more or less sensitivity.
- Compile and upload the code to the microcontroller.
Future Improvements
- Implementation of real-time clock (RTC) modules for predictive solar tracking based on time of day and geographical coordinates.
- Integration of current and voltage sensors to log actual power generation data.
- Migrating from servo motors to precision stepper motors for larger panel handling.
License
This project is open-source. Feel free to fork the repository, submit pull requests, or adapt the designs for your own applications.
Parts
17| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5, R6, R7, R8 |
| 4 | R_Photo | OptoDevice:R_LDR_5.1x4.3mm_P3.4mm_Vertical | R1, R2, R3, R4 |
| 1 | 470 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R9 |
| 1 | Arduino_Nano_ESP32 | Module:Arduino_Nano | A1 |
| 1 | DS1 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J1 |
| 1 | INA219 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J7 |
| 1 | M1 | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J2 |
| 1 | M2 | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J3 |
| 1 | MB102 | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J4 |
| 1 | Solar_Panel | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J5 |
| 1 | TFT_ST7735 | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J6 |
Questions
How big is the Solar Tracker PCB?
It measures 50 × 50 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Solar Tracker use?
17 parts, built around the INA219AID. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Solar Tracker KiCad files?
From the mbendari7/Solar-Tracker-Project repository on GitHub, at the commit this page was made from: the board is Diagrams/Solar Tracker/Solar Tracker.kicad_pcb and its schematic Diagrams/Solar Tracker/Solar Tracker.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Solar Tracker design in my own project?
Its repository states no licence, so its author keeps all rights: ask mbendari7 before reusing the design.
Similar boards
- 4 layers82.6 × 82.5 mm

- 4 layers82.6 × 82.6 mm

- 2 layers74.4 × 51.2 mm

Esp32-wroom timer
AlessandroAU/Chorus32-ESP32LapTimer
This is an ESP32 port of the popular Chorus RF Laptimer
66 parts102GPL-3.0 - 2 layers169.3 × 128 mm

PSU PCB
ThomasVDD/SmartSupply
SmartSupply is a digital battery powered lab powersupply. It is Arduino compatible and can be controlled via PC over USB.
134 parts96 - 4 layers100 × 54 mm

- 2 layers50 × 100 mm

- 2 layers101.6 × 53.3 mm

BatteryAnalyzer MkII
Moragor/BatteryAnalyzer_MkII
Updated Version of the battery analyzer, now with constant current
25 parts12MIT - 2 layers100 × 100 mm

WLEDController
LostInCompilation/WLED-Controller-PCB
WLED Controller Board with ESP32 - 4 Channels - Current and Power Monitoring - INMP441 Microphone
69 parts8