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);
*********************************************************************************