Arduino kezdőknek 5 – Monostabil multivibrátorok, pergésmentesítés
Szilágyi Sándor Zoltán Villamosmérnök, mérnök-informatikus
A cikket megírtam: 2022. 03. 08-án
A Rádiótechnikában megjelent: 2022. május
Ez a blog oldal tehát az eredeti, saját tulajdonomban levő dokumentum, és nem a nyomtatásban megjelent másolata. A cikket én írtam, én küldtem be, és csak azután jelent meg nyomtatott formában is. A nyomtatásban megjelent cikkeimre szerződést nem kötöttek velem, és anyagi juttatást se kaptam soha érte. Mivel a magazin már nem kapható, ezért a megjelent 13 cikkemet itt folytatnám, mivel Magyarországon jelenleg nincs hobbielektronikával foglalkozó magazin.
5.1 Monostabil multivibrátorok
A 4-edik szám folytatása következik. Az astabil billenőkapcsolások után először a monostabil multivibrátorokat mutatom be 3 példán keresztül. Ennek a cikknek is lesz még folytatása, egyrészt az alapok ismertetése miatt (bistabil multivibrátorok, véletlen szám generálás, Schmitt-triggerek), majd később a LED-kockák vagy a robotok vezérlésénél.
A monostabil multivibrátoroknak egy stabil állapotuk van, erre utal a nevük is (mono = egy). A legtöbb elektronikai kapcsolásban az L-szint (low, alacsony, 0) szokott lenni a stabil állapot. Ha a bemenetre nem kapnak vezérlő impulzust, akkor a kimenetük ezen az egy stabil állapotban marad. Egy trigger-jelet (vezérlő jelet) kapcsolva a bemenetre, a kimenet átbillen a másik (H) állapotába (high, magas, 1), viszont, mivel ez egy instabil – azaz nem stabil – állapot, így csak meghatározott ideig marad ott, majd visszabillen az eredeti stabil állapotába. A késleltetést elektronikus kapcsolás esetén RC-elemekkel kell beállítani, Arduino esetén elég egy delay()-t begépelni egy előre meghatározott értékkel.
A gyakorlati éltből néhány példa az alkalmazására: lépcsőház időzített világítása, vagy egy adott jelre kapcsoljon be egy ventilátor, majd az idő lejárta után kapcsoljon ki. Bonyolultabb alkalmazása lehet egy 2-motoros kis robotautó modell, ahol a főmotor hajtja előre, majd ha elérte a falat (érzékelő által küldött impulzusra), a főmotort lekapcsolja, és adott időre bekapcsolja a kormánymotort (mely pl csak egy irányba képes kormányozni), majd az idő lejárta után visszavált a főmotorra és megy tovább a következő ütközésig, stb...
Az elektronikus kapcsolásokkal foglalkozó szakirodalmak egyik része csak 1-ledes áramköröket közöl, míg vannak olyanok is, amelyek csak a 2-ledest. Én mindkét változatot elkészítettem Arduino-ra. Mivel ezek most még csak modellek, a jövőben konkrétabb alkalmazásokat is be fogok mutatni rájuk.
13. Program: monostabil multivibrátor (1 ledes)
A 3-adik cikkem bevezetőjében írtam, hogy lesz folytatása a nyomógombok alkalmazásának. Ez az első folytatás, de még számtalan fogja követni.
Az elektronikai kapcsolás (19. ábra) két részből áll. Az egyik a 11-es lábra kötött kapcsoló vagy nyomógomb áramköre, a másik a 12-es lábra kapcsolt led köre. A nyomógombnál a belső programozható felhúzó ellenállást használtam, ahogy az a 20. ábrán is látható: INPUT_PULLUP. A 11-es lábat tehát bemenetként definiáljuk, majd magas értéket írunk ki rá, így egy használható, lebegésmentesített nyomógombot kapunk.
A program ellenőrzése, majd feltöltése után a kapcsolásunk stabil állapotba kerül, azaz nem fog világítani a led. A gomb megnyomása után (pillanatnyi megnyomást feltételezve) trigger jel kerül a bemenetre, magas állapotba kerül, melyet a led kigyulladása jelez is. A delay()-ben meghatározott ideig égni fog – de mivel ez egy instabil állapot, az idő letelte után visszabillen az eredeti stabil állapotába, azaz a led elalszik. Fontos a pillanatnyi gombnyomás, mert hosszabb ideig nyomva tartva majd elengedve más (de hasonló) működés tapasztalható: megmarad a monostabil jellegű működés, de a megadottnál kevesebb H-állapotbeli idővel. Ennek a problémának a megoldásával a következő (14-es) feladat foglalkozik.
19. ábra
20. ábra
5.2 Pergésmentesítés
14. Program: a pergésmentesítés
Ismét a 3-ik cikkemhez térnék vissza. Ott írtam a lebegésről és a különböző megoldásairól. A nyomógombot megnyomva tűimpulzusokat generálunk (akaratunk ellenére), melyek kb 10-15 msec idejűek lehetnek. A nyomógombot fel kellett húzni +5V-ra, hogy ne legyen lebegés, azaz ne szedje össze a környezetéből a zavarokat. Ezt a problémát javítjuk tovább a pergésmentesítéssel, azaz a nyomógomb mechanikus szerkezete által generált tűimpulzusokat is ki kell szűrni. A pergésmentesítést szoftveresen oldjuk meg, azaz egy új sort kell csak begépelni az előző feladatunkba: a delay(20) késleltetést. Mint korábban írtam, a delay() egy ezred másodperces késleltetést hoz létre. A mi esetünkben 20 msec-est, azaz éppen többet, mint a nyomógomb feltételezett tűimpulzusainak legnagyobbika. A program ezután mindig 20 ezredmásodpercenként olvassa be a kapcsoló állapotát.
A pergésmentesítés további előnye, hogy szándékosan, többször megnyomva a nyomógombot (ennek tesztelésére vettem fel 5000 msec-re a led világítási idejét, azaz a nem-stabil állapotot), csak az első gombnyomást veszi figyelembe. Ekkor kezdődik az 5 másodperces időzítés, mely tartama alatt a led folyamatosan világít. Ezalatt a gombot többször megnyomva a program azt figyelmen kívül hagyja, és csak az első megnyomáshoz képesti időzítés lesz az érvényes. Ezzel kiküszöbölhető a szándékos zavarkeltés is.
A 21-ik ábrán látható a lebegésmentesített/pergésmentesített monostabil multivibrátor programja. Az elektronikai kapcsolás megegyezik az előzőével (19. ábra).
21. ábra
15. Program: monostabil multivibrátor (2 ledes)
A feladat csak annyiban tér el az előzőtől, hogy mindkét állapot folyamatosan jelezve van, hol az egyik, hol a másik leddel.
Alapállapotban tehát a 13-as lábra kötött LED2 világít, és a 12-es lábra kötött LED1 alacsony szinten van. Megnyomva a (pergésmentesített) nyomógombot a rendszer az instabil állapotba kerül 5 másodpercre (ez lett beállítva a példában), azaz a 12-es lábra kötött led fog világítani, míg a 13-as lábra kötött elalszik. A gomb egyszeri megnyomása után szándékos pergést generálva – azt többször megnyomva – nem jön elő újabb hiba, azaz a beállított késleltetési ideig van csak ebben az állapotban, majd visszabillen a stabil állapotába és a LED2 fog ismét világítani.
22. ábra
23. ábra
Felhasznált irodalom:
Zsom Gyula: Digitális technika 1. (7. kiadás, 2010)
Szittya Ottó: Digitális és Analóg Technika – Informatikusoknak 1. (1999)
Kovács Csongor: Digitális elektronika (ismeretlen évjárat)
https://megtestesules.info/hobbielektronika/2018/elektro18_10.pdf (2022. 03. 20-i állapot)
A cikket megírtam: 2022. 03. 08-án
A Rádiótechnikában megjelent: 2022. május