Garip garip devresel problemler

Başlatan clonex, 31 Ekim 2018, 11:23:32

clonex

Merhabalar,

Bir coin acceptor ile okuduğum bir arduino projesi vardı.Ben bu devreyi butonları vs. hepsini breadboard üzerinde konumlandırdım. Biliyorsunuz bu coin acceptorlar bir pulse counter mantığında çalışıyor. Ben o değerleri hiç olduğum gibi alamıyorum :( Bir tane paradan 5 diğer paradan 10 tane almam gerekiyor. Fakat arduino ve attachInterrupt fonksiyonu ile kontrol ediyorum direk bastırıyorum. Fakat bazen çıplak elimle adaptöre dokunduğum da pulse değeri kendi kendine çalıştırıyor. Bazı zaman sanki butona tıklamış gibi davranıyor. Ben artık işin içinden çıkamadım bu gibi durumlardan dolayı.

Yemin ediyorum sürekli böyle problemler yaşamaktan bunaldım. Kime sorduysam saçmala öyle şey olur mu senin yazılımda bir şey var diyip atıp durdular. 50 kere yazılımı tek tek adım adım gittim yine aynısı oluyor. Board' u değiştirdim yine aynı oldu.

Yardımcı olursanız çok sevinirim. Çok teşekkür ederim.

Andromeda

..yaptığın devrenin ne olduğunu bilmiyorum ama parazit sorunu gibi görünüyor..hem donanım hem de yazılım olarak düzenlemeler yapılmalı..forumda var bu konu..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

RaMu

Coin Acceptor tetik çıkışını Arduino giriş pinine nasıl bağlıyorsun şemasını paylaş.
Güç kaynağın smps anlaşılan, güç katın nasıl orasıda önemli.

Forumda parazit ile ilgili detaylı konular var
oralarda yazılan önlemleri almış olman, alman lazım.

Bence kimsenin attığı yok,
gerekli önlemleri almazsan şu anki sonuç gayet normal, sıradan,
her genç programcının, donanımcının başına gelen şeyler, sıkma canını.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

clonex

@RaMu @elek Hocam şema ekteki gibi. Bunların hepsini breadboard üzerinde yapıyorum.

Yaşadığım problemleri söylüyorum; Bazen buton kendi kendine tıklıyor.
Birde Coin Acceptor Signal çıkışını multimetre ile sayarken doğru değer alıyorum. Kaç almam gerekiyorsa o sinyali alıyorum. Sonra Devreyi o şekilde bağladığımda bazen çalışıyor. Bazen pulse counter kendi kendine hareket ediyor. Hatta ve hatta coin acceptor' un plastik kısmına dokununca bile aynı problem oluyor.

Birde diğer anormali söyliyim size; Bir tane röle bağlıyorum(Keyes SR1y). Onun bağlantısıda 8.pini kullanıyorum ve diğer iki kablosu(5V ve GND) ile bağladım. Röle açıp kapatınca pulse sayıyor.

Kodda burdaki gibi.

#include <Wire.h> 

//Buttons
byte button5L             = 6; //6. Pin
byte button05L            = 5; //5. Pin
int buttonState           = 0;

//Coin Acceptor
byte coinSensorPin        = 3;
byte coinSensorInterrupt  = digitalPinToInterrupt(coinSensorPin);
volatile boolean newCoin  = false; 
double coinQuantity       = 0; //Butona basıldığında aktarılacak Coin Miktarı için kullanılıyor.
volatile int coinPulseCount = 0;
volatile int coinTimeOut  = 0;

//Para Tanımlamaları
int coinValues[2] = {1, 2}; //1 => 50krş için, 2 => 100krş(1TL) için...
int unitCoinValue = 50; //50 Kuruş birim olarak hesaplama yapılacak.
double coinLiraLimit = 100.00; //Kuruşu Liraya çevirirken kullandığımız 100krş limiti.

double totalCoins = 0.00; //Toplam Coin
double totalgeneralCoins = 0.00; //Genel Toplam Coin

////////////////////////////////////////////////////////////////////////////////////////////////////

void setup(){
    
    Serial.begin(9600);
    
    // Buttons Pull-Up
    pinMode(button5L, INPUT);
    //digitalWrite(button5L, HIGH);
    pinMode(button05L, INPUT);
    //digitalWrite(button05L, HIGH);
    
    pinMode(coinSensorPin, INPUT);
  
    coinPulseCount    = 0;
    coinQuantity      = 0;     
}

void coinInserted(){

    newCoin = true; 
    coinPulseCount++;
    coinTimeOut = 0;
    Serial.print("Coin Pulse Count : ");
    Serial.println(coinPulseCount);
  
}

void loop(){
  
    if (buttonState == 0 && digitalRead(button05L) == HIGH) {
  
        buttonState = 1;
       
        coinQuantity = 50; //50kuruş = 0.5TL
  
        coinPulseCount = 0;
        newCoin = false;
 
      
    }

    // ---------------------------------------------------

    if (buttonState == 0 && digitalRead(button5L) == HIGH) {
   
        buttonState = 1;
    
        coinQuantity = 200; //200kuruş = 2TL
  
        coinPulseCount = 0;
        newCoin = false;
      
    }

    // Hiç Butona Basılmadıysa
    if ((coinQuantity == 0) && ((buttonState == 1 && digitalRead(button5L) == LOW) || (buttonState == 1 && digitalRead(button05L) == LOW))) {
      
        buttonState = 0;
 
    
        coinQuantity = 0;
  

        coinPulseCount = 0;
        newCoin = false;
      
    }

    if(buttonState == 1){

        //Birinci Adım

        //Para makinesini rölesini aç
        //digitalWrite(relayPin, HIGH); //TODO : Bu alan para makinesi için bir röleye bağlanılırsa kullanılacak.
        
        //Serial.println("[DEBUG] PARA MAKİNESİ RÖLESİ AÇILDI");
        
        if(digitalRead(coinSensorPin) == HIGH){

            attachInterrupt(coinSensorInterrupt, coinInserted, FALLING);
    
            if (newCoin == true){
    
                //Serial.println("[DEBUG] YENI PARA GİRİŞİ ALGILANDI");
          
                if((coinPulseCount == coinValues[1] || coinPulseCount == coinValues[0]) && coinTimeOut>25){
        
                    //totalCoins = ((coinPulseCount * unitCoinValue) / coinLiraLimit);
                    
                    totalCoins = (coinPulseCount * unitCoinValue); //Sadece Kuruş hesaplaması yapıyor
                    totalgeneralCoins += totalCoins;
    
                    Serial.print("Atılan Para : ");
                    Serial.print(totalCoins  / coinLiraLimit);
                    Serial.println(" TL");
    
                    //Serial.print("Para Durumu : ");
                    //Serial.print((totalgeneralCoins - coinQuantity) / coinLiraLimit);
                    //Serial.println(" TL Kaldı");
        
                    if(totalgeneralCoins >= coinQuantity){
    
                        //digitalWrite(relayPin, HIGH); //TODO : Para makinesinin rölesini kapat
    
                        Serial.print("Para Durumu : ");
                        Serial.println("Tamamlandı");
   
              
                    }
                  
                    coinPulseCount = 0;
                    newCoin = false;
                    
                }else if(coinTimeOut>25){
                  
                    coinPulseCount = 0;
                    newCoin = false;
                    
                }
                
                coinTimeOut++;
                delay(5);
                
            }  
          
        }

    }
 
}


clonex

@Elektroemre Hocam merhaba bu konuda sizde yardımcı olabilir misiniz?

Erol YILMAZ

Alıntı yapılan: clonex - 01 Kasım 2018, 15:32:36@Elektroemre Hocam merhaba bu konuda sizde yardımcı olabilir misiniz?

o şimdi asker...

clonex

Alıntı yapılan: Erol YILMAZ - 01 Kasım 2018, 16:01:47o şimdi asker...

Yok yok döndü o :d sitede aktif gördüm ondan yazdım.

ferit06

#7
Pull-down için kullandığın 2 tane 10 k lık direnci (R1 ve R2) Anahtar (RDT1034) açık iken giriş 0 olacak ise işlemci tarafına bağla, senin bağladığın şekilde anahtar açık iken işlemcin ( giriş boşta olduğu için) gürültü alır. Anahtar açık iken giriş 1 olacak ise bu dirençleri yine işlemci tarfında pull-up olarak bağla.

dumansiz

Alıntı yapılan: clonex - 31 Ekim 2018, 11:23:32Ben bu devreyi butonları vs. hepsini breadboard üzerinde konumlandırdım.
Garip hataların kaynağı, devreyi "breadboard" üzerine kurman olabilir. "Delikli pertinaks"a lehimlemeni öneririm.
Arduino, mikrodenetleyici ve hazır modüller için "dip soket" kullanabilirsin.

clonex

Alıntı yapılan: ferit06 - 01 Kasım 2018, 16:35:39Pull-down için kullandığın 2 tane 10 k lık direnci (R1 ve R2) Anahtar (RDT1034) açık iken giriş 0 olacak ise işlemci tarafına bağla, senin bağladığın şekilde anahtar açık iken işlemcin ( giriş boşta olduğu için) gürültü alır. Anahtar açık iken giriş 1 olacak ise bu dirençleri yine işlemci tarfında pull-up olarak bağla.

Hocam dediğin gibi yaptım ama olmadı. Acaba yanlış mı yaptım.


F.T

Alıntı yapılan: clonex - 01 Kasım 2018, 17:07:38Hocam dediğin gibi yaptım ama olmadı. Acaba yanlış mı yaptım.

(Resim gizlendi görmek için tıklayın.)


Direncin ucunu gnd ye buton ucunu vcc te bağla.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ilyas KAYA

Butona paralel birtane 47nf-100nf arasında bir kondansatör bağlayın hiçbirşeyi kalmaz :)

