LDR İçin Kesme Oluşturmak

Kodun yazılışına bakarsak myDFPlayer.play() fonksiyonu bloke olan bir fonksiyon değil gibi duruyor. Arkasına kocaman bir delay konmuş, herhalde orada dosyanın tamamlanması bekleniyor. Bu durumda özel birşey yapmaya gerek yok. Bir kere play çağrıldıktan sonra, programda sen dijital veya analog girişleri döngü içerisinde kontrol edebilirsin. Kesmeye gerek yok yani.
Abi delay'i ben koydum.
Kodun orjinalin de myDFPlayer.play() void setup içindeydi. Açılışta direk başlıyordu.
Ben LDR değerine göre başlatacağım için Void loop içinde if koşulu ile start ettim.
Void loop içinde de sürekli döngü olduğu için şarkı saniyede bir baştan başlıyordu. Bende mecburen şarkı süresi boyunca delay ekledim.
Bu şekilde kutunun kapağı açıldığında sistem olması gerektiği gibi çalışıyor. Ama kutunun kapağını kapatınca delay yüzünden şarkıyı durduramadım. O yüzden kesme olayına yöneldim.
 
@Gokrtl aklıma gelen birkaç tane yönemi @Ahmet ve @ozkarah söylemiş zaten. Kutu kapağındaki reed kontak yada opamp ve LDR ikilisi ile lojik davranan bir LDR devresi.

Üçüncü bir seçenek ise kutu altına konulacak bir anahtar olabilir. Kutu düz zemine konulunca kapanır. Ele alınınca anahtar boşa çıkar ve devre tamamlanır. Kutuyu açmadan da sadece ele almakla çalmaya başlar. Reed kkontak daha mantklı duruyor çünkü mobil bir cihaz olacağı için sürekli LDR'i beslemek pilömrü için iyi değil. Arduino da çalışacak bu arada. Bu yüzden reed kontak daha mantıklı.
 
Şu şekilde kodunu düzenlersen sürekli dfplayer.play komutu sürekli çalışmaz.
Ama bu kodda kapak açılırken/kapanırken yada ldr ye anlık gölge düşerse, ldr değerleri sürekli oynayacak ve kararsız bir durum oraya çıkacak yüksek ihtimalle. Bunun önüne geçmek içinde belli bir sure boyunca, misal 500ms boyunca, ldr 350den büyük olursa kapakAçık değişkenini 1 yapmak gerekli(aynısı 0 yaparken gerekli).

kapakAçık, kapakAçıkEskiDurum ve müzikçalıyor diye üç degisken tanımla ve 0 ver.
main loopunun içinde
C++:
ldr yi oku
lf( ldr > 350 )
{
 kapakAçık =1
}
else if ( ldr < 250)
{
 kapakAçık =0
}

if (kapakAçık != kapakAçıkEskiDurum)
{
   kapakAçıkEskiDurum=kapakAçık
   if( müzikçalıyor=0 )
   {
      müzikçalıyor =1
      dfplayer.play
   }
   else
   {
      müzikçalıyor=0
      dfplayer.stop
   }
}
 
Last edited by a moderator:
Şu şekilde kodunu düzenlersen sürekli dfplayer.play komutu sürekli çalışmaz.

Programı bir "kod" bloğu içerisine koyarsan anlaşılması çok daha kolay olur

1688630335145.png
 
Şu şekilde kodunu düzenlersen sürekli dfplayer.play komutu sürekli çalışmaz.
Ama bu kodda kapak açılırken/kapanırken yada ldr ye anlık gölge düşerse, ldr değerleri sürekli oynayacak ve kararsız bir durum oraya çıkacak yüksek ihtimalle. Bunun önüne geçmek içinde belli bir sure boyunca, misal 500ms boyunca, ldr 350den büyük olursa kapakAçık değişkenini 1 yapmak gerekli(aynısı 0 yaparken gerekli).

kapakAçık, kapakAçıkEskiDurum ve müzikçalıyor diye üç degisken tanımla ve 0 ver.
main loopunun içinde
C++:
ldr yi oku
lf( ldr > 350 )
{
 kapakAçık =1
}
else if ( ldr < 250)
{
 kapakAçık =0
}

