Teploměr

Poslední součástkou, kterou si dnes ukážeme, bude jednoduchý teploměr DS18B20. Tento teploměr se vyrábí v několika provedeních a je velmi populární především pro jednoduchost použití a velmi nízkou cenu.

Stejně jako si MicroPython pomocí speciálního „jazyka” rozumí s LED páskem, ovládá i „jazyk” pro komunikaci s teploměrem a řadou dalších zařízení. Tento „jazyk“, protokol sběrnice OneWire, má navíc tu výhodu, že se na jednu nožičku destičky dá připojit hned několik teploměrů a číst teploty z každého z nich.

Zapojení

Po zapojení drž teploměr na chvíli mezi prsty. Pokud je zapojený špatně, začne se velmi rychle zahřívat. V takovém případě jej okamžitě odpoj.

Otoč teploměr tak, aby jeho „břicho” směřovalo směrem od tebe. Následně propoj nožičky teploměru s destičkou takto:

  • Levou nožičku propoj s GND
  • Prostřední nožičku propoj s D4
  • Pravou nožičku propoj s 3V3

Měření

Pokud je vše zapojeno správně, přistup k měření teploty.

from time import sleep
from machine import Pin
import onewire
from ds18x20 import DS18X20


pin = Pin(2, Pin.IN)  # D4
ow = DS18X20(onewire.OneWire(pin))
sensory = ow.scan()

ow.convert_temp()
sleep(1)
teplota = ow.read_temp(sensory[0])
print("Teplota je", teplota)

Tento kód nejdříve opět připraví nožičku (pin) pro komunikaci a následně na ní připraví komunikační protokol OneWire a teploměr DS18X20. Prvním krokem k teplotě je nalezení všech dostupných teploměrů na dané sběrnici, což nám zajistí metoda ow.scan(), která nám vrátí seznam identifikátorů nalezených teploměrů.

Metoda ow.convert_temp() pak pošle všem teploměrům příkaz, aby změřily teplotu. Po tomhle rozkazu musíš alespoň vteřinu počkat a následně můžeš teplotu z čidla přečíst.

