Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Dual-As Zonnetracker met Arduino UNO – DIY Zonnepaneel Afstelling

Onderdelen en Benodigdheden

OnderdeelAantal
Arduino UNO1
SG90 Micro-servomotor2
LDR (Lichtgevoelige Weerstand), 5 MΩ4
Weerstand 330 Ω4
Draaipotentiometer1
Drukknop (pushbutton)2
Mini Zonnepaneel1

Benodigde Tools en Software

  • Arduino IDE
  • Parallax PLX-DAQ (voor Excel datalogging)

Over dit Project

Dit project presenteert een open hardware/software testbank voor een tweeaassige zonnetracker. De prototype wordt bestuurd door een Arduino Uno en kan automatisch de zon volgen met behulp van vier LDR-sensoren en twee servomotoren, of handmatig via een potentiometer. Het systeem biedt virtuele instrumentatie via Excel voor realtime datavisualisatie van spanning, stroom, vermogen en werkende modus.

Mechanisch Ontwerp

De CAD 3D-model (ontworpen in CATIA) bestaat uit het PV-paneel, links-rechts en omhoog-omlaag servomotoren, en vier LDR-sensoren in de hoeken van het paneel. De LDR's zitten in donkere buizen met een klein gat bovenaan om de zonlichtintensiteit te detecteren en de robuustheid te verhogen. De tracker heeft twee vrijheidsgraden: azimut (oost-west) en elevatie (zuid-noord).

Hardware Systeem

Automatische Modus: De microcontroller leest de analoge waarden van de LDR's (pinnen A0-A3) en stuurt twee servomotoren via PWM-signalen (pinnen 5 en 6) om de zon te volgen.

Handmatige Modus: Een potentiometer (A4) stuurt de servomotoren. Drukknop op pin 11 schakelt tussen de twee assen. Drukknop op pin 12 schakelt tussen automatische en handmatige modus.

Stroommeting: PV-spanning wordt gemeten via A5, stroom en vermogen worden berekend en via USB naar Excel gestuurd.

LDR Schakeling: Spanningdeler met 330 Ω weerstanden. De variatie in lichtintensiteit is evenredig met de uitgangsspanning van de deler.

Servomotoren: MG996R voor verticale as (links-rechts), SG90 voor horizontale as (omhoog-omlaag). Bestuurd via 3-draads kabel (voeding + PWM).

Ingesloten Software Ontwerp

De software implementeert vier hoofdeisen:

  1. Twee modi (automatisch/handmatig) wisselbaar via drukknop (pin 12)
  2. In handmatige modus: potentiometer stuurt één van de twee servomotoren (keuze via pin 11)
  3. In automatische modus: algoritme vergelijkt gemiddelde LDR-waarden (links/rechts, boven/onder) en stuurt servomotoren tot verschil binnen drempelwaarde [−10, 10] valt. Bij nacht (gemiddelde waarde < 8) keert tracker terug naar opgangspositie.
  4. PV data (spanning, stroom, vermogen, modus) wordt via PLX-DAQ realtime naar Excel gestuurd

Virtuele Instrumentatie met PLX-DAQ

De PLX-DAQ Excel Macro stelt realtime dataverzameling van Arduino naar Excel in. Na installatie opent u de spreadsheet, stelt baudrate en poort in, en klikt op "Connect" voor live dataweergave.

Prototype

De volledige structuur is gefabriceerd uit houten platen. Figuur 6 toont de ontkoppelde en gemonteerde toestand. Figuur 7 toont de complete testbank met kunstmatige lamp voor testdoeleinden. Het systeem is compact, flexibel en ideaal voor studenten, onderzoekers en ingenieurs om algoritmen te testen vóór grootschalige implementatie.

Code

Ingesloten Software voor Zonnetracker Testbank

#include 

int mode = 0;           // 0 = handmatig, 1 = automatisch
int axe = 0;            // 0 = links-rechts, 1 = omhoog-omlaag
int buttonState1 = 0, buttonState2 = 0;
int prevButtonState1 = 0, prevButtonState2 = 0;

