Elektrik elektronik temrinleri

Ders Notlarý => Arduino Öðreniyorum => Projeler => Konuyu balatan: Hasan ERTÜRK - 04 Eyll 2015, 21:11:29

Balk: 4. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 04 Eyll 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

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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 11 Haziran 2016, 15:09: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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 11 Haziran 2016, 16:03:43
Düþüneyim biraz yardýmcý olmaya çalýþacaðým. Zor bir þey deðil.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 11 Haziran 2016, 17:19: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
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 11 Haziran 2016, 19:29:11
Anlatýn bakalým.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 11 Haziran 2016, 20:52:00
Anlatýn bakalým.

☺☺ tamam hocam
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 12 Haziran 2016, 16:37: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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 12 Haziran 2016, 16:50:05
Hangi motoru kullanacaksýnýz? Kullanacaðýnýz motorun özellikleri nelerdir?
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 12 Haziran 2016, 17:00:33
kullanacaðým motor þarjlý matkap motoru olacak izlediðim videonun linkinide atayým sizinde aklýnýzda þekillensin

https://youtu.be/yDxCCJ1NwGs
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 12 Haziran 2016, 17:14:37
Güzelmiþ. Bakalým.Yapmaya çalýþalým bir þeyler.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 12 Haziran 2016, 17:46: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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 12 Haziran 2016, 17:53:42
Hocam benden anca bu kadar oldu.iyi fikirlere herzaman açýðým
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 12 Haziran 2016, 21:22: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
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 12 Haziran 2016, 21:28: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);
    }  
  
}

Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 12 Haziran 2016, 21:58:01
Akþam evde deneyeceðim hocam elinize saðlýk.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: aydindr - 12 Haziran 2016, 22:26:33
Akþam evde deneyeceðim hocam elinize saðlýk.
Sonucu merakla bekliyoruz
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 13 Haziran 2016, 13:46: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
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 13 Haziran 2016, 16:00:18
Denemem lazým denemeden bir þey diyemeyeceðim. isis sümülasyonda sýkýntý görünmüyordu.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 13 Haziran 2016, 19:31: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ý??
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 13 Haziran 2016, 20:10: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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 13 Haziran 2016, 20:58: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
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 13 Haziran 2016, 21:03:07
doðudaki anahtara basýnca ne yapmasýný istiyorsunuz
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 13 Haziran 2016, 21:26: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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 13 Haziran 2016, 22:19:10
kodlarýnýn son halini buraya bi ekle bakalým.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 13 Haziran 2016, 23:07: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.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 14 Haziran 2016, 01:01:20
void loop kýsmýný þu þekilde deðiþtirip deneyin
Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 14 Haziran 2016, 01:13:23
eksik vardý þöyle olsun:

Kod:
Kodlari sadece uyeler gorebilir. Lutfen Uye Olun ya da Giris Yapin.
Balk: Ynt: 43. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Badwet - 16 Haziran 2016, 00:46: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.
Balk: Ynt: 4. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Gökhan - 23 Ocak 2017, 00:23:21
iyi akþamlar buradaki arduino kodlarýnýn akýþ diyagramýný nasýl oluþturabilirim ?
Balk: Ynt: 4. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: kaniboz - 14 ubat 2017, 15:45:39
merhabalar bu projede kullanýlan güneþ pilinin akým gerilim deðerleri ne olmalýdýr ?
Balk: Ynt: 4. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: Hasan ERTÜRK - 14 ubat 2017, 19:24:05
Þart etmek istediðiniz bataryanýn özelliklerine göre deðiþiklik arz eder.
Balk: Ynt: 4. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: mahmutt - 09 ubat 2022, 17:49:26
ben þimdi bir þey sormak istiyorum. sonlandýrýcýlardaki swichleri tut býrak þeklinde yapsak su sistemi çalýþýr hale getirirmi?
Bir de tek sorun batýya dönmüþ bir panelin sabah tekrar göreve baþlamasý için zamanlama görevi atansa olmazmý? yani sisteme harici bir çýkýþ daha baðlayip , batý swich aktif olduktan 2 saat sonra bu çýkýþ katif hale gelse paneli komple doðuya çevirip doðu swich aktif olunca da bu zamanlama iþi bitse.
Baðlantýsý da motora giden kabloya kontrol rolelerinden sonra çift kontak role motorun kontaklarýný sadece güneye dönmesi gereken polarmayý verip , sistemi güneye çevirecek, sonra doðu swich aktif hale geldimi bu çift kontak role motorun kablolarýný normak rolere yönlendirecek. sonra sistem takibe devam edecek. bu harici bir self timerla bile eklenebilir?
Balk: Ynt: 4. 2 Eksen Arduino Shild Güneþ Paneli
Gnderen: mahmutt - 09 ubat 2022, 17:50:03
bu projeyi yapabilen varmý? bende yapmak istiyorum, yardýmlarýnýza ihtiyacým var.