L7: Sakagailua
Etiketak:
Sakagailua
Zer ikasiko duzu ikasgai honetan
Ikasgai honetan honako hauek landuko ditugu:
- Zer den sakagailu bat eta nola funtzionatzen duen.
- Sarrerako eta irteerako gailuen arteko desberdintasuna.
- Gure programetan erabakiak hartzea: “baldin eta…egin…bestela” blokea.
- Sakagailuaren egoera irakurtzea gure programatik, LED bat kontrolatzeko.
Aurretiazko baldintzak
Ikasgai hau jarraitu ahal izateko, LEDarekin egindako oinarrizko muntaketa ezagutu behar duzu. Muntaketa hori 1. ikasgaian: Nire lehen proiektua, 2. ikasgaian: LED diodoa eta 3. ikasgaian: LED diodoa (2) landu dugu.
Azalpen teorikoa
Gehiago jakin nahi dut!
Sarrerak eta irteerak
Aurreko ikasgaietan LEDak kontrolatzen ikasi dugu. Gailu horiek gure garapen-plakatik jasotzen dute informazioa. Programak “piztu LEDa” esaten duenean, plakak irteerako seinale bat bidaltzen du. Beraz, LEDa irteerako gailu bat da: programatik jasotzen ditu aginduak.
Baina zer gertatzen da gure programak mundu errealean gertatzen den zerbaiti erantzutea nahi badugu? Adibidez, norbaitek botoi bat sakatzen duenean LED bat piztea. Horretarako, sarrerako gailuak behar ditugu: garapen-plakara informazioa bidaltzen duten gailuak, programak irakurri ahal izan dezan.
Sakagailua edo botoia sarrerako gailurik sinpleenetako bat da. Sakatu egiten dugu, eta gure programak hori hauteman dezake.
| Irteera | Sarrera | |
|---|---|---|
| Norabidea | Programatik kanpora | Kanpotik programara |
| Adibideak | LEDa, motorra, burrunbagailua | Sakagailua, argi-sentsorea |
| Nork erabakitzen du? | Programak | Erabiltzaileak edo inguruneak |
Zer da sakagailu bat?
Sakagailua edo botoia osagai elektroniko sinple bat da, une batez aktibatzen den etengailu baten moduan funtzionatzen duena. Sakatzen dugunean, zirkuitua itxi egiten da eta korronte elektrikoa igarotzen uzten du. Askatzen dugunean, zirkuitua ireki egiten da eta korrontea ez da igarotzen.
Sakagailua eta haren barne-funtzionamendua
Ohiko etengailu batek ez bezala (adibidez, gelako argiaren etengailuak), sakagailua sakatuta mantentzen dugun bitartean bakarrik dago aktibo. Askatu bezain laster, jatorrizko posiziora itzultzen da.
Diagraman hau ikus dezakezu:
- Sakatu gabe: zirkuitua irekita dago, eta ez da korronterik igarotzen.
- Sakatuta: zirkuitua itxi egiten da, eta korrontea igaro daiteke.
Erabakiak hartu: “baldin eta…egin” blokea
Orain arte, gure programek bloke-sekuentzia bat exekutatzen zuten, blokeak bata bestearen atzetik eta beti modu berean. Baina programarik interesgarrienak dira erabakiak hartu eta gertatzen ari denaren arabera gauza ezberdinak egin ditzaketenak.
Erabakiak hartzeko, “baldin eta” izeneko logika blokea erabiltzen dugu (ingelesez, if). Honela funtzionatzen du:
- Baldin eta zerbait egia bada → egin gauza bat.
- Bestela → egin beste gauza bat.
Adibidez, pentsa dezagun nola erabakitzen dugun aterkia hartu ala ez:
- Baldin eta Euria ari badu → orduan aterkia hartuko dut.
- Bestela Euririk egiten ez badu → orduan aterkia etxean utziko dut.
Gure kasuan:
- Baldin eta Sakagailua sakatuta badago → orduan LEDa piztuko dut.
- Bestela ez badago sakatuta → orduan LEDa itzaliko dut.
Erabaki mota horri baldintzazkoa esaten zaio, eta programazioko kontzeptu garrantzitsuenetako bat da. Hemendik aurrera gure programak askoz interesgarriagoak izango dira!
Pull-up erresistentzia
Sakagailu bat sarrera gisa konfiguratutako GPIO pin batera konektatzen dugunean, arazo bat sortzen da: sakagailua sakatu gabe dagoenean, pina “airean” geratzen da (ez dago ez V+ ez GNDra konektatuta). Egoera horretan, pinak ustekabeko balioak irakur ditzake: batzuetan ON eta beste batzuetan OFF, guk ezer ukitu gabe.
Arazo hori saihesteko, pin-ak beti balio ezagun bat duela ziurtatu behar dugu. Horretarako, pull-up erresistentzia bat erabil dezakegu: GPIO pinaren eta tentsio positiboaren (3V3) artean konektatzen dugun erresistentzia bat. Honela:
- Sakagailua sakatu gabe dagoenean, pinak tentsio positiboa irakurtzen du erresistentziaren bidez → balioa ON da.
- Sakagailua sakatuta dagoenean, pina zuzenean GNDra konektatzen da → balioa OFF da. (GND “nagusitzen” da, zuzenean konektatuta dagoelako, erresistentziarik gabe.)
ESP32 txipak software bidez aktiba daitezkeen barne pull-up erresistentziak ditu. Sakagailurako goi-mailako blokea erabiltzen dugunean, konfigurazio hori automatikoki egiten da. Behe-mailako blokeak erabiltzen ditugunean, “pull-uparekin sarrera” aukera hautatu behar dugu.
Atal praktikoa
Material hauek behar dituzu:
- ESP32 garapen-plaka.
- USB konexio-kablea.
- Prototipo-plaka.
- Sakagailua (botoia).
- LED gorria.
- 100 Ohm-eko erresistentzia.
- Konexio-kableak.
Eskema elektronikoa

Konexio diagrama
Osagaien konexioa prototipo-plakan
Pausoz pauso
- Konekta ezazu kable beltz bat garapen-plakaren GND konektorearen eta prototipo-plakaren lerro urdinaren artean. Lerro urdina gure 0 volteko, erreferentzia edo GND lerroa izango da.
- Konekta ezazu kable gorri bat garapen-plakaren 3V3 konektorearen eta prototipo-plakaren lerro gorriaren artean. Lerro gorria gure tentsio positiboko (V+) lerroa izango da.
- Jarri sakagailua prototipo-plakan, erdiko bi blokeen artean, erdiko kanala zeharkatuz.
- Konekta ezazu kable bat garapen-plakaren D4 (GPIO4) pinetik sakagailuaren terminaletako batera.
- Konekta ezazu kable beltz bat sakagailuaren beste terminaletik GND lerro urdinera.
- Konekta ezazu kable gorri bat garapen-plakaren D2 (GPIO2) pinetik prototipo-plakaren erdialdeko lerro libre bateraino.
- Jar ezazu 100 Ohm-eko erresistentzia bat, bere terminaletako bat aurreko pausoko kablearen lerro berean gera dadin.
- Konekta ezazu LED gorria: anodoak erresistentziaren beste terminalaren lerro berean geratu behar du, eta katodoak beste lerro batean.
- Konekta ezazu kable beltz bat LEDaren katodoaren lerroaren eta GND lerro urdinaren artean.
- Konekta ezazu garapen-plaka ordenagailura USB kablearekin.
Ikasgai honetan ESP32ren barneko pull-up erresistentzia erabiliko dugu sakagailurako. Beraz, ez dugu kanpoko erresistentzia gehigarririk behar sakagailuarentzat. 100 Ohm-eko erresistentzia besterik ez dugu behar LEDa babesteko.
Kodea
Gehiago jakin nahi dut!
Ikasgai honetan logika blokeak erabiliko ditugu sakagailuaren egoeraren arabera erabakiak hartzeko. Programak baldintzak egiaztatzen ditu martxan dagoen bitartean.
“Baldin eta” blokeak bi atal nagusi ditu:
- Baldintza: egiazkoa edo faltsua izan daitekeen zerbait. Gure kasuan, sakagailua sakatuta dagoen egiaztatuko dugu.
- Ekintza: baldintza egiazkoa denean gertatzea nahi duguna.
Gainera, “bestela” atal bat gehi dezakegu. Atal hori baldintza faltsua denean exekutatuko da. Gehitzeko, klikatu “baldin eta” blokearen engranajearen ikonoan eta arrastatu “bestela” elementua egituraren barrura.
"=" konparazio-blokeak bi balio berdinak diren egiaztatzeko aukera ematen digu. Sakagailuaren goi-mailako blokeak ematen duen balioa ON balioarekin alderatzeko erabiliko dugu: bloke horretan, ON balioak sakatuta dagoela esan nahi du. GPIO pina zuzenean irakurtzen dugunean, berriz, OFF izango da sakatutako egoera, pull-up konexioagatik.
Begizta nagusiaren buelta bakoitzean sakagailuaren egoera irakurriko dugu. Egoera behin eta berriz kontsultatzeko modu horri polling esaten zaio.
Piztu LEDa botoia sakatzean. Goi-mailako blokeak.
Aurreko ikasgaietan ikasitako pausoak jarraituz, eraiki eta exekutatu sketch hau:

Pausoz pauso
Klikatu Gailuak eta arrastatu “izena duen LEDa” blokea konfigurazioa blokera. Idatzi NireLED izena eta hautatu GPIO2 pina. Garapen-plakaren barneko LEDa erabili nahi baduzu, erabili GPIO2 pina. Kanpoko LEDa erabiltzen baduzu, 3. ikasgaian bezala, hautatu konektatu duzun pina; ikasgai honetako muntaketan GPIO2 da.
Klikatu berriz Gailuak eta arrastatu “izena duen sakagailua/etengailua” blokea konfigurazioa blokera, aurrekoaren azpian. Idatzi NireSakagailua izena eta hautatu GPIO4 pina.
Orain erabakiak hartzeko logika gehituko dugu. Klikatu tresna-kutxaren Logika ikonoan eta arrastatu “baldin eta” bloke bat begizta nagusira.
“Bestela” atala gehitzeko, klikatu “baldin eta” blokearen engranajearen ikonoan eta arrastatu “bestela” elementua agertzen den egituraren barrura. Ondoren, itxi leihoa.
Baldintza bat behar dugu “baldin eta” blokerako. Klikatu Logika eta arrastatu konparazio-bloke bat (= ikurra duena) “baldin eta” blokearen baldintzaren eremura.
Konparazioaren ezkerreko aldean, jarri Gailuak kategoriako “sakagailuaren egoera lortu” blokea. Egiaztatu NireSakagailua hautatuta dagoela.
Konparazioaren eskuineko aldean, jarri Gailuak kategoriako ON/OFF bloke bat. Hautatu ON.
“Baldin eta” blokearen “egin” atalean, gehitu “jarri LED” bloke bat, NireLED izenarekin eta 100 balioarekin (%100ean piztuta).
“Bestela” atalean, gehitu beste “jarri LED” bloke bat, NireLED izenarekin eta 0 balioarekin (itzalita).
Sakatu Exekutatu botoia eta itxaron sketch-a konpilatu eta plakara transferitu arte. Dena ondo joan bada, LEDa piztuko da sakagailua sakatuta mantentzen duzunean, eta itzaliko da askatzen duzunean.
Ikusi zer aldatu den aurreko ikasgaiekin alderatuta! Lehen, LEDak beti gauza bera egiten zuen: keinuka aritzen zen. Orain zeuk erabakitzen duzu noiz piztu eta noiz itzali, botoia sakatuz.
Piztu LEDa botoia sakatzean. Behe-mailako blokeak.
Eraiki eta exekutatu sketch hau:

Pausoz pauso
- Klikatu Gailuak eta arrastatu “konfiguratu pin” blokea konfigurazioa blokera. Hautatu 4 pina eta “pull-uparekin sarrera” modua. Horrela, GPIO4 pina sarrera gisa konfiguratzen da eta barneko pull-up erresistentzia aktibatzen da.
- Arrastatu beste “konfiguratu pin” bloke bat. Hautatu 2 pina eta “irteera” modua.
- Klikatu Logika eta arrastatu “baldin eta” bloke bat begizta nagusira. Gehitu “bestela” atala, aurreko ariketan bezala.
- Baldintzarako, erabili konparazio-bloke bat: ezkerrean “irakurri pin 4 (r)en egoera” blokea eta eskuinean OFF. Utzi markatuta “botoiaren errebotea saihestu” aukera, irudian bezala. Pull-up sarrerarekin, pinak OFF irakurtzen du sakagailua sakatuta dagoenean.
- “Egin” atalean, gehitu “jarri pin 2 ON” blokea.
- “Bestela” atalean, gehitu “jarri pin 2 OFF” blokea.
- Sakatu Exekutatu eta egiaztatu goi-mailako blokeekin bezala funtzionatzen duela.
Sakagailuaren sarrera irakurtzeko behe-mailako blokeak erabiltzen ditugunean, hautatu “pull-uparekin sarrera” modua. Horrela, botoia sakatu gabe dagoenean irakurketa okerrak saihestuko ditugu. Goi-mailako blokeekin, konfigurazio hori automatikoki egiten da.
Ariketa gehigarriak edo erronkak
- Aldatu sketch-a, botoia sakatuta mantentzen duzun bitartean LEDa keinuka aritzeko, etengabe piztuta egon beharrean.
Horretarako, konbinatu “baldin eta” blokea aurreko ikasgaietan erabilitako itxaron-blokeekin. “Baldin eta” blokearen “egin” atalean, gehitu sekuentzia hau: piztu, itxaron, itzali eta itxaron.
Konekta ezazu beste kolore bateko bigarren LED bat beste GPIO pin batera. Programatu sketch-a, botoia sakatuta dagoenean LED bat pizteko eta bestea itzaltzeko. Botoia sakatu gabe dagoenean, alderantziz egin behar dute.
Konektatu bi sakagailu. Programatu sketch-a, sakagailu bakoitzak modu independentean LED desberdin bat kontrola dezan.
Ikasitakoaren laburpena
- Ikasi dugu zer desberdintasun dagoen sarrerako gailuen (sakagailua, adibidez) eta irteerako gailuen (LEDa, adibidez) artean.
- Sakagailu bat konektatu dugu garapen-plakara, eta haren egoera irakurtzen ikasi dugu gure programatik.
- “Baldin eta…egin…bestela” logika blokea erabili dugu, programak sakagailuaren egoeraren arabera erabakiak hartzeko.
- Ikasi dugu zer den pull-up erresistentzia eta zergatik behar den sakagailuaren egoera behar bezala irakurtzeko.
- Goi-mailako eta behe-mailako blokeak erabili ditugu emaitza bera lortzeko.
Hurrengo urratsak
- Ikasi sakagailuaren egoera etenen bidez irakurtzen 8. ikasgaian.
Ariketa gehigarrien soluzioak
Erakutsi
LEDa keinuka jarri botoia sakatuta dagoen bitartean
Botoia sakatzean LEDa keinuka aritzeko, etengabe piztuta egon beharrean, keinu-sekuentzia gehituko dugu “baldin eta” blokearen “egin” atalean.
LEDa keinuka, botoia sakatuta dagoen bitartean
Botoia sakatuta dagoenean (ON), programak sekuentzia hau exekutatzen du:
- Piztu LEDa %100ean.
- Itxaron 500 milisegundo.
- Itzali LEDa (0 balioa).
- Itxaron 500 milisegundo.
Botoia sakatu gabe dagoenean, LEDa itzalita geratzen da. Botoia sekuentziaren erdian askatzen badugu, programak sekuentzia amaituko du egoera berriz irakurri aurretik. Beraz, erantzuna ez da berehalakoa itxaronaldietan.