Dijital Ay Çiçeği #3 Dön Bebeğim

Tarkan’ın Mavi Ceketli olduğu zamanlar vardı.. Efendi, uslu, musikişinas bir topluluğun seveceği Türk Sanat Müziği söylediği zamanlar..

Sonra parladıkça parladı..

Dön Bebeğim parçası önceki ve sonraki iki dönem arasında bir yerlere tekabül ediyor sanırım. Zira klipten anlıyoruz ki, artık çekimler yurt dışında yapılıyor, Mavi ceket hala var ama bir yandan da muzırlıklar başlamış..

 


 

Klipteki müzik kutusu balerini nasıl dönüyorsa bizim de elimizdeki güneş panelini döndürmemiz lazım 😉

Birinci yazında hazırlık yapmış, ikinci yazıda da cihaza elektrik geldiğinde ilk defa -ve bir defa- çalışacak olan Setup() fonksiyonumuzu yazmıştık.

Toplu ve sadeleşmiş hayliyle şöyle:

Burada, sadelik açısından kodların sadece tek ekseni kapsadığını hatırlatmak isterim. Güneşi doğudan batıya takip etmek elbetteki güzel. Ancak İDEAL bir sistem için yeterli değil. Panel, doğu-batı ekseninde dönerken aynı zamanda panelin yüzeyini yukarıya ve aşağıya bakacak şekilde de hareket ettirmemiz lazım.

Öğlen vakti sadece güney dönmüş bir paneldense, güneye ve yüzeyi yukarı bakan bir panel çok daha verimli olacaktır. Bu yüzden ideal bir sistemde aşağıdaki xMotor.attach(6); // Tek motor için
xMotor.write(aci); 
 kısımlarından birer tane daha olmalı 😉


#include
Servo xMotor;
const byte ldrSag=A1;
const byte ldrSol=A3;
byte aci=90;
int gunesSag, gunesSol;
void setup() { Serial.begin(9600);
// servo için PWM pinleri 3-5-6-9-10-11 olabilir
xMotor.attach(6); // Tek motor için
xMotor.write(aci);
}

 


Güneş (dünya) sürekli hareket halinde olduğuna göre, bizim de sürekli güneşin yerini bulmamız gerekiyor.

Bu yüzden iki ayrı koldaki IŞIK Şiddeti değerlerini karşılaştıracağız ve Sonsuz bir döngü içinde olacak.

 

Şimdii..
Diyelimdeki Sağ taraftaki ışık soldakinden fazla.

Motorun Sağa dönmesi lazım değil mi.. //ki Ay çiçeği olsun 😉

O zaman şöyle bir şeyler yazalım:

if (gunesSag > gunesSol) {
gunesSag = analogRead(ldrSag); gunesSol = analogRead(ldrSol);
Serial.print("sag"); Serial.print(gunesSag);
Serial.print(" Sol"); Serial.println(gunesSol);
aci = aci + 1;
xMotor.write(aci); delay(100);
}

Görüleceği üzere
güneşSağ>güneşSol İSE,
AÇI değerimizi bir arttırıyor ve Motor’a bu açıyı gönderiyoruz.

Motor o esnada atıyorum 27 derecelik konumda ise 28 dereceye dönüyor.

–E ama 1 dereceden ne olacak ki? 

Evet. İşte bu yüzden Loop() içinde, yani;
100 mili saniye sonra diğer IF‘e geçecek, ( delay(100) )
ve kabaca yarım saniye içinde Işık değerlerini yeniden okuyacak ve gerekiyorsa 1 derece daha dönecek.


Pek tabi iki taraftaki ışık değeri eşit ise, güneşi bulduk demektir. Dilerseniz burada bir süre (10 saniye 10 dakika..)  bekleyebilirsiniz.

1 dakika beklesin / dakika da bir kontrol edip o zaman dönsün derseniz; delay(1000*60) 
5 dakikada bir kontrol etsin derseniz;  delay(1000*60*5) kullanabilirsiniz 😉

 


Görsel

 

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir