İnceliğini düğme diyagramı. Arduino'ya bir düğme bağlama. Bir düğmeyi kullanarak modları değiştirme

Düğme, kapanıp açılabilen iyi bilinen bir mekanik cihazdır. elektrik devresi kişinin isteği üzerine. Farklı kurallara göre çalışan birçok düğme türü vardır. Örneğin, bu eğitimde kullanılan basma düğmesi, yalnızca parmağınız üzerine bastığınız sürece devreyi tamamlar. Açık bir düğme ise basıldığında devreyi keser.

Bazıları basıldığında devreyi kesen, bazıları ise bu anda kapanan bir grup kontak içeren düğmeler vardır. Bu düğmelerin küçük versiyonlarına genellikle mikro anahtarlar denir.

İncelik düğmeleri hemen hemen her yerde bulunabilir. elektronik cihaz: bilgisayar klavyesinde, telefonda, TV uzaktan kumandasında vb.

Tükenmez kalemdeki düğme gibi çalışan kilitleme düğmeleri vardır: bir kez basıldığında devre kapanır, ikinci kez kırılır. Aşağıdaki fotoğraf bunlardan sadece bir tanesi. Kilitleme düğmeleri, cihazın çalışma modunu değiştirmek için kullanışlıdır. Örneğin, güç kaynağını değiştirebilirsiniz: pil veya güç kaynağı.

Veya başka bir seçenek - ekipmanın acil olarak durdurulması için büyük düğmeler. İnsanların dikkatini çekmek için parlak renklere boyanırlar. Özünde, bunlar açmak için sıradan incelik düğmeleri veya mandallı düğmelerdir.

Bunlar seçeneklerden sadece birkaçı. Elektrik dünyasında düğmelerin yanı sıra mafsallı anahtarlar ve anahtarlar gibi başka mekanizmalar da vardır. Hepsi devredeki akımın akışını mekanik olarak kontrol etmek için tasarlanmıştır.

Bir düğmenin bağlanması

Böylece bağlanmaya çalışacağımız en basit incelik düğmesiyle çalışacağız. Arduino Uno. Genellikle lehimsiz devre tahtalarıyla çalışırken lehim pimli bir düğme kullanılır. Dersin başlangıcındaki fotoğrafta böyle bir düğmenin dört adet hafifçe bükülmüş pimi olduğunu görebilirsiniz. İki adet direkt çıkışlı butonlar bulunmaktadır, onlar da aktivitelerimize uygundur.

Açık elektrik şemaları düğme şuna benzer:

Dört zamanlı düğmenin içine baktığınızda şu diyagramı görebilirsiniz:

Kural olarak, incelik düğmesinin pimleri kasanın karşıt taraflarına çiftler halinde yerleştirilir. Yani, bir tarafta bir çift kontak, diğer tarafta bir çift kontak kullanabiliriz.

İki pimli düğmenin diyagramı da böyle görünüyor.

Bu düğmeyi karıştırmak zordur: düğmeye bastığınızda bağlanan iki kontak.

Bir devre tahtası üzerinde, her iki tür incelik düğmesi de genellikle aşağıdaki gibi yerleştirilir:

Şimdi düğmenin çalışmasını gösterecek en basit devreyi lehimsiz bir devre tahtası üzerinde birleştirmeye çalışalım. LED'i yakacağız.

Ortaya çıkan devre basit bir işlevi yerine getirir: düğmeye basın - LED yanar, bırakın - söner.

Bağlantı Arduino Uno

Artık incelik düğmesinin işlevi son derece açık olduğuna göre, bir düğme ve bir LED ile bir devre kurup bunları denetleyiciye bağlayalım. Kendimize basit bir görev belirleyelim: Arduino Uno düğmesine bir kez bastığınızda Arduino Uno LED'inin üç kez yanıp sönmesine izin verin.

Şematik diyagram


Dış görünüş düzen


Bu şemada zaten tanıdık olan devreyi görüyoruz. Ayrıca Arduino’nun 3 numaralı pinine bağlı bir buton görüyoruz. Burada oldukça makul bir soru ortaya çıkabilir: neden düğmeyi 10 kOhm'luk bir direnç aracılığıyla toprağa da bağladık? Bu sorunu çözmek için düğmeyi herhangi bir ek direnç olmadan "naif" bir devre kullanarak bağladığımızı hayal edelim.

Burada 3 numaralı pin ile toprak arasında şarj biriktirebilecek küçük bir kapasitör bulunmaktadır. Birçok mikrodenetleyici bu özelliğe sahiptir.

Şimdi düğmeyi kapattığımızı hayal edin. Akım +5V'den doğrudan 3 numaralı kontağa akmaya başlar ve aynı anda kapasiteyi şarj eder. Arduino, düğmeye basmayı başarıyla kaydeder. Fakat parmağımızı saat butonundan çektiğimizde, beklentilerimizin aksine mikrodenetleyici butona basıldığını düşünmeye devam ediyor! Elbette, çünkü yüklü bir kapasitör, biriken yükü yavaş yavaş 3 numaralı ayağa bırakır. Bu, kapasitans mantıksal bir seviyenin altına boşaltılana kadar devam edecektir.

ROC saat düğmesi modülünü Arduino'ya bağlama

Özellikle projeleriniz için RobotClass olarak iki incelik düğmesinden oluşan bir modül hazırladık. Modül zaten gerekli dirençlere ve hatta düğmeye basıldığını gösteren iki LED'e sahiptir.


Bu modülü Arduino Uno'ya nasıl bağlayacağımızı bulalım.

Şematik diyagram


Düzen görünümü


Gördüğünüz gibi hangi butonları kullanırsak kullanalım bağlantı şeması pek değişmiyor. Onlarla çalışma programı da değişmeyecek.

Arduino'da bir düğmeyle çalışma programı

Sonunda şemamızın nüanslarını çözdük ve bir program yazmaya hazırız. Yazılım eğitiminde pin konfigürasyon fonksiyonlarını öğrendik pinModu ve dijital çıkış fonksiyonu dijitalYazma. Bu sefer mikrodenetleyiciye bilgi girişi sağlayan önemli bir fonksiyona daha ihtiyacımız var:

DigitalRead(kişi_numarası);

Bu fonksiyon, Arduino'nun belirli bir pinden okuduğu Boolean değerini döndürür. Bu, kontağa +5V uygulanırsa fonksiyonun geri döneceği anlamına gelir. gerçek*. Kontak toprağa bağlıysa değeri alırız yalan. C++'da doğru ve yanlış sırasıyla 1 ve 0 sayılarına eşdeğerdir.

İlgilendiğimiz kişinin bilgi giriş modunda çalışabilmesi için onu belirli bir moda ayarlamamız gerekecek:

PinMode(pin_numarası, INPUT);

Son olarak her şeyi bir araya getirip bir program yazalım.

Sabit int led = 2;
const int düğmesi = 3;
int değer = 0;

geçersiz kurulum())(
pinMode(led, ÇIKIŞ);
pinMode(düğme, GİRİŞ);
}

geçersiz döngü ()
val = digitalRead(düğme);
if(değer == YÜKSEK)(
// 1'er adımlarla 0'dan 2'ye döngü
for(int i=0; i<3; i++){
digitalWrite(led, YÜKSEK);
gecikme(500);
digitalWrite(led, DÜŞÜK);
gecikme(500);
}
}
}

Programı Arduino Uno'ya yükleyip programın çalışmasını kontrol ediyoruz. Her şey doğru yapılırsa resimdeki gibi görünmelidir:

Tamam artık her şey bitti. Artık cihazlarımızı butonları kullanarak kontrol edebiliyoruz. Eğer dersi zaten tamamladıysanız, çalar saatli bir saat yapabileceğiz!

Tetik düğmesi programı

Dikkate değer bir diğer örnek ise tetik düğmesidir. Şu şekilde çalışır: düğmeye bir kez basın - LED yanar, ikinci kez basın - söner.

Bu düğme davranışını uygulamak için genellikle "durum değişkeni" veya "bayrak" olarak adlandırılan ek bir değişkene ihtiyacımız vardır.

Sabit int led = 2;
const int düğmesi = 3;
int değer = 0;
bayt durumu = 0; // durum değişkeni
geçersiz kurulum())(
pinMode(led, ÇIKIŞ);
pinMode(düğme, GİRİŞ);
}
geçersiz döngü ()
// buton durumunu val değişkenine yazıyoruz
val = digitalRead(düğme);
// butonun durumu doğruysa eylemi gerçekleştir
if(değer == YÜKSEK)(
// durumu tam tersine değiştir
durum = !durum;
if(durum == YÜKSEK)(
// mevcut durum doğruysa LED'i yak
digitalWrite(led, YÜKSEK);
) başka (
// mevcut durum yanlışsa LED'i kapat
digitalWrite(led, DÜŞÜK);
}
gecikme(300);
}
}

Programı Arduino'ya yükleyip devrenin çalışmasını kontrol ediyoruz. Düğmeye hızla bastığınızda LED yanacaktır. Tekrar basın, sönecektir. Ancak düğmeye basarsanız ve bırakmazsanız LED 600 ms'lik bir süre ile yanıp sönmeye başlayacaktır! Nedenmiş? Anlamaya çalışın.

Görevler

Pratik olarak birkaç basit problemi bir buton ve bir LED ile çözmeye çalışalım.

  • Devrede iki buton ve bir LED bulunmaktadır. İlk butona bastığınızda LED yansın, ikinci butona bastığınızda sönsün.
  • Piyano. Devre yedi düğme ve bir hoparlör içerir. Yedi düğmenin her birine bastığınızda hoparlör ilgili notayı çalmalıdır. Çalışmak gerekecek.
  • Oyun "Kovboylar". Devrede iki düğme, bir zil ve iki LED bulunmaktadır. Program başladıktan sonra zil kısa bir ses çıkarmalıdır. Bundan hemen sonra her oyuncunun mümkün olduğu kadar hızlı bir şekilde kendi düğmesine basması gerekir. Bunu ilk yapan oyuncuya LED ışık verilecek. Kesintilerle ilgili dersi çalışmanız gerekecek.

Bir düğme sensörünü Arduino'ya bağlamak belirli bilgi ve beceriler gerektirir. Bu yazıda incelik düğmesinin ne olduğu, düğme sekmesinin ne olduğu, çekme ve aşağı çekme direncine sahip bir düğmenin nasıl düzgün şekilde bağlanacağı, bir düğmeyi kullanarak LED'leri ve diğer cihazları nasıl kontrol edebileceğiniz hakkında konuşacağız.

Bir düğme (veya basmalı düğme anahtarı), tüm sensör türleri arasında en basit ve en erişilebilir olanıdır. Üzerine tıkladığınızda kontrol cihazına bir sinyal gönderirsiniz ve bu da bazı eylemlere yol açar: LED'ler açılır, sesler duyulur, motorlar çalışır. Hayatımızda sıklıkla farklı anahtarlarla karşılaşırız ve bu cihaza oldukça aşinayız.

Dokunma düğmeleri ve geçiş düğmeleri

Her zamanki gibi bölüme yalnızca yeni başlayanların ilgisini çekecek basit şeylerle başlıyoruz. Temelleri biliyorsanız ve bir düğmeyi Arduino'ya bağlamak için çeşitli seçenekler hakkında bilgi edinmek istiyorsanız bu paragrafı atlayabilirsiniz.

Düğme nedir? Aslında bu, elektrik ağını kapatan ve açan oldukça basit bir cihazdır. Konumunuzu sabitlerken veya sabitlemeden bu açma/kapama işlemini farklı modlarda gerçekleştirebilirsiniz. Buna göre tüm düğmeler iki büyük gruba ayrılabilir:

  • Sabitlemeli düğmeleri değiştirin. Serbest bırakıldıktan sonra orijinal hallerine geri dönerler. Başlangıç ​​durumuna bağlı olarak normalde kapalı ve normalde açık düğmelere ayrılırlar.
  • Anlık düğmeler (incelik düğmeleri). Sabitlenirler ve bırakıldığı pozisyonda kalırlar.

Farklı düğmeler için pek çok seçenek var; bu gerçekten en yaygın elektronik bileşen türlerinden biridir.






Basit projeler için Arduino düğmeleri

Projelerimizde hemen hemen her Arduino kitiyle birlikte gelen çok basit 4 ayaklı saat düğmeleriyle çalışacağız. Düğme, iki çift kontağa sahip bir anahtardır. Bir çiftteki kontaklar birbirine bağlıdır, bu nedenle devrede birden fazla anahtarın uygulanması mümkün olmayacaktır, ancak iki paralel segmenti aynı anda kontrol edebilirsiniz, bu yararlı olabilir.

Duruma bağlı olarak normalde kapalı ve normalde açık kontaklarla her iki devreyi de oluşturabilirsiniz; tek yapmanız gereken devredeki bağlantıları buna göre yapmaktır.

Kullanım kolaylığı için, incelik düğmesi genellikle biraz renkli plastik bir kapakla birlikte gelir; düğmenin üzerine oldukça belirgin bir şekilde oturur ve projeye daha az hacker benzeri bir görünüm kazandırır.

Arduino butonunu bağlama

Bir düğmeyi kullanarak LED'i açma ve kapatma

Bir incelik düğmesini bağlamanın en basit yoluyla başlayalım. Güç kaynağı olarak Arduino, bir LED, 220 Ohm sınırlama direnci ve devreyi kapatacak ve açacak bir düğme içeren bir devre düşünün.

İki çift bacaklı bir düğmeyi bağlarken doğru NC kontaklarını seçmek önemlidir. Resme dikkatlice bakın: düğmenin yanlarında bir çift bacak bulunur. Düğmenin kendisi kare şeklindedir, ancak kontak çiftleri arasındaki mesafeler görsel olarak fark edilir: hemen bir tarafta iki, diğer tarafta iki seçebilirsiniz. Yani, anahtarın uygulanacağı taraftaki bir "çift" arasındadır. Devreye dahil olmak için, aralarında minimum mesafe bulunan bir kontağa ve diğer kontağa bağlanıyoruz. İkinci kontak çifti basitçe birinciyi kopyalar.

Farklı türde bir anahtarınız varsa, karşıt köşelerden kişileri güvenle seçebilirsiniz (bazı düğmelerde, eşleştirilmiş kişilerin hangi tarafta bulunduğunu belirleyebileceğiniz girinti şeklinde özel bir işaret vardır). Doğru bacakları belirlemenin en güvenilir yolu, kontakları bir test cihazıyla çalmaktır.

Bir düğme, LED ve Arduino denetleyicisi içeren devrenin kendisi herhangi bir özel açıklamaya ihtiyaç duymaz. Düğme devreyi kesiyor, LED yanmıyor. Basıldığında devre kapanır ve LED yanar. Kontakları karıştırırsanız (düğmeleri kapalı eşleştirilmiş kontaklar aracılığıyla açın), devre asla açılmayacağından düğme çalışmaz. Sadece kişileri değiştirin.

Pull-up direncine sahip bir düğmenin bağlanması

Şimdi butonu Arduino’ya bağlayalım ki çizimdeki durumunu okuyabilelim. Bunu yapmak için aşağıdaki şemayı kullanacağız.

Düğmeye bastıktan sonra yanıp sönen LED

LED'li önceki örnekte Arduino kartına bir düğme bağladık ve nasıl çalıştığını anladık. LED açılıp kapandı, ancak bunu tamamen pasif modda yaptı - kontrolörün kendisi burada kesinlikle gereksizdi, pillerle değiştirilebilirdi. Bu nedenle yeni projemizi daha “akıllı” hale getirelim: Bir düğmeye bastığınızda LED'in sürekli yanıp sönmesini sağlayacağız. Bunu bir ampul ve anahtardan oluşan geleneksel bir devre ile yapamazsınız - bunu çözmek için mikrodenetleyicimizin gücünü kullanacağız, ancak basit ama önemsiz bir görev değil.

LED'li devrenin bir parçası bize zaten tanıdık geliyor. LED'li ve sınırlayıcı dirençli normal bir işaret lambası monte ettik. Ancak ikinci bölümde tanıdık bir düğme ve başka bir direnç görüyoruz. Ayrıntılara girmesek de sadece devreyi kuracağız ve Arduino'ya basit bir çizim yükleyeceğiz. Devrenin tüm elemanları en basit Arduino başlangıç ​​kitleriyle birlikte gelir.

/* Tact butonu ve LED kullanarak bir devre çizin. Butona basıldığında LED yanıp söner. Düğme yere çekilir, basıldığında */ const int PIN_BUTTON = 2 girişinde HIGH'a karşılık gelir; const int PIN_LED = 13; void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( // Düğme durumunu alın int ButtonState = digitalRead(PIN_BUTTON); Serial.println(buttonState); // Eğer butona basılmazsa hiçbir şey yapmayız if (!buttonState) ( gecikme(50); return; ) // Butona basıldığında bu kod bloğu çalıştırılacak // LED'in yanıp sönmesi digitalWrite(PIN_LED, HIGH gecikme() 1000); gecikme(1000);

Basılı tutun - LED yanıp söner. Bırak gitsin - söner. Tam olarak istediğimiz şey. Sevinçle ellerimizi çırpıyoruz ve yaptıklarımızı analiz etmeye başlıyoruz.

Taslağa bakalım. Oldukça basit bir mantık görüyoruz bunda.

  1. Düğmeye basılıp basılmadığını belirleyin.
  2. Düğmeye basılmazsa, hiçbir şeyi açmadan veya değiştirmeden döngü yönteminden çıkarız.
  3. Düğmeye basıldığında standart bir çizimin bir parçasını kullanarak yanıp söneriz:
    1. İstenilen bağlantı noktasına voltaj uygulayarak LED'i açın
    2. LED yandığında gerekli duraklamayı yapıyoruz
    3. LED'i kapat
    4. LED kapalıyken gerekli duraklamayı yapıyoruz

Çizimdeki düğmenin davranışının arkasındaki mantık, çekme direnciyle bağlantı yöntemine bağlı olabilir. Bir sonraki yazımızda bunun hakkında konuşacağız.

Arduino butonu tıkırdıyor

Düğmelerle çalışırken düğme sıçraması adı verilen çok hoş olmayan bir olayla karşılaşabiliriz. Adından da anlaşılacağı gibi bu olay, basmalı düğme anahtarının içindeki kontakların takırdamasından kaynaklanmaktadır. Metal plakalar birbirine anında (gözlerimiz için çok hızlı da olsa) temas etmez, bu nedenle temas bölgesinde kısa süreli voltaj dalgalanmaları ve düşmeleri meydana gelir. Bu tür “çöp” sinyallerin ortaya çıkacağını öngörmezsek, onlara her zaman tepki veririz ve projemizi eve yönlendirebiliriz.

Sıçramayı ortadan kaldırmak için yazılım ve donanım çözümleri kullanılır. Kısaca, gevezeliği bastırmanın ana yöntemlerinden bahsedeceğiz:

  • Arduino pininden değerlerin toplanması arasına taslakta 10-50 milisaniyelik bir duraklama ekliyoruz.
  • Kesintiler kullanırsak yazılım yöntemi kullanılamaz ve donanım koruması oluştururuz. Bunlardan en basiti kapasitörlü ve dirençli bir RC filtresidir.
  • Daha doğru geri tepme için Schmidt tetikleyicisini kullanan bir donanım filtresi kullanılır. Bu seçenek, Arduino girişinde neredeyse ideal şekle sahip bir sinyal almanızı sağlayacaktır.

Gevezelikle başa çıkmanın yolları hakkında daha ayrıntılı bilgiyi burada bulabilirsiniz.

Bir düğmeyi kullanarak modları değiştirme

Bir düğmeye basılıp basılmadığını belirlemek için, basıldığı gerçeğini kaydetmeniz ve özelliği özel bir değişkende saklamanız yeterlidir.

DigitalRead() fonksiyonunu kullanarak basma gerçeğini belirliyoruz. Sonuç olarak butonun nasıl bağlandığına bağlı olarak YÜKSEK (1, DOĞRU) veya DÜŞÜK (0, YANLIŞ) elde edeceğiz. Düğmeyi dahili bir çekme direnci kullanarak bağlarsak, düğmeye basmak giriş seviyesi 0 (YANLIŞ) ile sonuçlanacaktır.

Bir düğmeye tıklamayla ilgili bilgileri depolamak için bir boolean değişkeni kullanabilirsiniz:

boolean tuşuna basıldı = digitalRead(PIN_BUTTON)==LOW;

Neden bu yapıyı kullanıyoruz ve bunu şu şekilde yapmıyoruz:

boolean keyPressed = digitalRead(PIN_BUTTON);

