Position Optimization Method for a Solar Tracking Device using the Cast-Shadow Principle

Letzte Woche habe ich als Co-Autor zusammen mit Raul Rotar den Forschungsartikel Position Optimization Method for a Solar Tracking Device using the Cast-Shadow Principle bei SIITME präsentiert.

Abstrakt: Automatisierte Photovoltaik-Panels (PV-Panels) sind zugängliche und zuverlässige Motoren zur Nutzung der von den Sonnenstrahlen bereitgestellten Energie. In diesem Dokument entwerfen wir ein effizientes Solar-Tracking-Gerät, das aus einer Arduino-UNO-Platine, zwei Schrittmotoren, einem Paar spezieller L298N-Schaltungen und einem Optokoppler besteht. Wir präsentieren auch einen neuartigen Ansatz zur Ausrichtung des Sonnenkollektors auf die Sonne basierend auf dem Schattenwurfeffekt sowie eine kostengünstige und sensorlose Lösung für die Bereitstellung einer automatisierten Variante des PV-Panels. Durch die Implementierung eines speziellen Blockiermechanismus für die Schrittmotoren konnte der Gesamtstromverbrauch des Systems um 86,93% gesenkt werden, wodurch die Zuverlässigkeit des Geräts vom Wechselstromnetzwerk aufgehoben wurde. Die experimentellen Ergebnisse zeigen eine Spannung von 45,21%, einen Strom von 49,71% und eine Leistungssteigerung von 58,82% gegenüber dem statischen PV-Panel unter Verwendung von monokristallinen Solarzellen.

Sie können den Artikel hier lesen: https://ieeexplore.ieee.org/document/8599198

Mein wissenschaftliches Posterdesign:

blank

So sieht unser Solar Tracking Device using the Cast-Shadow Principle aus:

In diesen Bildern sehen Sie, wie sich die Spannungsmessung für eine der Ecken des Solartrackers nach dem Schattenwurfprinzip ändert.

Der folgende Code deckt den Automatisierungsprozess unseres Solar-Tracking-Gerätes ab, das das Schattenwurf-Prinzip zu seinem Vorteil nutzt. Der Code wurde in der Sprache C geschrieben und in der IDE-Suite Arduino kompiliert. Die wichtigsten Aspekte des Codes sind die Sensorwertkalibrierung und aktuelle Bibliotheken, die es uns ermöglichen, die Schrittmotoren auf bequeme Weise zu steuern.

//Stepper Motor Solar Tracker Updated Version. Code written by Raul Rotar and Sorin Liviu Jurj for „Position Optimization Method for a Solar Tracking Device using the Cast-Shadow Principle“. More information about the paper: https://www.jurj.de/position-optimization-method-for-a-solar-tracking-device-using-the-cast-shadow-principle/

#include <Stepper.h> //Integrating library for dealing Stepper.h stepper motors

#include <math.h> //Integrating design math.h library for basic mathematical operations

//Declaring Constants

#define motorStephor 200 //steps for horizontal motor

#define motorStepver 200 //steps for vertical motor

//Digital pins

#define motor1hor 4

#define motor2hor 5

#define motor3hor 6

#define motor4hor 7

#define motor1ver 8

#define motor2ver 9

#define motor3ver 10

#define motor4ver 11

//Variables

int average; //Average of four LDR

int h=60; //Steps executed by the horizontal motor

int v=5; //Steps executed by the vertical motor

int ltsensor; //Value of the top left LDR

int rtsensor; //Value of the top right LDR

int rdsensor; //Value of the bottom right LDR

int ldsensor; //Value of the bottom left LDR

int sen=50; //Sensibility

int dil; //Average set of LDR left

int dit; //Average set of LDR top

int dir; //Average set of LDR right

int did; //Average set of LDR bottom

int diff; //Difference between LDR above the bottom

int diff2; //Difference between LDR left to right

int pup; //upper switch

int pdown; //lower switch

Stepper horStep (motorStephor, motor1hor, motor2hor, motor3hor, motor4hor);

Stepper verStep (motorStepver, motor1ver, motor2ver, motor3ver, motor4ver);

