Arduino_PIC_vs_3 kablo ile yüzlerce anahtar veya röle kontrol

Arduino, PIC, Stm, Raspberry pi gibi kontrolcü entegreler veya kontrol kartlarında pim sayısı zaten kısıtlı olduğundan, giriş çıkış işlemlerinde tasarruflu davranmamız gerekiyor. Mesela display sürücü olarak ya da led sürmek için 74hc595 kullanılabiliyor. 3 kablo ile çalışan bu entegre, kullandığı  haberleşmeyle kontrol sistemlerinizde port çoklayıcı olarak çalışırlar.
Ayrıca benim yazılarım arasında I2C kullanarak I2C lcd modül ile port çoklayıcı yazım vardır okuyabilirsiniz.
I2C LCD modül ile port çoklayıcı yazısı. Bu I2C modül ile yapılan, çıkış ve giriş olarak port çoklayıcı işlemidir.

Bir de çoklu buton kontrolü vardır.
Burada ANALOG ve DİJİTAL olarak kontrol mantığı ayrılır.
Mesela Arduino LCD shield kullanılan projelerde, butonlar analog olarak kullanılır. Yani butonların basma durumuna göre analog girişte bir değer oluşur ve bu değere göre hangi butona basıldığı belli olur. ANALOG sistemlerde buton sayısı fazla arttırılamaz çünkü belli bir gerilim farkı olmalı. Ya da hassas değişim algılanabilmeli. Yine de bunun bir sınırı var ve kontrol için satırlar uzayıp gider. Değer buysa bu butondur gibi bir karşılaştırma yapılmaktadır.
Dijitalde biraz daha özgürce seçim yapabiliriz çünkü burada değer değil açık kapalı ayrımı vardır. Fakat dijital sistemlerde de her pime 1 buton bağlamak verimsiz olacaktır. Bundan dolayı tarama sistemi kullanılmaktadır. Bu tip çalışma, yukarıda linkini verdiğim yazıda anlatılmaktadır. Bu yazıda I2C lcd ekran modülü ya da aynı entegrenin kullanıldığı IO genişletme modülleri var.
Bu modüller 16 IO pimine sahiptir ve bu modüller uç uca eklenerek 16 nın katları şeklinde çalışabilecektir.

Ben bu projede 3 kablo kullanarak ister 10 buton ister 100 buton isterseniz yüzlerce buton bağlayabileceğiniz bir seçenek sunmak istedim. Tabii ki bu devrenin amacı sadece 1 buton hissetmek değil. birden fazla butonu aynı tarama içerisinde hissetmektir. Çoklu buton kullanma desteği sağlıyor. Bunu yaparken satır ve sütun tarama sistemini kullanıyor.

4017 entegresiyle hem satır hem de sütun taraması kullanılıyor. INPUT ise 16 kanallı bir analog multiplexer( analog çoklayıcı) entegre kullanılarak sağlanıyor.  2 devre mevcut. Bu devrelerden biri 100 butonluk kontrol. Diğeri ise 180++ butonu kontrol edebilmektedir.
Multiplexer (analog çoklayıcı) devresini anlattığım bu yazıya da göz atabilirsiniz. 

Devre mantığı şu şekildedir.

Öncelikle arduino tüm sistemi RESET liyor. Daha sonrasında CLK palsını gönderiyor. Bu CLK palsı satır 4017 entegresine satır tarama yaptırıyor. Satır tarama bitince bu entegrenin CO çıkışı sütun entegresine CLK palsı veriyor ve sütun entegresi 1 kademe sayıyor. Her kademede 10 buton bağlı olduğu için 1 kademe ilerlediğinde diğer 10 butonlu kontrolü hazırlıyor. Bunu yaparken butonları GND ye bağlıyor. Bu şekilde işlem sürüyor.
Tarama sistemi olduğundan birden fazla butona bastığınızda bunu algılayabiliyor ve programınız buna göre yönlenebiliyor.
Mesela bir klavye yapmak istediniz. Bu klavyede CTRL+SHIFT+C gibi bir buton basışını algılayabilirsiniz.
CLK sinyali arduinodan çıkınca, hem satır taramaya gidiyor hem de analog multiplexer seçici binary (ikili) sayaca gidiyor. Bir yandan buton kontrol edilirken bir yandan da hangi buton olduğunu multiplekser entegresine belirtmiş oluyoruz. Bu şekilde multiplexer ile okuduğumuz değer arduino INPUT girişine gider. Arduino, butonun basılı olup olmadığını görür.

Program, 100 tuş ve 180 tuş için birbirinin aynıdır. Sadece hangi butondan sonra geri dönülecek diye sayı ayarlanır. 100 butonluda 10 sütun sayılacağı için 10 dan sonra başa dön diyebileceğimiz sayı 10 olacaktır. 180 tuşlu devrede ise 2.  4017 entegresi olduğundan, 19 yapılmıştır. Her sütun 4017 entegresi 9 sütunu kontrol eder. Bunun sebebi ise 4017 entegrelerinin resetlendiğinde Q0 çıkışları HIGH seviyesinde olmasıdır. Bu da tarama sistemini karıştıracaktır. Bundan dolayı Q1-Q9 arası aktif olarak kullanılır. Bu sistemle bakarsak, sütün sayısını arttırmak için bir adet 4017 koyarsak bu devremize 90 buton ekleme yapacağımızı gösterir.

Devrenin çalışmasını videoda ayrıntılı anlattım. Fakat INPUT kısmında seri bağlanmış 3 diyot vardı bunu anlatmamıştım. Bunun sebebi ise dijital sistemlerde LOW seviyesi sıfıra yakın olsa da 1 seviyesinin hissedilme geriliminin düşük olmasıdır. Bundan dolayı HIGH sinyalinde belli bir değer varsa HIGH olarak değerlendirilsin dediğimizde parazitik etkileri ortadan kaldırmış, ayrıca besleme düşüklüğünden dolayı düşen gerilimin yanlış algılanmasını önlemiş olacağız. Ben videoda göreceğiniz gibi bunları bir anahtarla bypass ettim. Fakat gerçek devrede sorun yaratırsa bu diyotları kullanabilirsiniz. Kullanırsanız 3 diyotun üzerinde kalan gerilim 1,8V olacağı için bu değerden büyük gerilim olduğunda bunu HIGH olarak kabul et demiş oluyoruz. Aşağıdaki resim bunu gösteriyor.

Devrede 1. Sütun 4017 entegresinin solunda tek transistörlü devre göreceksiniz. Bu devre aslında kullanılan 7404 entegresinin 1 kapısına karşılık gelen inverter (çevirici) devresidir. 100 tuşlu devrede kullanılıyor 180 tuşlu devrede var ama kullanılmıyor. Aşağıdaki resimde görülmektedir. NPN Transistör kollektör çıkışlı olduğunda faz tersleyici olarak kullanılmış olur. Bu şekilde baktığımızda beyz ucuna HIGH sinyali gelirse transistor iletime geçer ve kollektör LOW durumuna düşer. Beyz ucu LOW olursa Kollektör çıkışı HIGH seviyesinde olur. Aynı inverter kapı devreleri gibi.


100 ve 180 tuşlu devrede, satır 4017 devresinin çıkışı kolaylık olsun diye resistor network (direnç grubu ) ile bağlanmıştır sizler ayrı direnç kullanabilirsiniz. Normalde 10K butonlarda pull up direnci olarak yetmesine rağmen ben proteusta karışıklık oldu diye 22K kullandım. Gerçek devrede 10K kullanabilirsiniz.

Buton olarak denemelerde kolaylık olsun, çizim sadeleşsin diye, dip switch denilen sıra anahtarlarını kullandım. Sizler anahtarları değişik tipte kullanabilirsiniz.
Tarama sistemi olduğundan çoklu anahtar girişi algılanabildiğinden, bazı anahtarlar bas bırak bazıları ise bas çek tipi kalıcı durum anahtarlarını kullanabilirsiniz. (buton,micro switch, slide switch,pushbuton,dip switch gibi)

Hatta bu anahtarlar yerine röle kontaklarını da kullanabilirsiniz. Düşünün yüzlerce röle var ve siz hangisinin basılı olduğunu bulmak istiyorsunuz bu devreyle tek bir girişten hareket eden röleyi ya da röleleri tespit edebilirsiniz. Ayrıca şaseye bağlı çalışan sensörleri de kontrol edebilirsiniz.

40160 entegresi ise binary counter (ikili sayıcıdır). Bunun çalışması ise şu şekildedir.
Aşağıdaki gerçekleme tablosundaki gibi bir çalışması vardır. Her CLK palsi durum değiştirdiğinde 1 artarak devam eder. Önce reset durumu QaQbQcQd=0000 dır.
Sonrasında tabloya göre sayım başlar.
Bu sayma işlemi 0-15 arasıdır. Analog multiplexer entegresinin hangi girişini bağlayacaksanız onu seçmek için bir sayaçtır.
Analog multiplexer 16 kanallıdır. Yani 16 girişi tek çıkışa sırayla bağlar. Biz bunun 10 kanalını kullanıyoruz her satır için 1 adet. İsterseniz ve bulabilirseniz 10 kanallı analog çoklayıcı da kullanabilirsiniz. Fakat bazı analog çoklayıcılar girişleri tek çıkışa bağlar. Bazıları ise çıkışları çift olur ve girişlerin yarısını birine diğer yarısını diğer çıkışa bağlar. Bundan dolayı multiplexer seçerken dikkatli olmalısınız datasheet lerine mutlaka bakmalısınız. Yanlış sipariş edebilirsiniz.