Mesele şu ki, digitalRead() işlevi YÜKSEK değerini döndürebilir, ancak bir düğme tıklamasını göstermez. Pull-up dirençli bir devre kullanılması durumunda, YÜKSEK, aksine düğmeye basılmadığı anlamına gelecektir. İlk seçenekte (digitalRead(PIN_BUTTON)==LOW), girişi hemen ihtiyacımız olan değerle karşılaştırdık ve girişteki sinyal seviyesi artık düşük olmasına rağmen düğmeye basıldığını belirledik. Ve düğme durumunu bir değişkene kaydettim. Kodunuzu daha şeffaf hale getirmek ve gereksiz aptalca hatalardan kaçınmak için gerçekleştirdiğiniz tüm mantıksal işlemleri açıkça belirtmeye çalışın.

Bir düğmeye bastıktan sonra çalışma modları nasıl değiştirilir?

Çoğu zaman, düğmeleri kullanırken yalnızca düğmeye basmakla kalmayıp aynı zamanda düğmeyi bırakma gerçeğini de hesaba katmamız gereken bir durum ortaya çıkar. Örneğin bir düğmeye basıp bırakarak ışığı açabilir veya devrenin çalışma modunu değiştirebiliriz. Başka bir deyişle, düğmeye basıldığı gerçeğini bir şekilde koda kaydetmemiz ve düğmeye artık basılmasa bile bilgiyi gelecekte kullanmamız gerekiyor. Bunun nasıl yapılabileceğini görelim.

Programın mantığı çok basittir:

  • Bir hizmet değişkenine tıklamanın gerçeğini hatırlıyoruz.
  • Tıkırtıyla ilgili olayların geçmesini bekliyoruz.
  • Düğmenin bırakılmasını bekliyoruz.
  • Serbest bırakma gerçeğini hatırlıyoruz ve düğmeye tam olarak basıldığına dair işareti ayrı bir değişkene koyuyoruz.
  • Hizmet değişkenini temizleyin.

Birden fazla düğmeye basılması nasıl tespit edilir?

İlgili değişkendeki veya Arduino dizisindeki her düğmenin durumunu hatırlamanız yeterlidir. Burada anlaşılması gereken en önemli şey, her yeni butonun bir meşgul pini olduğudur. Bu nedenle, çok sayıda düğmeniz varsa, ücretsiz kişi sıkıntısı yaşayabilirsiniz. Alternatif bir seçenek, dirençli bölücüye sahip bir devre kullanarak bir analog pime bağlı düğmeleri kullanmaktır. Bundan sonraki yazılarımızda bundan bahsedeceğiz.

Bu örnekte bir düğmeyi Arduino denetleyicisine bağlamaya bakacağız. Düğmeye bastığınızda yerleşik LED'i yakacağız. Çoğu Arduino kartında çıkış 13'e (pin 13) bağlı yerleşik bir SMT LED bulunur.

Gerekli Bileşenler

  • Arduino denetleyicisi
  • incelik düğmesi
  • 10kOhm direnç
  • pin ekmek tahtası
  • bağlantı telleri

Bağlantı

Güç çıkışını (5V) ve toprağı (Gnd) sırasıyla kırmızı ve siyah kablolarla devre tahtasına bağlarız. Tipik olarak devre tahtaları şekilde gösterildiği gibi güç ve topraklama için en dıştaki pin sıralarını kullanır. Üçüncü mavi kabloyla Arduino kontrol cihazının dijital pin 2'sini saat butonu pinine bağlıyoruz. Aynı kontağa veya 4 pinli tasarımda ona kalıcı olarak bağlı bir kontağa, 10 kOhm'luk bir çekme direnci bağlarız ve bu direnç de toprağa bağlanır. Düğmenin diğer çıkışını 5 V güç kaynağına bağlıyoruz.

Saat butonuna basılmadığında çıkış 2 bir pull-up direnci ile sadece toprağa bağlanır ve bu giriş LOW değerini okuyacaktır. Ve düğmeye basıldığında giriş 2 ile 5V güç kaynağı arasında bir kontak belirecek ve okunacaktır.

Not: Çoğu zaman, bağlantı şekilde gösterildiği gibi incelik düğmelerinin her iki yanında iki kontak bulunur. Aynı zamanda düğme neredeyse kare şeklindedir. Hangi kontakların bağlı olduğu ve basıldığında hangilerinin kapalı olduğu bağlanırken ÖNEMLİDİR. Emin değilseniz düğmeyi çalmanız en iyisidir.

Düğmeyi ters yönde de bağlayabilirsiniz - bir çekme direnci aracılığıyla güç kaynağına ve düğme aracılığıyla toprağa. Daha sonra girişten YÜKSEK, düğmeye basıldığında ise DÜŞÜK okunacaktır.

Giriş bağlantısız bırakılırsa, giriş rastgele olarak YÜKSEK veya DÜŞÜK değerini okuyacaktır. Bu nedenle butona basılmadığında belirli bir değeri ayarlamak için pull-up direnci kullanıyoruz.

Şema

Kod

/* Düğme Düğmeye basarak LED'i açıp kapatın. 2005 yılında DojoDave tarafından yaratıldı 28 Eki 2010 tarihinde Tom Igoe tarafından değiştirilmiştir. Bu örnek kod kamu malıdır. */ // sabitleri ayarla const int butonuPin = 2; // butona bağlı giriş numarası const int ledPin = 13; // LED çıkış numarası // değişkenler int butonDurumu = 0; // düğmenin durumunu saklayan değişken void setup() ( // LED'e bağlı pini çıkış olarak başlat pinMode(ledPin, OUTPUT); // düğmeye bağlı pini giriş olarak başlat pinMode(buttonPin, INPUT); ) void loop())( // buton girişindeki değerleri okuyun butonDurumu = digitalRead(buttonPin); // butona basılıp basılmadığını kontrol edin // basılırsa butonDurumu YÜKSEK olacaktır: if (buttonState == HIGH) ( // LED digitalWrite'ı açın(ledPin, HIGH); ) aksi halde ( // LED digitalWrite'ı kapatın(ledPin, LOW); ) )


