Índice

Sistema de monitorização solar "faça você mesmo": Optimize a sua utilização da energia solar

Imagem de Dean Ding
Dean Ding

Há 15 anos que nos dedicamos ao sector da energia solar

Sistema de monitorização solar "faça você mesmo": Optimize a sua utilização da energia solar

This tutorial will provide a detailed guide on how to build a low-cost solar tracking system based on the LINKSOLAR monopole ground mount (official link), which can improve the power generation efficiency of a 100W photovoltaic panel by 30%-45%. The tutorial includes code, a materials list, and weatherproofing solutions.

1. Why Do We Need a Solar Tracking System?

1.1 Improving Power Generation Efficiency

  • Montagem fixa: Daily energy capture is about 70%.
  • Seguimento de um eixo: Efficiency increases to 85%-90% (NREL data).
  • Seguimento de eixo duplo: Can reach up to 95% (goal of this project).

1.2 Advantages of LINKSOLAR Mount

  • Industrial-Grade Load Capacity: Single pole supports up to 6 x 100W panels.
  • Quick Modification: Compatible with NEMA17 stepper motor.
  • Wind-Resistant Design: 4-inch galvanized steel pole + pre-buried foundation.

2. Materials List and Tool Preparation

CategoriaModel/SpecificationKeyword-Optimized Description
Core MountLINKSOLAR Monopole Ground MountSolar mount for ground installation
Drive MotorNEMA17 + DRV8825 Driver BoardHigh-torque stepper motor for solar tracking
Light SensorTSL2591 Digital Light Sensor ModuleI2C light sensor for outdoor PV tracking
Main ControllerESP32 Development BoardWiFi-enabled solar tracking controller

3. Step-by-Step Installation Guide

3.1 Mount Modification Steps

  • Pole Reinforcement
  • Weld a flange bearing (model FYLC-205) to the top of the LINKSOLAR mount.
  • Secure the NEMA17 motor with U-bolts (horizontal rotation axis).
  • Tilt Adjustment Structure
  • Use L-shaped aluminum (6061-T6) to connect the panel to the second motor.
  • Install limit switches (KW12-3) to prevent over-rotation.

3.2 Circuit Connection Diagram

[SEO Tip] Use alt text to describe the image:
“Solar tracking system wiring diagram – ESP32 controls dual-axis motors and light sensor.”

4. Arduino Code Explanation (with PID Algorithm)

4.1 Code Structure Overview

The Arduino code for this system is based on a PID control algorithm, using the TSL2591 light sensor and MPU6050 orientation sensor to adjust the solar panel angle in real-time for dual-axis tracking. The code is divided into the following sections:

  • Sensor Initialization: Includes TSL2591 light sensor and MPU6050 orientation sensor setup.
  • PID Control: Uses PID algorithm to calculate motor steps for precise horizontal (azimuth) and vertical (elevation) control.
  • Motor Drive: Controls stepper motor direction and steps based on PID output.
  • Data Monitoring: Outputs sensor data and PID calculations via serial for debugging.

4.2 Complete Code

#include <Wire.h>
#include <Adafruit_TSL2591.h>
#include <MPU6050.h>
#include <PID_v1.h>

// Sensor objects
Adafruit_TSL2591 tslEast = Adafruit_TSL2591(0x29);
Adafruit_TSL2591 tslWest = Adafruit_TSL2591(0x30);
MPU6050 mpu;

// PID parameters
double Kp = 2.0, Ki = 0.5, Kd = 0.1;
double inputEast, inputVertical, outputStepH, outputStepV;
double setpointH = 0, setpointV = 45; // Initial tilt angle 45°

PID horizontalPID(&inputEast, &outputStepH, &setpointH, Kp, Ki, Kd, DIRECT);
PID verticalPID(&inputVertical, &outputStepV, &setpointV, Kp, Ki, Kd, DIRECT);

// Pin definitions
#define STEP_H 12
#define DIR_H 13
#define STEP_V 14
#define DIR_V 15

