Ana Sayfa Arduino Arduino ile Akıllı Güneş Takip Sistemi

Arduino ile Akıllı Güneş Takip Sistemi

10 min read
6
7
5,524

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

  • Arduino Uno
  • Servo Motor
  • LDR
  • Solar Panel
  • LCD Ekran
  • 10K Direnç
  • 100K Direnç
  • 220 R Direnç

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
}

Buna Benzer Yazılar Göster !
  • Arduino ile Braille Alfabesi Yazdırma

    Merhaba arkadaşlar bu yazımda sizlere mekatronik bitirme projesi olarak yaptığım çalışmada…
Daha Fazlasını Yükle - Bilal Gurevin
Daha Fazla Göster -  Arduino

6 Yorumlar

  1. 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

    Reply

    • 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.

      Reply

  2. Abdalrahman Badawy

    10 Mayıs 2017 at 21:16

    please rewrite the code with English in order to understand it =D .

    Reply

  3. furkan

    12 Mayıs 2017 at 10:45

    Şuan Sakarya’da mısınız? Satın almak istiyorum mümkünse?

    Reply

  4. 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.

    Reply

  5. 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

    Reply

Bir Cevap Yazın

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

Bak Bakalım ?

Arduino ile Braille Alfabesi Yazdırma

Merhaba arkadaşlar bu yazımda sizlere mekatronik bitirme projesi olarak yaptığım çalışmada…