int ldrtopr = 0, ldrtopl = 1, ldrbotr = 2, ldrbotl = 3;
int topl = 0, topr = 0, botl = 0, botr = 0;

Servo servo_updown;
Servo servo_rightleft;
int threshold_value = 10;

void setup() {
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,t,voltage,current,power,Mode");
  
  pinMode(12, INPUT);   // Modus knop
  pinMode(11, INPUT);   // As knop
  pinMode(A4, INPUT);   // Potentiometer
  
  servo_updown.attach(5);
  servo_rightleft.attach(6);
}

void loop() {
  // PV meting
  float volt = analogRead(A5) * 5.0 / 1023;
  float voltage = 2 * volt;
  float current = voltage / 20;
  float power = voltage * current;
  
  Serial.print("DATA,TIME,");
  Serial.print(voltage); Serial.print(",");
  Serial.print(current); Serial.print(",");
  Serial.print(power); Serial.print(",");
  
  char Mode;
  buttonState1 = digitalRead(12);
  if (buttonState1 != prevButtonState1) {
    if (buttonState1 == HIGH) mode = (mode == 1) ? 0 : 1;
  }
  prevButtonState1 = buttonState1;
  delay(50);
  
  if (mode == 0) {
    Mode = 'M';
    Serial.println(Mode);
    manualsolartracker();
  } else {
    Mode = 'A';
    Serial.println(Mode);
    automaticsolartracker();
  }
}

void automaticsolartracker() {
  topr = analogRead(ldrtopr);
  topl = analogRead(ldrtopl);
  botr = analogRead(ldrbotr);
  botl = analogRead(ldrbotl);
  
  int avgtop = (topr + topl) / 2;
  int avgbot = (botr + botl) / 2;
  int avgleft = (topl + botl) / 2;
  int avgright = (topr + botr) / 2;
  
  int diffelev = avgtop - avgbot;
  int diffazi = avgright - avgleft;
  
  // Azimut (links-rechts)
  if (abs(diffazi) >= threshold_value) {
    if (diffazi > 0) {
      if (servo_rightleft.read() < 180)
        servo_rightleft.write(servo_rightleft.read() + 2);
    } else {
      if (servo_rightleft.read() > 0)
        servo_rightleft.write(servo_rightleft.read() - 2);
    }
  }
  
  // Elevatie (omhoog-omlaag)
  if (abs(diffelev) >= threshold_value) {
    if (diffelev > 0) {
      if (servo_updown.read() < 180)
        servo_updown.write(servo_updown.read() - 2);
    } else {
      if (servo_updown.read() > 0)
        servo_updown.write(servo_updown.read() + 2);
    }
  }
}

void manualsolartracker() {
  buttonState2 = digitalRead(11);
  if (buttonState2 != prevButtonState2) {
    if (buttonState2 == HIGH) axe = (axe == 1) ? 0 : 1;
  }
  prevButtonState2 = buttonState2;
  delay(50);
  
  if (axe == 0) {
    servo_rightleft.write(map(analogRead(A4), 0, 1023, 0, 180));
  } else {
    servo_updown.write(map(analogRead(A4), 0, 1023, 0, 180));
  }
}

Schema's

Volledig elektronisch schema (EAGLE/Fritzing formaat) beschikbaar als download.

Productieproces

  1. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  2. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  3. Zonnetracker V2.0 – Geavanceerd DIY Zonnepaneel Volgsysteem
  4. Pixel Chaser: Interactieve één-tik LED-spel met Arduino Nano
  5. IoT-zonnesturing: Slimme energiemanagement met Arduino
  6. Arduino-gebaseerde Afstotende Magnetische Levitatie: Eenvoudige Schakeling & DIY Handleiding
  7. Alexa-ingeschakelde Arduino Thuiscontroller: Slimme Automatisering Made Simple
  8. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  9. Accurate zonnestralingsmeting met Arduino UNO en Ethernet Shield
  10. DIY LED Roulette-spel – Bouw Eenpersoons Arcade Met Arduino Nano
  11. Zelfbouw Zonnetracker Zonne-energiesysteem met Arduino UNO