Ayrıca bakınız

Cihaz geliştirirken genellikle Arduino kartına bağlı bir düğme kullanmanız gerekir. Tact butonları genellikle basıldığında devreyi kapatan, basılmadığında ise akımın geçişine izin vermeyen buton olarak kullanılır. Ancak mikrodenetleyicinin dijital girişine sadece bir düğme bağlamak yeterli değildir. Makale bağlantının nüanslarını gösteriyor ve örnekler sunuyor.

Örneğin, bir incelik düğmesi kullanacağız. Düğmenin 4 çıkışı vardır. Ancak aslında, yalnızca düğmeyi karta sıkıca monte etmek için 4 pime ihtiyaç vardır. İçeride, her biri sol ve sağ kasanın sınırlarının dışına çıkan, yanlarda yalnızca 2 temas noktası vardır. Bu, düğmenin demonte fotoğraflarında açıkça görülebilir:

Üst kapaksız düğme. Farklı pinlere bağlı kişiler farklı renklerle vurgulanır. Sökülmüş düğmenin yanında, basıldığında orta ve yan kontakları kapatan metal yuvarlak bir parça görülmektedir.

Seksiyonel düğme. En dıştaki kontakların her iki taraftan çıkan bir terminale fiziksel olarak bağlı olduğu görülebilir. Merkezi çıkış da benzer şekilde düzenlenmiştir.

Hangi kişilerin bağlı olduğunu (yani tek bir bütün olduklarını) ve basıldığında hangilerinin kapanması gerektiğini karıştırmamak önemlidir. Düğme, kontaklardan biri ile Arduino'nun herhangi bir dijital pinine, diğer kontak ise pozitif güç kutbuna bağlanır. Daha sonra, pinMode() fonksiyonunu kullanarak Arduino pinini giriş olarak yapılandırmanız gerekir ve digitalRead() fonksiyonunu kullanarak pindeki değeri okuyabilirsiniz. Butona basıldığında pinden HIGH değeri okunacaktır. Tek bir şey olmasa bile burada bitirebilirdik: açık durumda, girişe rastgele DÜŞÜK ve YÜKSEK sinyaller gönderilecektir, çünkü böyle bir çıkış hiçbir şeye bağlı değildir ve "havada asılı kalır". Doğru bağlantı için düğmenin bağlı olduğu pini değerlerden birine “çekmeniz” gerekir. Bizim durumumuzda butona basılmadığında pinden LOW değeri okunmalı yani yere çekeceğiz.

Bunu yapmak için, içinden çok küçük bir akımın akacağı, büyük bir nominal değere (10 KOhm veya daha fazla) sahip seçilen terminale düğmeye paralel olarak bağlamanız gerekir. Daha sonra butona basılmadığında pin net bir LOW değerine sahip olacak ve butona basıldığında pull-up direncimiz YÜKSEK okumaya engel olmayacaktır. Çünkü pull-up direncinden denetleyici pininin pozitif güç kutbuna kısa devre akımına kıyasla çok az akım akacaktır.

Devreyi kurduktan sonra aşağıdaki programı karta yükleyin:

/* Düğmeye bastığınızda LED'i değiştirin Cihaz şeması: * LED pin 13'e bağlıdır (dahili LED) * Saat düğmesi 2. pin'e bağlıdır * 2. pini çekmek için 10 kOhm'luk bir direnç kullanılır ground */ // Sabitleri ayarlayın // pin numaralarını ayarlayın: const int butonuPin = 2; // Butonun bağlı olduğu pin numarası const int ledPin = 13; // LED'in bağlı olduğu pin numarası //Değişkenleri bildir int butonuState = 0; // Düğmenin durumunu saklamak için değişken void setup() ( // LED'in bağlı olduğu pini çıkış olarak ayarlayın pinMode(ledPin, OUTPUT); // Düğmenin bağlı olduğu pini şu şekilde ayarlayın: bir giriş pinMode(buttonPin, INPUT); ) void loop())( // Düğmenin durumunu okuyun ButtonState = digitalRead(buttonPin); // Düğmeye basılıp basılmadığını kontrol edin // Basılırsa, düğmenin bulunduğu pin HIGH değerini alır if (buttonState == HIGH) ( // digitalWrite LED'ini açar (ledPin, HIGH); ) else ( // digitalWrite LED'ini kapatır(ledPin, LOW); ) )

Düğmeye bastığınızda LED'in açılması

Cihaz şeması:

* Pin 13'e bağlı LED (dahili LED)

* Tact butonu 2. pine bağlıdır

* 2. pini toprağa çekmek için 10kOhm'luk bir direnç kullanılır

//Sabitleri ayarla

// pin numaralarını ayarlayın:

const int butonuPin = 2; // Butonun bağlı olduğu pin numarası

const int ledPin = 13; // LED'in bağlı olduğu pin numarası