Zkus teploměr na chvíli chytit mezi prsty, zahřát ho tak, a změřit teplotu znovu.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-jaro-2019-pondeli:tmp5:1",
      "title": "Teploměr",
      "html": "\n          \n    \n\n    <h1>Teplom&#x11B;r</h1>\n<p>Posledn&#xED; sou&#x10D;&#xE1;stkou, kterou si dnes uk&#xE1;&#x17E;eme, bude jednoduch&#xFD; teplom&#x11B;r DS18B20.\nTento teplom&#x11B;r se vyr&#xE1;b&#xED; v n&#x11B;kolika proveden&#xED;ch a je velmi popul&#xE1;rn&#xED; p&#x159;edev&#x161;&#xED;m\npro jednoduchost pou&#x17E;it&#xED; a velmi n&#xED;zkou cenu.</p>\n<p>Stejn&#x11B; jako si MicroPython pomoc&#xED; speci&#xE1;ln&#xED;ho &#x201E;jazyka&#x201D; rozum&#xED; s LED p&#xE1;skem,\novl&#xE1;d&#xE1; i &#x201E;jazyk&#x201D; pro komunikaci s teplom&#x11B;rem a &#x159;adou dal&#x161;&#xED;ch za&#x159;&#xED;zen&#xED;.\nTento &#x201E;jazyk&#x201C;, protokol sb&#x11B;rnice OneWire, m&#xE1; nav&#xED;c tu v&#xFD;hodu, &#x17E;e se na jednu\nno&#x17E;i&#x10D;ku desti&#x10D;ky d&#xE1; p&#x159;ipojit hned n&#x11B;kolik teplom&#x11B;r&#x16F; a &#x10D;&#xED;st teploty\nz&#xA0;ka&#x17E;d&#xE9;ho z&#xA0;nich.</p>\n<h2>Zapojen&#xED;</h2>\n<div class=\"admonition warning\"><p>Po zapojen&#xED; dr&#x17E; teplom&#x11B;r na chv&#xED;li mezi prsty.\nPokud je zapojen&#xFD; &#x161;patn&#x11B;, za&#x10D;ne se velmi rychle zah&#x159;&#xED;vat.\nV&#xA0;takov&#xE9;m p&#x159;&#xED;pad&#x11B; jej okam&#x17E;it&#x11B; odpoj.</p>\n</div><p>Oto&#x10D; teplom&#x11B;r tak, aby jeho &#x201E;b&#x159;icho&#x201D; sm&#x11B;&#x159;ovalo sm&#x11B;rem od tebe.\nN&#xE1;sledn&#x11B; propoj no&#x17E;i&#x10D;ky teplom&#x11B;ru s&#xA0;desti&#x10D;kou takto:</p>\n<ul>\n<li>Levou no&#x17E;i&#x10D;ku propoj s <code>GND</code></li>\n<li>Prost&#x159;edn&#xED; no&#x17E;i&#x10D;ku propoj s <code>D4</code></li>\n<li>Pravou no&#x17E;i&#x10D;ku propoj s <code>3V3</code></li>\n</ul>\n<h1>M&#x11B;&#x159;en&#xED;</h1>\n<p>Pokud je v&#x161;e zapojeno spr&#xE1;vn&#x11B;, p&#x159;istup k&#xA0;m&#x11B;&#x159;en&#xED; teploty.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">sleep</span>\n<span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"kn\">import</span> <span class=\"nn\">onewire</span>\n<span class=\"kn\">from</span> <span class=\"nn\">ds18x20</span> <span class=\"kn\">import</span> <span class=\"n\">DS18X20</span>\n\n\n<span class=\"n\">pin</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\">IN</span><span class=\"p\">)</span>  <span class=\"c1\"># D4</span>\n<span class=\"n\">ow</span> <span class=\"o\">=</span> <span class=\"n\">DS18X20</span><span class=\"p\">(</span><span class=\"n\">onewire</span><span class=\"o\">.</span><span class=\"n\">OneWire</span><span class=\"p\">(</span><span class=\"n\">pin</span><span class=\"p\">))</span>\n<span class=\"n\">sensory</span> <span class=\"o\">=</span> <span class=\"n\">ow</span><span class=\"o\">.</span><span class=\"n\">scan</span><span class=\"p\">()</span>\n\n<span class=\"n\">ow</span><span class=\"o\">.</span><span class=\"n\">convert_temp</span><span class=\"p\">()</span>\n<span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">teplota</span> <span class=\"o\">=</span> <span class=\"n\">ow</span><span class=\"o\">.</span><span class=\"n\">read_temp</span><span class=\"p\">(</span><span class=\"n\">sensory</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Teplota je&quot;</span><span class=\"p\">,</span> <span class=\"n\">teplota</span><span class=\"p\">)</span>\n</pre></div><p>Tento k&#xF3;d nejd&#x159;&#xED;ve op&#x11B;t p&#x159;iprav&#xED; no&#x17E;i&#x10D;ku (pin) pro komunikaci a n&#xE1;sledn&#x11B; na n&#xED;\np&#x159;iprav&#xED; komunika&#x10D;n&#xED; protokol OneWire a teplom&#x11B;r DS18X20.\nPrvn&#xED;m krokem k teplot&#x11B; je nalezen&#xED; v&#x161;ech dostupn&#xFD;ch teplom&#x11B;r&#x16F; na dan&#xE9;\nsb&#x11B;rnici, co&#x17E; n&#xE1;m zajist&#xED; metoda <code>ow.scan()</code>,\nkter&#xE1; n&#xE1;m vr&#xE1;t&#xED; seznam identifik&#xE1;tor&#x16F; nalezen&#xFD;ch teplom&#x11B;r&#x16F;.</p>\n<p>Metoda <code>ow.convert_temp()</code> pak po&#x161;le v&#x161;em teplom&#x11B;r&#x16F;m p&#x159;&#xED;kaz, aby zm&#x11B;&#x159;ily\nteplotu.\nPo tomhle rozkazu mus&#xED;&#x161; alespo&#x148; vte&#x159;inu po&#x10D;kat a n&#xE1;sledn&#x11B; m&#x16F;&#x17E;e&#x161;\nteplotu z&#xA0;&#x10D;idla p&#x159;e&#x10D;&#xED;st.</p>\n<p>Zkus teplom&#x11B;r na chv&#xED;li chytit mezi prsty, zah&#x159;&#xE1;t ho tak, a zm&#x11B;&#x159;it teplotu\nznovu.</p>\n\n\n        "
    }
  }
}