//Program initialization

void setup ()

{

horStep.setSpeed (30); //RPM horizontal motor

verStep.setSpeed (10); //RPM vertical motor

//Serial Port

Serial.begin(9600);

//Pins configuration

pinMode(ltsensor, INPUT);

pinMode(rtsensor, INPUT);

pinMode(ldsensor, INPUT);

pinMode(rdsensor, INPUT);

pinMode(pup, INPUT);

pinMode(pdown, INPUT);

}

void loop ()

{

do

{

ltsensor = analogRead(1)*1.022; //(constant is to calibrate the LDR)

rtsensor = analogRead(2)*1.007;

ldsensor = analogRead(3);

rdsensor= analogRead(4)*1.013;

pup = digitalRead (2); //Reading switches

pdown = digitalRead(3);

average= (ltsensor + ldsensor + rtsensor + rdsensor)/4; //Average LDR

dit = (ltsensor + rtsensor)/2; //Average sensors up

did = (ldsensor + rdsensor)/2; //Average sensors down

diff =(dit – did); //Difference between the level of radiation

delay (50);

if ((pup==HIGH)&&(average<=8)|| (pdown==HIGH)&&(average<=8)) //If the value of the average of the sensors is equal or less than 8 and the switches have the range

mov(); //mov function

}

while ((pup==HIGH)&&(average<=8)||(pdown==HIGH)&&(average<=8));

if (-1*sen > diff || diff > sen) //If the measured difference between the set of sensors is greater or less than the sensitivity value

{

if(dit < did) //If the mean value of the above sensors is smaller than the bottom sensors

{

if (pdown==HIGH)

{

verStep.step (0); //Stop vertical motor

delay (10);

}

else

if (pdown==LOW)

{

verStep.step (v); //Turn motor up

delay (50);

}

}

else if(dit > did) //If the average value of bottom sensors is smaller than the above sensors

{

if (pup==HIGH)

{

verStep.step (0); //Stop vertical motor

delay (10);

}

else if (pup==LOW)

{

verStep.step (-v); //Turn motor down

delay (50);

}

}

else //any other case

{

verStep.step (0); //Stop vertical motor

delay (10);

}

}

delay (10);

ltsensor = analogRead(1)*1.022; //(constant is to calibrate the LDR)

rtsensor = analogRead(2)*1.007;

ldsensor = analogRead(3);

rdsensor= analogRead(4)*1.013;

dil = (ltsensor + ldsensor)/2; //Average sensors left

dir = (rtsensor + rdsensor)/2; //Average sensors right

diff2 = (dil – dir); //Difference between the level of radiation

delay (50);

if (-1*sen > diff2 || diff2 > sen) //If the measured difference between the set of sensors is greater or less than the sensitivity value

{

if(dil < dir) //If the average of the left sensor is smaller than the right sensor

{

horStep.step (h); //Turn motor right

delay (10);

}

else

if(dil > dir) //If the average of the left sensor is larger than the right sensor

{

horStep.step (-h); //Turn motor left

delay (10);

}

else //any other case

{

horStep.step (0); //Stop horizontal motor

delay (10);

}

}

delay(10);

}

// “mov function”

void mov ()

{

if (pup==HIGH)

{

verStep.step (72); //Turn 72 steps up (are the steps to change position once hide the sun)

delay (50);

}

else if (pdown==HIGH)

{

verStep.step (-72); //Turn 72 steps down

delay (50);

}

delay (10);

}

Und außerdem ist dies der separate Code für die Kalibrierung der 4 Sensorwerte:

ltsensor = analogRead(1)*1.022; //(constant is to calibrate the LDR)

rtsensor = analogRead(2)*1.007;

ldsensor = analogRead(3);

rdsensor= analogRead(4)*1.013;

Der C-Code zur Position Optimization Method for a Solar Tracking Device using the Cast-Shadow Principle kann ebenfalls hier heruntergeladen werden.

Later Edit:

Ich habe gerade einen sehr interessanten Solar-Tracker gefunden, der ähnlich wie unser Solar-Tracker funktioniert:

Leave a Comment

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .