Posted by : MC 28 Mart 2015 Cumartesi



Arduino ve ldr kullanılarak gerçekleştirilmiş güzel bir güneş takip sistemi.

Sistemde güneşün pozisyonu algılamak için 4 adet ldr kullanılmış.Ldr lerden gelecek olan ışık şiddeti verilerine görede 2 adet servo motor yardımı ile en verimli güneş açısına eksen hareketleri sağlanmış.


Ldr ler güneşi takip açısından sağ üst - sağ alt - sol üst - sol alt olarak yerleştirilmiş ve aralarına plaka konularak birbirlerinden izole edilmiş.




Peki sistem nasıl çalışır ?

diyelim ki sağ üst köşede en fazla güneş ışığı yakaladık bu durumda sağ üst ldr miz dışında diğer ldr ler gölgede kalacağından en fazla ışığı sağ üst ldrmiz alacak ve bize bilgiyi verecektir.Bizde motorlarımızı tüm ldr ler aynı derecede ışık siddeti alıncaya kadar (belirli bir tölerans altında) servo motorlarımızı döndüreceğiz.



Gelilim Arduino kodlarımıza



#include <Servo.h> // Servo kütüphanesini ekledik


Servo horizontal; // yatay hareket motoru

int servoh = 90; // yatay limit


Servo vertical; // dikey hareket motoru

int servov = 90; // dikey limit


// LDR pinlerini belirliyoruz

int ldrlt = 0; //LDR sol üst ldr

int ldrrt = 1; //LDR sağ üst ldr

int ldrld = 2; //LDR sol alt ldr

int ldrrd = 3; //LDR sağ alt ldr


void setup()

{

Serial.begin(9600);

// servo connections

// name.attacht(pin);

horizontal.attach(9);

vertical.attach(10);

}


void loop()

{

int lt = analogRead(ldrlt); // üst sol ldr okuma

int rt = analogRead(ldrrt); // üst sağ ldr okuma

int ld = analogRead(ldrld); // alt sol ldr okuma

int rd = analogRead(ldrrd); // alt sağ ldr okuma


int dtime = analogRead(4)/20; // pot ayarları

int tol = analogRead(5)/4;// tolerans belirliyoruz


int avt = (lt + rt) / 2; // üst ldr değerleri ortalaması

int avd = (ld + rd) / 2; // alt ldr değerler ortalaması

int avl = (lt + ld) / 2; // sol ldr değerler ortalaması

int avr = (rt + rd) / 2; // sağ ldr değerler ortalaması


int dvert = avt - avd; // üst ve alt ldr değerleri farkı

int dhoriz = avl - avr;// sol ve sağ ldr değerleri farkı


if (-1*tol > dvert || dvert > tol) // dikey hareket için tolerans değerleri ile karşılaştırma

{

if (avt > avd)//üst tarafa alt taraftan daha fazla ışık geliyorsa

{

servov = ++servov;// yukarı hareket sağla

if (servov > 180)

{

servov = 180;

}

}

else if (avt < avd)//alt tarafa üst taraftan daha fazla ışık geliyorsa

{

servov= --servov;// aşağı hareket sağla

if (servov < 0)

{

servov = 0;

}

}

vertical.write(servov);

}


if (-1*tol > dhoriz || dhoriz > tol) // yatay hareket için tolerans değerleri kontrolü

{

if (avl > avr)//sol tarafta ışık daha fazla ise

{

servoh = --servoh;//sola hareket sağla

if (servoh < 0)

{

servoh = 0;

}

}

else if (avl < avr)// sağ tarafta ışık daha fazla ise

{

servoh = ++servoh;//sağa hareketi sağla

if (servoh > 180)

{

servoh = 180;

}

}

else if (avl == avr)//ışık şiddetli eşit ise sabit kal

{

// nothing

}

horizontal.write(servoh);

}

delay(dtime);

}

{ 2 Comments... read them below or Comment }

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger