Arduino'da Kullanılmayan Pinler

Konusu 'Arduino' forumundadır ve ekucuk ekucuk tarafından 15 Nisan 2018 başlatılmıştır.


  1. ekucuk ekucuk

    ekucuk ekucuk Üye

    Katılım:
    14 Nisan 2018
    Mesajlar:
    2
    Beğenilen Mesajları:
    0
    Ödül Puanları:
    1
    Cinsiyet:
    Bay
    Selamın Aleyküm

    Arduino'ya yeni başladım sayılır. Forumda ve internette aradım ama net bir bilgi bulamadım.

    Arduino projemizde değerlendirmek istemediğimiz pinleri nasıl kullanmak lazım? (Örneğin; yazılımda hepsini ile çıkış yapmak, direnç ile GND'ye bağlamak, vs...)

    Hazırladığımız projeyi devre halinde getirip, sahada kullanmak istediğimizde kararsızlıkları önlemek için neler yapmalıdır?

    Saygılar
     
  2. mehmet.bey

    mehmet.bey Katılımcı Üye

    Katılım:
    19 Aralık 2011
    Mesajlar:
    495
    Beğenilen Mesajları:
    293
    Ödül Puanları:
    58
    Genelde sıkıntı çıkmaz. Ama içiniz
    rahat olması açısından giriş ve pull-up
    yapabilirsiniz.
     
  3. firzen

    firzen Üye

    Katılım:
    14 Temmuz 2010
    Mesajlar:
    298
    Beğenilen Mesajları:
    43
    Ödül Puanları:
    3
    Cinsiyet:
    Bay
    Meslek:
    Mühendis
    Bulunduğu Yer:
    SARIYER
    Hocam giriş yapmak sıkıntı olmaz mı Bence çıkış yapmak daha mantıklı en azından devreyi etkilemez. Yada IDLE mode'a çekilebilir.
     
  4. mehmet.bey

    mehmet.bey Katılımcı Üye

    Katılım:
    19 Aralık 2011
    Mesajlar:
    495
    Beğenilen Mesajları:
    293
    Ödül Puanları:
    58
    Mesele ya Vcc ya da Gnd seviyesinde
    tutmak. Boş kalmaması gerekli. Bu durum
    mcu yapısına ve kullanım amacına göre
    yeniden değerlendirilir.
    Genelde giriş yapmak daha düşük güç
    harcaması yapmaz mı? Sen daha iyi bilirsin.
     
  5. firzen

    firzen Üye

    Katılım:
    14 Temmuz 2010
    Mesajlar:
    298
    Beğenilen Mesajları:
    43
    Ödül Puanları:
    3
    Cinsiyet:
    Bay
    Meslek:
    Mühendis
    Bulunduğu Yer:
    SARIYER
    Öyle hocam da benim korkum her zaman Input yapınca etraftan gelecek herhangi bir sinyal ve işaret girişi olacaktır. Bu da MCU yu bozabilir, O yüzden dedim.
     
    ekucuk ekucuk bunu beğendi.
  6. mehmet.bey

    mehmet.bey Katılımcı Üye

    Katılım:
    19 Aralık 2011
    Mesajlar:
    495
    Beğenilen Mesajları:
    293
    Ödül Puanları:
    58
    Vcc veya GND seviyesini bastırarak gelen
    sinyal zaten herkesi korkutur. Öncelikle
    donanımsal önlemler almak gerekli.
    Pini giriş yapıp Z seviyesinde bırakınca;
    iç yapıyı bozacak gerilim epey ciddi büyüklükte
    demek. Pinlerin giriş/çıkış olmasından bunun
    koruma altına alınması gerekli.

    Konuyu açan arkadaşın kafası karışmasın:
    *Şimdilik kafana göre takıl. Geliştirdiğin projelere
    göre zaten gerekli önlemleri alman hususu
    kendini belli eder.
     
    erdoğan67, firzen ve ekucuk ekucuk bunu beğendi.
  7. erdoğan67

    erdoğan67 Üye

    Katılım:
    3 Ağustos 2016
    Mesajlar:
    11
    Beğenilen Mesajları:
    0
    Ödül Puanları:
    1
    Cinsiyet:
    Bay
    Arduino ve 2'li röle modülü kullanarak bir silecek motorunu ileri geri yönde hareket ettiriyorum.

    Start tuşuyla motor ileri hareket ediyor,
    İlk siviçe bastığında motor geri yöne dönmeye başlıyor,
    diğer siviçe geldiğinde stop ederek, tekrar start tuşuna basılmasını bekliyor.

    Ama her ne oluyorsa
    (temassızlık olamaz çünkü devreyi jumper kabloları birbirine geçirerek değil, lehimleyerek yaptım)
    bazen ben start tuşuna 1 kez basmış olmama rağmen, devre bu ileri geri gidip geldikten sonra stop etme olayını iki kez tekrarlıyor.

    Yani ben start tuşuna 1 kez basıyorum ama, start tuşuyla harekete geçip ilk siviçle yön değiştirerek geri gelen motor, son sivice bastığında STOP etmesi gerekirken, sanki ben tekrar start tuşuna basmışım gibi çalışmaya devam edip yine ileri gidiyor, ilk sivice basıyor, ters yönde dönüp gelip son sivice basınca duruyor. Hızını alamıyor olmalı :))

    Ve yine bazen start tuşuna basıyorum, motor ileri yönde harekete başlıyor ama henüz siviç anahtarına ulaşmadan, röle kendi kendine tetikliyor ve motor öylece kala kalıyor.

    Yada start tuşu ile motor harekete geçiyor, gidip ilk siviçe basıyor, ters yönde harekete geçiyor ama son siviçe ulaşmadan yine yolun yarısında röle tetikleme yapıyor ve motor yarı yolda kalıyor.

    İşin en kötüsü de, böyle durumlarda START tuşu çalışmaz oluyor. Her böyle bir an yaşadığımda arduinoyu resetlemek zorunda kalıyorum.

    Bunun sebebi nedir? "Firzen" arkadaşımızın bahsettiği konu ile alakalı olabilir mi hocam benim yaşadığım durum ? Yani birşeylerden mi etkileniyor arduino?

    Gerçi denemedim ama, boşta kalan pinler giriş olarak atansa ve 10 K lık dirençler ile pull-down yapıp (-) ye bağlansa dış etkenlerden etkilenmesinin önüne geçilebilir mi?

    Yada tam tersi boşta kalan pinlerin tamamı OUT olarak atansa daha iyi olmaz mı?
    Çünkü mantıken düşününce, boştaki pinlerin hepsi out olarak atandı ama hiçbirinden akım çekilmediği ve arduinoya yük binmediği için devreye sıkıntı yaratmayacağını düşünüyorum.

    Boştakilerin hepsinin çıkış pini olarak atandığı için de, dışarıdan herhangi bir şekilde etkilenmeyeceğini düşünüyorum.
     
    Yönetici tarafından son düzenleme: 18 Mayıs 2018
  8. mehmet.bey

    mehmet.bey Katılımcı Üye

    Katılım:
    19 Aralık 2011
    Mesajlar:
    495
    Beğenilen Mesajları:
    293
    Ödül Puanları:
    58
    Burada bana göre iki olay
    var:
    Biri debounce gecikmesi ilave
    edildi mi? Biri de rölede
    ters diyot var mı?
    Hatta motor uçlarında da
    diyot olmalı.
     
    erdoğan67 bunu beğendi.
  9. erdoğan67

    erdoğan67 Üye

    Katılım:
    3 Ağustos 2016
    Mesajlar:
    11
    Beğenilen Mesajları:
    0
    Ödül Puanları:
    1
    Cinsiyet:
    Bay
    20180517_104142 copy.jpg

    Hocam öncelikle ilginiz için çok teşekkür ederim. Ben orduino yu öğrenmeye yeni başladım. Daha doğrusu bu 12 voltluk dc motoru 2 siviç ve start butonu yardımıyla ileri-geri yaptırıp stop ettirebilmek için, arduino ya başlamak zorunda kaldım da diyebilirim.

    Elektroniğe oldum olası meraklıyım. Hatta dirençlerin diyotların içinde yatıp uyuyabilirim de diyebilirim :))

    Ama gel gör ki pek fazla bilgi sahibi değilim.
    Debounce gecikmesi ilave edildi mi diye sormuşsunuz. Bu terimi ilk kez duyduğum için google amca dan araştırdım.

    Yazılım ile bu sorunun çözülebildiği hakkında yazılar okudum ancak bu gecikmeyi hangi satıra koyacağımı bilemedim.

    RÖLE DE TERS DİYOT VARMI demişsiniz. Resimde gördüğünüz gibi, röle modülü kullanıyorum. Modül üreticisinin bunu düşünmüş olmasını ümit ediyorum ve vardır diye düşünüyorum.

    MOTOR UÇLARINDA DA DİYOT OLMALI demişsiniz.
    Röle çıkışına koyamayacağımızı düşünüyorum çünkü rölelerin tetiklemesiyle (+) (-) kutuplar yön değiştiriyor. Bu durumda Röleye motor beslemesi için gönderdiğim voltaja bağlamak bana daha mantıklı geliyor. Diyotu nereye koymalıyım?

    Arduino kodu:
    Kod:
      int buton=2;
      int s1=3;
      int s2=4;
      int motorileri=5; // birinci röleyi açıp kapatıyor
      int motorgeri=6;  // ikinci röleyi açıp kapatıyor
      int butondurumu;
      int s1durumu;
      int s2durumu;
    
    
      void setup()
      {
      pinMode(buton,INPUT);
      pinMode(s1,INPUT);
      pinMode(s2,INPUT);
      pinMode(motorileri,OUTPUT);
      pinMode(motorgeri,OUTPUT);
    
      digitalWrite(motorileri,HIGH); // RÖLELER SÜREKLİ ÇEKİLİ OLMAMASI İÇİN
      digitalWrite(motorgeri,HIGH);  // RÖLELER SÜREKLİ ÇEKİLİ OLMAMASI İÇİN
     
      digitalWrite(motorgeri,LOW); // RESETLEYİNCE MOTORU BAŞLANGIÇ KONUMUNA GETİRMEK İÇİN
      }
     
    
    void loop()
    {
      s1durumu=digitalRead(s1);   // ilk siviç durumunu oku
      s2durumu=digitalRead(s2);   // son siviç durumunu oku
      butondurumu=digitalRead(buton); // buton durumunu oku
     
     
      if(butondurumu == HIGH)        // eğer start butonuna basıldı ise
      digitalWrite(motorileri,LOW); // Birinci röleye güç vererek motor ileri yi çalıştır
    
     
    
      if(s1durumu==HIGH)                // eğer ilk sivice basıldı ise
      {
      digitalWrite(motorileri,HIGH); // ileri gitmekte olan motoru durdur
      delay(150); // BEKLE
      }
     
      if (s1durumu==HIGH)   // eğer ilk siviç basılı ise (ki şu anda basılı bekliyor)
      {
      digitalWrite(motorgeri,LOW);  // motoru geri çevir
      }
    
      if(s2durumu==HIGH)          // son sivice basıldı ise
      {
      digitalWrite(motorgeri,HIGH); // geriye dönen motoru durdur ve tekrar START butonuna basılana dek bekle
      }
     
      }
    Yardımlarınız için şimdiden teşekkür ederim hocam.
     
    Yönetici tarafından son düzenleme: 18 Mayıs 2018
  10. mehmet.bey

    mehmet.bey Katılımcı Üye

    Katılım:
    19 Aralık 2011
    Mesajlar:
    495
    Beğenilen Mesajları:
    293
    Ödül Puanları:
    58
    Kod:
      int buton=2;
      int s1=3;
      int s2=4;
      int motorileri=5; // birinci röleyi açıp kapatıyor
      int motorgeri=6;  // ikinci röleyi açıp kapatıyor
      int butondurumu;
      int s1durumu;
      int s2durumu;
    
    
      void setup()
      {
        pinMode(buton,INPUT);
        pinMode(s1,INPUT);
        pinMode(s2,INPUT);
        pinMode(motorileri,OUTPUT);
        pinMode(motorgeri,OUTPUT);
    
        digitalWrite(motorileri,HIGH); // RÖLELER SÜREKLİ ÇEKİLİ OLMAMASI İÇİN
        digitalWrite(motorgeri,HIGH);  // RÖLELER SÜREKLİ ÇEKİLİ OLMAMASI İÇİN
    
        digitalWrite(motorgeri,LOW); // RESETLEYİNCE MOTORU BAŞLANGIÇ KONUMUNA GETİRMEK İÇİN
      }
    
    void loop()
    {
      //s1durumu=digitalRead(s1);   // ilk siviç durumunu oku
      //s2durumu=digitalRead(s2);   // son siviç durumunu oku
      //butondurumu=digitalRead(buton); // buton durumunu oku
     /******************************************************************************
      * Buradaki düzeltme gibi diğerlerini de siz yaparsınız. */
     
      //if(butondurumu == HIGH)        // eğer start butonuna basıldı ise
      if(digitalRead(buton) == HIGH)
      {
          delay(20);//Debounce gecikmesi
          //if(butondurumu == HIGH)
          if(digitalRead(buton) == HIGH)// Gecikmeden sonra hala buton basılı mı?
          {
              digitalWrite(motorileri,LOW); // Birinci röleye güç vererek motor ileri yi çalıştır
          }
      }
      /********************************************************************************/
    
      //if(s1durumu==HIGH)                // eğer ilk sivice basıldı ise
      if(digitalRead(s1) == HIGH)
      {
          delay(20);
          if(digitalRead(s1) == HIGH)
          {
            digitalWrite(motorileri,HIGH); // ileri gitmekte olan motoru durdur
            delay(150); // BEKLE
          }
      }
     //----Burayı anlamadım----
      if (s1durumu==HIGH)   // eğer ilk siviç basılı ise (ki şu anda basılı bekliyor)
      {
      digitalWrite(motorgeri,LOW);  // motoru geri çevir
      }
    
      //if(s2durumu==HIGH)          // son sivice basıldı ise
      if(digitalRead(s2) == HIGH)
      {
          delay(20);
          if(digitalRead(s2) == HIGH)
          {
              digitalWrite(motorgeri,HIGH); // geriye dönen motoru durdur ve tekrar START butonuna basılana dek bekle
          }
      }
    }
    
     
    Son düzenleme: 18 Mayıs 2018
    erdoğan67 bunu beğendi.
Yüklüyor...

Sayfayı Paylaş