180 tuşlu devrede U2 entegresinin CO çıkışı başka bir 4017 nin CLK girişine gelmiştir. Bunun sebebi, 1. Sütun entegresinin işi bitince ENABLE girişini HIGH seviyesine çıkarmak ve 2. Sütun entegresinin ENABLE girişini LOW durumuna çekerek gelecek olan CLK sinyallerinin 1. Entegre tarafından alınmamasını sadece 2. Entegre tarafından alınmasını sağlar. 3. 4017 entegresi koyarak, devreyi devam ettirmek istediğinizde 1. Entegredeki gibi CO çıkışını ENABLE için kullanılan 4017 entegresinin CLK girişine bağlayabilirsiniz. Fakat şunu da unutmayalım.
2 entegrenin çıkışları aynı CLK ayağına bağlanacağı için birer diyot ile bağlamanız yerinde olur ya da birer invertör duruma göre bağlanabilir. 2 çıkışı birden tek bir CLK pimine, korumadan verirseniz entegre çıkışı diğer entegreye direkt uygulanır ve çalışamaz duruma gelir. Ya da entegreler zarar görebilir. ( 3. Entegreye ihtiyaç olacağını sanmıyorum ama kullanmak isterseniz bu tip koruma yöntemlerini deneyin. )

Birçok yerde giriş kontrol olarak kullanabilirsiniz. Rölelerde de kullanılır dedik. Bu devre Çıkış devresi değildir. Rölelere kumanda etmez. Röle kontaklarından birini anahtar gibi kullandığınızda komut verilip kontakları çektirilen rölenin çekip çekmediğini anlamanız için kullanabilirsiniz. Yani geri bildirim olarak kullanabilirsiniz. Mesela Telekom sistemleri röleler kullanır. Hangi röleler çekmiş hangileri bırakmış ya da enerji kesilse bile hangi röle kontağı yapışık kalmış bunları tespit edebilirsiniz. Daha bir çok projede kullanabilirsiniz. Mesela uzaktan kumanda devresi ve bir adet attiny kullandınız. 3 kablo ile 100 tuşlu bir kumanda vericisi gerçekleştirebilirsiniz. Attiny 8 bacaklı olduğu için pim sorunu daha fazladır ve verimli kullanılması gerekir.

Bu tip devrelerde tarama işlevi programınızı yavaşlatıyorsa, attiny ya da daha ucuz küçük bir entegreyi tarama sistemi olarak kullanabilirsiniz. Burada toplanan tarama sonucu, değişiklik olmuşsa seri port üzerinden ana kontrol sistemimize aktarılabilir. Bu bilgi gelesiye kadar ana kontrol sisteminiz kendi işleriyle meşgul eder. RS232 den bilgi geldiğinde gerekli işlemleri yapar ve kaldığı yerden kendi işine devam eder.

Tüm programlar ve devre çizimleri ile proteus üzerinde çalışacak şekilde github sitemde mevcuttur.
Proteusun eski versiyonunu kullandığımdan sizler yeni versiyon kullansanız dahi proteus şemalarını görüp simülatör üzerinde çalıştırabilirsiniz.

Yukarıdaki resmin pdf dosyası bu linktedir. 


Yukarıdaki resmin pdf dosyası bu linktedir. 

Tüm programlar ve entegre datasheetlerine ait linkler bu adrestedir.

100 butonlu devre 1 adet pic12F1822 ile birlikte tarama sistemi fiyatı yaklaşık bu kadardır. 

12F1822     13TL
40160 binary sayıcı 3TL
4017 entegre  2 adet     4TL
4067 multiplexer           7TL
74LS04 inverter entegre  2,5TL
Dirençler   toplam            1,5TL
Toplam maliyet    = 31TL +arduino ( Burada tarama işlemini pic12F1822 yapacak arduinoya rs232 den bilgi verecek olarak düşünüldü. )
Şayet attiny ile tarama işlemini yapıp arduinoya RS232 ile bildirirsek 35TL civarında bir maliyet olacaktır. 
I2C 16 port IO genişletici modül ise ortalama 11TL dir. yukarıdaki maliyet 3 tane bu tip modülün fiyatına denk geliyor. Sebebi ise 4017, 40160,74ls04 gibi entegrelerin çok üretilmesi ve fiyatlarının düşük olması. maliyeti arttıran attiny veya pic12f1822 de çıkarırsanız ne kadar düşük maliyetle bu devreyi yapabileceğinizi görebilirsiniz.

 

Tüm sorularınızı ve deneyimlerinizi burada yorum kısmından paylaşırsanız yapacak olan kişiler deneyimlerinizden faydalanabilir. 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir