Elektrik Elektronik Teknolojisi Alanı Temrinleri

 
Hoşgeldiniz Ziyaretçi. Lütfen giriş yapın veya kayıt olun.

Kullanıcı adınızı, şifrenizi ve aktif kalma süresini giriniz

Gönderen Konu: 4. 2 Eksen Arduino Shild Güneş Paneli  (Okunma sayısı 42650 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

04 Eylül 2015, 21:11:29
Bu dersimizde güneş panelinden mümkün olabilen maksimum seviyede enerji alabilmek için güneş panelini otomatik olarak güneşe yönlendiren platform yapmayı öğreneceğiz. Güneş konumunu değiştirdikçe platformumuz güneşin konumunu takip edecektir. Paltformun üzerine bir güneş pili yerleştirilmiştir. Güneş pili de bir bataryayı şarz etmektedir. Bu şekilde gündüzleri bataryamızı maksimum seviyede şarz edip, geceleri bataryamızdan enerji alabiliriz.

Güneşin pozisyonunu tespit edebilmek için sistemde 4 adet ldr (foto direnç) kullanmıştır. Bunlardan ikisi yatay kontrol, diğer ikisi dikey kontrol içindir. Her bir ldrye devre şemasında görüldüğü şekilde birer tane 10klık direnç seri bağlanmıştır. Bu bağlantı sayesinde arduinonun analog A0, A1, A2 ve A3 girişlerine güneşin pozisyonuna göre yaklaşık 0 volt ile yaklaşık 5 volt arasında birbirinden farklı gerilimler düşer. Hangi ldr daha fazla ışık alıyorsa o ldrye ait analog girişte diğer analog girişlere nazaran daha fazla gerilim düşümü olacaktır. Arduino programımız sayesinde analog girişlere düşen gerilimler değerlendirilerek servolara sağa ya da sola dönmeleri için sinyal yollanır. A0 ve A1 girişlerindeki gerilimler yatay kontrolü, A2 ve A3 girişlerindeki gerilimler ise dikey kontrolü sağlayacaktır. Servoların harekete geçmesiyle ldrlerin üzerine düşen ışık şiddetleri eşitlendiğinde ldrlerin üzerine düşen dolayısıyla A0 ve A1 (yatay kontrol) pinleri ile A2 ve A3 (dikey kontrol) pinlerine düşen gerilimler birbirine eşit olacaktır. Yani A0 gerilimi = A1 gerilimi ve A2 gerilimi = A3 gerilimi olana kadar servolar hareket edecek ve platformun güneşe göre uygun pozisyon alması sağlanacaktır.

Malzeme listesi:
Arduino uno
Pan tilt servo motor montaj kiti
Bakırlı pertinaks
Baskı devre malzemeleri
4 adet 10 k direnç
4 adet ldr
2 adet servo
Güneş pili
Batarya
Bilgisayar
Bağlantı iletkenleri
El ve güç aletleri
Muhtelif vida ve civatalar

<iframe width="640" height="385" src="//www.youtube.com/embed/1K_LSgkT6h4?fs=1&start=" frameborder="0" allowfullscreen></iframe>







ISIS çizimi
ISIS çizimini konu ekinden indirebilirsiniz.


Arduino Shild ARES çizimi
Ares dosyasını konu ekinden indirebilirsiniz.




Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.


Arduino kodlarımız:
Arduino kodlarına ait dosyayı konu ekinden indirebilirsiniz.
Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
« Son Düzenleme: 30 Eylül 2016, 22:57:02 Gönderen: fatek »


iletişim: 0542 343 09 15
 

11 Haziran 2016, 15:09:12
Yanıtla #1
Badwet

İleti:

Hocam Merhaba youtube kanalından da yazmıştım ben tek eksen  yani doğu Batı ekseninde dc motor ile çalışan bir güneş takip devresi yapmak istiyorum.arduino'ya yeni başladım ve kendim biraz kod yazdım ama işin içinden çıkamadım konuyu özetlemek gerekirse doğu batı ekseninde çalışacak ,sistemde doğuda ve batıda birer limit sw olacak.2 ldr güneşi takip ederek batıya kadar gelecek ve  batıdaki lm sw e bastığında gün batmayacağı için ldr ler okumaya devam edecek ne zaman ki karanlık iyice çöktüğünde panel ertesi güne hazırlanmak için doğuya doğru yönelecek.doğudaki sw'e bastığında panel duracak ve ertesi günü bekleyecek.yazdığım kodları bu işin bir kısmını hallettim fakat doğuda ki sw'e bastığında sistem orada kalıyor devamlılığını sağlayamıyorum.şu an cep telefonundan yazıyorum kodları gönderemiyorum.kodlama konusunda Yardımınıza ihtiyacım var.
 

11 Haziran 2016, 16:03:43
Yanıtla #2
Düşüneyim biraz yardımcı olmaya çalışacağım. Zor bir şey değil.
« Son Düzenleme: 11 Haziran 2016, 16:36:03 Gönderen: fatek »
iletişim: 0542 343 09 15
 

11 Haziran 2016, 17:19:22
Yanıtla #3
Badwet

İleti:

Yazmayı unutmuşum dc motorun devir yönünü röle ile + - nin yerini değiştirerek yapacağım. Yani 2 tane röle kullanacağım.dc motor da linear motor dedikleri tarzda bir motor olacak youtube da görmüştüm eleman yapmış ama onun sistemi arduino ile ama sadece zaman ayarlaması yaparak paneli döndürüyordu.yarın evdeki bilgisayarımdan daha detaylı anlatabilirim
« Son Düzenleme: 11 Haziran 2016, 17:22:31 Gönderen: Badwet »
 

11 Haziran 2016, 19:29:11
Yanıtla #4
iletişim: 0542 343 09 15
 

11 Haziran 2016, 20:52:00
Yanıtla #5
Badwet

İleti:

« Son Düzenleme: 11 Haziran 2016, 20:54:10 Gönderen: fatek »
 

12 Haziran 2016, 16:37:35
Yanıtla #6
Badwet

İleti:

Tekrar merhaba yazdığım(yazmaya çalıştığım diyelim) kodlar şöyle ;


const int sensorPinA0 = A0;    // doğu ldr
const int sensorPinA1 = A1;    // batı ldr
const int pmotorPinA0 = 12;    // doğu röle ucu
const int pmotorPinA1 = 11;    // batı röle ucu
const int switch1Pin = 5;      //doğu limit sw
const int switch2Pin = 6;      //batı limit sw

// variables:
int sensorValueA0 = 0;         
int sensorValueA1 = 0;         
int switch1val= digitalRead(switch1Pin);
int switch2val= digitalRead(switch2Pin);


void setup() {
 
   
  Serial.begin(9600);
   
    pinMode(5, INPUT);
    pinMode(6, INPUT);
    pinMode(12, OUTPUT);
    digitalWrite(12, LOW);
    pinMode(11, OUTPUT);
    digitalWrite(11, LOW);
   
   
}

void loop() {
  // read the sensor:
  sensorValueA0 = analogRead(sensorPinA0);
  sensorValueA1 = analogRead(sensorPinA1);
  switch1val= digitalRead(switch1Pin);
  switch2val= digitalRead(switch2Pin);
  int Rate1 = analogRead(sensorPinA0);//Doğu LDR digital değeri
  int Rate2 = analogRead(sensorPinA1);//Batı LDR digital değeri
 
 
    if (Rate1 == 512){ //LDR max digital değerinin yarısını kullandım hassasiyet gayet iyi.
      digitalWrite(12, HIGH);//motor doguya döner
      digitalWrite(11, LOW);}
     
   if (Rate2 == 512){ 
      digitalWrite(11, HIGH);//motor batıya döner
      digitalWrite(12, LOW);}
     
    if (Rate1 == Rate2){
      digitalWrite(12, LOW);//her iki değer eşit ise motor durur.
      digitalWrite(11, LOW);}

    if (Rate1 == Rate2 && switch1val == HIGH){//her iki değer eşit ise ve batı sw'i (sw1) basıldı ise motoru doğuya döndür
      digitalWrite(11, HIGH);
      digitalWrite(12, LOW);
      delay(12000);//motorun doğuya dönmesi için gerekli zaman
      }

    if (switch2val == HIGH){//doğu sw'i (switch 2)basıldı ise motoru durdur.
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);}
     
 
      }


