Aynı pimde birden fazla düğme


12

Bazı proje yapıyorum ve prototip için Arduino kullanıyorum, 10 buton (daha fazla şeyle birlikte) kullanmam gerekiyor ve yeterli iğnem yok.

Düşünebileceğim bir çözüm, analog pinleri kullanmak ve her birini iki basma düğmesi için kullanmaktır, böyle bir şey:

şematik

bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik

Bu şekilde A0 pinini okuyabilir ve voltajın 5V veya yarısı olup olmadığına bakarak hangilerinin itildiğini öğrenebilirim.

Bu iyi bir fikir mi? Farklı basma düğmelerinin ASLA aynı anda basılması beklenmez, bu da düşünebileceğim tek sorundur.

Daha iyi yollar var mı?


Kaç tane iğne kullanmaya çalışıyorsunuz?
W5VO

@ W5VO Ben 10, 10 düğmeli, kart sadece 18 ... gerekir, bu yüzden her analog pim için iki düğme Sadece 5 analog pim ve kart 6 vardır.
MyUserIsThis

1
Sadece FYI, birçok otomobil üreticisi ses sistemi için direksiyona monte kontroller için aynı yaklaşımı kullanıyor. Her birinin kendi direnci olan 8 düğmesi vardır (al veya al). Bu, tekerlekten ses kafasına tek bir tel (veya temiz bir dönüşü garanti etmek için bir çift tel) çalıştırmalarını sağlar. Mükemmel bir yaklaşım.
DoxyLover

Aslında bazı kaydırma kayıtlarını kullanarak teorik olarak sonsuz sayıda anahtar girmek için üç pim kullanabileceğinize inanıyorum. Çoklayıcılar kullanarak 256 anahtar girmek için 8 pim kullanmak da mümkündür.
Alvin Wong

Yanıtlar:


22

Tek bir analog pim üzerinde istediğiniz sayıda düğme yapabildiğinizde, neden her biri iki anahtar için birden fazla analog pini harcayabilirsiniz?

Bunu yapmanın iki yolu. Biri seri, diğeri paralel.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Bazı araba direksiyon ses kontrolleri böyle. Ve bazı eski ipod inline denetleyicilerinin nasıl çalıştığı.

Kullandığınız dirençlere bağlı olarak, aynı anda birden fazla düğmeye basılmasına ve analog girişinizin ne kadar hassas olduğuna ihtiyacınız varsa, tek bir pim üzerinde 10 düğmenin hepsine sahip olabilirsiniz.


Teşekkür ederim, bunu da düşündüm, ama belki de voltaj okumalarının bu yönteme güvenebilmeleri için tam olarak ihtiyaç duyduğum kadar olmadığını düşündüm. Bunu da deneyeceğim ve nasıl çalıştığını göreceğim.
Kullanıcı

Direnç ağı analiz temellerim oldukça sağlam olmadığından, seri devreyi simüle etmek ve analog giriş pimindeki voltaj ölçümü için bir doğruluk tablosu çizmek için CircuitLab'ı kullanmayı denedim. B2 + B3 kombinasyonlarının 2.499V ve B1 + B4 kombinasyonlarının 2.498V ile sonuçlandığını buldum. Bu kadar yakın rakamlarla, tipik 10 bitlik ADC'nin çok girişli kombinasyonları doğru bir şekilde ayırt edemeyeceğini düşünüyorum. Ne dersin ? Tabii ki, her seferinde bir anahtar mükemmel çalışır - şüphesiz. Not B1 = Düğme1.
icarus74

Aslında B2 + B4 1.666V verirken B2 + B3 + B4 de 1.666V verir! Çözüm, R1, R2, R3, R4 için farklı direnç değerleri kullanıyor olabilir ve hepsini 1K'da tutmayabilir. Ne diyorsun?
icarus74

7
Eski bir 2R / R merdiveni, düğmeleri D / A'ya dönüştürür ve her düğmeye basma düğmesinin benzersiz bir değeri olur. N-3 düğmeleriyle çalıştığına güvenirim, burada N, ADC çözünürlüğüdür
Scott Seidman

1
@ icarus74 evet, 1k yerine farklı değerler kullanmak benzersiz kombinasyonlar verir. 1k, 2k, 4k, 8k, 16k vb. (Daha geniş bir aralık için 1k, 4k, 16k vb.)
Passerby

10

Bu işe yarardı, ancak daha iyi bir yol bir matris ile . Bu, matrisli, ancak anahtarlı çoklama LED'leriyle aynı kavramdır.

resim açıklamasını buraya girin

Bu 2x2'lik bir matristir. Yararlı bir matris daha büyüktür, çünkü bu boyutta, anahtarları ayrı ayrı bağlamak için herhangi bir pim kaydetmezsiniz.

3x3'lük bir matris ile 9 anahtar alabilirsiniz. 10'a ihtiyacınız var, böylece bir satır daha ya da bir sütun daha ekleyebilir ve 12 anahtarı destekleyebilir ya da sadece 10. anahtarı kendi pinine koyabilirsiniz.

Buradaki avantaj, analog IO'dan daha ucuz ve genellikle daha bol olan dijital IO'yu kullanabilmenizdir. Bir kaydırma yazmacı tükenirse, daha fazla dijital IO eklemek için ucuz bir yoldur.