if (kapakAçık != kapakAçıkEskiDurum)
{
   kapakAçıkEskiDurum=kapakAçık
   if( müzikçalıyor=0 )
   {
      müzikçalıyor =1
      dfplayer.play
   }
   else
   {
      müzikçalıyor=0
      dfplayer.stop
   }
}
Denemeye fırsatım olmadı ama biraz baktım. Üç tane değişkeni harmanlamak kafa karıştırıcı geldi biraz. Zihinden kodu yürütünce ilk turdan sonra düzgün çalışmayacağı hissiyatına kapıldım. Müsait bir zamanda deneyeceğim.


@Gokrtl aklıma gelen birkaç tane yönemi @Ahmet ve @ozkarah söylemiş zaten. Kutu kapağındaki reed kontak yada opamp ve LDR ikilisi ile lojik davranan bir LDR devresi.

Üçüncü bir seçenek ise kutu altına konulacak bir anahtar olabilir. Kutu düz zemine konulunca kapanır. Ele alınınca anahtar boşa çıkar ve devre tamamlanır. Kutuyu açmadan da sadece ele almakla çalmaya başlar. Reed kkontak daha mantklı duruyor çünkü mobil bir cihaz olacağı için sürekli LDR'i beslemek pilömrü için iyi değil. Arduino da çalışacak bu arada. Bu yüzden reed kontak daha mantıklı.
Bir şey keşfettim. myDFPlayer.play() fonksiyonu tetikleme ile çalışıyor.
Yani diyelimki LDR ışık alıyor ve değeri 500. Bende dedim ki 300 altına düşerse myDFPlayer.play() çalıştır.
Böyle bir komut verdiğimde şarkı sürekli baştan başlıyor. (saniyede bir). Ne zaman LDR değeri tekrar 300 üstüne çıkarsa o zaman sağlıklı bir şekilde şarkı devam ediyor. Anahtar fikrine sıcak bakmıyorum. Ama çoğunluk reed röle dediğine göre ona bir bakayım.
 
@ozkarah dediği gibi reed röle ile çok pratik olur hem de pil ömrü bakımından iyi olur. Ama başına dert açmak istersen :) arduinoda dahili analog komperatör var ve kesme oluşturabiliyor. Uykudan uyandırmak için kullanılabiliyor mu emin değilim. Kesmede güç yönetimi de yapılabilir.
 
@ozkarah dediği gibi reed röle ile çok pratik olur hem de pil ömrü bakımından iyi olur. Ama başına dert açmak istersen :) arduinoda dahili analog komperatör var ve kesme oluşturabiliyor. Uykudan uyandırmak için kullanılabiliyor mu emin değilim. Kesmede güç yönetimi de yapılabilir.
Valla başıma dert açmak isterdim ama yoğunluktan açamıyorum. İki gün oldu hala reed röle almaya gidemedim. :)
Allahtan bir ay kadar vakim var da projeyi yetiştiricem inşallah.
 
ustaa yt da izledim eline sağlık bende yapcam/yapmaya çalışcam
 
anlamadığım tek şey var mıknatıs neyle iletişime geçiyor inş çözerim okuyanlar eyvah diyordur

videoyu da ekliyim bugün yt günü :D

 
anlamadığım tek şey var mıknatıs neyle iletişime geçiyor inş çözerim okuyanlar eyvah diyordur

reed röle diye bir eleman var. Dirence benziyor.
Resimde gördüğün gibi bir şekli var. Dikkat edersen iki kontak birbirine temas etmiyor.
Mıknatısı yaklaştırdığında o iki kontak birleşiyor ve tetik vermiş oluyorsun. Aynı butona basınca verdiğin tetik gibi.
Gerisi arduinonun işi. Butona basıldıysa şarkıyı çal diyorsun olay bitiyor.

MANYETİK KONTAK.jpg
 
  • Beğen
Reactions: nt
reed röle diye bir eleman var. Dirence benziyor.
Resimde gördüğün gibi bir şekli var. Dikkat edersen iki kontak birbirine temas etmiyor.
Mıknatısı yaklaştırdığında o iki kontak birleşiyor ve tetik vermiş oluyorsun. Aynı butona basınca verdiğin tetik gibi.
Gerisi arduinonun işi. Butona basıldıysa şarkıyı çal diyorsun olay bitiyor.

31729 eklentisine bak
mıtnatıs kollardan birini ayırıyor ve off durumunda kalıyor anladım usta :tamam3: teşekkürler
 
@nt reed röle ile çalışırken dikkatli olmak da fayda var bacağını bukeyim derken kırılıp camlar fırlıyor geçen gözlük olmasaydı kör olabilirdim...
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,885
Mesajlar
100,445
Üyeler
2,493
Son üye
cym247

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top