Szilágyi Sándor Zoltán hobbielektronika és amatőr robottechnika oldala

Arduino kezdőknek cikksorozatom, melynek első 13 része publikálásra került. Amatőr robotok, robot autók és LED-kockák építése.

Arduino kezdőknek 3 - feszültség szintek, külső nyomógomb csatlakoztatása, hardveres és szoftveres lebegésmentesítés.

Szilágyi Sándor Zoltán   Villamosmérnök, mérnök-informatikus

 

A cikket megírtam: 2022. 01. 23-án

A Rádiótechnikában megjelent: 2022. április

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.

 

 

 3.1 Feszültség szintek

 

   Úgy terveztem, hogy a 3-ik cikkemben a multivibrátorokkal fogok foglalkozni. Az astabilt megírtam, majd a monostabil következett volna, amikor is úgy gondoltam, hogy a nyomógombok Arduino-hoz való csatlakoztatásáról is írok pár sort. Ebből a pár sorból egy teljes cikk lett, amit 3-adikként küldtem be a Rádiótechnikába.

     Előzmények: 2,5 évvel a cikk megírása előtt kezdtem el foglalkozni az Arduino-val, és az alapokat kihagyva egyből konkrét alkalmazást fejlesztettem, mivel ez volt a munkám épp akkor. Utána, az otthoni minimális „alapok” kipróbálása után nagyobb lépésekben haladva egy 5x5x5-ös LED-kocka építésébe kezdtem, majd a 3-adik layer felprogramozása után nemvárt hibába ütköztem: kivezéreltem egy adott layer egy adott led-jét, és ezzel egy időben halványan közvetlenül az alatta levő layer ugyanazon pozícióban levő led-je is felvillant, de halványabban. Több villamosmérnöktől és arduinóstól is kérdeztem, illetve internetes fórumokon írtam ki az észlelt, hibát, de senki se tudott segíteni benne. Se technikusok, se villamosmérnökök nem tudták megmondani, hogy mi lehet az "áthallás"-nak nevezett hiba. Ilyen jellegű hibát nem írtak sehol annak ellenére, hogy az adott weboldalak tartalma alapján építettem és programoztam. Ezt a kis kitérőt pont ezért írtam meg, mert itt van leírva a hiba egyik oka, a folytatás pedig a 13-adik részben, de mindenesetre sok segítséget fog adni egy teljesen kezdőnek, mivel a legtöbb internetes szakirodalom nem írt akkoriban a lebegésről, így egy egyszerű nyomógombos feladat is okozhat(tott) sikertelenséget nekik.

 

   Az Arduino az I/O portokon keresztül kommunikál a rácsatlakoztatott eszközökkel. A digitális I/O-k elvileg kétféle feszültség értéket vehetnek fel, az 1 és a 0, azaz a HIGH és a LOW állapotokat. Ha pontosabban akarok fogalmazni, akkor ezek nem feszültség szintek, hanem feszültség tartományok. A digitális pinek inputként és outputként is használhatók (lásd később a cikkben). Gyakorlatilag a H és L szintek (tartományok) között van egy használaton kívüli tiltott sáv (tartomány). Ennek a feszültség értéke nem értelmezhető, azaz ilyenkor az adott láb „lebeg”. Ez a feszültség tartomány tehát magasabb, mint az L-tartomány, de alacsonyabb, mint a H-tartomány.

   Néhány áramkör család jelszintjei:

-        RTL: Ut: 3,6V, logikai H szint: 1,6V, logikai L szint: 0,2V

-        DTL: Ut: 5V, logikai H szint: 3,5V, logikai L szint: 0,3V

-        TTL: Ut: 5V, logikai H szint: 2,0V (input) és 2,7V (output), logikai L szint: 0,8V (input) és 1,4V (output)

-        CMOS (3,3V tápfeszültségnél): Ut: 3,3V, logikai H szint: 2,0V, logikai L szint: 0,8V

-        végül Arduino (ATMega328) esetén: Vcc (Ut): 5V, logikai H szint: 3,0V, logikai L szint: 1,5V.

Arduino-nál tehát a tiltott sáv 1,5V és 3,0V között van.

 

 

3.2 Nyomógomb használati alapok

 

6. program: a nyomógomb első használata (lebegés)

    A nyomógombokkal rövid idejű kapcsoló impulzusokat hozunk létre. Amikor megnyomjuk, illetve amikor elengedjük több millisecundum idejű tűimpulzust is keltünk. Az első példában a fő problémát viszont nem ez fogja jelenteni, hanem a „lebegés”.

   Ebben a feladatban (7. ábra) a külső LED-et fogjuk ki- és bekapcsolni. Ez kerüljön pl a 11-es digitális lábra. A kapcsolás a szokásos, 220 Ohmos védőellenállással kapcsolódik a gnd pontra. A nyomógomb egy 10K-s ellenálláson keresztül kap +5V-ot, illetve a másik ága a 8-as pinre kapcsolódik.

button_1_aramkor_7._abra.png

7. ábra

 

button_1_program_8._abra.png

8. ábra

 

   A program (8. ábra) rövid elemzése: A ledet a 11-es, míg a nyomógombot a 8-as digitális lábra kötöttük. A led kimenetként, a nyomógomb pedig bemenetként van használva. Egy buttonState változó figyeli a gomb aktuális állapotát, amit a ciklusban a digitalRead paranccsal olvas be a 8-as lábról. Egy if-else szerkezettel vizsgálja meg, hogy ez logikai magas vagy alacsony állapotban van-e. Ha magas, akkor a led-et, azaz a 11-es pint-t magas állapotba helyezi, egyébként alacsony állapotban van.

   A működésnél azt várnánk, hogy a gomb megnyomásakor a led valóban felgyulladjon teljes fényerőre, a gomb elengedése után pedig teljesen aludjon el. Sajnos nem ez fog történni! A gomb megnyomása előtt a LED nálam már folyamatosan világít, majd a gomb megnyomása után a fényereje csak felerősödik. A gomb elengedése után a fényerő csökken, de nem alszik el! A hiba okát akár az ellenállás értékében is kezdhetjük keresni, pedig nem ott van. Míg a nyomógomb zárt állapotában az ellenálláson keresztül +5V-ra csatlakozik, addig nyitott állapotában lóg a levegőben, kb mint egy kis antennaként funkcionálva, és összegyűjti a zavaró jeleket a környezetéből. Ennek következtében kerül a lebegő állapotba, azaz a cikk elején tárgyalt logikai magas és alacsony szintek közé.

 

        7. program: a lebegés csökkentése felhúzó ellenállással

    Az előző példában tapasztalt lebegés csökkentésének első módja, hogy a kapcsoló üres állapotában ne a levegőben lógjon, hanem egy (felhúzó)ellenállás segítségével fel kell húzni +5V-ra. Az áramkörünk (9. ábra) tehát csak némileg módosul, azaz míg az egyik érintkezője továbbra is megkapja az ellenálláson keresztül a +5V-ot, addig a másik érintkezője nem a 8-as lábra, hanem a gnd-re fog csatlakozni, azaz a logikai alacsony szintre. A 8-as pin tehát nem az eredeti érintkezőre kapcsolódik, hanem arra, amelyikre a táp is. Az áramkör így módosul, viszont egy kicsit a programot (10. ábra) is át kell variálni, ugyanis a nyomógomb megnyomása előtt folyamatosan világított a led, majd a megnyomási időtartamig aludt csak el. A programban az if-es szerkezetben a LOW-t és a HIGH-t cseréljük fel, azaz a buttonState magas állapotában a led alacsony állapotban legyen. Az áramkör tehát nem tökéletes: a nyomógomb megnyomása nélkül ugyanis a 8-as láb folyamatosan magas szintet kap, míg a gomb megnyomása után azt a gnd-re kapcsolva kerül logikai alacsony szintre a 8-as láb.

 

button_2_aramkor_9._abra.png

9. ábra

 

button_2_program_10._abra.png

10. ábra

   További probléma (a cikk írásakor épp nem jelentkezett, de a korábbi kísérletezésekkor igen), hogy ritkábban, de még így is előjöhet a lebegési hiba, ezért ezt a javított áramkört is tovább fejleszthetjük.

 

8. program: a lebegés alaposabb csökkentése belső programozható felhúzó ellenállással

    Végül érdemes a belső felhúzó ellenállással is foglalkozni. Ezek programozhatóak, és mindegyik lábhoz hozzá vannak rendelve az eszközön belül. A 11. ábrának megfelelően a +5V-os lábat elhagyjuk, és a nyomógomb a 8-as és a gnd láb közé kerül, természetesen az ellenállás marad. A program (12. ábra) egy új sorral bővül, azaz nem fizikailag kötjük +5V-ra, hanem szoftveresen programozzuk arra a 8-as lábon keresztül. A belső felhúzó ellenállás bekapcsolása tehát úgy történik, hogy egy lábat inputként definiálunk, majd magas értéket írunk ki rá. A működése javul az előzőhöz képest, azaz itt már nem fordult elő lebegési hiba.

 

button_3_aramkor_11._abra.png

11. ábra

 

button_3_program_12._abra.png

12. ábra

   A belső felhúzó ellenállást bekapcsoló két sor össze is vonható az INPUT_PULLUP használatával, ahogy az a 13-ik ábrán is látható. A működése ugyanaz, mint a 12-ik ábránál.

 

button_4_program_13._abra.png

13. ábra

 

Felhasznált irodalom:

https://electro.blog.hu/2019/01/31/logikai_szintek (2022. 01. 19.)

https://www.youtube.com/watch?v=x7xlJ8GHa-M&t=651s&ab_channel=P%C3%A9terPrimusz

Kovács Csongor: Digitális elektronika

 

A cikket megírtam: 2022. 01. 23-án

A Rádiótechnikában megjelent: 2022. április

 

 

Weblap látogatottság számláló:

Mai: 17
Tegnapi: 3
Heti: 20
Havi: 145
Össz.: 3 874

Látogatottság növelés
Oldal: Arduino kezdőknek 3 - feszültség szintek, nyomógombok, lebegésmentesítés
Szilágyi Sándor Zoltán hobbielektronika és amatőr robottechnika oldala - © 2008 - 2025 - szilagyi-robot.hupont.hu

A HuPont.hu ingyen adja a tárhelyet, és minden szolgáltatása a jövőben is ingyen ...

ÁSZF | Adatvédelmi Nyilatkozat

X

A honlap készítés ára 78 500 helyett MOST 0 (nulla) Ft! Tovább »