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:
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:
Neueste Kommentare