person using MacBook Pro
Blog

Otonom Güneş Takip ve Diferansiyel Arıza Tespit Sistemli Fotovoltaik Enerji İstasyonu

Merhaba, ben Mehmet Enes Konur. Bursa Teknik Üniversitesinde Mekatronik Mühendisliği 3. sınıf öğrencisiyim. Yaz tatilinin başlamasıyla evde kendi imkanlarımla merak ettiğim bir projeyi anlatacağım. Yenilebilir enerjiye her zaman ilgi duymuşumdur. Küçükten gelen merakım bu yaz müsait olmamla harekete geçti.

Yaz mevsimiyle güneşin metrekareye düşen ışınımı artmış, gün içi güneşlenme süresi de uzamıştır. Bundan ötürü bu yaz evdeki imkanlarımla Güneş Paneli ile enerji üretmeyi düşündüm. Ancak kısa süre sonra panelimin üretebildiği voltajın yaklaşık 1,0 volt civarında kaldığını ve şarj edilebilir pilimi dolduramadığını fark ettim. Bu aşamada araştırmalarım sonucunda Joule thief sistemini öğrendim. Joule thief sistemi bir adet iki tel sarılı bobin ve bir adet transistor içerir. Bu sistemin gerilim ihtiyacı ve güç kaynağına bağlı olarak dirençler kullanılır. 330Ω ile 10KΩ arasındaki dirençler transistörü korur ve stabiliteyi artırır. Bu projemde hangi süreçlerden geçtiğimi detaylıca sizlerle paylaşıyorum.

1. Giriş

  • Yenilenebilir enerji sistemlerinde karşılaşılan en büyük iki problem, güneş açısının gün içindeki değişimi ve dış ortam koşulları (toz, kir, gölgelenme) sebebiyle yaşanan verim kaybıdır. Standart sistemler sadece enerji üretimine odaklanırken, bu projede kestirimci bakım (predictive maintenance) konsepti donanımsal bir yaklaşımla çözülmüştür. Proje, ortam aydınlık olmasına rağmen PV panelin yeterli üretim yapamaması durumunu matematiksel olarak analiz ederek, fiziksel bir müdahaleye gerek kalmadan arıza/tozlanma tespiti yapabilen akıllı bir otomasyon sunmaktadır.

2. Sistem Mimarisi ve Donanım Bileşenleri

Projenin donanım mimarisi, sensör katmanı, kontrolcü katmanı ve aktüatör/uyarı katmanı olmak üzere üç ana bloktan oluşmaktadır. Bileşenlerin seçimi ve entegrasyonu aşağıdaki tabloda detaylandırılmıştır.

3. Mekatronik Tasarım ve Algoritmik Yaklaşım

Sistem, Doğu (A1) ve Batı (A2) yönlerine yerleştirilmiş LDR sensörlerinden gelen analog verileri sürekli olarak okur. İki sensör arasındaki fark, yazılımda belirlenen tolerans değerini aştığında, mikrodenetleyici servo motora PWM sinyali göndererek paneli ışığın yoğun olduğu yöne çevirir. Tolerans değeri, sistemin bulut geçişleri gibi anlık değişimlerde mekanik olarak kararsız kalmasını (chattering) engeller.

Projenin endüstriyel kalibredeki en yenilikçi yönü, Güneş Paneli kirlenme durumunu akıllıca algılayabilmesidir.

Ayrıca, sistem bu işlemi yalnızca panel voltajına bakarak değil, ortam ışık verileriyle çapraz sorgulayarak gerçekleştirir.

  • Gündüz ve Temiz Panel: LDR ortam ışığı yüksek ortalama veriyor ve A0 pininden okunan panel voltajı referans eşiğinin üzerinde. Bu durumda sistem şarj modunda kalır, mekanik uyarı verilmez.
  • Gece (Uyku) Modu: LDR ortam ışığı düşük. Güneş paneli voltajının düşük olması fiziksel olarak normal karşılandığı için sistem hata raporlamaz ve uyku modunda kalır.
  • Arıza / Tozlanma Durumu: LDR ortam ışığı yüksek (Güneş var), ANCAK A0 pininden okunan panel voltajı belirlenen üretim eşiğinin altındadır. Bu çapraz uyumsuzluk algılandığı an sistem röleyi tetikler ve Joule Thief üzerinden görsel (LED) alarmı aktif eder.

Elektromekanik kilitlenmeleri önlemek amacıyla yazılım mimarisinde işlemciyi bloke eden kod dizilimleri (delay) yerine, işlemcinin dahili saatini kullanan (millis) asenkron bir görev planlayıcısı inşa edilmiştir. Servo motor saniyede birden fazla kez akıcı dönüş yaparken, arıza tespit sistemi çevresel elektriksel gürültüleri ekarte etmek adına belirli zaman periyotlarında kontrol işlemi yapar. Ayrıca ortak şase (common ground) konfigürasyonu ile hayalet voltaj (floating pin) sorunu donanımsal olarak çözülmüştür.

4. Sonuç ve Değerlendirme

Geliştirilen bu entegre proje Güneş Paneli takip sistemlerini bir adım öteye taşıyarak endüstriyel bir hata ayıklama modeline dönüştürmüştür. Ayrıca düşük voltajlı donanımlar (1.2V pil ve Joule Thief modülasyonu) transistör boğulmaları olmadan kayıpsız entegre edilmiştir.

Proje sensör verilerinin anlamlandırılması ve aktüatör kontrolünü kapsar. Otonom karar algoritmalarının bütünüyle sergilendiği tam kapsamlı bir otomasyon sistemidir.

Arduino Kodu

#include <Servo.h> 

const int panelPin = A0;      
const int ldrDoguPin = A1;    
const int ldrBatiPin = A2;    
const int rolePin = 8;        
const int servoPin = 9;       

Servo gunesPaneli;            
int panelAcisi = 90;          

// --- KALİBRASYON EŞİKLERİ ---
int gunduzEsigi = 200;        
int panelTozEsigi = 100;      
int tolerans = 50;            

unsigned long sonRoleKontrol = 0; // Röle zamanlayıcısı için hafıza

void setup() {
  Serial.begin(9600);
  pinMode(rolePin, OUTPUT);
  digitalWrite(rolePin, LOW); 
  gunesPaneli.attach(servoPin);
  gunesPaneli.write(panelAcisi); 
  delay(1000); 
}

void loop() {
  int doguIsik = analogRead(ldrDoguPin);
  int batiIsik = analogRead(ldrBatiPin);
  int isikFarki = doguIsik - batiIsik;
  
  // 1. SERVO HAREKETİ (Hızlı çalışabilir, saniyede 30 kez)
  if (isikFarki > tolerans) {
    if (panelAcisi < 180) { 
      panelAcisi++;
      gunesPaneli.write(panelAcisi);
    }
  } 
  else if (isikFarki < -tolerans) {
    if (panelAcisi > 0) { 
      panelAcisi--;
      gunesPaneli.write(panelAcisi);
    }
  }

  // 2. RÖLE VE TOZ KONTROLÜ (Sadece 2 saniyede 1 kez karar verir)
  // Bu, sınırda kalan değerler yüzünden rölenin zırıldamasını KESİN engeller!
  if (millis() - sonRoleKontrol > 2000) {
    int panelUretimi = analogRead(panelPin);
    int ortamIsigi = (doguIsik + batiIsik) / 2; 

    if (ortamIsigi > gunduzEsigi) {
      if (panelUretimi < panelTozEsigi) {
        digitalWrite(rolePin, HIGH); // TOZLU -> LED YANSIN
      } else {
        digitalWrite(rolePin, LOW);  // TEMİZ -> LED SÖNSÜN
      }
    } else {
      digitalWrite(rolePin, LOW);    // GECE -> LED SÖNSÜN
    }
    
    // Bilgisayar ekranından takip etmek için
    Serial.print("Ortam (LDR): "); Serial.print(ortamIsigi);
    Serial.print(" | Panel (A0): "); Serial.println(panelUretimi);
    
    sonRoleKontrol = millis(); // Sayacı sıfırla
  }

  delay(30); // Servo motorun stabil dönmesi için kısa mola
}

Bir cevap yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir