19 Şubat 2015 Perşembe

Güneş Takip Sistemi Yapımı Arduino İle

Güneş enerji panellerinden tam verim alabilmek amacıyla panellerin güneş ışığı yönüne yönelmesiyle yapılması mümkündür. Bu panelleri her saat başı değiştirmekle uğraşmak yerine küçük bir elektronik düzenle bu halledilebilir.

Malzemeler
- 2x Servo Motor
- 4x LDR ışık sensörü
- Arduino Uno Rev 3
- Jumper Kablo
- 4x 1k direnç
- Delikli board (sensör devresi için)


Mekanik Aksam Çizimleri 
- Çizimler Google SketchUp 2014 ile çizilmiştir.
- Temsili çizimlerdir. Birebir çizimleri çıkartıp prototipleme imkanı bulamadım.





Devre Şeması
-Şemalar Fritzing Programında kurulmuştur.

Projenin Fotoğrafları:





Devrenin Çalışır Haldeki Videosu:



Arduino Kodu:

#include <Servo.h> // include Servo library 

Servo horizontal; // horizontal servo
int servoh = 90; // stand horizontal servo

Servo vertical; // vertical servo 
int servov = 90; // stand vertical servo

// LDR pin connections
// name = analogpin;
int ldrlt = 0; //LDR top left A0
int ldrrt = 1; //LDR top rigt A1
int ldrld = 2; //LDR down left A2
int ldrrd = 3; //ldr down rigt A3

void setup()
{
  Serial.begin(9600);
// servo connections
// name.attacht(pin);
horizontal.attach(9, 1000, 2000); 
vertical.attach(10, 1000, 2000);
}

void loop() 
{
  int lt = analogRead(ldrlt); // top left
  int rt = analogRead(ldrrt); // top right
  int ld = analogRead(ldrld); // down left
  int rd = analogRead(ldrrd); // down rigt

  int dtime = 20;//change moving speed
  int tol =10; // change tolerance between LDR`s

int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right

int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol) // check if the diffirence is in the tolerance else change vertical angle
{
if (avt > avd)
{
servov = ++servov;
if (servov > 180)
{
servov = 180;
}
}
else if (avt < avd)
{
servov= --servov;
if (servov < 0)
{
servov = 0;
}
}
vertical.write(servov);
}

if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = --servoh;
if (servoh < 0)
{
servoh = 0;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > 180)
{
servoh = 180;
}
}
else if (avl = avr)
{
// nothing
}
horizontal.write(servoh);
}
delay(dtime);
*********************************************************************************

7 yorum:

  1. Bu projede servoları hackleyerekmi kullandınız yoksa direk 180° olarak

    YanıtlaSil
  2. peki bu kodları nasıl sistemle bağdaştırıcaz

    YanıtlaSil
  3. hocam devrenin aynısı yaptm kodları yaptm ama servolar titresim veriyor cok agır dönüyor bu knu jhakknda bilgi verebilrmsnz ?

    YanıtlaSil
    Yanıtlar
    1. 1) Servolara fazla yük mü bindi?
      2) Hangi tip servo kullanıyorsunuz?
      3) Mikro servolar dışındaki servolar için dışarıdan besleme gerekebilir.
      4) Bu durumda servo beslemelerini dışardan sağlayıp, sonra kaynak ile Arduino üzerindeki her ikisinin de GND kısımlarını kısa devre yapınız.
      5) Servolar 180 derece döndükleri için servoların sisteme takılırken sistemin en başından başlar gibi yani en yataya getirip orasının son nokta olduğuna emin olduktan sonra servonun başlığını takmanız gerek.
      6) LDR'lerde sorun olabilir, yapısal bozukluklar veya ışık durumunda ikinci bir LDR'de aynı ışıktan etkilenip kararsız bir yapıya sahip olabilir.
      7) Sisteme ışık düştüğü zaman diğer ldrlerin bu ışığa maruz kalıp kalmadıklarını kontrol ediniz.
      8) Kablolarda sorun olabilir. Herhangi bir kopukluk sistemde kararsızlığa sebep olur.
      9) Daha çok bu kullandığınız servonun yetersiz güç çekmesi ve tipinden kaynaklı olması kuvvetle muhtemel.

      Sil
  4. bizde bitirme projesi yaptık fakat kullandığımız kod sonradan çalışmamaya başladı. sizinkine benzer kod kullandık yani şu kısım aynı ''horizontal.attach(9, 1000, 2000);'' ama anlamadık. 1000 ve 2000 ne için acaba ?

    YanıtlaSil
  5. hocam bende bu devreden yapmak istiyorum bi yardımcı olurmusun ? nasıl yapıcaz bunu proteusta çizimi varmı sende atsan bize baskı devre alsak biz ordan ?

    YanıtlaSil
  6. Hocam çok teşekkür ederim. Benim de bu sene bir dersimin finali bu proje. Diğer sitelerde panelle yapımı var hep. Bu kadar açık, basit ve güzel gösterilmiş olanı görmedim.

    YanıtlaSil