![]() | Szerzők: Makan Gergely, Somogyi Anikó, Dr. Mingesz Róbert és Mellár János A tananyag elsősorban az Elektronikai alapok programozóknak és a Digitális architektúrák című kurzusokhoz készült, az elsajátításához szükséges idő: 45 perc. |
Összefoglalás
A lecke megmutatja, hogyan kell egy nyomógombot vagy egy kapcsolót helyesen bekötni egy digitális bemenetre. A megértésben képek, videók és szimulációk segítenek. A lecke végén önellenőrző kérdések találhatók.
Tartalom
- Kapcsoló és nyomógomb áramköri bekötése
- Kapcsoló és nyomógomb állapotának beolvasása a programban
- Pergésmentesítés
- Szimulációk
- Videó nyomógomb használatáról
- Önellenőrző kérdések
Kapcsoló és nyomógomb áramköri bekötése
Egy mechanikus kapcsoló úgy működik, hogy abban az állásában, amelyikben nyitva van, szakadásként, a másik állásában, ahol zárva van, ott pedig rövidzárként viselkedik. Hasonlóan a nyomógomb is, ha nincs lenyomva, akkor nyitott az áramkör, nem folyik áram, ha lenyomjuk, akkor belül összekapcsolja a kivezetéseit és zárja az áramkört, folyik az áram.
Az alábbi ábrán a legegyszerűbb, de helytelen bekötést láthatjuk. Ha zárva van a kapcsoló, akkor a 2-es digitális bemeneten logikai magas állapotnak megfelelő feszültség jelenik meg, ha viszont nyitva van, akkor egy határozatlan feszültség jelenik meg a digitális bemeneten (a bemenet “lebeg”). Ez kiszámíthatatlan működést eredményez, nem tudjuk detektálni, hogy a gomb valóban le van-e nyomva, vagy csak ingadozik a feszültség a bemeneten a nyitott kapcsoló esetén.

Az alábbi ábrán már egy megfelelően működő bekötést láthatunk kapcsoló és nyomógomb esetén.

Forrás: http://dx.doi.org/10.6084/m9.figshare.11971794
Láthatjuk, hogy a nyomógomb alsó és felső két kivezetése oldalanként össze van kötve a nyomógombon belül. A két oldal egymással nincs összekötve, csak, ha lenyomjuk a gombot, ekkor a gombon belül záródik az áramkör. A működéshez szükség van még tápfeszültségre (5 V) és a föld potenciálra (GND, 0 V), amik az Arduino UNO esetén a digitális jelszinteknek megfelelő értékek. A 10 kOhm-os ellenállást felhúzó ellenállásnak szokták hívni (azért, mert magasabb feszültségre van kötve). Az a szerepe, hogy a használt digitális bemenet (2-es kivezetés) akkor is egy határozott potenciálon legyen, ha a nyomógomb nincs lenyomva. Ha nem lenne felhúzóellenállás, akkor nem lenne zárt az áramkör, a digitális bemenet nem egy határozott feszültséget kap és ez kiszámíthatatlan működést eredményezne. (A felhúzó ellenállás értéke nem lehet túl alacsony, mert az túlterhelheti az 5 V-os kimenetet.) Az 1 kOhm-os ellenállás egy védőellenállás, ami figyelmetlenség esetén jön jól. Ha a 2-es kivezetést véletlenül digitális kimenetre és logikai magas értékre állítanánk és megnyomnánk a gombot, akkor rövidre zárnánk az áramkört a védőellenállás ebben az esetben azonban megfelelő mértékűre korlátozná az áramerősséget.
Az Arduino UNO mikrovezérlőjében minden digitális kivezetés esetén be tudunk kapcsolni egy belső felhúzó ellenállást is a pinMode(2, INPUT_PULLUP);
függvényhívással. Ebben az esetben nincs szükség külső felhúzó ellenállásra és egyszerűsödik a nyomógombos kapcsolás.

