Arduıno robotik kodlama acil yardımınıza ihtiyacım var!

Kodla Büyü
Mesajlar
3
Arduıno robotik kodlama acil yardımınıza ihtiyacım var!
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 ,kodlarda eksiklikler var tamamlayamıyorum kodlara çok hakim olmadığım için yardımcı olabilirseniz sevinirim kodlar ise aşağıda gibidir. (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);

}
 
https://www.robotistan.com/Data/EditorFiles/SolarXv2-TR.pdf

burada yazdığı gibi dener misiniz hocam?

Kod:
#include <Servo.h>
//defining Servoss

#define TOLERANCE       10
#define STEP_DELAY      7
Servo servohori;
int servoh = 0;
int servohLimitHigh = 160;
int servohLimitLow = 20;

Servo servoverti;
int servov = 0;
int servovLimitHigh = 160;
int servovLimitLow = 20;
//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(45);
  servoverti.attach(9);
  servoverti.write(45);
  Serial.begin(9600);
  delay(500);
}

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);
}
 
Geri
Üst