سلام دوست عزیز
در کل سنسورهای فوتوسل در هر موقعیتی که قرار بگیرند همواره مقداری نور به آنها تابیده میشود و بسته به مقدار نور تابیده شده به آنها این سنسورها عددی بین 0 تا 1024 را به آردوینو مخابره میکنند. به خاطر همین در این کل از روش میانگین گیری استفاده کرده تا میزان تابش نور را در بالا، پایین ، چپ و راست سلول خورشیدی حس کند. کد زیر را طوری تغییر دادم تا اگر میانگین نور بالا بیشتر از 500 شد سروو عمودی (servoverti) در موقعیت 90 درجه قرار بگیرد و سروو افقی (servohori) در موقعیت 45 درجه قرار بگیرد و اگر میانگین نور پایین بیشتر از 500 شد سروو عمودی در موقعیت 90 و سروو افقی در موقعیت 30 درجه و ... .
#include <Servo.h>
//defining Servos
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 = 2; //top left LDR green
int ldrtopr = 1; //top right LDR yellow
int ldrbotl = 3; // bottom left LDR blue
int ldrbotr = 0; // bottom right LDR orange
void setup ()
{
servohori.attach(10);
servohori.write(0);
servoverti.attach(9);
servoverti.write(0);
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
if (avgtop >500)
{
servoverti.write(90);
servohori.write(45);
delay(10);
}
else if (avgbot > 500)
{
servoverti.write(90);
servohori.write(30);
delay(10);
}
else if (avgleft > 500)
{
servoverti.write(90);
servohori.write(20);
delay(10);
}
else if (avgright > 500)
{
servoverti.write(90);
servohori.write(10);
delay(10);
}