Daha az iğne istiyorsanız, karmaşıklıkta bir miktar artış için charlieplexing kullanabilirsiniz . Anahtarlarınıza ek olarak diyot eklemeniz gerekecek ve bu diyotlar muhtemelen bir kaydırma yazmacı kadar pahalıya mal olacak. Ancak, maliyet ana endişeniz değilse, bazı avantajları olabilir. Bu yöntemle, tüm anahtarlarınızı (aslında 12'ye kadar) dört pimli okuyabilirsiniz.


Sadece bir soru. Daha fazla iğneye ihtiyacım olursa bu neden daha iyi? Bu şekilde 9x9 matris için 6 pime ve onuncu için bir pime daha ihtiyacım olacak, yaptığım şeyde sadece 5 pime ihtiyacım olacaktı.
Kullanıcı

Toplam anahtar sayısı arttıkça bu daha iyi ölçeklenir. ex 5x5 matris, 25 pimi 10 pime bağlamanızı sağlar. Daha genel bir yorum olarak, işleri geleneksel yolla yapmak, başkalarının ne yaptığınızı anlamasını kolaylaştırır; ve diğer halk devrelerinin ne yaptığını anlamanız için (çünkü kendinizi standart uygulama konusunda eğitmişsinizdir).
Dan Is Fiddling By Firelight

@MyUserIsBu düzenlemeleri gör. Passerby'nin de iyi bir cevabı var.
Phil Frost

2

Analog giriş geçerli bir yaklaşımdır, üzerinde birkaç düğme olması gerekir. Ayrıca MCP23017 gibi bir IO Expander çipinin kullanılmasını öneriyorum . Girişleri çıkış olan 16 pim vardır ve iki pim kullanılarak I2C ile kontrol edilir. Adafruit'te bir Arduino kütüphanesi var.


2

Evet, bu iyi bir fikir gibi görünüyor, ama yine de aklıma gelen bir alternatif önereceğim.

Mantık kapılarına erişiminiz varsa , boolean mantığı aracılığıyla birçok ndüğmeyi ceil(log2(n + 1))iğnelerle eşleyebilirsiniz . Örnek olarak, 4 düğmeniz varsa, ancak yalnızca 2 iğneniz varsa, bunun gibi bir yapılandırma oluşturabilirsiniz:

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

Yani, button0preslenmiş pin0ve pin1düşük olmalıdır ; button1, pin0Düşük ve pin1yüksek; button2, pin0yüksek ve pin1düşük; ve button3, pin0ve pin1yüksek.

Bundan, aşağıdaki boole ifadeleri ortaya çıkacaktır

pin0 = button2 OR button3
pin1 = button1 OR button3

Böylece 4 düğmenin 2 pime eşleştirilmesi sadece 2 VEYA geçidi ile gerçekleştirilebilir. Bununla birlikte, herhangi bir düğmeye basıp basmadığını göstermek için ek bir raptiye ve bazı ek mantık gerekir.

Tabii ki, aynı anda birkaç düğmeye basıldığında hala sorunlar olacaktır.

Ayrıca, direnç yaklaşımıyla devam edecekseniz, dirençler üzerinde daha büyük değerler kullanmayı düşünün, diğeri 100 ohm'luk dirençler aracılığıyla 5 V'den beri 100 ohm, 10s mA cinsinden bir akım verecektir. gereksiz yüksek. Sanırım daha makul değerler 10k Ohm veya 47k Ohm olurdu.


Yaklaşımınız için teşekkürler. Ayrıca böyle bir şey düşündüm, ama mantık kapılarım yok ve tonlarca direnç var. Ve evet bunun için genellikle 10k direnç kullanıyorum, 100 ohm sadece devre editörünün varsayılan değeriydi. Yardımınız için tekrar teşekkür ederim.
KullanıcılarımBu

Sonunda direnç yaklaşımını kullanacağımı düşünüyorum, çünkü mantık kapıları satın almak zorunda kalmayacağım, ayrıca mantık yaklaşımınız bana sadece 1 pin kazandırıyor ve buna ihtiyacım yok. Daha büyük projeler için bunu aklımda tutacağım. Çok teşekkür ederim.
KullanıcılarımBu

Tamam! Projenizde iyi şanslar!
nijoakim

0

Aşağıdaki sayfa faydalı olabilir:

http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html

İspanyolca yazılmış, ama esentials diyagramlı, bence bu sizin için çok iyi bir fikir.

Bu videoda nihai sonucu görebilirsiniz, çizim de sayfada, projelerinizde uygulamayı kolaylaştırmak için kapsüllenmiş işlev

Youtube videosu: Tek bir iğnede 10 tuşlu klavye

Yukarıdaki siteden bir şema:

resim açıklamasını buraya girin

resim açıklamasını buraya girin


2
Lütfen, özellikle İspanyolca ise ve bu bir İngilizce sitesiyse, bağlantının ölmesi durumunda neler içerdiğinin bir özetini ekleyin.
PeterJ

Maalesef, İspanya'da bir İngilizce yayınına başvurmanın normal olduğu normal durum olabilir ... Ancak bağlantı çok ilginç, adım adım fotoğraf açıklaması olan tek bir pim kullanarak 10 tuşlu bir klavyenin nasıl oluşturulacağını söylüyor, diyagramlar bir tahta ve bir resim yapmak için düğmelerin kapağını yapmak. Ayrıca klavyeyi yönetmek için kod, kolayca anlaşılır. Güzel gelişti galiba.
JohnnyDeauville

Bu sadece şeylerin İspanyol tarafı değil, şemanın açık, iyi göründüğüne katılıyorum ve bunun hakkında ne olduğunu anlayabiliyorum. Ancak Stack Exchange, bağlantı sadece yanıtları caydırır, çünkü bağlantı koparsa yararlı olmazlar, yarının bu blogun kapatılıp kapatılacağını / silineceğini düşünün. Belki şematik ve bir ya da iki cümle ile ilgili olabilir ve daha fazla bilgi için bağlantıyı referans olarak bırakabilirsiniz.
PeterJ

Ben bu forumda bir çaylak değilim, bana nasıl söyletebilirim? Özel bir bölüm ...? Zaman ayırdığınız için teşekkürler
JohnnyDeauville

Ben sadece şematik ve nereden geldi referans dahil ettik ama aynı zamanda nasıl çalıştığını ve ADC okumaları ne olacak bazı bağlam vermek için sayfanın biraz daha çeviri tercüme değer olabilir.
PeterJ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.