Güneş takip sistemi arduino, servo motor,  2 adet LDR ve 2 adet dirençten oluşan ve amacı güneşe yada başka bir ışık kaynağına yönelmek olan bir sistemdir.

     Elimizde 0-180 derece iki yönde dönebilen, arduino kütüphanesi ile kontrol edilebilen standart bir servo motor vardır. Arduino kodu oldukça basittir. Kod parçasını ve açıklamaları aşağıda bulabilirsiniz.

   Kod içinde “pos” değişkenini servonun başlangıç değerini 90 dereceye yani orta pozisyona ayarlamak için kullanıldı. LDR ler arduino nun A0 ve A1 pinlerine bağlandı. “tolerance” değişkeni küçük toleranslara müsaade etmek için kullanılmıştır. Aksi taktirde güneş paneli pozisyonunu ayarlamak için sürekli dönecektir.

     “Setup” fonksiyonunda LDR lerin bağlı olduğu pinler giriş olarak tanımlandı, servo motorun başlangıç pozisyonu belirtildi ve asıl kod çalışmadan önce 2 sn bekleme verildi. “Loop” fonksiyonunun içinde 2 LDR den aldığımız değerlere göre servo motora konum bilgisi verildi.

    İhtiyacınız olan tüm elektriksel parçaları ve bağlantıları şemada görebilirsiniz. Servo motorların sarı ucu kontrol ucudur ve bu uç arduino nun 9. pinine bağlanmalıdır. LDR lerin bağlantılarının yönelimlerinin aynı olmasına dikkat ediniz.

Arduino bağlantı şeması:

 

arduino-solar-tracker-circuit

#include <Servo.h> 
 
Servo myservo; 
int pos = 90;   // Başlangıç pozisyonu
int sens1 = A0; // LDR 1 A0 a bağlı
int sens2 = A1; //LDR 2 A1 e bağlı
int tolerance = 2;
 
void setup() 
{ 
  myservo.attach(9);       // Servo motor 9. pine bağlı
  pinMode(sens1, INPUT);   // LDR 1 in bağlı olduğu pin giriş
  pinMode(sens2, INPUT);   // LDR 2 nin bağlı olduğu pin giriş
  myservo.write(pos);      // Servo başlangıç pozisyona gidecek
  delay(2000);             // 2 sn gecikme
}  
 
void loop() 
{ 
  int val1 = analogRead(sens1); // LDR 1 in analog değeri okunuyor
  int val2 = analogRead(sens2); // LDR 2 nin analog değeri okunuyor
 
  if((abs(val1 - val2) <= tolerance) || (abs(val2 - val1) <= tolerance)) {
    // LDR lerden okunan değerlerin farkı tolerans dan küçükse hiçbirşey yapma
  } else {    
    if(val1 > val2)
    {
      pos = --pos;
    }
    if(val1 < val2) 
    {
      pos = ++pos;
    }
  }
 
  if(pos > 180) { pos = 180; } // Servo pozisyonu resetleniyor
  if(pos < 0) { pos = 0; }     // Servo pozisyonu resetleniyor
  
  myservo.write(pos); 
  delay(50);
}

 

Kaynak : http://www.electroschematics.com/10182/arduino-solar-tracker-servo/

2 YORUMLAR