Merhaba arkadaşlar. Bu yazımızda sizlerle arduino ile güneş takip sistemi yapacağız. Bu proje son yıllarda çokça duyduğumuz güneş enerjili sistemlerin en verimli kullanmasını sağlayan bir sistemdir. Fakat biz tabi ki de ufak boyutlarda çalışıyor olacağız. 🙂 Şimdi artık projenin detaylarına geçelim.

Kullanacağımız malzemeler;

Sistemi anlatmaya geçmeden önce kısaca LDR elemanının ne işe yaradığını anlatmak isterim. LDR, fotodirenç adıyla da bilinmektedir. Bunun sebebi ise üzerine düşen ışık şiddetine göre direnç değeri değişmesidir. LDR hakkında daha detaylı bilgi isterseniz tıklayarak edinebilirsiniz.

Güneş takip sisteminin amacı ise batı ve doğu taraflarından ışık şiddeti ölçümü yapmak ve güneş panelini doğrudan ışık kaynağına yönlendirerek maksimum verimi almaktır. Bunu  servo motor ve LDR ler ile yapacağız. Sensörlerin ışık şiddetiyle direnç değerleri değişecek ve arduino’nun PWM pinlerine bağlanarak anladığı voltaj sinyaline dönüştürmüş olacaktır. Alınan sinyalle servo motor hareket ederek panelin dönmesi sağlanacaktır.

Güneş takip sistemi, verimliliği ve maliyet analizleri ile ilgili daha detaylı bilgi için tıklayınız.

Biz şimdi sistemimizi kurmaya geçelim. Sistemde sensör görevi görecek olan LDR’ler ışığın şiddetine göre yapacağımız standın servo motor yardımıyla güneşi takip etmesini sağlayacak. Böylece gün boyu güneşten tam verimi almış olacağız. 

🚀Devre şeması;

devre semasi

🚀Breadbord üzerindeki şemada şu şekildedir;

breadbord sema

🚀 Arduino ile Güneş Takip Sistemi Kodları ise şu şekildedir;

 #include <Servo.h> 
 
Servo tracker;  // servo motor tanıtıldı 
int eastLDRPin = 0;  //analog pinler atandı.
int westLDRPin = 1;
int eastLDR = 0;   //doğu ve batı sensörleri için değişkenler oluşturuldu.
int westLDR = 0;
int error = 0;
int calibration = 217;  //her iki sensör için aynı miktarda ışık aldığındaki hatanın sıfır olması için ayarlanan kalibrasyon değeri
int trackerPos = 90;    //servo motorun ilk konumu belirlendi.

void setup() 
{ 
  tracker.attach(11);  // servo motor 11. pine bağlandı.
} 
void loop() 
{ 
  eastLDR = calibration + analogRead(eastLDRPin);   
  westLDR = analogRead(westLDRPin);
  if(eastLDR<350 && westLDR<350)  
  {
    while(trackerPos<=160)  
    {
      trackerPos++;
      tracker.write(trackerPos);
      delay(100);
    }
  }
  error = eastLDR - westLDR;         //iki sensör arasındaki farkı belirleyin.
  if(error>15)        //hata 15den büyükse doğu yönünde hareket eder. 
  {
    if(trackerPos<=160)  
    {
      trackerPos++;
      tracker.write(trackerPos);  //sistemi doğuya taşır.
    }
  }
  else if(error<-15)  //hata -15 den küçükse batı yönünde hareket eder. 
  {
    if(trackerPos>20)  
    {
      trackerPos--;
      tracker.write(trackerPos);  //sistemi batıya taşır.
    }
  }
  delay(100);
}

Kodda belirtilmiş olan kalibrasyon değeri, devrede kullanılan dirençler ve kullanılan tellerin dirençleri arasındaki farktan dolayı, aynı miktarda ışık alsalar bile her iki sensörden alınan sinyaller farklı olmaktadır. Kalibrasyon değerini siz kendi kurulumunuza göre değiştirmelisiniz.

Kalibrasyon değerini kontrol etmek için iki sensörün arasına yani güneş panelinin bulunduğu üst plakanın ortasına ışık şiddetini doğrultun ve seri monitör üzerinden doğu ve batı sensör değerlerini okuyun. Bu iki değer arasındaki fark sizin kalibrasyon değeriniz olacaktır. 

sistem1                                  sistem2                           sistem3

Sistem yukarıda görüldüğü gibidir.

🚀Projeyle ilgili bir sıkıntı yaşarsanız yorumlara yazabilirsiniz. 🙂

🚀Yazılarımızın devamı için Robolink Akademi sayfasını takipte kalın. Malzemeler içinde Robolink Marketi ziyaret edebilirsiniz.

Hepinize iyi çalışmalar. 🙂

6 YORUMLAR

  1. İyi günler dilerim . Ben çift eksenli dönen Güneşe göre hareket eden güneş panel sistemi yapıyorum. Fakat servo motorun y ekseninde dönüşünde sorun yaşıyorum bunun için yardım istiyorum şimdiden teşekkür ederim

  2. kod uno karta aktarılırken
    Arduino:1.8.19 (Windows 10), Kart:”Arduino Uno”

    Çalışmanız programın 2234 bayt (6 %) saklama alanını kullandı. Maksimum 32256 bayt.

    Global değişkenler belleğin 56 byte kadarını (2%) kullanıyor. Yerel değişkenler için 1992 byte yer kalıyor. En fazla 2048 byte kullanılabilir.

    Taslak yüklenirken bir hata oluştu

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    böyle bir hata mesajı veriyor bunu nasıl düzeltebilirim

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz