denizduru8890
Üye
- Mesajlar
- 3
SolarX Güneş Takip Sistemi - 2. Nesil (Elektronikli) Robot
Merhaba,Arkadaşlar SolarX Güneş Takip Sistemi - 2. Nesil (Elektronikli) robotu kurdum fakat LDR ‘ler ışığın geliş açısına göre hareket etmiyor,Robot sabit bir yönde hareket edip kalıyor , ışığın yönüne göre LDR ler aracılığla hareket edip ışığı takip etmesi gerekiyor robotun ,yardımcı olabilirseniz sevinirim kodlar ise aşağıda gibi (Multimetre ile LDR ölçtüm ışıklı ortamda 1400-1500 OHM)
Kodlar:

#include <Servo.h>
//defining Servoss
#define TOLERANCE 10
#define STEP_DELAY 7
Servo servohori;
int servoh = 0;
int servohLimitHigh = 180;
int servohLimitLow = 65;
Servo servoverti;
int servov = 0;
int servovLimitHigh = 180;
int servovLimitLow = 65;
//Assigning LDRs
int ldrtopl = A0; //top left LDR green
int ldrtopr = A3; //top right LDR yellow
int ldrbotl = A1; // bottom left LDR blue
int ldrbotr = A2; // bottom right LDR orange
void setup ()
{
servohori.attach(10);
servohori.write(180);
servoverti.attach(9);
servoverti.write(180);
Serial.begin(9600);
delay(3000);
}
void loop()
{
servoh = servohori.read();
servov = servoverti.read();
//capturing analog values of each LDR
int topl = analogRead(ldrtopl);
int topr = analogRead(ldrtopr);
int botl = analogRead(ldrbotl);
int botr = analogRead(ldrbotr);
// calculating average
int avgtop = (topl + topr) / 2; //average of top LDRs
int avgbot = (botl + botr) / 2; //average of bottom LDRs
int avgleft = (topl + botl) / 2; //average of left LDRs
int avgright = (topr + botr) / 2; //average of right LDRs
Serial.println(avgtop);
if (TOLERANCE < avgbot - avgtop)
{
servoverti.write(servov + 1);
if (servov > servovLimitHigh)
{
servov = servovLimitHigh;
}
delay(STEP_DELAY);
}
else if (TOLERANCE < avgtop - avgbot)
{
servoverti.write(servov - 1);
if (servov < servovLimitLow)
{
servov = servovLimitLow;
}
delay(STEP_DELAY);
}
else
{
servoverti.write(servov);
}
if (avgleft - avgright > TOLERANCE)
{
servohori.write(servoh + 1);
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
delay(STEP_DELAY);
}
else if (avgright - avgleft > TOLERANCE)
{
servohori.write(servoh - 1);
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
delay(STEP_DELAY);
}
else
{
servohori.write(servoh);
}
delay(STEP_DELAY);
}
Merhaba,Arkadaşlar SolarX Güneş Takip Sistemi - 2. Nesil (Elektronikli) robotu kurdum fakat LDR ‘ler ışığın geliş açısına göre hareket etmiyor,Robot sabit bir yönde hareket edip kalıyor , ışığın yönüne göre LDR ler aracılığla hareket edip ışığı takip etmesi gerekiyor robotun ,yardımcı olabilirseniz sevinirim kodlar ise aşağıda gibi (Multimetre ile LDR ölçtüm ışıklı ortamda 1400-1500 OHM)
Kodlar:

#include <Servo.h>
//defining Servoss
#define TOLERANCE 10
#define STEP_DELAY 7
Servo servohori;
int servoh = 0;
int servohLimitHigh = 180;
int servohLimitLow = 65;
Servo servoverti;
int servov = 0;
int servovLimitHigh = 180;
int servovLimitLow = 65;
//Assigning LDRs
int ldrtopl = A0; //top left LDR green
int ldrtopr = A3; //top right LDR yellow
int ldrbotl = A1; // bottom left LDR blue
int ldrbotr = A2; // bottom right LDR orange
void setup ()
{
servohori.attach(10);
servohori.write(180);
servoverti.attach(9);
servoverti.write(180);
Serial.begin(9600);
delay(3000);
}
void loop()
{
servoh = servohori.read();
servov = servoverti.read();
//capturing analog values of each LDR
int topl = analogRead(ldrtopl);
int topr = analogRead(ldrtopr);
int botl = analogRead(ldrbotl);
int botr = analogRead(ldrbotr);
// calculating average
int avgtop = (topl + topr) / 2; //average of top LDRs
int avgbot = (botl + botr) / 2; //average of bottom LDRs
int avgleft = (topl + botl) / 2; //average of left LDRs
int avgright = (topr + botr) / 2; //average of right LDRs
Serial.println(avgtop);
if (TOLERANCE < avgbot - avgtop)
{
servoverti.write(servov + 1);
if (servov > servovLimitHigh)
{
servov = servovLimitHigh;
}
delay(STEP_DELAY);
}
else if (TOLERANCE < avgtop - avgbot)
{
servoverti.write(servov - 1);
if (servov < servovLimitLow)
{
servov = servovLimitLow;
}
delay(STEP_DELAY);
}
else
{
servoverti.write(servov);
}
if (avgleft - avgright > TOLERANCE)
{
servohori.write(servoh + 1);
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
delay(STEP_DELAY);
}
else if (avgright - avgleft > TOLERANCE)
{
servohori.write(servoh - 1);
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
delay(STEP_DELAY);
}
else
{
servohori.write(servoh);
}
delay(STEP_DELAY);
}