Obvod

Teď na chvíli necháme programování a postavíme si elektrický obvod. Vezmi si modrou svítivou diodu (LED, „světýlko”) a nepájivé pole („hloupou destičku”). Zkusíme světýlko rozsvítit.

LED rozsvítíš tak, že ji připojíš ke zdroji napětí, například k baterce.

Jako zdroj napětí můžeme použít i náš modul. Ten bere elektřinu přes USB a dává nám ji k dispozici na některých svých „nožičkách”: konkrétně plus na nožičce označené 3V a mínus na nožičce označené G. Na tyhle nožičky musíš zapojit diodu.

Připojování diody má jeden háček: musíš ji zapojit správným směrem – plus na plus, mínus na mínus. Opačně dioda svítit nebude. Dobrá zpráva je, že když diodu otočíš špatně, nic se jí nestane.

Základní vlastnost diody je ta, že pustí elektrický proud jen jedním směrem. Svítící dioda – angl. Light Emitting Diode, LED – ještě k tomu navíc svítí.

Je potřeba rozpoznat rozdíl mezi nožičkami diody. Katoda (-) je ta kratší nožička. Pouzdro diody je u katody trochu seříznuté a vevnitř v pouzdře, když se pozorně podíváš, uvidíš u katody větší plíšek. Té druhé nožičce se říká anoda (+).

Tak, teď víš, kam diodu zapojit: katodu (kratší nožičku) na G a anodu na 3V.

Držení nožiček diody u nožiček modulu by ti nejspíš zaměstnalo obě ruce. Aby sis je uvolnila, použij nepájivé pole (angl. breadboard). Je v něm spousta dírek, do kterých se dají strkat dráty. V rámci každé poloviny destičky je každá řada dírek – tedy každá pětice – spojená dohromady. Když zapojíš drátky do stejné řady, spojíš je tím.

Zasuň modul do nepájivého pole. Pak připoj katodu do dírky ve stejné řadě, kde je nožička 3V modulu, a podobně anodu k G. Mělo by to vypadat jako na tomto obrázku:

diagram zapojení

Potom zapoj USB kabel. Dioda by se měla rozsvítit!

Zkus si, co se stane, když diodu zapojíš naopak.

diagram zapojení

Aby dioda svítila, musí být připojená na dvě místa, mezi kterými je takzvaný potenciálový rozdíl — napětí. Na nožičce G je 0 voltů; na nožičce 3V jsou 3,3 volty – je tedy mezi nimi rozdíl 3,3 V, přesně tolik, kolik modrá LED potřebuje ke svícení.

Samotná hodnota napětí nedává smysl – například říct, že je na jednom místě 3,3 V je nepřesné. Hodnota ve voltech se vždycky musí k něčemu vztahovat; vyjadřuje rozdíl mezi dvěma místy. V elektronice používáme rozdíl oproti „zemi” – napětí na nožičce G. Stanovíme si, že tam je 0 voltů a ostatní napětí počítáme vzhledem k ní. Na nožičce 3V je tedy napětí 3,3 V vzhledem k zemi.

Výstup

Proč jsme diodu na to, aby se rozsvítila, připojili k modulu a ne jen k baterce? Ten modul je trošku složitější zařízení než baterka a jedna důležitá věc, kterou umí navíc, je nastavovat napětí na různých nožičkách. Umí zařídit, aby se nožička chovala jednou jako 3V a jindy jako G. Když připojíš diodu mezi G a takovou přepínatelnou nožičku, můžeš nastavit, kdy svítí a kdy ne.

Přepoj anodu diody z 3V3 na D5. Katodu nech na G.

Máš-li zapojeno, znovu se připoj k MicroPythonu a zadej následující kód:

from machine import Pin
pin = Pin(14, Pin.OUT)
pin.value(0)
pin.value(1)

Když objekt Pin vytvoříš s Pin.OUT, MicroPython na něm bude nastavovat napětí – buď 3,3 V (value(1)) nebo 0 V (value(0)). A tak se dá s diodou blikat.

Číslování nožiček je bohužel dvojí – nožička označená jako D5 má v procesoru přiřazené číslo 14. Třída Pin v MicroPythonu používá číslování procesoru. Naštěstí máš tahák, kde snadno dohledáš že D5 a Pin(14) jsou dvě jména stejné nožičky.

Zvládneš napsat program, který zařídí, aby dioda svítila pouze když je zmáčknuté tlačítko FLASH a jinak ne?

Nápověda: Můžeš pořád dokola zjišťovat stav tlačítka a nastavovat podle něj stav LED.

Řešení

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-podzim-pondeli:micropython:4",
      "title": "Obvod",
      "html": "\n          \n    \n\n    <h2>Obvod</h2>\n<p>Te&#x10F; na chv&#xED;li nech&#xE1;me programov&#xE1;n&#xED; a postav&#xED;me si elektrick&#xFD; obvod.\nVezmi si modrou sv&#xED;tivou diodu (LED, &#x201E;sv&#x11B;t&#xFD;lko&#x201D;) a\nnep&#xE1;jiv&#xE9; pole (&#x201E;hloupou desti&#x10D;ku&#x201D;).\nZkus&#xED;me sv&#x11B;t&#xFD;lko rozsv&#xED;tit.</p>\n<p>LED rozsv&#xED;t&#xED;&#x161; tak, &#x17E;e ji p&#x159;ipoj&#xED;&#x161; ke <em>zdroji nap&#x11B;t&#xED;</em>, nap&#x159;&#xED;klad k baterce.</p>\n<p>Jako zdroj nap&#x11B;t&#xED; m&#x16F;&#x17E;eme pou&#x17E;&#xED;t i n&#xE1;&#x161; modul.\nTen bere elekt&#x159;inu p&#x159;es USB a d&#xE1;v&#xE1; n&#xE1;m ji k dispozici\nna n&#x11B;kter&#xFD;ch sv&#xFD;ch &#x201E;no&#x17E;i&#x10D;k&#xE1;ch&#x201D;:\nkonkr&#xE9;tn&#x11B; plus na no&#x17E;i&#x10D;ce ozna&#x10D;en&#xE9; <code>3V</code>\na m&#xED;nus na no&#x17E;i&#x10D;ce ozna&#x10D;en&#xE9; <code>G</code>.\nNa tyhle no&#x17E;i&#x10D;ky mus&#xED;&#x161; zapojit diodu.</p>\n<p>P&#x159;ipojov&#xE1;n&#xED; diody m&#xE1; jeden h&#xE1;&#x10D;ek:\nmus&#xED;&#x161; ji zapojit spr&#xE1;vn&#xFD;m sm&#x11B;rem &#x2013; plus na plus, m&#xED;nus na m&#xED;nus.\nOpa&#x10D;n&#x11B; dioda sv&#xED;tit nebude. Dobr&#xE1; zpr&#xE1;va je, &#x17E;e\nkdy&#x17E; diodu oto&#x10D;&#xED;&#x161; &#x161;patn&#x11B;, nic se j&#xED; nestane.</p>\n<div class=\"admonition note\"><p>Z&#xE1;kladn&#xED; vlastnost <em>diody</em> je ta, &#x17E;e pust&#xED;\nelektrick&#xFD; proud jen jedn&#xED;m sm&#x11B;rem. Sv&#xED;t&#xED;c&#xED; dioda\n&#x2013; <em>angl. Light Emitting Diode, LED</em> &#x2013; je&#x161;t&#x11B; k\ntomu nav&#xED;c sv&#xED;t&#xED;.</p>\n</div><p>Je pot&#x159;eba rozpoznat rozd&#xED;l mezi no&#x17E;i&#x10D;kami diody.\n<em>Katoda</em> (<code>-</code>) je ta krat&#x161;&#xED; no&#x17E;i&#x10D;ka.\nPouzdro diody je u katody trochu se&#x159;&#xED;znut&#xE9;\na vevnit&#x159; v pouzd&#x159;e, kdy&#x17E; se pozorn&#x11B; pod&#xED;v&#xE1;&#x161;, uvid&#xED;&#x161;\nu katody v&#x11B;t&#x161;&#xED; pl&#xED;&#x161;ek.\nT&#xE9; druh&#xE9; no&#x17E;i&#x10D;ce se &#x159;&#xED;k&#xE1; anoda (<code>+</code>).</p>\n<p>Tak, te&#x10F; v&#xED;&#x161;, kam diodu zapojit: katodu (krat&#x161;&#xED; no&#x17E;i&#x10D;ku)\nna <code>G</code> a anodu na <code>3V</code>.</p>\n<p>Dr&#x17E;en&#xED; no&#x17E;i&#x10D;ek diody u no&#x17E;i&#x10D;ek modulu by ti nejsp&#xED;&#x161;\nzam&#x11B;stnalo ob&#x11B; ruce. Aby sis je uvolnila, pou&#x17E;ij\n<em>nep&#xE1;jiv&#xE9; pole</em> (angl. <em>breadboard</em>).\nJe v n&#x11B;m spousta d&#xED;rek, do kter&#xFD;ch se daj&#xED; strkat dr&#xE1;ty.\nV r&#xE1;mci ka&#x17E;d&#xE9; poloviny desti&#x10D;ky je ka&#x17E;d&#xE1; &#x159;ada d&#xED;rek &#x2013;\ntedy ka&#x17E;d&#xE1; p&#x11B;tice &#x2013; spojen&#xE1; dohromady.\nKdy&#x17E; zapoj&#xED;&#x161; dr&#xE1;tky do stejn&#xE9; &#x159;ady, spoj&#xED;&#x161; je t&#xED;m.</p>\n<p>Zasu&#x148; modul do nep&#xE1;jiv&#xE9;ho pole. Pak p&#x159;ipoj katodu\ndo d&#xED;rky ve stejn&#xE9; &#x159;ad&#x11B;, kde je no&#x17E;i&#x10D;ka\n<code>3V</code> modulu, a podobn&#x11B; anodu k&#xA0;<code>G</code>.\nM&#x11B;lo by to vypadat jako na tomto obr&#xE1;zku:</p>\n<p><span class=\"figure\"><a href=\"/2019/brno-podzim-pondeli/micropython/output/static/circuits/led_bb.svg\"><img src=\"/2019/brno-podzim-pondeli/micropython/output/static/circuits/led_bb.svg\" alt=\"diagram zapojen&#xED;\"></a></span></p>\n<p>Potom zapoj USB kabel. Dioda by se m&#x11B;la rozsv&#xED;tit!</p>\n<p>Zkus si, co se stane, kdy&#x17E; diodu zapoj&#xED;&#x161; naopak.</p>\n<p><span class=\"figure\"><a href=\"/2019/brno-podzim-pondeli/micropython/output/static/circuits/led_bb_off.svg\"><img src=\"/2019/brno-podzim-pondeli/micropython/output/static/circuits/led_bb_off.svg\" alt=\"diagram zapojen&#xED;\"></a></span></p>\n<p>Aby dioda sv&#xED;tila, mus&#xED; b&#xFD;t p&#x159;ipojen&#xE1; na dv&#x11B; m&#xED;sta,\nmezi kter&#xFD;mi je takzvan&#xFD; <em>potenci&#xE1;lov&#xFD; rozd&#xED;l</em> &#x2014; nap&#x11B;t&#xED;.\nNa no&#x17E;i&#x10D;ce <code>G</code> je 0 volt&#x16F;; na no&#x17E;i&#x10D;ce\n<code>3V</code> jsou 3,3 volty &#x2013; je tedy mezi nimi rozd&#xED;l 3,3 V, p&#x159;esn&#x11B; tolik,\nkolik modr&#xE1; LED pot&#x159;ebuje ke sv&#xED;cen&#xED;.</p>\n<div class=\"admonition note\"><p>Samotn&#xE1; hodnota nap&#x11B;t&#xED; ned&#xE1;v&#xE1; smysl &#x2013; nap&#x159;&#xED;klad\n&#x159;&#xED;ct, &#x17E;e je na jednom m&#xED;st&#x11B; 3,3 V je nep&#x159;esn&#xE9;.\nHodnota ve voltech se v&#x17E;dycky mus&#xED; k n&#x11B;&#x10D;emu vztahovat;\nvyjad&#x159;uje rozd&#xED;l mezi dv&#x11B;ma m&#xED;sty.\nV elektronice pou&#x17E;&#xED;v&#xE1;me rozd&#xED;l oproti &#x201E;zemi&#x201D; &#x2013; nap&#x11B;t&#xED;\nna no&#x17E;i&#x10D;ce <code>G</code>. Stanov&#xED;me si, &#x17E;e tam je\n0 volt&#x16F; a ostatn&#xED; nap&#x11B;t&#xED; po&#x10D;&#xED;t&#xE1;me vzhledem k n&#xED;.\nNa no&#x17E;i&#x10D;ce <code>3V</code> je tedy nap&#x11B;t&#xED; 3,3 V vzhledem k zemi.</p>\n</div><h2>V&#xFD;stup</h2>\n<p>Pro&#x10D; jsme diodu na to, aby se rozsv&#xED;tila,\np&#x159;ipojili k&#xA0;modulu a ne jen k&#xA0;baterce?\nTen modul je tro&#x161;ku slo&#x17E;it&#x11B;j&#x161;&#xED; za&#x159;&#xED;zen&#xED; ne&#x17E; baterka a jedna d&#x16F;le&#x17E;it&#xE1; v&#x11B;c,\nkterou um&#xED; nav&#xED;c, je nastavovat nap&#x11B;t&#xED; na r&#x16F;zn&#xFD;ch no&#x17E;i&#x10D;k&#xE1;ch.\nUm&#xED; za&#x159;&#xED;dit, aby se no&#x17E;i&#x10D;ka chovala jednou jako <code>3V</code> a jindy jako <code>G</code>.\nKdy&#x17E; p&#x159;ipoj&#xED;&#x161; diodu mezi <code>G</code> a takovou\np&#x159;ep&#xED;natelnou no&#x17E;i&#x10D;ku, m&#x16F;&#x17E;e&#x161; nastavit, kdy sv&#xED;t&#xED; a kdy ne.</p>\n<p>P&#x159;epoj anodu diody z&#xA0;<code>3V3</code> na <code>D5</code>. Katodu nech na <code>G</code>.</p>\n<p>M&#xE1;&#x161;-li zapojeno, znovu se p&#x159;ipoj k MicroPythonu a zadej n&#xE1;sleduj&#xED;c&#xED; k&#xF3;d:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"n\">pin</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"n\">pin</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"n\">pin</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div><p>Kdy&#x17E; objekt Pin vytvo&#x159;&#xED;&#x161; s <code>Pin.OUT</code>, MicroPython na n&#x11B;m bude nastavovat\nnap&#x11B;t&#xED; &#x2013; bu&#x10F; 3,3 V (<code>value(1)</code>) nebo 0 V (<code>value(0)</code>).\nA tak se d&#xE1; s diodou blikat.</p>\n<div class=\"admonition note\"><p>&#x10C;&#xED;slov&#xE1;n&#xED; no&#x17E;i&#x10D;ek je bohu&#x17E;el dvoj&#xED; &#x2013; no&#x17E;i&#x10D;ka\nozna&#x10D;en&#xE1; jako <code>D5</code> m&#xE1; v procesoru p&#x159;i&#x159;azen&#xE9; &#x10D;&#xED;slo 14.\nT&#x159;&#xED;da <code>Pin</code> v MicroPythonu pou&#x17E;&#xED;v&#xE1; &#x10D;&#xED;slov&#xE1;n&#xED; procesoru.\nNa&#x161;t&#x11B;st&#xED; m&#xE1;&#x161; <a href=\"https://pyvec.github.io/cheatsheets/micropython/nodemcu-cs.pdf\">tah&#xE1;k</a>,\nkde snadno dohled&#xE1;&#x161; &#x17E;e <code>D5</code> a <code>Pin(14)</code> jsou dv&#x11B; jm&#xE9;na stejn&#xE9; no&#x17E;i&#x10D;ky.</p>\n</div><p>Zvl&#xE1;dne&#x161; napsat program, kter&#xFD; za&#x159;&#xED;d&#xED;, aby dioda\nsv&#xED;tila pouze kdy&#x17E; je zm&#xE1;&#x10D;knut&#xE9; tla&#x10D;&#xED;tko <code>FLASH</code> a jinak ne?</p>\n<div class=\"admonition note\"><p>N&#xE1;pov&#x11B;da: M&#x16F;&#x17E;e&#x161; po&#x159;&#xE1;d dokola zji&#x161;&#x165;ovat stav tla&#x10D;&#xED;tka\na nastavovat podle n&#x11B;j stav LED.</p>\n</div><div class=\"solution\" id=\"solution-0\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2019/brno-podzim-pondeli/micropython/output/index/solutions/0/\"><span class=\"link-text\">Uk&#xE1;zat &#x159;e&#x161;en&#xED;</span></a>\n    </div>\n    <div class=\"solution-body\" aria-hidden=\"true\">\n        <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"n\">pin_diody</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"n\">pin_tlacitka</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">IN</span><span class=\"p\">)</span>\n<span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n    <span class=\"n\">pin_diody</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">pin_tlacitka</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n</pre></div>\n    </div>\n</div>\n\n\n        "
    }
  }
}