Elektrik elektronik temrinleri

Ders Notları => Arduino Öğreniyorum => Projeler => Konuyu başlatan: Hasan ERTÜRK - 04 Eylül 2015, 19:41:29

Başlık: 4. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 04 Eylül 2015, 19:41: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

http://www.youtube.com/watch?v=1K_LSgkT6h4

(http://temrinlerim.org/images/arduino69.jpg)

(http://temrinlerim.org/images/arduino70.jpg)

(http://temrinlerim.org/images/arduino71.jpg)

ISIS çizimi
ISIS çizimini konu ekinden indirebilirsiniz.
(http://temrinlerim.org/images/arduino68.PNG)

Arduino Shild ARES çizimi
Ares dosyasını konu ekinden indirebilirsiniz.
(http://temrinlerim.org/images/solar_ares.PNG)

(http://temrinlerim.org/images/solar2.PNG)

Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.
(http://temrinlerim.org/images/arduino72.png)

Arduino kodlarımız:
Arduino kodlarına ait dosyayı konu ekinden indirebilirsiniz.
Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 11 Haziran 2016, 13:39:12
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.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 11 Haziran 2016, 14:33:43
Düşüneyim biraz yardımcı olmaya çalışacağım. Zor bir şey değil.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 11 Haziran 2016, 15:49:22
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
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 11 Haziran 2016, 17:59:11
Anlatın bakalım.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 11 Haziran 2016, 19:22:00
Anlatın bakalım.

☺☺ tamam hocam
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 12 Haziran 2016, 15:07:35
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.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 12 Haziran 2016, 15:20:05
Hangi motoru kullanacaksınız? Kullanacağınız motorun özellikleri nelerdir?
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 12 Haziran 2016, 15:30:33
kullanacağım motor şarjlı matkap motoru olacak izlediğim videonun linkinide atayım sizinde aklınızda şekillensin

https://youtu.be/yDxCCJ1NwGs
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 12 Haziran 2016, 15:44:37
Güzelmiş. Bakalım.Yapmaya çalışalım bir şeyler.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 12 Haziran 2016, 16:16:03
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.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 12 Haziran 2016, 16:23:42
Hocam benden anca bu kadar oldu.iyi fikirlere herzaman açığım
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 12 Haziran 2016, 19:52:05
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
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 12 Haziran 2016, 19:58:25
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.

http://temrinlerim.org/pdf/gunes_paneli.PDF

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

Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 12 Haziran 2016, 20:28:01
Akşam evde deneyeceğim hocam elinize sağlık.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: aydindr - 12 Haziran 2016, 20:56:33
Akşam evde deneyeceğim hocam elinize sağlık.
Sonucu merakla bekliyoruz
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 13 Haziran 2016, 12:16:58
devreyi çalıştırdığımda motor_saat_yonu_tersi_rolesi direk çıkış veriyor ve 5 sn de bir flash yapıyor ışığı takip etmiyor

benim yazdığım kodları tekrar yüklediğimde sıkıntı yok doğuya döndürüp doğu lm.sw'e bastıktan sonra programı tekrar devam ettiremiyorum döngü orada kalıyor
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 13 Haziran 2016, 14:30:18
Denemem lazım denemeden bir şey diyemeyeceğim. isis sümülasyonda sıkıntı görünmüyordu.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 13 Haziran 2016, 18:01:06
Aslında  benim yazdığım kodda çözemediğim tek nokta panel batıdan doğuya dönüp doğudaki sw'e bastığında switch basılı kaldığı için sanırım döngü veya işleyiş orada takılı kalıyor bu durumdan kurtarmak için ne yapılmalı??
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 13 Haziran 2016, 18:40:14
Şu kodu
Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Şu şekilde değiştirip deneyin.
Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 13 Haziran 2016, 19:28:08
Kodu sizin yazdığınız gibi değiştirdiğimde durum pek değişmedi switch case komutu burada işe yarayabilirmi acaba??
Hani batı switchine bastığında şöyle yap veya doğu switchine basılı kaldığında döngüyü devam ettir gibi
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 13 Haziran 2016, 19:33:07
doğudaki anahtara basınca ne yapmasını istiyorsunuz
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 13 Haziran 2016, 19:56:47
doğu anahtarına basınca motor duracak ve ertesi gün güneş doğduğunda güneşi takip ederek batıya doğru işleme devam edecek.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 13 Haziran 2016, 20:49:10
kodlarının son halini buraya bi ekle bakalım.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 13 Haziran 2016, 21:37:00
Kodlarda bir değişklik yok;

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);}
     
 
      }
en son 3 satırda switch 2 motoru doğuya geldiğinde durduruyor fakat switch o esnada HIGH pozisyonunda basılı kaldığı için programın işleyişi duruyor.ertesi gün güneş doğduğunda işleme devam etmiyor.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 13 Haziran 2016, 23:31:20
void loop kısmını şu şekilde değiştirip deneyin
Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 13 Haziran 2016, 23:43:23
eksik vardı şöyle olsun:

Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Başlık: Ynt: 43. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Badwet - 15 Haziran 2016, 23:16:00
Sanırım en kolay yol batıdaki sw'e bastıktan sonra doğuya dönüşte motorun dönme zamanını hesaplayıp delay ile yapmak olacak galiba.
Başlık: Ynt: 4. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Gökhan - 22 Ocak 2017, 22:53:21
iyi akşamlar buradaki arduino kodlarının akış diyagramını nasıl oluşturabilirim ?
Başlık: Ynt: 4. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: kaniboz - 14 Şubat 2017, 14:15:39
merhabalar bu projede kullanılan güneş pilinin akım gerilim değerleri ne olmalıdır ?
Başlık: Ynt: 4. 2 Eksen Arduino Shild Güneş Paneli
Gönderen: Hasan ERTÜRK - 14 Şubat 2017, 17:54:05
Şart etmek istediğiniz bataryanın özelliklerine göre değişiklik arz eder.