
Merhaba arkadaşlar ben Bilal GÜREVİN. Sakarya üniversitesinden mekatronik mühendisliğii mezunuyum. Bu çalışmamda sizlere tasarım projesi olarak yaptığım akıllı güneş takip sisteminden bahsedeceğim.
Güneş takip sistemleri,güneş panellerini, güneşten gelen radyasyonu en iyi şekilde alacak diklikte tutmaya çalışarak elde edilecek enerjiyi maksimum hale getirmeyi hedefler. İdeal bir güneş takip sistemi, fotovoltaik güneş pilinin dosdoğru bir şekilde güneşe yöneltilmesini sağlamalıdır. Bunun için yatay ve düşeyde hareket edebilmelidir. Bu proje çalışmasında, gün içinde herhangi bir anda güneşin sürekli olarak 90 derecelik dik açı ile takibini iki eksendeki hareketi ile sağlayan ve bu sayede panellerin günlük verimini arttıran bir güneş takip sistemi tasarlanmıştır. Proje yapımı esnasında programlama, servo motor kontrolü, analog verilerin okunması, elektrik devreleri ve SolidCad ile üç boyutlu parça tasarımı gibi çalışma alanlarına ait birçok teknikten yararlanılmıştır.
Çalışma Mantığı
Yapılan projede gün içinde sistemin güneşe olan konumu LDR ler ile sağlanmış. Toplamda dört adet LDR kullanılmıştır. İki LDR yatay, diğer iki LDR dikey eksende hareketleri sağlamaktadır. Üst LDR ile alt LDR’nin referansları karşılaştırılır. Çıkan sonuca göre servoların konumu değiştirilir. Sağa sola dönme işlemi de aynı mantıkla gerçekleştirilir.
LDR’lerden gelen analog bilgilerin ölçülmesi için de Arduino Uno kullanılmıştır. Üzerindeki altı adet analog giriş sayesinde (A0, A1, A2, A3, A4, A5, A6) LDR lerden analog bilgilerin okunarak kıyaslanması sağlanmıştır. Ayrıca panellerden üretilen akım, gerilim ve güç değerleri de Arduino’nun analog girişleri ile gerçekleştirilmiştir. Arduino’nun girişleri 5V’a göre ayarlandığından girişlere gerilim bölücüler konulmuştur. Bu sayede daha yüksek gerilimlerin ölçümü gerçekleştirilmiştir.
Kullanılan Malzemeler
Devre Şeması
Arduino Kodları
#include <Servo.h> Servo YATAY; Servo DIKEY; int pos1 = 90; // servo1 başlangıç konumu int pos2 = 90; // servo2 başlangıç konumu const int LDR_SOL = A0; // mor const int LDR_SAG = A1; // mavi const int LDR_YUKARI = A2; // yeşil const int LDR_ASAGI = A3; // sarı const int pot_pin = A4; int SOL = 0; int SAG = 0; int YUKARI = 0; int ASAGI = 0; int pot = 0; void setup() { YATAY.attach(9); //alt motor DIKEY.attach(10); //ust motor Serial.begin(9600); } void loop() { SOL = analogRead(LDR_SOL); SAG = analogRead(LDR_SAG); YUKARI = analogRead(LDR_YUKARI); ASAGI = analogRead(LDR_ASAGI); pot = analogRead(pot_pin); pot = map(pot, 0, 1023, 0, 50); Serial.print("POT = "); Serial.print(pot); Serial.print(" LDR_SAG = "); Serial.print(SAG); Serial.print(" LDR_SOL = "); Serial.print(SOL); Serial.print(" LDR_UST = "); Serial.print(YUKARI); Serial.print(" LDR_ALT = "); Serial.println(ASAGI); //ldr analog (0-1024) bilgileri okur. //LDR bir ucu - de ise //bu değerler ışık şiddeti ile doğru orantılıdır. //ışık artarsa değer de artar. if (SOL > ( SAG + pot )) { if (pos1 > 0) pos1 -= 1; YATAY.write(pos1); } if (SAG > ( SOL + pot )) { if ( pos1 < 180 ) pos1++; YATAY.write(pos1); } if (YUKARI > ( ASAGI + pot )) { if ( pos2 > 0 ) pos2 -= 1; DIKEY.write(pos2); } if (ASAGI > ( YUKARI + pot )) { if (pos2 < 180) pos2++; DIKEY.write(pos2); } delay(60); }
Güneş Panellerinden Gelen Değerlerin Ölçümü
Bu kısımda da panellerden gelen verilerin arduino da okunmasından bahsedeceğim.Yukarıda da bahsettiğimiz gibi arduino girişleri 5V a kadar okuma yapabildiği için daha yüksek değerleri okuyabilmek adına gerilim bölücü kullandım. Aşağıda bağlantı şeması ve panellerden gelen verileri ölçüp ekrana yazdığımız program mevcuttur. Şema da LCD ekran bağlantısı da bulunmakta ama proje sadece panellerin bağlantısı esas alınarak yapılmıştır.
//*************************************************
//********analog girişler belirleniyor*************
//*************************************************
int sabit = 5;
int hareketli = 4;
//*************************************************
//*****sabit olan panelin ölçümü yapılıyor*********
//*************************************************
float vout_sbt = 0.0;
float vin_sbt = 0.0;
float R1_sbt = 100000.0; // 100K DİRENÇ
float R2_sbt = 10000.0; // 10K DİRENÇ
float R1 = 100.0; // 100 ohm
int sbt = 0;
float sbt_akim = 0;
//*************************************************
//*****hareketli olan panelin ölçümü yapılıyor*****
//*************************************************
float vout_hrk = 0.0;
float vin_hrk = 0.0;
float R1_hrk = 100000.0; // 100K DİRENÇ
float R2_hrk = 10000.0; // 10K DİRENÇ
float R2 = 100.0; // 100 ohm
int hrk = 0;
float hrk_akim = 0;
void setup()
{
Serial.begin(9600);
pinMode(sabit, INPUT); // SABİT GİRİŞ OLARAK AYARLANDI
pinMode(hareketli, INPUT); // HAREKETLİ GİRİŞ OLARAK AYARLANDI
Serial.println(“***********************BU DEGERLER 10 DK ARA ILE OLCULMUSTUR***********************”);
Serial.println(“***********************************SAU MEKATRONIK**********************************”);
}
void loop()
{
sbt = analogRead(sabit);
hrk = analogRead(hareketli);
vout_sbt = sbt * (5.0 / 1024.0); // OKUNAN ANALOG DEĞER 0-1023 ARASINDA. AMA BİZ 0-5 ARASINA ORANLAMAMIZ LAZIM
vin_sbt = vout_sbt / (R2_sbt/(R1_sbt+R2_sbt)) + 0.3;
sbt_akim = vin_sbt / R1;
vout_hrk = hrk * (5.0 / 1024.0); // OKUNAN ANALOG DEĞER 0-1023 ARASINDA. AMA BİZ 0-5 ARASINA ORANLAMAMIZ LAZIM
vin_hrk = vout_hrk / (R2_hrk/(R1_hrk+R2_hrk)) + 0.3;
hrk_akim = vin_hrk / R2;
if (vin_sbt < 0.09)
{
vin_sbt = 0.0;
}
if (vin_hrk < 0.09)
{
vin_hrk = 0.0;
}
Serial.print(“sabit panel = “);
Serial.print(vin_sbt);
Serial.print(” volt “);
Serial.print(sbt_akim);
Serial.print(” mA”);
Serial.print(” hareketli panel = “);
Serial.print(vin_hrk);
Serial.print(” volt “);
Serial.print(hrk_akim);
Serial.println(” mA”);
delay(600000); //10 DK GECİKME…600 SANİYE
//delay(600000); //10 DK GECİKME…600 SANİYE
}
Eren Öztürk
10 Mayıs 2017 at 20:21
2x arduino 2x30tl
neden 2 tane arduino
Program ve bağlantıları tek arduino üzerinden göstermişssiniz
Bilal Gurevin
11 Mayıs 2017 at 13:12
İyi çalışmalar Eren. Diğer arduinonun bağlantılarını yeni yükledim. Bunlarla da panellerden gelen verileri ölçerek gün boyu 10 dk aralıklarla sabit ve hareketli panellerden gelen değerleri ekrana yazdırdım. Çıkan değerleri excele aktarıp grafikler oluşturdum.
Barış AKKUŞ
15 Mayıs 2018 at 14:46
İYİ GÜNLER.Bu projeyi yapmaya çalışıyorum benim projemin bundan farkı tek eksenli olması yani aynı nerdeyse fakat kodları ve devre şemasını tek servoya göre yaptığınız için tam olmuyo ve çok titreme oluyo sizdede bu problemler oldu mu yardımcı olur musunuz
Abdalrahman Badawy
10 Mayıs 2017 at 21:16
please rewrite the code with English in order to understand it =D .
furkan
12 Mayıs 2017 at 10:45
Şuan Sakarya’da mısınız? Satın almak istiyorum mümkünse?
Mustafa
3 Ekim 2017 at 20:42
Kolay gelsin öncelikle güzel bir proje. Lakin bu projeden bence en önemli nokta çizimler ve paneller. Eğer 3 boyutlu çizim yaptıysanız bunun lazer kesim dosylarını veya çizim dosyalarını da ekleyebilir misiniz? Çünkü proje elimde yarım kaldı buradan bakarak yapmaya çalıştım ama yapı olmayınca zor oluyor.
Şimdiden teşekkür ederim.
emre demirci
23 Kasım 2017 at 19:19
çalışmanız için gerçekten tebrik ederim bende gerçekleştirmeye başladım bu projeyi fakat 2. kısımda lc dideki veri okuma kısmında hatayla karşılaştım sebebi nedir yardımcı olurmusunuz
ahmet
16 Ocak 2018 at 11:38
Güneş Panellerinden Gelen Değerlerin Ölçümü için verien kodlarda aşağıdaki hatayı alıyorum sebebi nedir
exit status 1
stray ‘\342’ in program
mb
7 Haziran 2018 at 10:45
evet bu hatayı ben de alıyorum. düzeltemedim. Bu sorunu halleden var mı ??
yunus emre
7 Ekim 2018 at 18:04
solar panel kaç w ? akü varmı ve tipi ve degerleri nedir?
sef
11 Nisan 2020 at 23:02
Servo motorları raspberry pi ile döndürsek sorun çıkarır mı
Yücel Yılmaz
12 Nisan 2020 at 17:38
Herhangi bir sıkıntı çıkarmaz. Sadece ilgili projeyi Raspberry Pi’ye göre revize etmeniz gerekecektir.
HALİL BOZKURT
20 Ekim 2020 at 12:31
Yapımın detaylı bir videosu var mı ? Ne kadar bir maliyet ortaya çıkıyor.
Duranka
15 Ocak 2024 at 21:25
ldr yerine kullanılabilecek daha kaliteli waterproof bir sensör önerebilirmisiniz