Güneş Takip Sistemi #Arduino Solar Tracker

Günümüzde enerji elde etmek için temiz enerji kaynaklarını durmadan geliştiriliyor.Bunlar rüzgar gülü ve enerji panelleri olarak karşımıza çıkmaktadır. Doğaya sıfır zarar veren bu sistemler giderek yaygınlaşarak daha çevreci üretimler aranmaktadır. Bunlarda güneş panelleri ise bir çok versiyonu bulunmaktadır. Sabit güneş panellerinin yanı sıra güneşi takip eden paneller de daha çok enerji üretimi amaçlanmıştır.Güneşi X ve Y eksenlerinde takip ederek en fazla verimi vermek için tasarlanmıştır.

Güneş takip sistemini minyatür olarak yapacağız.Mekanik kısmını kendi imkanlarımla yaptım,ve iki adet sg90 servo motor lar sayesinde güneşi takip etmektedir. Güneşin konumunu sistemin üst tarafında bulunan 4 adet ldr güneşin konum bilgisini arduino ya bildirecek ve arduino servoları bu konuma getirecektir.

Devremizde;

int dtime = 100;

komutu devrenin sorgulama süresini belirtir. Servolarda aşırı titreşim olursa bu değeri arttırmanız gerekmektedir.

 

 

 

 


#include <Servo.h> //Servo kütüphanesi

// 180 horizontal MAX
Servo horizontal;
int servoh = 90;

int servohLimitHigh = 180;
int servohLimitLow = 10;


#define yukari 6
#define asagi 5
#define sol 9
#define sag 3



Servo vertical;
int servov = 90;

int servovLimitHigh = 175;
int servovLimitLow = 25;
// LDR pin connections
// name = analogpin;

int ldrlt = 3; //LDR sol alt
int ldrld = 4; //LDR sol üst 

int ldrrt = 2; //LDR sağ alt //üst
int ldrrd = 1; //LDR sağ üst // alt




void setup()
{
  Serial.begin(9600);
  // servo connections
  // name.attacht(pin);

  pinMode(yukari, OUTPUT);
  pinMode(asagi, OUTPUT);
  pinMode(sol, OUTPUT);
  pinMode(sag, OUTPUT);


  horizontal.attach(11); // yatay
  vertical.attach(10); // dikey
  horizontal.write(90);
  vertical.write(90);
  delay(2000);
}

void loop()
{
  int lt = analogRead(ldrlt); // sol üst
  int rt = analogRead(ldrrt); // sağ üst
  int ld = analogRead(ldrld); // sol alt
  int rd = analogRead(ldrrd); // sağ alt

  int tol = analogRead(0) / 4;
  int dtime = analogRead(5) / 4;
  //int dtime = 10;
  //int tol = 50;

  int avt = (lt + rt) / 2; // average value top  ortalama değer üstü
  int avd = (ld + rd) / 2; // average value down  ortalama değer aşağı
  int avl = (lt + ld) / 2; // average value left average value sol
  int avr = (rt + rd) / 2; // average value right average value sag

  int dvert = avt - avd; // check the diffirence of up and down  yukarı ve aşağı arasındaki farkı kontrol et

  int dhoriz = avl - avr;// check the diffirence og left and rigt  solun ve sagın arasındaki farkı kontrol et

int ldrlt = 3; //LDR sol alt
int ldrld = 4; //LDR sol üst 

int ldrrt = 2; //LDR sağ üst
int ldrrd = 1; //LDR sağ alt

  Serial.print("sol ust= "); Serial.print(lt);
  Serial.print(" ");
  Serial.print("sag ust= "); Serial.print(rt);
  Serial.print(" ");
  Serial.print("sol alt= "); Serial.print(ld);
  Serial.print(" ");
  Serial.print("sag alt= "); Serial.println(rd);  Serial.print(" ");
  Serial.print("time= "); Serial.print(dtime);
  Serial.print(" ");
  Serial.print("has.= "); Serial.print(tol);
  Serial.println(" ");


  if (-1 * tol > dvert || dvert > tol)
  {
    if (avt > avd)
    {
      servov = ++servov; // yukari
      
    digitalWrite(yukari, LOW);
    digitalWrite(asagi, HIGH);
    digitalWrite(sol, LOW);
    digitalWrite(sag, LOW);
      if (servov > servovLimitHigh)
      {
        servov = servovLimitHigh;
      }
    }


    else if (avt < avd)
    {
      servov = --servov;  // asagi
      
    digitalWrite(yukari,HIGH);
    digitalWrite(asagi, LOW);
    digitalWrite(sol, LOW);
    digitalWrite(sag, LOW);
      if (servov < servovLimitLow)
      {
        servov = servovLimitLow;
      }
    }


    vertical.write(servov);// dikey servo
  }





  if (-1 * tol > dhoriz || dhoriz > tol)
  {
    if (avl > avr)
    {
      servoh = --servoh;
      
    digitalWrite(yukari, LOW);
    digitalWrite(asagi, LOW);
    digitalWrite(sol, LOW);
    digitalWrite(sag, HIGH);
      if (servoh < servohLimitLow)
      {
        servoh = servohLimitLow;
      }
    }
    else if (avl < avr) {
      servoh = ++servoh; 
      
    digitalWrite(yukari, LOW);
    digitalWrite(asagi, LOW);
    digitalWrite(sol, HIGH);
    digitalWrite(sag, LOW);
      
      
      if (servoh > servohLimitHigh)
      {
        servoh = servohLimitHigh;
      }
    }
    else if (avl = avr)
    {
      // nothing
    }
    horizontal.write(servoh);
  }
  delay(dtime);

    vertical.write(servov);// dikey servo
    horizontal.write(servoh);
    digitalWrite(yukari, LOW);
    digitalWrite(asagi, LOW);
    digitalWrite(sol, LOW);
    digitalWrite(sag, LOW);
}

Sosyal Medyada Paylaş Facebook Twitter Google+

Etiketler: , , ,
Eklenme Tarihi: 6 Ağustos 2017

Konu hakkında yorumunuzu yazın

Güneş Takip Sistemi #Arduino Solar Tracker (14 Yorum)

  1. merhaba video ile görseldeki aynı değil resimdeki gibi 2 eksen tilt kullansak yazılım işe yararmı

    • Aynı olmayan ne ? Mekanizma dan söz ediyorsanız. Mantığı aynı olduktan sonra tipine takılmayın.

  2. Merhabalar proje hakkında tüm malzemelerimi aldım mekanik tasarıma başlayacam fakat güneş paneli işe zemin arasındakil siyah mekanizmayı nerden TEM’in edebilirim

  3. Merhabalar öncelikle emeğinize sağlık szileden rica ldrye giden enerjiyi ve motoru 5vtan 9 v çıkartan devre kartının çizimini bizimle paylaşmanız

    • 9voltu 5volta indiren. 7805 kullanacaksınız. Kullan mı basit ve nette bir çok örneğini göreceksiniz.

    • orda kullanılan 2 adet potans değeri ve ne sebeple kullanılır bağlantısı nasıldır güneş paneli enerjisini nasıl aküye veya power banka aktarabilirim.

  4. Devred ve kodlar aynı şekilde kurdum ,ancak çalışmasında sıkıntı oldu , yardımcı olur musunuz acaba ?

  5. hocamız dc motorla yapmamızı söyledi fakat yazılım la bir bilgimiz olmadığı için nasıl bir yol izliyeceğimizi bilmiyoruz servo motor olsa onu yaparız ama büyük panel olucağı için servo motor kulanmıcaz

  6. Bı sorum olucakti bizim panel daha büyük olucak ve dc motorla çalıştır caz Arduino bunu yazılımı nasıl olucak bı bilginiz var mı

    • Step motor kullana bilir siniz. Dc motor verimli olmayabilir.Kontrolü zor olabilir. Kullanilan motora görede yazılım güncellenmeli

HOŞ GELDİNİZ

Youtube kanalıma Abone Olabilirsiniz.