Arduino ile Güneş Takip Sistemi

Arduino ile Güneş Takip Sistemi


Bu uygulamayı yapmak için ihtiyacınız olan malzemeler:

  1. 1 x Arduino
  2. 2 x Servo Motor
  3. 1 x Breadboard
  4. 1 x LDR 
  5. 16 Adet Jumper Kablo
3D Modele ise aşağıdaki linkten ulaşabilirsiniz:

https://www.thingiverse.com/thing:53321

Devre Şeması

Kodlar

#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
int ldrrt = 1; //LDR top rigt
int ldrld = 2; //LDR down left
int ldrrd = 3 ; //ldr down rigt

void setup()
{
  Serial.begin(9600);
// servo connections
// name.attacht(pin);
  horizontal.attach(3); 
  vertical.attach(4);
}

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 = analogRead(4)/20; // read potentiometers  
  int tol = analogRead(5)/4;
  
  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); 
}

Yorumlar

  1. hocam kolay gelsin. ben güneş takip sistemini PID ile yapmak istiyorum ama uygun kodları bulamıyorum. Yardımcı olur musunuz? Ne yapmam gerekiyor bunu PID ile yapmam için?

    YanıtlaSil
    Yanıtlar
    1. https://www.teachmemicro.com/arduino-pid-control-tutorial/
      bu sayfa işine yarayabilir.

      Sil
  2. Arduino uno R3 kullanıldığında kodda hata alıyorum bunu nasıl düzeltebilirim?

    YanıtlaSil
  3. Düzeltme:
    Arduino uno R3 smd CH340 kullanıldığında kodda hata alıyorum bunu nasıl düzeltebilirim?

    YanıtlaSil

Yorum Gönder