Yazmaya çalıştığım kodlar böyle;
Ekte'de kabaca yapmaya çalıştığım sistemin şeması var çizimde ufak kusurlar olmuş olabilir.

Düzeltme:çizimde switcler için pulldown dirençlerini çizmeyi unutmuşum.
« Son Düzenleme: 12 Haziran 2016, 16:39:39 Gönderen: Badwet »
 

12 Haziran 2016, 16:50:05
Yanıtla #7
Hangi motoru kullanacaksınız? Kullanacağınız motorun özellikleri nelerdir?
iletişim: 0542 343 09 15
 

12 Haziran 2016, 17:00:33
Yanıtla #8
Badwet

İleti:

kullanacağım motor şarjlı matkap motoru olacak izlediğim videonun linkinide atayım sizinde aklınızda şekillensin

 

12 Haziran 2016, 17:14:37
Yanıtla #9
Güzelmiş. Bakalım.Yapmaya çalışalım bir şeyler.
iletişim: 0542 343 09 15
 

12 Haziran 2016, 17:46:03
Yanıtla #10
Sizin yazdığınız ve videodaki kodları inceledim. Her ikisi de hoşuma gitmedi. Güneş ışınlarının geldiği yöne göre eş zamanlı olarak motor, paneli hareket ettirmeli. Bunu dc motorla birebir eş zamanlı yapmak zor zaten, hatta imkansız gibi. Ancak küçük bir açı farkıyla panelin güneş ışınlarının yönünü takip etmesi sağlanabilir. Örnek video da da öyle yapılmış. Sistem güneş ışınlarının geldiği yönü 5 saat boyunca 23 dakika aralıklarla takip ediyor. Açı kaybolmuşsa motoru 800 ms süre ile biraz daha döndürüyor. Bu sürede kullanılan mekanizmanın ve motorun dönme hızına göre farklı uygulamalar için değişiklik arz edecektir. Sistemi daha verimli kullanabilmek için kodlamada değişiklik yapılması gerekir. Ortaya bir şeyler çıkarınca konuya cevap bırakırım.
iletişim: 0542 343 09 15
 

