denizduru8890
Üye
- 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);
}
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);
}