Rehberler · 16 dk okuma

Güneş Takip Sistemi Arduino: 4 LDR, Servo ve Verim Deneyi

Arduino ile güneş takip sistemi yapımı: tek ve çift eksen, 4 LDR ile ışık farkı, servo kontrolü, ölü bölge, sabit panele karşı verim deneyi ve TÜBİTAK ipuçları.

Güneş takip sistemi, bir güneş panelini gün boyunca güneşe dönük tutan; ışığın geldiği yönü sensörlerle ölçüp paneli motorla çeviren otomatik bir düzenektir. Arduino ile yapılan güneş takip sistemi genellikle dört LDR (ışığa duyarlı direnç) ve iki servo motordan oluşur: LDR'ler hangi tarafın daha aydınlık olduğunu söyler, servolar da paneli o tarafa döndürür. Sabit bir panel sabah ve akşam saatlerinde güneşi yandan gördüğü için enerjinin önemli bir kısmını kaçırır; takip eden panel ise ışığı günün her saatinde dik açıya yakın yakalar.

Bu rehberde tek eksenli ve çift eksenli takip arasındaki farkı, 4 LDR ile ışık farkının nasıl hesaplandığını, servonun boşuna titremesini önleyen ölü bölge (tolerans) mantığını ve paneli taşıyan mekanik yapıyı adım adım öğreneceksin. Arduino Uno, ESP32 ve Raspberry Pi Pico için derlenmeye hazır kodların yanında, takip eden paneli sabit bir panelle karşılaştırıp enerji kazancını gerçekten ölçen bir deney düzeneği, malzeme listesi ve TÜBİTAK sunumu için ipuçları da bu yazıda.

LDR ışığa duyarlı direnç (GL5528)
LDR: üzerine düşen ışık arttıkça direnci düşer. Güneş takip sisteminin gözleri, bir gölge duvarıyla birbirinden ayrılmış dört LDR'dir.

Güneş takip sistemi nedir, verimi neden artırır?

Bir panelin ürettiği güç, ışığın panel yüzeyine geliş açısına bağlıdır. Işık yüzeye tam dik geldiğinde panel en fazla ışığı yakalar; ışık eğik geldikçe aynı ışık demeti daha geniş bir alana yayılır ve panelin gördüğü ışık şiddeti gelme açısının kosinüsü oranında azalır. Bu yüzden dik doğrultudan 60° sapmış ışık, panele dik gelen ışığın yalnızca yarısı kadar güç üretir. Aşağıdaki tablo bu kaybı gösterir. Tabloya dikkatli bakarsan küçük hataların neredeyse hiç kayıp yaratmadığını da görürsün: güneşi 5° kaçıran bir panel gücünün yalnızca %0,4'ünü kaybeder. Bu bilgi, ileride ölü bölgeyi seçerken işine yarayacak.

Gelme açısı (dikten sapma)cos(açı)Panelin aldığı güç
0°1,000%100
5°0,996%99,6
10°0,985%98,5
20°0,940%94
30°0,866%87
45°0,707%71
60°0,500%50
75°0,259%26

Güneşin gökyüzündeki yeri iki açıyla tarif edilir: yön açısı (azimut), yani ufukta hangi yönde olduğu, ve yükseklik açısı, yani ufkun ne kadar üstünde olduğu. Dünya saatte 15° döndüğü için güneş gökyüzünde ortalama 4 dakikada yaklaşık 1° yer değiştirir; yükseklik ise mevsime göre büyük farklar gösterir. Türkiye'nin ortası için (yaklaşık 39° kuzey enlemi) değerler şöyledir:

TarihÖğlen yükseklik açısıDoğduğu yönBattığı yönGün uzunluğu
21 HaziranYaklaşık 74°Yaklaşık 59° (kuzeydoğu)Yaklaşık 301° (kuzeybatı)Yaklaşık 15 saat
21 Mart ve 23 EylülYaklaşık 51°90° (tam doğu)270° (tam batı)Yaklaşık 12 saat
21 AralıkYaklaşık 28°Yaklaşık 121° (güneydoğu)Yaklaşık 239° (güneybatı)Yaklaşık 9,5 saat

Yön açıları kuzeyden saat yönünde ölçülür. Tablodan iki önemli sonuç çıkar. Yazın güneş kuzeydoğudan doğup kuzeybatıdan battığı için gün içinde yaklaşık 240° yol alır; 180° dönebilen bir servo sabahın ilk ve akşamın son saatlerinde güneşe tam dönemez, ama o saatlerde güneş alçakta ve zayıf olduğu için kayıp küçüktür. Kışın ise güneş öğlende bile alçakta kalır, bu yüzden güneye bakan sabit bir panelin eğimini mevsime göre değiştirmek gerekir. Takip sistemi bu iki sorunu da kendiliğinden çözer.

Tek eksen mi, çift eksen mi?

ÖzellikTek eksenÇift eksen
HareketYalnızca doğu–batıDoğu–batı ve eğim (yukarı–aşağı)
LDR sayısı24
Servo sayısı12
Sabit panele göre kazanç (büyük sistemlerde)Yaklaşık %15–35Yaklaşık %30–45
MekanikBasit ve sağlamPan-tilt düzeneği, daha çok parça
KodBir fark, bir kararİki fark, iki eksen birlikte
Uygun olduğu projeİlk deneme, ortaokulLise, TÜBİTAK, verim karşılaştırması

Tek eksenli sistem yalnızca güneşin doğudan batıya hareketini izler; eğimi sabittir ve mevsime uygun bir açıda bırakılır. Kazancın büyük kısmını bu eksen sağlar, çünkü güneşin gün içindeki en büyük yer değiştirmesi doğu–batı yönündedir. Büyük güneş santrallerinde de en yaygın tür tek eksenli takiptir; çift eksenli sistemler biraz daha fazla enerji toplasa da daha pahalıdır ve daha çok bakım ister. Okul projesinde ise çift eksen hem daha etkileyici bir gösteri hem de iki ekseni birlikte kontrol etmeyi öğreten güzel bir problemdir.

Işık farkını ölçmek: 4 LDR ve gölge duvarı

LDR'yi tek başına kullanırsan yalnızca ortamın ne kadar aydınlık olduğunu öğrenirsin; yönü bulmak için en az iki LDR'yi karşılaştırman gerekir. Çift eksenli sistemde dört LDR 2×2 bir kare oluşturacak şekilde yerleştirilir ve aralarına artı (+) biçiminde ışık geçirmeyen bir perde, yani gölge duvarı konur. Sensör güneşe tam dönükken duvarın gölgesi hiçbir LDR'ye düşmez ve dördü de aynı ışığı görür. Güneş bir yana kaydığında duvar karşı taraftaki LDR'lerin üzerine gölge düşürür ve onların değeri düşer. Duvarın yüksekliği hassasiyeti belirler: 3 cm yüksekliğindeki bir duvar 5° sapmada yaklaşık 2,6 mm genişliğinde gölge düşürür (3 cm × tan 5°); bu da 5 mm çaplı bir LDR'nin yarısını kapatmaya yeter. Yüksek duvar daha hassas ama daha dar açılı, alçak duvar daha kaba ama daha geniş açılı bir sensör demektir. LDR'nin nasıl çalıştığını ayrıntılı görmek için LDR Işık Sensörü yazısına bakabilirsin.

  • Üst ortalama: (sol üst + sağ üst) / 2
  • Alt ortalama: (sol alt + sağ alt) / 2
  • Sol ortalama: (sol üst + sol alt) / 2
  • Sağ ortalama: (sağ üst + sağ alt) / 2
  • Dikey fark (dV): üst − alt. Pozitifse panel yukarı, negatifse aşağı eğilmelidir.
  • Yatay fark (dH): sol − sağ. Pozitifse panel sola, negatifse sağa dönmelidir.
Her LDR'yi bir sabit dirençle gerilim bölücü olarak bağlarsın. En hassas ölçüm, sabit direnç ilgilendiğin ışıktaki LDR direncine yakın olduğunda elde edilir. İçeride el feneri ya da masa lambasıyla deneme yaparken 10 kΩ iyi çalışır. Doğrudan güneş altında ise LDR'nin direnci birkaç yüz ohma düştüğü için 10 kΩ ile dört değer de 1000'e yakın doyar ve fark kaybolur; dışarıda 1–2,2 kΩ kullan. Değerleri denemek için Gerilim bölücü aracından yararlanabilirsin.

Sensörle mi, saatle mi takip?

LDR ile takip tek yöntem değildir. Güneşin konumu tarih, saat ve coğrafi konuma göre önceden hesaplanabildiği için bazı sistemler hiç ışık sensörü kullanmaz. Üç yaklaşımı karşılaştıralım:

YöntemNasıl çalışır?ArtısıEksisi
Sensörlü (LDR, kapalı döngü)Işık farkını ölçer, aydınlık tarafa dönerBasit; konum ve saat bilgisi gerekmez; mekanik hataları kendiliğinden düzeltirBulutta kararsızdır; yansımalardan ve sensörün kirlenmesinden etkilenir
Saat tabanlı (astronomik, açık döngü)Tarih, saat ve konumdan güneşin yerini hesaplarBulutta bile doğru yöne bakar; hareket önceden planlanırSaat, konum ve montaj yönü hassas ayarlanmalı; mekanik hatayı fark etmez
HibritHesapla yaklaşır, LDR ile ince ayar yaparİki yöntemin üstünlüklerini birleştirirDaha karmaşık kod ve ek bir RTC modülü gerekir

Bu rehberde sensörlü yöntemi kuruyoruz, çünkü konum ve saat bilgisi istemez, kurulumu basittir ve mekanik hataları kendiliğinden düzeltir. Projeni geliştirmek istersen ileride bir RTC modülüyle saat tabanlı takibi ekleyip iki yöntemi karşılaştırmak, jüri önünde çok güçlü bir ek deney olur.

Malzeme listesi

MalzemeAdetNot
Arduino Uno (ya da Nano)1ESP32 ya da Raspberry Pi Pico da kullanılabilir
LDR (GL5528, 5 mm)4Tek eksen için 2
10 kΩ direnç64'ü LDR bölücüsü, 2'si panel bölücüsü; dışarıda LDR'ler için 1–2,2 kΩ
22 kΩ direnç2Panel gerilim bölücüsü
33 Ω, 5 W taş direnç2Her panele bir yük direnci
SG90 ya da MG90S servo2Tek eksen için 1; rüzgârlı yerde MG90S
Pan-tilt servo braketi1Hazır plastik kit ya da 3D baskı
Mini güneş paneli 6 V 1 W (110×60 mm)2Biri takip eder, biri sabit referanstır
470 µF 16 V kondansatör1Servo beslemesine paralel
5 V 2 A adaptör ya da 4×AA şarjlı (NiMH) pil1Servolar için harici besleme
Breadboard ve jumper kablolar1 takımKalıcı montaj için delikli plaket
Karton, siyah bant ya da 3D baskı perde1Artı şeklinde gölge duvarı
Arduino Uno
Arduino Uno
SG90
SG90
MG90S
MG90S
Breadboard
Breadboard

Bağlantı şeması: Arduino Uno, ESP32 ve Pico

Her LDR'nin bir bacağı beslemeye (Uno'da 5V, ESP32 ve Pico'da 3V3), diğer bacağı analog pine bağlanır; aynı analog pinden GND'ye bir sabit direnç gider. Böylece ışık arttıkça okunan değer de artar. Panel tarafında her panelin iki ucu arasına bir yük direnci (33 Ω) bağlanır. Panelin gerilimi 22 kΩ ve 10 kΩ'luk bir bölücüyle 3,2'ye bölünerek analog pine verilir: 22 kΩ panelin artı ucundan analog pine, 10 kΩ analog pinden GND'ye. Panelin eksi ucu da kartın GND'sine bağlanmalıdır; ortak toprak olmadan ölçüm anlamsızdır.