Mindkét kapcsolás esetén észrevehetjük, hogy a működés fordított (negatív logika), azaz a digitális bemeneten akkor olvashatunk be logikai alacsony értéket, ha a gomb le van nyomva és akkor logikai magasat, ha fel van engedve. Ezt a viselkedést kódban egy egyszerű logikai negálással meg lehet fordítani. Egyenes logikai módban is be lehet kötni egy kapcsolót vagy nyomógombot, ha az 5 V és a GND csatlakozásának helyét felcseréljük a külső felhúzó ellenállást tartalmazó áramkörben.
Programozás
Ahhoz, hogy egy kivezetésen be tudjunk olvasni egy digitális jelet/állapotot először be kell állítanunk az adott kivezetést digitális bemenetre a pinMode(pin, mode)
függvénnyel. Ezt a setup
függvényben szokás megtenni. A függvény használatáról már korábban volt szó. Ahhoz, hogy digitális bemenet legyen egy adott kivezetés, a pin
paraméternek a használni kívánt kivezetés számát, a mode
paraméternek pedig az INPUT
vagy esetleg azINPUT-PULLUP
(lásd az alábbiakban) értéket kell adnunk. Például: pinMode(2, INPUT);
.
A kivezetésre kötött külső digitális jel aktuális állapotát a digitalRead(pin)
függvénnyel olvashatjuk be. A pin
paraméter értelem szerűen a használni kívánt kivezetés száma. A függvény egy bool
típusú változóval tér vissza, ami 0 vagy 1 lehet. Az Arduino környezetben definiálva vannak a HIGH
(1) és LOW
(0) konstansok is, ezeket is lehet használni például egy feltételvizsgálat során.
Például: x = digitalRead(2); if(x == HIGH){...}
.
Ha elindítjuk a következő szimulációt, akkor azt láthatjuk, hogy az áramköri lapon lévő USER LED akkor világít, ha a gomb nincs lenyomva és akkor nem világít, ha le van nyomva.
A nyomógombhoz hasonlóan a kapcsolót is kipróbálhatjuk az alábbi szimulációban.
Pergésmentesítés
Ha a kódunkban a loop
ciklus gyorsan fut, akkor egy olyan nem kívánatos jelenség is felléphet, hogy egy gombnyomást több gombnyomásnak detektál (túlszámol) a program, pedig csak egyet szeretnénk. Ez akkor is megtörténhet, ha egy ideális kapcsolónk lenne, mivel ha nincs késleltetés a loop
függvényben, akkor többször beolvashatja a digitális bemenetet amíg le van nyomva a gomb. Egy valódi kapcsolónál ezen kívül egy másik jelenség is felléphet az ún. pergés vagy prellezés. A kapcsoló vagy nyomógomb belsejében található rugalmas mechanikai érintkezők az átkapcsolás során többször nekiütődhetnek és visszapattanhatnak a stabil kontaktus kialakulását megelőzően. Az pergés viszonylag gyorsan lezajlik általában 50 ms-on belül.
A következő szimulációban a túlszámlálás és a pergés jelenséget figyelhetjük meg. A szimulációt elindítva a Kód ablakban a kattintsunk a Soros Monitor gombra és felnyílik egy ablak. Ha lenyomjuk a gombot, akkor láthatjuk egymás alá kiírva a gombnyomások számát. Túlszámlálás esetén és a pergésmentesítés nélkül egy lenyomás többször van detektálva.
Lehetséges hardveresen és szoftveresen is pergésmentesíteni. Az utóbbira és a túlszámlálás elkerülésére látható egy példa a következő szimulációban. A pergésmentesítés rész lényege, hogy a gomb lenyomása után valamennyit késleltetni kell, hogy a pergés jelenség megszűnjön és csak utána végezzük el az adott feladatot. A túlszámlálás elkerülésére az egyik legegyszerűbb megoldás, hogy egy while
ciklussal egészen addig feltartjuk a kód futását, amíg le van nyomva a gomb.
A következő videóban 1 perc 37 másodperctől valódi áramkör esetén láthatjuk a nyomógomb használatát.
Az önellenőrzéshez következzen egy rövid kvíz a legfontosabb résztémákból: