Şimdi Ara

Ayırt Edici Sensör

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir (1 Mobil) - 2 Masaüstü1 Mobil
5 sn
36
Cevap
1
Favori
738
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Selamlar ve iyi çalışmalar. Yaptığımız bilimsel bir deneyde yeterli ekipmana sahip olamadığımız için ilerleyemiyoruz. Kısaca anlatacağız. İki adet analog mekanizmaya bağlı iki adet kırmızı ışık veren ledimiz var. Mekanizmalar arasında 3 mikro saniyelik işlem farkı var. Yani A mekanizması işini bitirdikten 3 mikro saniye sonra B mekanizması işini tamamlıyor. İlk bitirenin kafasındaki led ilk olarak yanıyor sonrada diğerininki yanıyor.  Bazı iterasyonlarda B önce bitirip A hemen ardından (3mikro saniye sonra) bitiriyor. Ve aradaki süre çok ama çok küçük olduğundan biz hangisinin 'önce' bitirdiğini hangi ledin önce yandığını çıplak gözle göremiyoruz. Bizde dedikki ledlerin önüne foto diyot koyalım. Fotodiyotun Tepki süresi 5 nano saniye yani istediğimizden hızlı. Peki fotodiyotlardan aldığımız sinyalleri nasıl bir sisteme verirsek , hangi ledin önce yandığını bize söyleyebilir ? Arduino ile bu işi çözebilirmiyiz ? Yardımcı olun lütfen. Şimdiden çok sağolun. Not : Bu deney insanoğlunun refahı ve selameti için yapılmaktadır.

    < Bu ileti mobil sürüm kullanılarak atıldı >







  • Hocam çok tecrübeli birisi değilim ama fotodiyot kullanmadan led'in + ucunu direkt arduino'ya verip basit bir yazılım ile ölçebilirsiniz diye düşünüyorum. Kronometre vb. Hazır kodlardan da yararlanabilirsiniz.
    Yazılım hakkında 0 olduğum için birşey diyemiyorum.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Arkadaşın dediği gibi led in artı ucunu direk arduino ya bağlayıp sürekli olarak bağlı olduğu bacak test edilebilir. İster standart bir döngü ile isterse kesme kullanılarak yapılabilir. Yapmak istediğiniz sadece hangi sistemin işini daha önce tamamladığını mı bulmak? A veya B sisteminin işini önce bitirmesi sonrasında bir şey farkettiriyor mu?
  • Cevaplar için çok sağolun dostlar. A nın önce veya B nin önce bitirmesi önemli değil. Önemli olan şu , Bu mekanizmalardan biri önce bitiriyor ve bizim hangisinin önce bitirdiğini görmemiz bilmemiz gerek ! Mekanizmalar arasındaki zaman farkı çok küçük olduğundan ( 3 mikro saniye ) anlayamıyoruz , göremiyoruz. İşlemler bittiğinde mekanizmaların kafasındaki ledler sanki aynı anda yanıyor gibi oluyor. İkili sistem piklerini yazabilmemiz için ( A= 1 , B=0 ) önce biten sistemin ledini görmemiz yada sinyalini almamız gerek. Arduino ile nasıl yapabiliriz acaba lütfen biraz daha açabilirmisiniz. Tekrar teşekkür ederiz.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Unutmadan tekrar edeyim. Bazen A önce bitiyor bazende B önce bitiyor. Ve biz buna göre 1. İşlem sonu örneğin önce A bitti yani 1 . Sonraki işlemde örneğin önce B bitti yani 0. Sonraki işlem yine önce B bitti 0 . Sonraki işlem A önce bitti 1 . Sonraki işlem B önce bitti 0 .... bu şekilde devam eder ve bu örneğe göre 10010 ortaya çıkıyor ve devam ediyor tabi. Lütfen yardımlarınızı esirgemeyin. Şimdiden çok teşekkür ederiz.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Bu sorun yeni değil yarışmalarda eskiden beri kullanılıyor, ilk tuşa basanın ışığı yanar diğerleri yanamaz, 4 çıkışı kullanmak zorunda değilsiniz, kolay gelsin.
    https://www.homemade-circuits.com/make-this-fastest-finger-first/
  • quote:

    Orijinalden alıntı: mavi-kaplan

    Bu mesaj silindi.
    Çok sağol kardeşim. Sanırım bu işimizi görecek gibi. Ama yinede sorayım. İşlemler arasındaki fark 3 mikrosaniye. Yani senin önerdiğin bu devrede Örneğin önce A kapısının ledi yandı , aradaki fark 3 mikro saniyede olsa kesinlikle B ledi diskalifiye olur yanmaz yanamaz ve biz ilk yananın A olduğunu açıkca görürürüz değilmi ? Tekrar tekrar sağol dostum. İnan bizi büyük bir sıkıntıdan kurtardın. Sana minnettarız.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: mavi-kaplan

    Bu mesaj silindi.
    Bide son olarak. Bu sistem ile ne olursa olsun yanlız birtanesi yanar dimi ? Yani ikisinin birden yanması imkansız değilmi? Çünkü dediğim gibi aradaki zaman farkı çok çok küçük. İnşallah işe yarar. Teşekkürler tekrar ve tekrar.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • C493 C kullanıcısına yanıt
    Diyelim ki A sisteminden gelen bilgi arduino nun 2. pinine bağlı olsun. B sisteminden gelen bilgi 3. pine bağlı olsun.

    #define sistemA 2;
    #define sistemB 3;

    int Adurum = 0, Bdurum=0;

    void setup(){
    pinMode(sistemA,INPUT);
    pinMode(sistemB,INPUT);
    Serial.begin(9600);
    }

    void loop(){
    Adurum = digitalRead(sistemA);
    Bdurum = digitalRead(sistemB);

    if(Adurum == 1 && Bdurum == 0) Serial.println("A sistemi daha önce tamamlandı.");
    if(Adurum == 0 && Bdurum == 1) Serial.println("B sistemi daha önce tamamlandı.");
    if(Adurum == 1 && Bdurum == 1) Serial.println("İki sistemde aynı anda tamamlandı.");
    }

    Bu şekilde sistemlerden gelen bilgilere göre sonuç elde edilebilir.
  • quote:

    Orijinalden alıntı: osmanertomac

    Diyelim ki A sisteminden gelen bilgi arduino nun 2. pinine bağlı olsun. B sisteminden gelen bilgi 3. pine bağlı olsun.

    #define sistemA 2;
    #define sistemB 3;

    int Adurum = 0, Bdurum=0;

    void setup(){
    pinMode(sistemA,INPUT);
    pinMode(sistemB,INPUT);
    Serial.begin(9600);
    }

    void loop(){
    Adurum = digitalRead(sistemA);
    Bdurum = digitalRead(sistemB);

    if(Adurum == 1 && Bdurum == 0) Serial.println("A sistemi daha önce tamamlandı.");
    if(Adurum == 0 && Bdurum == 1) Serial.println("B sistemi daha önce tamamlandı.");
    if(Adurum == 1 && Bdurum == 1) Serial.println("İki sistemde aynı anda tamamlandı.");
    }

    Bu şekilde sistemlerden gelen bilgilere göre sonuç elde edilebilir.
    Allah sizden razı olsun ya. Bu işte evet. Tam bu. Yanlız üçüncüsü yok yani ikiside aynı anda işlemi bitirdi yada aynı anda A ve B kapısının ledi yandı yok. İlk ikisi tamamdır. Çok sağolun. Bi deniyelim. Umarım ikisinide aynı anda almaz. Çünkü yarışan ikili (A sistemi ve B sistemi) arasında sabit 3 mikro saniye fark var ve finişe ulaşanın ilk hangisi olduğunu bilmek önemli olan tek şey. Tekrar teşekkürler.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Bir kez daha söylemekte fayda var. Şimdi mesela işleme başladık. Birinci işlem örneğin önce A bitirdi ( A=1 ) , ikinci işlem B önce bitirdi ( B=0 ) , üçüncü işlem mesela yine B bitirdi 0. Dördüncü yine önce B bitirdi 0. Beşinci bu kez A yani 1 . Altıncı yine A yani 1. Yedinci B önce yani 0. Bu örneğe göre yazılan 1000110 .... Ve böyle 6 septrilyon hane devam edecek. A ve B kapıları arasındaki zaman farkı çok ama çok küçük olduğundan biz hangisinin "önce yandığını" yani 1 mi 0 mı olduğunu göremiyoruz. Ledler aynı anda yanıyor gibi oluyor. Ama osmanertomac arkadaşın önerisi işe yarayacak gibi. Arduino nun işlem hızı 1 mhz e ulaşır umarım. Mikro saniyeler mertebesi megahertz e tekabül ediyor.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yukarıda yazılan arduino kodu asla 3 us hassaslığına ulaşamaz. Hiç deneme bile.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: EmuDev

    Yukarıda yazılan arduino kodu asla 3 us hassaslığına ulaşamaz. Hiç deneme bile.
    Arduino 16mhz hızda çalışır. Loop fonksiyonu içerisinde sürekli olarak pin durumları denetleniyor. İki sistemden biri işlemini bitirdiğinde gelen sinyali yakalıyor. Diğer işlemler sistemlerden biri islemini bitirdikten sonra gerçekleşiyor. Yani pinleri denetim çok hızlı şekilde gerçekleşiyor. Sistemler kendi işlemlerini 3us de bitirmiyor sadece aradaki fark 3us. Ayrıca Arduino bu kodda pinleri denetlerken yaklaşık 62 nano saniye hassasiyetle çalışıyor.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Eksik bilgi verilmiş zaten. Sinyaller ne kadar süreyle 1 konumunda kalacak? Nasıl tekrar 0'a dönecek? Ne zaman dönecek? Yani periyot süresi/frekans nedir?

    Bunları bilmeden verilen bütün yanıtlar anlamsız.
  • quote:

    Orijinalden alıntı: EmuDev

    Eksik bilgi verilmiş zaten. Sinyaller ne kadar süreyle 1 konumunda kalacak? Nasıl tekrar 0'a dönecek? Ne zaman dönecek? Yani periyot süresi/frekans nedir?

    Bunları bilmeden verilen bütün yanıtlar anlamsız.
    İşte bu yüzden sürekli tekrarlamakta fayda var diyorum. Şimdi işleme başladık. Birinci işlem ; A mekanizması işini tamamlar ve kafasındaki led yanar ve onunla yarışan B mekanizması 3 mikro saniye sonra işini bitirir ve oda kafasındaki led i yakar ( ama yarşı kaybetmiştir yani 0 değil kazan A nın değeri olan "1" kayıt alınacak). Bu ikili arasındaki zaman farkı ' sabit ' 3 mikro saniye. Bazende B önce bitirir ve A 3 Mikro saniye sonra bitirir ve ledi yanar. Ledler 0.5 saniye yandıktan sonra söner ve 2.5 saniye sonra yeni kuantum bilgi gelir yani ikinci sonraki işlem başlar. Yani işlem periyodu 3 saniye , herbir kuantum bilgi 3 saniyede bir geliyor. 3 saniyede bir yeni bir bilgi geliyor bazen A önce yanıyor biz 1 olduğunu anlayıp deftere 1 yazıyoruz , sonraki başka bir işlemdede mesela B geliyor B nin ledi önce yanıyor ve biz deftere 0 yazıyoruz. Bu yarışan ikili ( A=1 , B=0 ) arasındaki sabit zaman farkı 3 mikro saniye. Bazen A kazanır sabit 3 mikro saniye sonra B finişe ulaşır ve B nin değeri değil A = 1 alınır o işlemde A nın yarışı kazandığı işlemde. Böylece örneğin 100100001101110........böylece uzayıp gider. Tam olarak 6 septrilyon hane. Mikro saniyeler ölçeği olduğu için sayısal im işleme frekansı 2 Mhz kafi gelir. Ardiuno nun sinyal processor u 16 mhz ise olur bence. Umarım açıklayıcı olmuştur. Herkese tekrar teşekkür ederiz. Şimdi ardiunoyu bi deneyelim...

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: EmuDev

    Yukarıda yazılan arduino kodu asla 3 us hassaslığına ulaşamaz. Hiç deneme bile.
    Ve unutmadan buradaki tek sorun bize bilgi vermek için yarışan bu ikili arasındaki zaman farkı 3 mikro saniye olduğundan işlem bittiğinde ikiside sanki aynı anda bitirmiş gibi , kafalarındaki ledler sanki Aynı anda yanıyormuş gibi oluyor. Halbuki birinden biri önce bitiriyor ve bize Bu işlem sonucu 1 yada bu işlem sonucu 0 diyor. Ama biz çıplak gözle 1 i ve 0 ı aynı anda görüyoruz. Halbuki biri önce bitirdi ve ' sabit ' 3 mikro saniye sonra diğeri bitiriyor. İlk bitirenin değeri not alınır. A=1 , B=0 . Bize en yakın cevabı veren osmanertomac oldu . Sanırım bu kardeşimizin önerisi iş görecek. Deneyeceğiz. Herkese çok teşekkür ederiz.



    < Bu mesaj bu kişi tarafından değiştirildi C493 -- 19 Eylül 2019; 10:5:23 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: EmuDev

    Eksik bilgi verilmiş zaten. Sinyaller ne kadar süreyle 1 konumunda kalacak? Nasıl tekrar 0'a dönecek? Ne zaman dönecek? Yani periyot süresi/frekans nedir?

    Bunları bilmeden verilen bütün yanıtlar anlamsız.
    Arkadaş haklı son olarak tekrarlıyayım. A sabit "1" demek. B ise sabit "0" demek. Önce A mekanizmasının işi biter kafasındaki led yanarsa biz anlarızki bu işlem için değer 1. Deftere 1 yazılır. Ardındaki başka bir işlemde Yine A önce gelebilir yine 1 yazarız. Sonraki işlemde bu sefer önce B mekanizması işini tamamladı ve kafasındaki led yandı bu işlem için not alacağımız skaler değer 0. Ondan da sonraki işlemde mesela A geldi 1. Sonra yine A 1 . Sonra B. Sonra yine B ve sonra yine B...... Bu örneğe göre Kayıt alınan kod : 11011000......

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • digitalRead()'in ne kadar sürede okuyacağı belirsiz. Bu süre çok kritik olduğu için burada kullanılamaz. Onun yerine register seviyesine düşelim.

    14. pine A sinyalini, 15. pine B sinyalini bağlıyorsun. 9. pinin her yükselen kenarında 8. pinden durum bilgisi okuyorsun. 8. pin HIGH ise A=1 / B=0, LOW ise A=0 / B=1.

     
    void setup()
    {
    PORTB &= ~0x3;
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(14, INPUT);
    pinMode(15, INPUT);
    cli();

    uint8_t giris;
    while(1) {
    PORTB &= ~0x3;
    while((giris = PINC & 0x3) == 0);

    PORTB |= 0x2 | (giris & 0x1);
    while((PINC & 0x3) != 0);
    }
    }

    void loop() {}



    < Bu mesaj bu kişi tarafından değiştirildi EmuDev -- 21 Eylül 2019; 0:42:46 >
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.