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

  • Konbuyu başlatan Konbuyu başlatan badwet
  • Başlangıç tarihi Başlangıç tarihi
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);
}
 

Forum istatistikleri

Konular
133,437
Mesajlar
971,555
Kullanıcılar
459,450
Son üye
tarikulker

Yeni konular

Geri
Üst