void setup() {
  Serial.begin(115200);
  Wire.begin();

  // Initialize sensors
  tslEast.begin();
  tslWest.begin();
  mpu.initialize();

  // Set TSL2591 gain
  tslEast.setGain(TSL2591_GAIN_MED);
  tslWest.setGain(TSL2591_GAIN_MED);

  // Initialize PID
  horizontalPID.SetMode(AUTOMATIC);
  verticalPID.SetMode(AUTOMATIC);
  horizontalPID.SetOutputLimits(-200, 200);
  verticalPID.SetOutputLimits(-100, 100);

  // Set motor pin modes
  pinMode(STEP_H, OUTPUT);
  pinMode(DIR_H, OUTPUT);
  pinMode(STEP_V, OUTPUT);
  pinMode(DIR_V, OUTPUT);
}

void loop() {
  // Read east and west light intensity
  uint32_t eastLux = tslEast.getFullLuminosity();
  uint32_t westLux = tslWest.getFullLuminosity();
  inputEast = (eastLux - westLux) / 1000.0;

  // Read current tilt angle
  int16_t ax, ay, az;
  mpu.getAcceleration(&ax, &ay, &az);
  inputVertical = atan2(ay, az) * 180 / M_PI;

  // Calculate PID output
  horizontalPID.Compute();
  verticalPID.Compute();

  // Drive horizontal motor
  digitalWrite(DIR_H, outputStepH > 0 ? HIGH : LOW);
  for(int i=0; i<abs(outputStepH); i++){
    digitalWrite(STEP_H, HIGH);
    delayMicroseconds(500);
    digitalWrite(STEP_H, LOW);
    delayMicroseconds(500);
  }

  // Drive vertical motor
  digitalWrite(DIR_V, outputStepV > 0 ? HIGH : LOW);
  for(int i=0; i<abs(outputStepV); i++){
    digitalWrite(STEP_V, HIGH);
    delayMicroseconds(500);
    digitalWrite(STEP_V, LOW);
    delayMicroseconds(500);
  }

  // Print data
  Serial.print("East:");
  Serial.print(eastLux);
  Serial.print(" West:");
  Serial.print(westLux);
  Serial.print(" Angle:");
  Serial.println(inputVertical);

  delay(1000);
}

4.3 Key Code Analysis

  • PID Control
  • horizontalPID and verticalPID control horizontal and vertical motors, respectively.
  • inputEast and inputVertical are PID inputs, representing east-west light intensity difference and current tilt angle.
  • outputStepH and outputStepV are PID outputs, indicating motor steps.
  • Motor Drive
  • Use digitalWrite to control motor direction (DIR_H and DIR_V).
  • Use for loop and delayMicroseconds to control motor stepping speed.
  • Data Monitoring
  • Output east-west light intensity and current tilt angle via serial for debugging and monitoring.

4.4 Key Library Installation

  • Arduino IDE Library Manager
  • Search and install Adafruit TSL2591 Library.
  • Search and install MPU6050 by Electronic Cats.
  • Search and install PID by Brett Beauregard.

4.5 Calibration Process

  • Light Sensor Calibration
  void calibrateTSL() {
    tslEast.setGain(TSL2591_GAIN_LOW);
    tslWest.setGain(TSL2591_GAIN_LOW);
    // Run after aligning both sensors to the same light source
    while(abs(tslEast.getLuminosity() - tslWest.getLuminosity()) > 100) {
      delay(1000);
    }
  }
  • MPU6050 Calibration
  void calibrateMPU() {
    mpu.CalibrateAccel(6); // 6-sample calibration
    mpu.CalibrateGyro(6);
    mpu.PrintActiveOffsets();
  }

4.6 3D Printing Enclosures

  • Motor mounts
  • Sensor enclosures

5. Debugging and Maintenance Tips

5.1 Calibration Process

  • Light Sensor Calibration
  • Compare TSL2591 readings with a lux meter (error within ±3%).
  • Mechanical Zero Reset
  • Use limit switches to set initial horizontal/vertical positions.

5.2 Routine Maintenance

  • Quarterly Check: Clean rail debris and lubricate bearings.
  • Annual Upgrade: Update PID parameters (optimize based on local weather data).

7. Frequently Asked Questions (FAQ)

Take Action: Contact LINKSOLAR official staff and start your green energy project!

We hope this tutorial helps you successfully build an efficient solar tracking system!

Active o JavaScript no seu browser para preencher este formulário.
Nome

pt_PTPortuguese
Active o JavaScript no seu browser para preencher este formulário.
Nome