DC motor ile Tek eksen güneş takip devresi yardım.

her iki ldr'de karanlık olduğunda aynı değeri bulmuyor bu yüzden eşitlik sağlanamıyor gibi geliyor bana incelediğim diğer devrelerde(servo motor veya step motor ile çalışan )ldr değerleri kıyaslanırken birde işin içine tolerans giriyor sanırım benimde formülün içine tolerans eklemem gerekecek.
 
Biraz daha üzerinde çalışınca böyle bir sketch hazırladım.Değişen LDR değerlerini sabit bir değer vererek kıyaslatınca istediğim gibi oldu batıdaki sw'e basınca doğuya dönmesi için zaman verdim ve doğuya ulaşıp sw kumanda alınca tüm çıkışları LOW yaptım şu an istediğim gibi oldu.Ayrıca ekstra olarak gece bahçe aydınlatması için bir çıkış daha aldım akşam olunca aydınlatmaları yakıyor.Sanıyorum başardım.








const int sensorPinA0 = A0; // doğu ldr
const int sensorPinA1 = A1; // batı ldr
const int pmotorPinA0 = 12; // doğu röle ucu
const int pmotorPinA1 = 11; // batı röle ucu
const int switch1Pin = 5; //doğu limit sw
const int switch2Pin = 6; //batı limit sw

// variables:
int sensorValueA0 = 0;
int sensorValueA1 = 0;
int switch1val= digitalRead(switch1Pin);
int switch2val= digitalRead(switch2Pin);


void setup() {

Serial.begin(9600);

pinMode(12, OUTPUT);motor doğu röle ucu
digitalWrite(12, LOW);
pinMode(11, OUTPUT);motor batı röle ucu
digitalWrite(11, LOW);
pinMode(10, OUTPUT);bahçe aydınlatma röle ucu
digitalWrite(10, LOW);

}

void loop() {
// read the sensor:
sensorValueA0 = analogRead(sensorPinA0);
sensorValueA1 = analogRead(sensorPinA1);
switch1val= digitalRead(switch1Pin);
switch2val= digitalRead(switch2Pin);
int Rate1 = analogRead(sensorPinA0);//Doğu LDR digital değeri
int Rate2 = analogRead(sensorPinA1);//Batı LDR digital değeri

if (Rate1 == 512){ //LDR max digital değerinin yarısını kullandım hassasiyet gayet iyi.
digitalWrite(12, HIGH);//motor doguya döner
digitalWrite(11, LOW);}

if (Rate2 == 512){ //LDR max digital değerinin yarısını kullandım hassasiyet gayet iyi.
digitalWrite(11, HIGH);//motor batıya döner
digitalWrite(12, LOW);}

if (Rate1 == Rate2){
digitalWrite(12, LOW);//her iki değer eşit ise motor durur.
digitalWrite(11, LOW);}

if (Rate1 == Rate2 && switch1val == HIGH){//her iki değer eşit ise ve batı sw'i (sw1) basıldı ise motoru doğuya döndür
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
delay(1200);//motorun doğuya dönmesi için gerekli zaman (zaman değişebilir örnek olsun diye yazdım)
}

if (switch2val == HIGH){//doğu sw'i (switch 2)basıldı ise motoru durdur.
digitalWrite(11, LOW);
digitalWrite(12, LOW);}

if (Rate1 + Rate2 < 20){
digitalWrite(10, HIGH);}
else
digitalWrite(10, LOW);
}
 
Tebrikler. Hadi geçmiş olsun
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…