ferit06

Alıntı yapılan: clonex - 01 Kasım 2018, 17:07:38Hocam dediğin gibi yaptım ama olmadı. Acaba yanlış mı yaptım.

(Resim gizlendi görmek için tıklayın.)
Programını incelemedim, benim mesajımda belirttiğim şekilde girişin konumuna göre bağlantı şeklini belirlemen gerekirdi. Senin mevcut devren gözönüne alınısa; @F.T.'nin yazmış olduğu şekilde bağlaman, ilave olarak @cezeri'nin önerisini de dikkate alman iyi olur.

clonex

Alıntı yapılan: ferit06 - 02 Kasım 2018, 08:48:56Programını incelemedim, benim mesajımda belirttiğim şekilde girişin konumuna göre bağlantı şeklini belirlemen gerekirdi. Senin mevcut devren gözönüne alınısa; @F.T.'nin yazmış olduğu şekilde bağlaman, ilave olarak @cezeri'nin önerisini de dikkate alman iyi olur.

Hocam buton sadece bir örnekti farkettiyseniz röle çalışırken bile(çalışma anında bile) pulse üretiyor sistem. Röleyi devre şemasına eklemedim çıkarmıştım. Butonlarla ilgili sorun çözüldü fakat. Coin acceptor bağlantısındaki problem çözülmedi. Yani Coin acceptorun plastik kısmına dokunsam dahi bile pulse atıyor.

foseydon

sorunun elektro manyetik yayılım ile alakalı olduğu çok belli. sinyal taşıyan kablolarınızı blendajlı yapabiliyorsanız yapın. elinizin altında alümünyüm folyo varsa, kabloların dışına sarıp bir deneyin bakalım az bile olsa bir düzelme var mı.

bu arada son söylediğiniz çok mantıksız, yani plastik kısma dokunduğum halde bile pulse oluşuyor kısmı bana mantıksız geldi. Ya rastlantısal bir durum, ki bunu birkaç deneme yaparak bulabilirsiniz, veya plastik sandığınız kısım tamamen plastik değil veya dokunduğunuz yerin yakınında anten vazifesi gören bir eleman var.