//Değişkenleri bildir

int düğmeDurumu = 0; // Düğme durumunu saklayacak değişken

geçersiz kurulum() (

// LED'in bağlı olduğu pini çıkış olarak yapılandırıyoruz

pinMode(ledPin, ÇIKIŞ);

// Butonun bağlı olduğu pini giriş olarak ayarlıyoruz

pinMode(buttonPin, INPUT);

geçersiz döngü() (

// butonun durumunu oku

ButtonState = digitalRead(buttonPin);

Talimatlar

Düğmeler farklıdır, ancak hepsi aynı işlevi yerine getirir; elektriksel teması sağlamak için iletkenleri fiziksel olarak birbirine bağlarlar (veya tersine keserler). En basit durumda bu, iki iletkenin bağlantısıdır; daha fazla sayıda iletkeni bağlayan düğmeler vardır.
Bazı düğmeler basıldıktan sonra iletkenleri bağlı bırakır (kilitleme düğmeleri), bazıları ise bırakıldıktan hemen sonra devreyi açar (kilitlenmeyen düğmeler).
Düğmeler ayrıca normalde açık ve normalde kapalı olarak ikiye ayrılır. Birincisi basıldığında devreyi kapatır, ikincisi ise devreyi açar.
Günümüzde “incelik düğmeleri” adı verilen bir tür düğme yaygın kullanım alanı bulmuştur. Saat - "incelik" kelimesinden değil, "dokunsal" kelimesinden, çünkü Basınç parmaklar tarafından iyi hissedilir. Bunlar, basıldığında elektrik devresini kapatan ve serbest bırakıldığında açan düğmelerdir.

Düğme, insan ve teknoloji arasındaki etkileşimin daha iyi olmasına hizmet eden çok basit ve kullanışlı bir buluştur. Ancak doğadaki her şey gibi bu da ideal değildir. Bu, düğmeye bastığınızda ve onu bıraktığınızda sözde olduğu gerçeğinde kendini gösterir. " " (-'de "sıçrama"). Bu, bir düğmenin durumunun, sabit bir duruma geçmeden önce kısa bir süre içinde (birkaç milisaniye düzeyinde) birden çok kez değiştirilmesidir. Bu istenmeyen olay, düğme malzemelerinin esnekliği nedeniyle veya üretilen elektriksel mikro kıvılcımlar nedeniyle düğme değiştirildiğinde meydana gelir.
Biraz sonra yapacağımız Arduino'yu kullanarak bunu kendi gözlerinizle görebilirsiniz.

Normalde açık bir saat butonunu Arduino'ya bağlamak için bunu en basit şekilde yapabilirsiniz: butonun serbest iletkenlerinden birini güce veya toprağa, diğerini Arduino'nun dijital çıkışına bağlayın. Ancak genel anlamda bu yanlıştır. Gerçek şu ki, düğmenin kapalı olmadığı anlarda Arduino dijital çıkışında elektromanyetik girişim ortaya çıkacak ve bu nedenle yanlış pozitifler mümkün olacak.
Paraziti önlemek için, dijital pin genellikle oldukça büyük bir direnç (10 kOhm) aracılığıyla toprağa veya güce bağlanır. İlk durumda buna “yukarı çekme dirençli devre”, ikincisinde ise “aşağı çekme dirençli devre” denir. Her birine bakalım.

Öncelikle pull-up dirençli bir devre kullanarak butonu Arduino’ya bağlayalım. Bunu yapmak için düğmenin bir kontağını toprağa, ikincisini dijital çıkış 2'ye bağlarız. Dijital çıkış 2 ayrıca 10 kOhm'luk bir direnç aracılığıyla +5 V beslemeye bağlanır.

Düğmeye basışları işlemek için buna benzer bir kroki yazalım ve Arduino'ya yükleyelim.
Artık pin 13'teki yerleşik LED, düğmeye basılana kadar sürekli yanıyor. Butona bastığımızda DÜŞÜK durumuna geçer ve LED söner.

Şimdi aşağı çekme direncine sahip bir devre kuralım. Düğmenin bir kontağını +5 V güç kaynağına, ikincisini dijital çıkış 2'ye bağlarız. Dijital çıkış 2'yi 10 kOhm'luk bir dirençle toprağa bağlarız.
Taslağı değiştirmeyeceğiz.

Artık düğmeye basılana kadar LED yanmıyor.

Konuyla ilgili video

İpucu 2: Arduino'ya bir düğme bağlarken temas sıçramasından nasıl kurtulurum

Arduino'ya bir düğme bağlama konusunu daha önce incelemiştik ve temasın "zıplaması" konusuna değinmiştik. Bu, tekrarlanan tuşlara basılmasına neden olan ve tuşa basmanın yazılımla işlenmesini zorlaştıran çok hoş olmayan bir olgudur. Temas sıçramasından nasıl kurtulacağımız hakkında konuşalım.

İhtiyacın olacak

  • -Arduino;
  • - incelik düğmesi;
  • - nominal değeri 10 kOhm olan direnç;
  • - Işık yayan diyot;
  • - kabloları bağlamak.

Talimatlar

Kontak sıçraması, mekanik anahtarların, düğmelerin, geçiş anahtarlarının ve rölelerin karakteristik özelliğidir. Kontakların genellikle esnekliğe sahip metal ve alaşımlardan yapılması nedeniyle, fiziksel olarak kapatıldığında hemen güvenilir bir bağlantı kurmazlar. Kısa bir süre içinde kontaklar birkaç kez kapanır ve birbirini iter. Sonuç olarak, elektrik akımı anında değil, bir dizi yükseliş ve düşüşten sonra sabit bir değere ulaşır. Bu geçici etkinin süresi kontakların malzemesine, boyutlarına ve tasarımına bağlıdır. Şekil, bir incelik düğmesinin kontakları kapatıldığında tipik bir dalga biçimini göstermektedir. Kararlı duruma geçiş anından itibaren geçen sürenin birkaç milisaniye olduğu görülmektedir. Bu aynı zamanda "zıplıyor".

Bu etki, elektrikli aydınlatma kontrollerinde veya diğer atalet sensörleri ve cihazlarında fark edilmez. Ancak bilginin hızlı okunduğu ve işlendiği devrelerde (frekansların "sıçrayan" darbelerle aynı veya daha yüksek olduğu) bu bir sorundur. Özellikle, 16 MHz'de çalışan Arduino UNO, 0'dan 1'e tek bir anahtar yerine birler ve sıfırlardan oluşan bir diziyi kabul ederek pin zıplatmada mükemmeldir.

Kontak sıçramasının devrenin doğru çalışmasını nasıl etkilediğine bakalım. Pull-down dirençli bir devre kullanarak Arduino'ya bir saat butonu bağlayalım. Butona bastığımızda LED’i yakacağız ve butona tekrar basılana kadar yanık bırakacağız. Netlik sağlamak için, harici bir LED'i dijital pin 13'e bağlayalım, ancak yerleşik olanı da kullanabilirsiniz.

Bu görevi uygulamak için akla gelen ilk şey şudur:
- düğmenin önceki durumunu hatırlayın;
- mevcut durumla karşılaştırın;
- durum değiştiyse LED'in durumunu değiştirin.
Böyle bir kroki yazıp Arduino hafızasına yükleyelim.
Devre devreye alındığında kontak sıçramasının etkisi hemen görülür. LED'in düğmeye bastıktan hemen sonra yanmaması veya yanarak hemen sönmesi veya düğmeye bastıktan hemen sonra kapanmaması ancak yanmaya devam etmesiyle kendini gösterir. Genel olarak şema istikrarlı bir şekilde çalışmıyor. Ve LED'i açma görevi için bu o kadar kritik değilse, o zaman diğer daha ciddi görevler için bu kesinlikle kabul edilemez.

Durumu düzeltmeye çalışacağız. Kontakların kapanmasından sonraki birkaç milisaniye içinde kontak sıçramasının gerçekleştiğini biliyoruz. Düğmenin durumunu değiştirdikten sonra örneğin 5 ms bekleyelim. Bu süre bir kişi için neredeyse bir anlıktır ve bir kişinin bir düğmeye basması genellikle çok daha uzun sürer - birkaç on milisaniye. Ve Arduino bu kadar kısa sürelerde harika çalışıyor ve bu 5 ms, bir düğmeye basıldığında temasın sıçramasını kesmesine olanak tanıyacak.
Bu taslakta, girdisine düğmenin önceki durumunu sağladığımız bir debounce() prosedürünü bildireceğiz (İngilizce'de "bounce" sadece "bounce" anlamına gelir, "de" öneki ters işlem anlamına gelir). Bir düğmeye basılması 5 ms'den uzun sürüyorsa bu gerçekten bir basıştır.
Basıncı tespit ettikten sonra LED'in durumunu değiştiriyoruz.
Krokiyi Arduino kartına yükleyelim. Artık her şey çok daha iyi! Düğme hatasız çalışıyor, basıldığında LED istediğimiz gibi durum değiştiriyor.

Benzer işlevsellik, örneğin Bounce2 kütüphanesi gibi özel kütüphaneler tarafından sağlanır. "Kaynaklar" bölümündeki bağlantıdan veya https://github.com/thomasfredericks/Bounce2 web sitesinden indirebilirsiniz. Kütüphaneyi kurmak için onu Arduino geliştirme ortamının kütüphaneler dizinine yerleştirin ve IDE'yi yeniden başlatın.
"Bounce2" kütüphanesi aşağıdaki yöntemleri içerir:
Bounce() - "Bounce" nesnesinin başlatılması;
boşluk aralığı(ms)- gecikme süresini milisaniye cinsinden ayarlar;
geçersiz ekleme (Pin numarası)- düğmenin bağlı olduğu pimi ayarlar;
int güncelleme()- nesneyi günceller ve pinin durumu değiştiyse true değerini, aksi takdirde false değerini döndürür;
int okuma()- pinin yeni durumunu okur.
Kütüphaneyi kullanarak taslağımızı yeniden yazalım. Ayrıca butonun geçmiş durumunu hatırlayabilir ve mevcut durumuyla karşılaştırabilirsiniz, ancak algoritmayı basitleştirelim. Bir düğmeye bastığınızda, basışlarınızı sayarız ve her tek basışta LED yanar, her çift basışta ise söner. Bu taslak kısa ve öz görünüyor, okunması kolay ve uygulaması kolay.

Kaynaklar:

  • Arduino'ya bağlı bir düğmenin kontaklarının iptal edilmesi
  • Bounce2 kütüphanesi