Servomotor

Čas na další součástku! Tentokrát to bude servomotor.

Servomotor je součástka, která má v sobě zabudovaný ovladač, se kterým si naše zařízení může povídat jednoduchým „elektronickým jazykem” – protokolem. Motorku můžeš posílat impulzy a podle délky impulzu se servomotor natočí. Při krátkých impulzech se natočí víc na jednu stranu, při dlouhých na druhou. Impulzy musíš posílat neustále, jinak se servomotor vypne.

Na rozdíl od bzučítka, kde o výšce tónu rozhodovala frekvence (freq) – kolikrát za vteřinu se ozve lupnutí – a LED, kde o intenzitě rozhodovala střída (duty) – poměr mezi dobou kdy dioda svítí a kdy nesvítí, u servomotoru rozhoduje tzv. šířka pulzu: jak dlouho se napětí udrží na 3,3 V, než se přepne zpátky na 0 V.

V praxi to znamená, že můžeš nastavit freq na 50 Hz, a duty měnit cca od 35 (úplně vlevo) přes 77 (uprostřed) po 120 (úplně vpravo).

Dost ale teorie, pojďme si to vyzkoušet! Napřed musíš motorek zapojit:

  • hnědý drát (zem) na G,
  • červený drát (napájení) na 3V a
  • oranžový drát (data) na D4.

Nožička D4 odpovídá Pin(2), takže kód k otáčení motorku je:

from machine import Pin, PWM

pin_motorku = Pin(2, Pin.OUT)
pwm = PWM(pin_motorku, freq=50, duty=77)
pwm.duty(35)

Zkus motorkem otáčet nastavováním duty na 35 do 120. Kdyby se náhodou stalo, že se modul restartuje a konzole přestane fungovat, zkus ho odpojit a znovu připojit. Kdyby to nepomohlo, motorek ti dneska nebude fungovat. Za chvíli si řekneme proč; zatím (jsi-li na kurzu) se přidej do dvojice k někomu, komu to funguje.

Poznámka o napájení

K tomu, aby se otočil motor, je potřeba mnohem víc energie, než k rozsvícení světýlka. Z USB z počítače té energie dostaneš docela málo, proto můžou být s motorkem problémy.

Jak to řešit, až si přestaneš hrát a budeš chtít motorkem otáčet „doopravdy”?

Servo a destičku můžeš napájet zvlášť: například servo z baterií a destičku dál z USB. V tomhle případě je důležité:

  • Napětí baterie musí odpovídat tomu, co zvládne tvůj servomotor
  • Všechny připojené součástky musí mít propojenou zem (GND na destičce, hnědý drát servomotoru, - baterie).

Zapojení pak bude následující:

  • - baterie na hnědý drát (zem) serva a zároveň na GND desky
  • + baterie na červený drát (napájení) serva
  • D4 desky na oranžový drát (data) serva
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-jaro-2019-pondeli:micropython:8",
      "title": "Servomotor",
      "html": "\n          \n    \n\n    <h2>Servomotor</h2>\n<p>&#x10C;as na dal&#x161;&#xED; sou&#x10D;&#xE1;stku! Tentokr&#xE1;t to bude <em>servomotor</em>.</p>\n<p>Servomotor je sou&#x10D;&#xE1;stka, kter&#xE1; m&#xE1; v sob&#x11B; zabudovan&#xFD;\novlada&#x10D;, se kter&#xFD;m si na&#x161;e za&#x159;&#xED;zen&#xED; m&#x16F;&#x17E;e pov&#xED;dat\njednoduch&#xFD;m &#x201E;elektronick&#xFD;m jazykem&#x201D; &#x2013; <em>protokolem</em>.\nMotorku m&#x16F;&#x17E;e&#x161; pos&#xED;lat impulzy a podle d&#xE9;lky impulzu\nse servomotor nato&#x10D;&#xED;.\nP&#x159;i kr&#xE1;tk&#xFD;ch impulzech se nato&#x10D;&#xED; v&#xED;c na jednu stranu,\np&#x159;i dlouh&#xFD;ch na druhou.\nImpulzy mus&#xED;&#x161; pos&#xED;lat neust&#xE1;le, jinak se servomotor\nvypne.</p>\n<p>Na rozd&#xED;l od bzu&#x10D;&#xED;tka, kde o v&#xFD;&#x161;ce t&#xF3;nu rozhodovala\nfrekvence (<code>freq</code>) &#x2013; kolikr&#xE1;t za vte&#x159;inu\nse ozve lupnut&#xED; &#x2013; a LED, kde o intenzit&#x11B; rozhodovala\nst&#x159;&#xED;da (<code>duty</code>) &#x2013; pom&#x11B;r mezi dobou kdy\ndioda sv&#xED;t&#xED; a kdy nesv&#xED;t&#xED;, u servomotoru rozhoduje\ntzv. <em>&#x161;&#xED;&#x159;ka pulzu</em>: jak dlouho se nap&#x11B;t&#xED; udr&#x17E;&#xED;\nna 3,3 V, ne&#x17E; se p&#x159;epne zp&#xE1;tky na 0 V.\n<!-- XXX: Actual typical pulse widths --></p>\n<p>V praxi to znamen&#xE1;, &#x17E;e m&#x16F;&#x17E;e&#x161; nastavit <code>freq</code>\nna 50 Hz, a <code>duty</code> m&#x11B;nit cca od 35\n(&#xFA;pln&#x11B; vlevo) p&#x159;es 77 (uprost&#x159;ed) po 120 (&#xFA;pln&#x11B; vpravo).</p>\n<p>Dost ale teorie, poj&#x10F;me si to vyzkou&#x161;et! Nap&#x159;ed mus&#xED;&#x161; motorek zapojit:</p>\n<ul>\n<li>hn&#x11B;d&#xFD; dr&#xE1;t (zem) na <code>G</code>,</li>\n<li>&#x10D;erven&#xFD; dr&#xE1;t (nap&#xE1;jen&#xED;) na <code>3V</code> a</li>\n<li>oran&#x17E;ov&#xFD; dr&#xE1;t (data) na <code>D4</code>.</li>\n</ul>\n<p>No&#x17E;i&#x10D;ka <code>D4</code> odpov&#xED;d&#xE1; <code>Pin(2)</code>, tak&#x17E;e k&#xF3;d k ot&#xE1;&#x10D;en&#xED; motorku je:</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><span class=\"p\">,</span> <span class=\"n\">PWM</span>\n\n<span class=\"n\">pin_motorku</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">2</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\">pwm</span> <span class=\"o\">=</span> <span class=\"n\">PWM</span><span class=\"p\">(</span><span class=\"n\">pin_motorku</span><span class=\"p\">,</span> <span class=\"n\">freq</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">duty</span><span class=\"o\">=</span><span class=\"mi\">77</span><span class=\"p\">)</span>\n<span class=\"n\">pwm</span><span class=\"o\">.</span><span class=\"n\">duty</span><span class=\"p\">(</span><span class=\"mi\">35</span><span class=\"p\">)</span>\n</pre></div><p>Zkus motorkem ot&#xE1;&#x10D;et nastavov&#xE1;n&#xED;m <code>duty</code> na 35 do 120.\nKdyby se n&#xE1;hodou stalo, &#x17E;e se modul restartuje a\nkonzole p&#x159;estane fungovat, zkus ho odpojit a znovu\np&#x159;ipojit. Kdyby to nepomohlo, motorek ti dneska\nnebude fungovat. Za chv&#xED;li si &#x159;ekneme pro&#x10D;; zat&#xED;m (jsi-li na kurzu)\nse p&#x159;idej do dvojice k&#xA0;n&#x11B;komu, komu to funguje.</p>\n<h2>Pozn&#xE1;mka o nap&#xE1;jen&#xED;</h2>\n<p>K tomu, aby se oto&#x10D;il motor, je pot&#x159;eba mnohem v&#xED;c\nenergie, ne&#x17E; k&#xA0;rozsv&#xED;cen&#xED; sv&#x11B;t&#xFD;lka.\nZ USB z&#xA0;po&#x10D;&#xED;ta&#x10D;e t&#xE9; energie dostane&#x161; docela m&#xE1;lo,\nproto m&#x16F;&#x17E;ou b&#xFD;t s motorkem probl&#xE9;my.</p>\n<p>Jak to &#x159;e&#x161;it, a&#x17E; si p&#x159;estane&#x161; hr&#xE1;t a bude&#x161; cht&#xED;t motorkem ot&#xE1;&#x10D;et &#x201E;doopravdy&#x201D;?</p>\n<p>Servo a desti&#x10D;ku m&#x16F;&#x17E;e&#x161; nap&#xE1;jet zvl&#xE1;&#x161;&#x165;:\nnap&#x159;&#xED;klad servo z&#xA0;bateri&#xED; a desti&#x10D;ku d&#xE1;l z&#xA0;USB.\nV tomhle p&#x159;&#xED;pad&#x11B; je d&#x16F;le&#x17E;it&#xE9;:</p>\n<ul>\n<li>Nap&#x11B;t&#xED; baterie mus&#xED; odpov&#xED;dat tomu, co zvl&#xE1;dne tv&#x16F;j servomotor</li>\n<li>V&#x161;echny p&#x159;ipojen&#xE9; sou&#x10D;&#xE1;stky mus&#xED; m&#xED;t propojenou zem (<code>GND</code> na desti&#x10D;ce,\nhn&#x11B;d&#xFD; dr&#xE1;t servomotoru, <code>-</code> baterie).</li>\n</ul>\n<p>Zapojen&#xED; pak bude n&#xE1;sleduj&#xED;c&#xED;:</p>\n<ul>\n<li><code>-</code> baterie na hn&#x11B;d&#xFD; dr&#xE1;t (zem) serva <em>a z&#xE1;rove&#x148;</em> na <code>GND</code> desky</li>\n<li><code>+</code> baterie na &#x10D;erven&#xFD; dr&#xE1;t (nap&#xE1;jen&#xED;) serva</li>\n<li><code>D4</code> desky na oran&#x17E;ov&#xFD; dr&#xE1;t (data) serva</li>\n</ul>\n\n\n        "
    }
  }
}