Arduino'da Kullanılmayan Pinler

Katılım
14 Nis 2018
Mesajlar
2
Beğeniler
0
Puanları
1
Yaş
38
#1
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
 

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
583
Beğeniler
351
Puanları
58
#2
Genelde sıkıntı çıkmaz. Ama içiniz
rahat olması açısından giriş ve pull-up
yapabilirsiniz.
 
Katılım
14 Tem 2010
Mesajlar
308
Beğeniler
48
Puanları
3
Yaş
27
Konum
SARIYER
#3
Genelde sıkıntı çıkmaz. Ama içiniz
rahat olması açısından giriş ve pull-up
yapabilirsiniz.
Hocam giriş yapmak sıkıntı olmaz mı Bence çıkış yapmak daha mantıklı en azından devreyi etkilemez. Yada IDLE mode'a çekilebilir.
 

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
583
Beğeniler
351
Puanları
58
#4
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.
 
Katılım
14 Tem 2010
Mesajlar
308
Beğeniler
48
Puanları
3
Yaş
27
Konum
SARIYER
#5
Ö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.
 

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
583
Beğeniler
351
Puanları
58
#6
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.
 
Katılım
3 Ağu 2016
Mesajlar
33
Beğeniler
11
Puanları
3
#7
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.
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.
 
Moderatör tarafında düzenlendi:

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
583
Beğeniler
351
Puanları
58
#8
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ı.
 
Katılım
3 Ağu 2016
Mesajlar
33
Beğeniler
11
Puanları
3
#9
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ı.
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.
 

Ekli dosyalar

Moderatör tarafında düzenlendi:

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
583
Beğeniler
351
Puanları
58
#10
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:

Benzer konular

Sponsor Bağlantı

Forum istatistikleri

Konular
99,837
Mesajlar
702,329
Kullanıcılar
374,541
Son üye
Of6

Son mesajlar

Yeni Konular

Üst