An ultra-low-power, portable single-axis active solar tracking platform engineered to maximize photovoltaic energy capture in mobile and off-grid deployments.
Static solar panels suffer significant cosine losses as the sun's angle of incidence shifts throughout the day. Sun Chaser addresses this by continuously aligning the photovoltaic surface normal to peak solar irradiance using real-time optical feedback.
Engineered for field portability and high net energy return, the entire active tracking and control system consumes an average of only 0.4W during standard operation, ensuring parasitic power draw remains negligible compared to generated output.
https://github.com/user-attachments/assets/figures/SunChaserTestRun.mov
Full aperture deployment with active single-axis rotational tracking.
Folds flat for compact storage and portable field deployment.
| Parameter | Specification | Details / Notes |
|---|---|---|
| Average Power Consumption | ~0.4 W | Optimized duty cycling & low-quiescent motor control |
| Tracking Axis | Single-axis azimuth | Continuous |
| Control Architecture | Closed-loop Proportional ( |
Dynamic step calculation with unit-step minimum guarantee |
| Deadband Threshold |
|
Adaptive tolerance prevents hunting and mechanical jitter |
| Sensor Interface | Differential LDR array | ADC inputs with 4-sample recursive moving average filter |
| Loop Frequency | 20 Hz (50 ms interval) | Non-blocking millis() state machine |
| State Persistence | On-chip EEPROM | 5-second delayed write caching to prevent EEPROM wear |
| Mechanical Design | Folding linkage chassis | High strength-to-weight ratio, collapses flat for portability |
- Recursive IIR Low-Pass Filter: Mitigates high-frequency noise and environmental flicker by weighting previous ADC states
-
Ambient-Proportional Deadband: Rather than using a static threshold, the deadband scales dynamically with ambient lighting conditions:
$$\text{Tolerance} = \text{Average Intensity} \times 0.08$$ This prevents unnecessary hunting under overcast conditions while maintaining tight alignment accuracy in direct sunlight.
- Consumes
$\approx 0.4\text{ W}$ on average, minimizing parasitic losses to maximize net energy yield. - Non-blocking loop scheduling prevents CPU spinning, leaving headroom for low-power sleep modes.
- Actuation is strictly event-driven: the servo remains stationary when within the dynamic deadband, eliminating continuous motor current draw.
- Restores the last known solar vector upon reboot to minimize initial re-calibration time.
- Uses a 5-second debounce settling timer before committing angle updates to EEPROM, protecting flash cells from premature write-cycle exhaustion during continuous tracking.
+---------------------+
| Microcontroller |
| (ATmega328P) |
+----------+----------+
|
+-------------+-------------+
| | |
[ A0 ] [ A2 ] [ D9 ]
| | |
+----+----+ +----+----+ +----+----+
| LDR 1 | | LDR 2 | | Azimuth |
| (Left) | | (Right) | | Servo |
+---------+ +---------+ +---------+
| Pin | Function | Description |
|---|---|---|
A0 |
Analog Input | Left CdS Photoresistor voltage divider |
A2 |
Analog Input | Right CdS Photoresistor voltage divider |
D9 |
PWM Output | Actuator signal (horizontal position servo) |
sun-chaser/
├── main/
│ └── main.ino # Production tracking firmware & EEPROM logic
├── calibration/
│ ├── LDRTest/ # Optical sensor differential calibration utility
│ └── ServoTest/ # Actuator sweep & sweep range verification
├── figures/
│ ├── SunChaserMainView.jpg # Deployed system hardware image
│ ├── SunChaserCollapsedView.png # Collapsed system hardware image
│ └── SunChaserTestRun.mov # Video demonstration of live tracking
└── README.md
- Arduino IDE or Arduino CLI
- Required libraries:
<Servo.h>,<EEPROM.h>(Standard Arduino AVR Core)
- Clone the repository:
git clone https://github.com/tabyrocket/sun-chaser.git cd sun-chaser - Open
main/main.inoin the Arduino IDE. - Select your board and port, then click Upload.
- Monitor serial diagnostics at
9600 baudfor real-time differential telemetry.

