Sistem de urmărire solară cu două axe
Tracker-ul solar cu două axe este unul dintre cele mai căutate proiecte.
Si este usor de realizat.
Cum functioneazã?
Când lumina soarelui apare pe urmăritorul solar începe să calculeze și să compare din ce direcție provine intensitatea maximă a soarelui.
Intensitatea maximă a luminii direct proporțională cu puterea maximă convertită.
Folosim LDR, care este cunoscut sub numele de fotorezistență, atunci când soarele luminează LDR, valoarea rezistorului LDR va scădea. Folosim două servomotoare care ajută la deplasarea panoului pe doua direcții.
Arduino citeste valorile rezistențelor LDR și acționează servomotoarele in unghiurile potrivite pentru o luminozitate maximă.
Componente:
• Arduino Uno
• 4 LDR
• 4- 10K Ohm Resistor
• 2- Servo Motor
• Solar Panel
• Jumper wire
• Breadboard
Cod:
// –––––––-
// roboromania.ro
#include <Servo.h>
Servo horizontal; // horizontal servo
int servoh = 180;
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX
Servo vertical; // vertical servo
int servov = 45;
int servovLimitHigh = 100;
int servovLimitLow = 1;
// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left – BOTTOM LEFT <— BDG
int ldrrt = A3; //LDR top rigt – BOTTOM RIGHT
int ldrld = A1; //LDR down left – TOP LEFT
int ldrrd = A2; //ldr down rigt – TOP RIGHT
void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt – avd; // check the diffirence of up and down
int dhoriz = avl – avr;// check the diffirence og left and rigt
if (-1*tol > dvert || dvert > tol)
{
if (avt > avd)
{
servov = ++servov;
if (servov > servovLimitHigh)
{servov = servovLimitHigh;}
}
else if (avt < avd)
{servov= –servov;
if (servov < servovLimitLow)
{ servov = servovLimitLow;}
}
vertical.write(servov);
}
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = –servoh;
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
}
else if (avl = avr)
{
delay(5000);
}
horizontal.write(servoh);
}
delay(dtime);
}
//–––––––––
Succes!