12 Haziran 2016, 17:53:42
Yanıtla #11
Badwet

İleti:

Hocam benden anca bu kadar oldu.iyi fikirlere herzaman açığım
 

12 Haziran 2016, 21:22:05
Yanıtla #12
Badwet

İleti:

Videoda sistem çok hoşuma gitti ve yapması kolay step veya servo motor ile uğraşmak istemediğim için dc motor ile yapmak istiyorum
 

12 Haziran 2016, 21:28:25
Yanıtla #13
Videodakine benzer bir çalışma yaptım. ISIS devre şeması ve arduino kodları aşağıda mevcut. İhtiyaç halinde ISIS ve arduino dosyalarını konu ekinden indirebilirsin.

<a href="http://temrinlerim.org/pdf/gunes_paneli.PDF" target="_blank">http://temrinlerim.org/pdf/gunes_paneli.PDF</a>

int motor_saat_yonunde_rolesi=13;
int motor_saat_yonu_tersi_rolesi=12;
int bati_anahtar=A0; 
int dogu_anahtar=A1; 
int bati_ldr=A2; 
int dogu_ldr=A3; 
int doguldr = 0; 
int batildr = 0;
void setup() 
{
pinMode(motor_saat_yonunde_rolesi, OUTPUT);
pinMode(motor_saat_yonu_tersi_rolesi, OUTPUT);
}

void loop() 
{
  doguldr = analogRead(dogu_ldr); 
  batildr = analogRead(bati_ldr); 

// doğu anahtar açık ve doğu ldr daha aydınlıkken motor saat yönünde dönecektir kodları burada başladı
if (digitalRead(dogu_anahtar) == LOW && digitalRead(bati_ldr) < digitalRead(dogu_ldr))  
    {
      digitalWrite (motor_saat_yonunde_rolesi, HIGH);
      digitalWrite (motor_saat_yonu_tersi_rolesi, LOW);
      delay (800);
    }
// doğu anahtar açık ve doğu ldr daha aydınlıkken motor saat yönünde dönecektir kodları burada bitti    
    
digitalWrite (motor_saat_yonunde_rolesi, LOW);
digitalWrite (motor_saat_yonu_tersi_rolesi, LOW);
delay (100);

if (digitalRead(dogu_anahtar) == HIGH && digitalRead(bati_anahtar) == LOW )  
    {
      digitalWrite (motor_saat_yonunde_rolesi, LOW);
      digitalWrite (motor_saat_yonu_tersi_rolesi, HIGH);
      delay (5000);
      digitalWrite (motor_saat_yonunde_rolesi, LOW);
      digitalWrite (motor_saat_yonu_tersi_rolesi, LOW);
      delay (100);
    }  
  
}

iletişim: 0542 343 09 15
 

12 Haziran 2016, 21:58:01
Yanıtla #14
Badwet

İleti:

Akşam evde deneyeceğim hocam elinize sağlık.