BağlantıArduino UnoESP32Raspberry Pi Pico
LDR sol üstA0GPIO 32GP26 (tek eksende doğu LDR'si)
LDR sağ üstA1GPIO 33GP27 (tek eksende batı LDR'si)
LDR sol altA2GPIO 34Yok (harici ADC gerekir)
LDR sağ altA3GPIO 35Yok (harici ADC gerekir)
Takip eden panel (bölücü orta noktası)A4GPIO 36 (VP)GP28
Sabit panel (bölücü orta noktası)A5GPIO 39 (VN)Yok
Yatay servo sinyaliD9GPIO 18GP15
Dikey servo sinyaliD10GPIO 19Yok (tek eksen)
LDR bölücülerinin beslemesi5V3V33V3
Servo beslemesiHarici 5 VHarici 5 VHarici 5 V
Tüm GND'ler (panel eksileri dahil)GNDGNDGND
Paneli asla doğrudan analog pine bağlama. 6 V'luk bir mini panelin yüksüz (açık devre) gerilimi tam güneşte 7 V'u geçebilir; Uno'nun pini 5 V'tan, ESP32 ve Pico'nun pini 3,3 V'tan fazlasına dayanamaz. 22 kΩ / 10 kΩ bölücüyle 7,5 V, pine 2,34 V olarak ulaşır. Servoları da Arduino'nun 5V pininden besleme; hareket anındaki akım kartı resetler. Harici kaynağın GND'sini kartın GND'sine bağla ve servo beslemesine 470 µF'lık bir kondansatör ekle. Ayrıntılar için Gerilim bölücü ve Arduino resetleniyor yazılarına bakabilirsin.

Mekanik yapı: pan-tilt düzeneği ve panel dengesi

En kolay mekanik çözüm, iki SG90 servoyu üst üste taşıyan hazır bir pan-tilt braketidir: alttaki servo paneli yatayda (doğu–batı), üstteki servo dikeyde (eğim) çevirir. Sensör bloğunu panelin kenarına, yüzeyi panel yüzeyiyle tam paralel olacak şekilde yapıştır. Sensör panelden farklı bir yöne bakarsa sistem güneşi kusursuz izler ama panel hep birkaç derece yanına bakar. 110×60 mm'lik 6 V 1 W bir mini panel yaklaşık 22 g gelir; bu ağırlık 3 cm uzaktan yaklaşık 0,07 kg·cm tork demektir ve SG90'ın 1,8 kg·cm'lik torkunun çok altındadır. Asıl yük rüzgârdır: dışarıda deney yapacaksan paneli servo eksenine ortala, metal dişli MG90S kullan, daha büyük panellerde MG996R gibi güçlü bir servoya geç. Kablolara dönüş için gevşek bir halka bırak; gergin kablo servoyu zorlar ve bağlantıları koparır. Servo temelleri için Servo Motor Nedir? yazısına bakabilirsin.

Adım adım kurulum

  1. Dört LDR'yi bir delikli plaket parçasına 2×2 kare biçiminde lehimle, aralarına 2–3 cm yüksekliğinde artı şeklinde bir karton ya da 3D baskı perde yapıştır; perdeyi mat siyaha boya ya da siyah bantla kapla.
  2. Her LDR için bölücüyü kur: LDR beslemeden analog pine, sabit direnç analog pinden GND'ye.
  3. Servoları pan-tilt braketine tak, ikisini de 90°'ye getir ve kollarını (horn) orta konumda olacak şekilde vidala.
  4. Paneli ve sensör bloğunu üstteki braketin üzerine, yüzeyleri paralel olacak şekilde sabitle.
  5. Panel ölçüm devresini kur: yük direnci panelin iki ucuna, bölücü panelin artı ucu ile GND arasına, orta nokta A4'e.
  6. Servoları harici 5 V kaynaktan besle, bütün GND'leri birleştir ve 470 µF kondansatörü servo beslemesine paralel bağla.
  7. Önce kalibrasyon kodunu, sonra takip kodunu yükle ve sistemi bir el feneriyle test et.

Adım 1: LDR'leri test et ve kalibre et

Aynı paketten çıkan LDR'ler bile aynı ışıkta belirgin biçimde farklı değerler verir; GL5528'in veri sayfası 10 lux'ta 10–20 kΩ gibi geniş bir aralık tanımlar. Kalibre edilmemiş bir sensör güneşe tam dönükken bile bir tarafı daha aydınlık sanır ve paneli birkaç derece yanlış yöne çevirir. Aşağıdaki kodu yükle, Araçlar menüsünden Seri Çizici'yi (Serial Plotter) aç ve sensör bloğunu eşit bir ışıkla aydınlat; örneğin lambanın önüne bir A4 kâğıdı germek ışığı dağıtıp eşitler.

Arduino (C++)
1// 4 LDR'yi okuyup Seri Çizici'ye yazar / reads 4 LDRs for the Serial Plotter
2const int LDR[4] = {A0, A1, A2, A3};   // sol üst, sağ üst, sol alt, sağ alt / TL, TR, BL, BR
3
4void setup() {
5  Serial.begin(9600);
6}
7
8void loop() {
9  for (int i = 0; i < 4; i++) {
10    Serial.print(analogRead(LDR[i]));
11    Serial.print(i < 3 ? '\t' : '\n');  // sekmeyle ayır / separate with tabs
12  }
13  delay(100);
14}

Dört çizgi aynı ışıkta aynı seviyede olmalıdır. Diyelim ki değerler 612, 640, 598 ve 625 çıktı; ortalama 619'dur. Her LDR'nin düzeltmesi, ortalama eksi kendi değeridir: +7, −21, +21 ve −6. Bu sayıları Adım 3'teki kodda OFFSET dizisine yazarsın. LDR'nin direnci ışıkla doğrusal değişmediği için kalibrasyonu, sistemin gerçekten çalışacağı ışık seviyesine yakın bir ışıkta yapmak en doğru sonucu verir. Seri Çizici'de gürültüyü de görürsün: hiçbir şeye dokunmadığın hâlde değerlerin kaç birim oynadığını not et, ölü bölgeyi seçerken bu sayıya ihtiyacın olacak.

Adım 2: Tek eksenli güneş takip kodu

Önce mantığı tek eksende görelim. İki LDR, aralarındaki dikey bir gölge duvarıyla doğu ve batı tarafına bakar: A0 doğu, A1 batı LDR'sidir. Kod iki değeri birbirinden çıkarır; fark ölü bölgeden büyükse servo aydınlık tarafa 1° döner, küçükse yerinde kalır. Bu 20 satırlık kod, tek eksenli bir sistemin tamamıdır. Panel ışıktan kaçıyorsa iki koşuldaki angle++ ve angle-- ifadelerinin yerini değiştir.

Arduino (C++)
1#include <Servo.h>
2
3Servo servo;
4const int LDR_EAST = A0;   // doğu tarafındaki LDR / east-side LDR
5const int LDR_WEST = A1;   // batı tarafındaki LDR / west-side LDR
6const int TOL = 30;        // ölü bölge (ADC birimi) / dead band (ADC counts)
7int angle = 90;            // başlangıç: tam güney / start: due south
8
9void setup() {
10  servo.attach(9);
11  servo.write(angle);
12}
13
14void loop() {
15  int diff = analogRead(LDR_EAST) - analogRead(LDR_WEST);
16  if (diff > TOL && angle < 180) angle++;   // doğu daha aydınlık / east is brighter
17  if (diff < -TOL && angle > 0) angle--;    // batı daha aydınlık / west is brighter
18  servo.write(angle);
19  delay(30);                                // servo yetişsin / let the servo settle
20}

delay(30) ile servo her 30 ms'de en fazla 1° döner; bu da saniyede yaklaşık 33° demektir ve el feneriyle yapılan gösteride panel ışığı rahatça izler. Güneş ise çok daha yavaş hareket ettiği için gerçek kullanımda düzeltmeyi birkaç saniyede bir yapmak yeterlidir.

Adım 3: Çift eksenli kod, ölü bölge ve veri kaydı

Tam sürüm dört LDR'den iki fark hesaplar, her ekseni ayrı ayrı düzeltir, gece olunca paneli sabaha hazır bekletir ve dakikada bir, iki panelin gerilimini, gücünü ve toplanan enerjiyi CSV biçiminde Seri Monitör'e yazar. Kod delay() yerine millis() kullanır; böylece takip ve kayıt birbirini beklemeden çalışır. Bu yöntemin ayrıntısı millis ve delay yazısında.

Arduino (C++)
1#include <Servo.h>
2
3// Pinler / Pins
4const int LDR[4] = {A0, A1, A2, A3};   // sol üst, sağ üst, sol alt, sağ alt / TL, TR, BL, BR
5const int PANEL_TRACK = A4;            // takip eden panelin bölücüsü / tracking panel divider
6const int PANEL_FIXED = A5;            // sabit panelin bölücüsü / fixed panel divider
7
8// Ayarlar / Settings
9const int OFFSET[4] = {0, 0, 0, 0};    // Adım 1'deki düzeltmeler / corrections from step 1
10const int TOL_START = 40;              // fark bunu aşınca dön / start turning above this
11const int TOL_STOP = 15;               // fark bunun altına inince dur / stop below this
12const int DIR_H = 1, DIR_V = 1;        // ters dönüyorsa -1 yap / set to -1 if it turns away
13const int H_MIN = 0, H_MAX = 180;      // yatay sınırlar / horizontal limits
14const int V_MIN = 10, V_MAX = 90;      // dikey sınırlar / vertical limits
15const int H_PARK = 180, V_PARK = 45;   // gece konumu: doğu (batıda bekliyorsa H_PARK = 0) / night position: east (0 if it waits facing west)
16const int NIGHT = 60;                  // ortalama bunun altındaysa gece / below this average = night
17const float DIVIDER = 3.2;             // (22k + 10k) / 10k
18const float LOAD_OHM = 33.0;           // yük direnci / load resistor
19const unsigned long LOG_MS = 60000;    // kayıt aralığı: 1 dk / log interval: 1 min
20
21Servo servoH, servoV;                  // yatay ve dikey eksen / horizontal and vertical axis
22int angleH = 90, angleV = 45;
23bool movingH = false, movingV = false;
24unsigned long lastStep = 0, lastLog = 0, darkSince = 0;
25float mWhTrack = 0, mWhFixed = 0;      // toplanan enerji / collected energy
26
27int readAvg(int pin) {                 // 8 okumanın ortalaması / average of 8 readings
28  long sum = 0;
29  for (int i = 0; i < 8; i++) sum += analogRead(pin);
30  return sum / 8;
31}
32
33// Ölü bölge + histerezis / dead band + hysteresis
34int correct(int diff, bool &moving, int angle, int dir, int lo, int hi) {
35  if (abs(diff) > TOL_START) moving = true;
36  if (abs(diff) < TOL_STOP) moving = false;
37  if (moving) angle += (diff > 0 ? 1 : -1) * dir;
38  return constrain(angle, lo, hi);
39}
40
41float panelVolts(int pin) {            // bölücüden panel gerilimi / panel voltage from divider
42  return readAvg(pin) * 5.0 / 1023.0 * DIVIDER;
43}
44
45void setup() {
46  Serial.begin(9600);
47  servoH.attach(9);
48  servoV.attach(10);
49  servoH.write(angleH);
50  servoV.write(angleV);
51  Serial.println("dk,V_takip,V_sabit,mW_takip,mW_sabit,mWh_takip,mWh_sabit");
52}
53
54void loop() {
55  unsigned long now = millis();
56
57  if (now - lastStep >= 40) {          // saniyede 25 düzeltme / 25 corrections per second
58    lastStep = now;
59    int v[4];
60    for (int i = 0; i < 4; i++) v[i] = readAvg(LDR[i]) + OFFSET[i];
61    int avg = (v[0] + v[1] + v[2] + v[3]) / 4;
62    int dV = (v[0] + v[1]) / 2 - (v[2] + v[3]) / 2;   // üst - alt / top - bottom
63    int dH = (v[0] + v[2]) / 2 - (v[1] + v[3]) / 2;   // sol - sağ / left - right
64
65    if (avg > NIGHT) {
66      darkSince = now;
67      angleV = correct(dV, movingV, angleV, DIR_V, V_MIN, V_MAX);
68      angleH = correct(dH, movingH, angleH, DIR_H, H_MIN, H_MAX);
69    } else if (now - darkSince > 600000UL) {           // 10 dk karanlık / 10 min of darkness
70      angleH = H_PARK;
71      angleV = V_PARK;
72    }
73    servoH.write(angleH);
74    servoV.write(angleV);
75  }
76
77  if (now - lastLog >= LOG_MS) {       // dakikada bir CSV satırı / one CSV line per minute
78    lastLog = now;
79    float vt = panelVolts(PANEL_TRACK), vf = panelVolts(PANEL_FIXED);
80    float pt = vt * vt / LOAD_OHM * 1000.0;    // P = V² / R (mW)
81    float pf = vf * vf / LOAD_OHM * 1000.0;
82    mWhTrack += pt * LOG_MS / 3600000.0;       // enerji = güç × süre / energy = power × time
83    mWhFixed += pf * LOG_MS / 3600000.0;
84    Serial.print(now / 60000); Serial.print(',');
85    Serial.print(vt, 2); Serial.print(',');
86    Serial.print(vf, 2); Serial.print(',');
87    Serial.print(pt, 1); Serial.print(',');
88    Serial.print(pf, 1); Serial.print(',');
89    Serial.print(mWhTrack, 1); Serial.print(',');
90    Serial.println(mWhFixed, 1);
91  }
92}
AyarDeğerNe işe yarar?
OFFSETAdım 1'deki düzeltmelerLDR'ler arasındaki üretim farkını giderir
TOL_START / TOL_STOP40 / 15Ölü bölge ve histerezis: fark 40'ı aşınca döner, 15'in altına inince durur
DIR_H / DIR_V1 ya da -1Montaja göre dönüş yönünü çevirir
V_MIN / V_MAX10 / 90Dikey servonun sınırları; panelin brakete çarpmasını önler
NIGHT60Dört LDR'nin ortalaması bunun altındaysa gece kabul edilir
H_PARK / V_PARK180 / 4510 dakikalık karanlıktan sonra panelin sabahı bekleyeceği doğu konumu; panel batıda bekliyorsa H_PARK değerini 0 yap
DIVIDER / LOAD_OHM3,2 / 33Panel gerilimini hesaplamak ve P = V² / R ile gücü bulmak için
LOG_MS60000Kayıt aralığı: dakikada bir satır

Ölü bölge (tolerans) ile titreşimi önlemek

Ölü bölge olmadan sistem hiç durmaz. Güneşe tam dönükken bile LDR değerleri gürültü yüzünden birkaç birim oynar, fark bir artı bir eksi olur ve servo sürekli 1° sağa, 1° sola gider. Bu titreşim hem servonun dişlilerini aşındırır hem de boşuna enerji harcar. Çözüm, farkın küçük değerlerini görmezden gelmektir: fark belirli bir sınırın altındaysa hiçbir şey yapılmaz. Sınırı seçerken kalibrasyonda gördüğün gürültüyü kullan ve ölü bölgeyi gürültünün en az 3–4 katı seç. Uno'da gürültü ±5 birim civarındaysa 20–40 iyi bir başlangıçtır.

Koddaki yöntem bunun bir adım ötesidir: histerezis. Servo, fark 40'ı aşınca harekete başlar ama fark 15'in altına inene kadar durmaz. Tek sınırlı ölü bölgede panel sınırın hemen kenarında durur ve küçük bir bulut ya da rüzgâr onu yeniden harekete geçirir; iki sınırlı sistem ise her seferinde paneli güneşe iyice yaklaştırıp sonra sakinleşir. Ölü bölgenin enerji kaybına etkisi de ihmal edilebilir: kosinüs tablosunda gördüğün gibi birkaç derecelik sapma %1'in altında kayıp demektir. Daha fazla filtreleme yöntemi için sensör verisi filtreleme yazısına bakabilirsin.

Dışarıda gün boyu deney yaparken düzeltmeyi 40 ms yerine 2–5 saniyede bir yapabilirsin. Güneş ortalama 4 dakikada 1° ilerlediği için takip doğruluğu değişmez; servo daha az çalışır, daha az ısınır ve sistemin enerji tüketimi düşer.

Verim deneyi: takip eden panel ile sabit panel

Takip sisteminin işe yaradığını kanıtlamanın tek yolu ölçmektir. Burada sık yapılan hata, panelin yalnızca açık devre gerilimini ölçmektir. Panelin yüksüz gerilimi ışıkla çok az değişir: ışık yarıya indiğinde akım da yaklaşık yarıya iner, ama açık devre gerilimi yalnızca %3–5 düşer. Bu yüzden iki panel de 7 V civarında görünür ve fark kaybolur. Doğru yöntem, her panele aynı yük direncini bağlayıp direnç üzerindeki gerilimi ölçmektir. Güç P = V² / R ile, enerji de gücün zamanla toplanmasıyla bulunur. Yük direncini panelin en yüksek güç noktasına göre seç: 6 V 1 W bir panelde akım yaklaşık 1 / 6 = 0,17 A, uygun direnç de 6 / 0,17 ≈ 36 Ω olur; standart 33 Ω iyi bir seçimdir. Direnç 1 W'a yakın ısı ürettiği için en az 2 W, tercihen 5 W'lık taş direnç kullan. Hesap için Ohm kanunu aracını kullanabilirsin.

  1. İki özdeş panel kullan: aynı model, mümkünse aynı paketten. İkisine de 33 Ω yük direnci ve 22 kΩ / 10 kΩ bölücü bağla; takip eden paneli A4'e, sabit paneli A5'e ver.
  2. Ön test yap: iki paneli yan yana, aynı yöne ve eğime sabitleyip 30–60 dakika ölç. Aradaki farkı (örneğin %2) not et ve sonuçlarını bu farka göre düzelt. Daha da iyisi, ikinci gün panellerin yerini değiştir.
  3. Sabit paneli tam güneye çevir ve eğimini o günün öğlen güneşine göre ayarla (aşağıdaki uyarıya bak).
  4. İki paneli birbirine ve sensöre gölge düşürmeyecek kadar uzağa, ağaç ya da duvar gölgesi olmayan bir yere koy.
  5. Multimetreyle bir kez panel gerilimini ölçüp Arduino'nun okumasıyla karşılaştır; fark varsa DIVIDER değerini düzelt (multimetre nasıl kullanılır).
  6. Kaydı gün doğumundan gün batımına kadar dakikada bir al ve hava durumunu (açık, parçalı bulutlu, kapalı) not et.
  7. Deneyi en az üç açık günde tekrarla, kapalı bir günü ayrıca kaydet ve günlük enerjilerin ortalamasını karşılaştır.
SütunAnlamı
dkArduino açıldığından beri geçen dakika
V_takip / V_sabitYük direnci üzerindeki gerilim (V)
mW_takip / mW_sabitO anki güç: V² / R × 1000
mWh_takip / mWh_sabitKayıt başından beri toplanan enerji
Kazanç (%)(mWh_takip − mWh_sabit) / mWh_sabit × 100; tabloda kendin hesaplarsın

Verileri Seri Monitör'den kopyalayıp CSV dosyası olarak kaydedebilir ya da doğrudan Excel'e aktarabilirsin (Arduino'dan Excel'e veri aktarma); bilgisayar başında beklemek istemiyorsan bir SD kart modülü ekle. Açık bir günün grafiğinde sabah ve akşam saatlerinde takip eden panelin çizgisi belirgin biçimde yukarıda kalır, öğle saatlerinde ise iki çizgi neredeyse üst üste biner. Büyük sistemler için tek eksenli takipte yaklaşık %15–35, çift eksenli takipte %30–45 enerji artışı bildirilir; mini bir düzenekte sonuç havaya, mevsime ve sabit panelin ne kadar iyi yönlendirildiğine çok bağlıdır. Ölçtüğün şeyin panelin kendi verimi değil, aynı panelin topladığı enerjideki artış olduğunu raporunda açıkça yaz. Bir sınırlılığı da ekle: sabit bir yük direncinde güç akımın karesiyle değiştiği için ışık zayıfladıkça panelin gücü ışıktan daha hızlı düşer; bu yüzden ölçtüğün yüzde kazanç, şarj devresine bağlı gerçek bir sistemdekinden yüksek çıkabilir. İki panelin akımlarını (V / R) da toplayıp karşılaştırırsan panellere düşen ışıktaki gerçek farkı da görürsün.

Karşılaştırma adil olmalı. Sabit paneli masaya düz yatırırsan ya da yanlış yöne çevirirsen takip sistemi olduğundan çok daha başarılı görünür ve jüri bunu ilk soruda yakalar. Sabit panel tam güneye bakmalı ve eğimi o günün öğlen güneşine göre ayarlanmalıdır: eğim = 90° − öğlen yükseklik açısı. Kabaca sonbahar ve kışta enlem + 10–15°, ilkbahar ve yazda enlem − 10–15° iyi bir ayardır. Yerel güneş öğlesinde dik bir çubuğun gölgesi tam kuzeyi gösterir; güneyi bulmanın en kolay yolu budur.

Enerji bütçesi: sistem kendi enerjisini karşılar mı?

Jürinin en sevdiği soru budur. Takip sistemi enerji kazandırır, ama kendisi de enerji harcar. Mini bir maket için yaklaşık hesap şöyle:

KalemYaklaşık değerGünlük enerji
Arduino Uno (sürekli açık)45–50 mA, 5 V'ta yaklaşık 0,25 WYaklaşık 6 Wh (24 saat)
2 × SG90 (beklerken)Servo başına birkaç mA ile 10 mA arasıYaklaşık 1–2,5 Wh (24 saat)
SG90 (hareket ederken)100–250 mA, kısa süreliDüzeltme sıklığına bağlı, genelde küçük
ESP32 (Wi-Fi açık)Ortalama 80–150 mAYaklaşık 10–18 Wh (24 saat)
6 V 1 W mini panel (açık gün)En fazla 1 WYaklaşık 3–5 Wh üretim

Tablo açıkça gösteriyor: mini bir maket kendi elektroniğini çalıştıracak kadar enerji üretemez. Takipten gelen yaklaşık 1–1,5 Wh'lik ek enerji, Uno'nun günde harcadığı 6 Wh'in yanında küçük kalır. Bu bir başarısızlık değil, dürüst ve değerli bir sonuçtur. Ölçek büyüdükçe tablo tersine döner: kilovatlık panelleri çeviren motorun ve denetleyicinin tüketimi üretimin küçük bir oranına iner. Mini sistemde tüketimi azaltmak istersen düzeltmeyi dakikada bir yap, servoları hareket etmezken detach() ile serbest bırak, Uno yerine uyku moduna giren bir Pro Mini ya da deep sleep kullanan bir ESP32 tercih et. Pille çalışma süresini hesaplamak için Pil ömrü aracını ve mAh ve Wh yazısını kullanabilirsin.

ESP32 ile güneş takip ve telefondan izleme

ESP32 geliştirme kartı
ESP32: 12 bitlik ADC ve Wi-Fi sayesinde hem paneli çevirir hem de ölçümleri telefona gönderir.

ESP32 aynı mantığı daha hassas bir ADC ve Wi-Fi ile çalıştırır. Dikkat etmen gereken birkaç fark var. Analog okumalar 0–4095 aralığındadır, bu yüzden ölü bölge Uno'nun yaklaşık 4 katıdır. Wi-Fi açıkken yalnızca ADC1 pinleri (GPIO 32–39) güvenilir çalışır, çünkü ADC2 pinleri Wi-Fi tarafından kullanılır. Servo için Kütüphane Yöneticisi'nden ESP32Servo kütüphanesini kur. Panel gerilimini ölçerken kullanılan analogReadMilliVolts() fonksiyonu, ESP32 ADC'sinin doğrusal olmayan davranışını fabrika kalibrasyonuyla düzeltir. LDR bölücülerini mutlaka 3V3'ten besle. Kod yüklendikten sonra Seri Monitör'de görünen IP adresini aynı ağa bağlı telefonunda açarsan iki panelin anlık gerilimini, toplanan enerjiyi ve kazancı görürsün. ESP32'ye yeni başlıyorsan ESP32 Nedir? yazısıyla başla.

Arduino (C++)
1#include <WiFi.h>
2#include <WebServer.h>
3#include <ESP32Servo.h>
4
5const char* ssid = "AgAdi";            // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123";     // Wi-Fi şifren / your Wi-Fi password
7
8const int LDR[4] = {32, 33, 34, 35};   // sol üst, sağ üst, sol alt, sağ alt (ADC1) / TL, TR, BL, BR (ADC1)
9const int PANEL_TRACK = 36;            // VP: takip eden panel / tracking panel
10const int PANEL_FIXED = 39;            // VN: sabit panel / fixed panel
11const int TOL_START = 160, TOL_STOP = 60;  // 12 bit ölçek: Uno'nun 4 katı / 12-bit scale: 4x the Uno
12const int DIR_H = 1, DIR_V = 1;        // ters dönüyorsa -1 yap / set to -1 if it turns away
13const int NIGHT = 240;                 // gece eşiği / night threshold
14const float DIVIDER = 3.2, LOAD_OHM = 33.0;
15
16Servo servoH, servoV;
17WebServer server(80);
18int angleH = 90, angleV = 45;
19bool movingH = false, movingV = false;
20unsigned long lastStep = 0, lastLog = 0;
21float vt = 0, vf = 0, mWhTrack = 0, mWhFixed = 0;
22
23int readAvg(int pin) {
24  long sum = 0;
25  for (int i = 0; i < 8; i++) sum += analogRead(pin);
26  return sum / 8;
27}
28
29float panelVolts(int pin) {            // kalibre edilmiş mV okuması / calibrated mV reading
30  long mv = 0;
31  for (int i = 0; i < 8; i++) mv += analogReadMilliVolts(pin);
32  return mv / 8 / 1000.0 * DIVIDER;
33}
34
35int correct(int diff, bool &moving, int angle, int dir, int lo, int hi) {
36  if (abs(diff) > TOL_START) moving = true;
37  if (abs(diff) < TOL_STOP) moving = false;
38  if (moving) angle += (diff > 0 ? 1 : -1) * dir;
39  return constrain(angle, lo, hi);
40}
41
42void handleRoot() {                    // telefondan izleme sayfası / page for your phone
43  float gain = mWhFixed > 0 ? (mWhTrack - mWhFixed) / mWhFixed * 100.0 : 0;
44  String s = "Takip / tracking: " + String(vt, 2) + " V, " + String(mWhTrack, 1) + " mWh\n";
45  s += "Sabit / fixed: " + String(vf, 2) + " V, " + String(mWhFixed, 1) + " mWh\n";
46  s += "Kazanc / gain: %" + String(gain, 1) + "\n";
47  s += "Aci / angle: H " + String(angleH) + ", V " + String(angleV) + "\n";
48  server.send(200, "text/plain", s);
49}
50
51void setup() {
52  Serial.begin(115200);
53  servoH.setPeriodHertz(50);           // standart servo: 50 Hz / standard servo: 50 Hz
54  servoV.setPeriodHertz(50);
55  servoH.attach(18, 500, 2400);        // 500–2400 µs darbe / pulse
56  servoV.attach(19, 500, 2400);
57  servoH.write(angleH);
58  servoV.write(angleV);
59  WiFi.begin(ssid, password);
60  for (int i = 0; i < 40 && WiFi.status() != WL_CONNECTED; i++) delay(500);  // en fazla 20 s bekle; Wi-Fi yoksa da takip eder / wait up to 20 s; tracks even without Wi-Fi
61  Serial.println(WiFi.localIP());      // bu adresi telefonda aç / open this address on your phone
62  server.on("/", handleRoot);
63  server.begin();
64}
65
66void loop() {
67  server.handleClient();
68  unsigned long now = millis();
69
70  if (now - lastStep >= 40) {
71    lastStep = now;
72    int v[4];
73    for (int i = 0; i < 4; i++) v[i] = readAvg(LDR[i]);
74    int avg = (v[0] + v[1] + v[2] + v[3]) / 4;
75    int dV = (v[0] + v[1]) / 2 - (v[2] + v[3]) / 2;   // üst - alt / top - bottom
76    int dH = (v[0] + v[2]) / 2 - (v[1] + v[3]) / 2;   // sol - sağ / left - right
77    if (avg > NIGHT) {                 // gece hareket etme / do not move at night
78      angleV = correct(dV, movingV, angleV, DIR_V, 10, 90);
79      angleH = correct(dH, movingH, angleH, DIR_H, 0, 180);
80      servoV.write(angleV);
81      servoH.write(angleH);
82    }
83  }
84
85  if (now - lastLog >= 60000) {        // dakikada bir ölç / measure once a minute
86    lastLog = now;
87    vt = panelVolts(PANEL_TRACK);
88    vf = panelVolts(PANEL_FIXED);
89    mWhTrack += vt * vt / LOAD_OHM * 1000.0 / 60.0;   // 1 dakikalık enerji (mWh) / energy of one minute
90    mWhFixed += vf * vf / LOAD_OHM * 1000.0 / 60.0;
91    Serial.printf("%.2f,%.2f,%.1f,%.1f\n", vt, vf, mWhTrack, mWhFixed);
92  }
93}

Ölçümleri günlerce saklamak istersen aynı değerleri internet üzerinden bir tabloya gönderebilirsin; bunun için ESP32 ile Google E-Tablolar'a veri kaydı yazısına bakabilirsin. ADC çözünürlüğü ve referans gerilimi hakkında daha fazlası ADC ve analog-dijital dönüşüm yazısında.

Raspberry Pi Pico ve MicroPython ile tek eksenli takip

Raspberry Pi Pico
Raspberry Pi Pico: dışarıya açık üç ADC pini (GP26, GP27, GP28), tek eksenli bir takip sistemi ve bir panel ölçümü için yeterlidir.

Pico'da dışarıya açık yalnızca üç analog giriş (GP26, GP27, GP28) vardır; dört LDR ve iki panel için yetmez. Bu yüzden Pico ile en temiz çözüm tek eksenli sistemdir: iki LDR yönü bulur, üçüncü analog giriş panel gerilimini ölçer. Çift eksen istersen I2C ile çalışan 4 kanallı ADS1115 gibi harici bir ADC ekleyebilirsin. Servo 50 Hz PWM ile doğrudan sürülür: 500 µs'lik darbe 0°, 2400 µs'lik darbe 180° demektir. read_u16() değeri 0–65535 ölçeğinde olduğu için ölü bölge 2000 gibi büyük bir sayıdır. Pico'ya MicroPython kurmayı Raspberry Pi Pico Nedir? yazısında bulabilirsin.

MicroPython
1from machine import Pin, PWM, ADC
2import time
3
4east = ADC(26)                 # GP26: doğu LDR'si / east LDR
5west = ADC(27)                 # GP27: batı LDR'si / west LDR
6panel = ADC(28)                # GP28: panel bölücüsü / panel divider
7
8servo = PWM(Pin(15))           # GP15: servo sinyali / servo signal
9servo.freq(50)                 # 50 Hz = 20 ms periyot / period
10
11TOL = 2000                     # ölü bölge (0–65535 ölçeği) / dead band (0–65535 scale)
12DIVIDER = 3.2                  # (22k + 10k) / 10k
13LOAD = 33.0                    # yük direnci (ohm) / load resistor (ohm)
14
15def set_angle(a):
16    # 0° = 500 µs, 180° = 2400 µs darbe / pulse
17    servo.duty_ns(int((500 + a * 1900 / 180) * 1000))
18
19def read(adc, n=8):
20    return sum(adc.read_u16() for _ in range(n)) // n
21
22angle = 90
23set_angle(angle)
24energy = 0.0                   # mWh
25last_log = time.ticks_ms()
26
27while True:
28    diff = read(east) - read(west)
29    if diff > TOL and angle < 180:
30        angle += 1             # doğuya dön / turn east
31    elif diff < -TOL and angle > 0:
32        angle -= 1             # batıya dön / turn west
33    set_angle(angle)
34
35    if time.ticks_diff(time.ticks_ms(), last_log) >= 60000:
36        last_log = time.ticks_ms()
37        v = read(panel) * 3.3 / 65535 * DIVIDER
38        p = v * v / LOAD * 1000            # mW
39        energy += p / 60                   # 1 dakikalık enerji / energy of one minute
40        with open("log.csv", "a") as f:    # Pico'nun kendi belleğine yaz / write to Pico's flash
41            f.write("{},{:.2f},{:.1f},{:.1f}\n".format(angle, v, p, energy))
42    time.sleep_ms(30)

Kod ölçümleri Pico'nun kendi belleğindeki log.csv dosyasına ekler. Dakikada bir satır, bir günde 30–40 KB eder; Pico'nun yaklaşık 1,4 MB'lık dosya alanı haftalarca yeter. Dosyayı main.py adıyla kaydedersen Pico bilgisayara bağlı olmadan, bir pil ya da USB adaptörüyle beslendiği anda kendiliğinden çalışır. Günün sonunda Thonny ile log.csv dosyasını bilgisayarına indirip Excel'de açabilirsin.

TÜBİTAK sunumu için ipuçları

Güneş takip sistemi TÜBİTAK 4006 ve 2204 sergilerinde sık görülen bir projedir; seni öne çıkaracak şey maketin kendisi değil, ölçülmüş verin ve bu veriyi nasıl yorumladığındır. Proje fikirleri ve rapor yapısı için TÜBİTAK Arduino proje fikirleri yazısına da göz at.

  • Ölçülebilir bir soru sor: Çift eksenli takip, güneye en iyi açıyla sabitlenmiş özdeş bir panele göre açık bir sonbahar gününde yüzde kaç daha fazla enerji toplar?
  • Hipotezini önceden yaz: Örneğin kazancın sabah ve akşam saatlerinde yoğunlaşacağını öngör; sonuç hipotezini doğrulamasa bile bunu tartışmak puan kazandırır.
  • Değişkenleri ayır: Bağımsız değişken takip yöntemi (yok, tek eksen, çift eksen), bağımlı değişken günlük enerji (Wh), kontrol değişkenleri panel modeli, yük direnci, konum ve tarihtir.
  • Grafikle anlat: Saat–güç çizgi grafiği iki paneli üst üste gösterir; günlük enerjileri sütun grafikle karşılaştır ve günler arasındaki farkı hata payı olarak belirt.
  • Net enerjiyi tartış: Sistemin kendi tüketimini ölç ve enerji bütçesi tablosunu posterine koy; bu, projenin dürüst ve bilimsel olduğunu gösterir.
  • Sergi salonunda güneş yok: Canlı gösteriyi el feneri ya da spot lambayla yap; dışarıdaki deneyin hızlandırılmış videosunu ve ham CSV dosyasını yanında bulundur.
  • Posteri düzenle: Problem, yöntem, devre şeması, kodun akış şeması, sonuçlar, sınırlılıklar ve öneriler; her bölümde kısa cümleler ve büyük grafikler.
  • Sınırlılıkları sen söyle: Mini panel, birkaç günlük veri, rüzgâr ve LDR farkları gibi sınırları jüri sormadan belirtmek güven verir.
Jürinin sorabileceği soruHazırlaman gereken cevap
Neden LDR kullandın, saatle takip olmaz mıydı?Saat tabanlı takibin bulutta da çalıştığını ama konum ve saat ayarı istediğini; LDR'nin kurulumu kolay, kendi hatasını düzelten ama bulutta kararsız bir yöntem olduğunu anlat.
Sistem kendi harcadığı enerjiyi karşılıyor mu?Enerji bütçesi tablonla cevap ver: mini sistemde karşılamaz, ama ölçek büyüdükçe tüketim üretimin küçük bir oranına iner.
Sabit paneli nasıl yönlendirdin?Tam güneye ve o günün öğlen güneşine göre en iyi eğimle; ön testte iki panel arasındaki farkı da ölçtüğünü göster.
Bulutlu havada ne oluyor?Işık dağınık geldiği için kazanç neredeyse sıfıra iner; ölü bölge paneli boşuna döndürmez. Kapalı gün verini göster.
Gerçek santrallerde kullanılıyor mu?Evet; büyük güneş santrallerinde tek eksenli takip yaygındır. Çift eksenli sistemler daha pahalıdır ve daha çok bakım ister.
Ölçüm hatanı nasıl azalttın?Sekiz okumanın ortalamasını, multimetreyle kalibrasyonu, panellerin yer değiştirilmesini ve deneyin birkaç gün tekrarlanmasını anlat.

Sık yapılan hatalar ve çözümleri

SorunOlası nedenÇözüm
Panel ışıktan kaçıyorServonun dönüş yönü montaja göre tersDIR_H ya da DIR_V değerini -1 yap
Servo sağa sola titriyorÖlü bölge çok dar, okumalar gürültülüTOL_START ve TOL_STOP değerlerini artır, ortalama sayısını yükselt
Panel güneşin biraz yanında duruyorLDR'ler kalibre edilmemiş ya da sensör panele paralel değilKalibrasyonu yap, sensör bloğunu panel yüzeyiyle hizala
Servo hareket edince Arduino resetleniyorServolar kartın 5V pininden besleniyorHarici 5 V kaynak, ortak GND ve 470 µF kondansatör kullan
Güneşte dört değer de 1000'e yakın, fark yokSabit direnç çok büyük, okumalar doyuyorDışarıda 1–2,2 kΩ kullan, gölge duvarını yükselt
İki panel de 7 V gösteriyor, fark görünmüyorYük direnci yok, açık devre gerilimi ölçülüyorHer panele 33 Ω yük direnci bağla
ESP32'de Wi-Fi açılınca analog değerler bozuluyorLDR'ler ADC2 pinlerine bağlıGPIO 32–39 arasındaki ADC1 pinlerini kullan
Akşam panel batıda kalıyor, sabah geç dönüyorGece konumu montaja uymuyor ya da NIGHT eşiği çok düşükH_PARK değerini montajındaki doğu ucuna ayarla (180 ya da 0); gece okunan ortalama NIGHT değerinin üstündeyse eşiği yükselt
Bulutlu havada panel rastgele dolaşıyorDağınık ışıkta fark küçük ve kararsızÖlü bölgeyi genişlet, NIGHT eşiğini yükselterek düşük ışıkta hareketi durdur
Sorun giderirken önce kalibrasyon kodunu yeniden yükle ve dört LDR'yi Seri Çizici'de izle. Sensör doğru çalışıyorsa sorun mekanikte ya da beslemededir; sensör değerleri tutarsızsa kabloları, dirençleri ve gölge duvarını kontrol et.

Projeyi geliştirmek için fikirler

  • Güneşle şarj olan pil istasyonu: Takip eden paneli bir TP4056 şarj modülü ve 18650 pile bağla, pilin dolma süresini sabit panelle karşılaştır.
  • Hibrit takip: Bir RTC saat modülü ile güneşin konumunu hesapla, LDR'lerle yalnızca ince ayar yap; bulutlu havada bile panel doğru yöne bakar.
  • Wi-Fi veri kaydı: ESP32 ile ölçümleri Google E-Tablolar'a gönder, grafiği telefondan canlı izle.
  • Güneş enerjili sera: Takipli paneli bir akıllı sera maketinin fanını ve sulamasını beslemek için kullan.
  • Işık tarayıcı: Tek bir LDR'yi servoyla 0–180° tarayıp en parlak yönü bulan bir sürüm yap; mantık Arduino radar projesine çok benzer.
  • Daha hassas güç ölçümü: Yük direncinin yanında akımı ve gerilimi birlikte ölçen INA219 gibi bir I2C güç sensörü kullan ve panelin güç eğrisini çiz.

Güneş takip sistemi; sensör okumayı, karar vermeyi, motor kontrolünü ve bilimsel ölçümü tek projede birleştirdiği için hem öğrenmek hem de yarışmada göstermek için harika bir seçimdir. Önce tek eksenle başla, ölü bölgeyi ayarla, sonra ikinci ekseni ve sabit panelli deneyi ekle. BlueGrays uygulamasında LDR ile ışık ölçme, gece lambası, servo açı kontrolü ve dijital voltmetre gibi bu sistemin her parçasını ayrı ayrı deneyebileceğin projeleri devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

Güneş takip sistemi verimi ne kadar artırır?

Büyük sistemlerde tek eksenli takip sabit panele göre yaklaşık %15–35, çift eksenli takip %30–45 daha fazla enerji toplar. Kazanç açık havada ve güneşin alçakta olduğu sabah-akşam saatlerinde en yüksektir, öğlende ise sıfıra yaklaşır. Kendi düzeneğinde gerçek değeri, özdeş bir sabit panelle aynı gün karşılaştırarak ölçmelisin.

Güneş takip sistemi için kaç LDR gerekir?

Tek eksenli sistem için 2, çift eksenli sistem için 4 LDR yeterlidir. LDR'ler arasına bir gölge duvarı konur; güneş bir yana kaydığında duvar karşı taraftaki LDR'leri gölgeler ve Arduino aradaki farka göre paneli çevirir. Daha fazla LDR kullanmak doğruluğu belirgin artırmaz.

Tek eksenli mi çift eksenli mi güneş takip sistemi yapmalıyım?

İlk projen ise tek eksenle başla: tek servo ve iki LDR ile kazancın büyük kısmını alırsın, mekanik de basittir. Çift eksen biraz daha fazla enerji toplar ve TÜBİTAK gibi yarışmalarda daha etkileyicidir, ama pan-tilt düzeneği ve iki eksenin birlikte ayarlanmasını gerektirir.

Güneş takip sisteminde hangi servo kullanılır?

6 V 1 W gibi hafif mini paneller için SG90 yeterlidir; dışarıda rüzgâr varsa metal dişli MG90S daha dayanıklıdır. 5 W ve üzeri büyük paneller için MG996R gibi yüksek torklu bir servo ya da redüktörlü bir motor gerekir. Servoları her zaman harici 5 V kaynaktan besle ve GND'leri birleştir.

Güneş takip sisteminde servo neden titrer?

LDR değerleri gürültü yüzünden sürekli birkaç birim oynar; kodda ölü bölge (tolerans) yoksa servo her küçük farkta sağa sola gider. Farkı belirli bir sınırın altında görmezden gelen bir ölü bölge, hatta başlama ve durma için iki ayrı sınır (histerezis) kullanmak titreşimi bitirir. Servoların zayıf beslenmesi de titremeye yol açabilir.

Güneş takip sistemi kendi enerjisini karşılar mı?

Mini bir makette karşılamaz: Arduino Uno günde yaklaşık 6 Wh harcarken 6 V 1 W bir panel açık bir günde 3–5 Wh üretir. Büyük sistemlerde ise motorun ve denetleyicinin tüketimi üretimin küçük bir oranında kalır. Bu hesabı raporunda göstermek projeni bilimsel olarak güçlendirir.

Tüm projeleri gör
Ldr İle Işık Şiddeti Okuma
#11Başlangıç

Ldr İle Işık Şiddeti Okuma

Odanın ne kadar aydınlık olduğunu sayıyla görmek ister misin? Işığa duyarlı küçük bir parça olan LDR ortam ışığını ölçer ve Arduino bu değeri yarım saniyede bir bilgisayar ekranına yazar. Elinle üstün

4.6(79)
130
Ldr İle Gece Lambası
#12Başlangıç

Ldr İle Gece Lambası

Hava karardığında kendiliğinden yanan, sabah olunca sönen küçük bir gece lambası. Işık sensörü odadaki aydınlığı ölçer; Arduino ortam yeterince karanlıksa LED'i yakar, aydınlanınca söndürür. Sokak lam

4.8(100)
178
ESP32 LDR Modülü ile Işık Şiddeti Okuma
#113Başlangıç

ESP32 LDR Modülü ile Işık Şiddeti Okuma

LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

4.6(36)
55
Servo Motor Kullanım
#35Başlangıç
Premium

Servo Motor Kullanım

Küçük bir servo motorun kolu sırayla üç konuma döner: en başa, tam ortaya ve en sona, her durakta iki saniye bekleyerek. Arduino motora hangi açıda durması gerektiğini söyler, motor da oraya gidip ora

4.7(48)
67
Pot ile SG90 Servo Açı Kontrolü
#99Başlangıç
Premium

Pot ile SG90 Servo Açı Kontrolü

Potansiyometre ile Servo Motor (SG90) Kontrolü Bu projenin temel amacı, analog bir giriş birimi olan potansiyometreyi kullanarak, bir servo motorun açısal konumunu gerçek zamanlı ve hassas bir şekilde kontrol etmektir. Proje, analog-dijital dönüşüm (ADC) ve sinyal haritalama mantığını kavramak için temel bir mühendislik örneğidir. Çalışma Mantığı: Analog Veri Okuma: Kullanıcı potansiyometreyi çevirdiğinde, direnç değişimi sonucunda Arduino'nun A0 analog pinine 0V ile 5V arasında bir voltaj siny

4.5(24)
38
ESP32 Servo Motor (Potansiyometre Kontrolü)
#118Orta
Premium

ESP32 Servo Motor (Potansiyometre Kontrolü)

Bu projede potansiyometre ile SG90 servo motoru kontrol ediyoruz. Potansiyometreden okunan analog değeri 0-180 derece aralığına map'leyerek servo açısını ayarlıyoruz. ESP32Servo kütüphanesi, ESP32'nin çıkış verebilen uygun GPIO'larında servo sinyali üretir; bu projede GPIO 18 kullanılır. Bu, robotik kollar, kamera gimbal'ları ve otomatik kapı mekanizmaları için temel bir kontrol yöntemidir.

4.3(29)
42
LCD Ekran ile Dijital Voltmetre
#56Orta
Premium

LCD Ekran ile Dijital Voltmetre

Pilin ya da adaptörün ne kadar gerilim verdiğini kendi yaptığın ölçü aletiyle öğren. İki dirençten oluşan bir bölücü yüksek gerilimi kartın okuyabileceği seviyeye indirir, Arduino da gerçek değeri hes

4.5(27)
36
ESP32 LDR ile Gece Lambası
#112Başlangıç
Premium

ESP32 LDR ile Gece Lambası

Karanlıkta LED'in otomatik yandığı, aydınlıkta söndüğü gece lambası. LDR Sensör Modülünün D0 (digital out) pini kullanılır — modülün üzerindeki küçük potansiyometre ile karanlık eşiği ayarlanır, modül kendisi HIGH/LOW çıkış üretir. ESP32 sadece digitalRead() ile bu sinyali okur, kod çok basit.

4.6(17)
30