Hardware | Programování | Pojďme programovat elektroniku

Pojďme programovat elektroniku: Vyzkoušíme ultrazvukový dálkoměr, detektor pohybu, deště a další kouzla

  • Vyzkoušíme si senzory na pokročilých sběrnicích
  • Budeme ultrazvukem měřit vzdálenost
  • Detekujeme déšť i pohyb

V roce 1984 založila parta inženýrů z texaského Dallasu společnost Dallas Semiconductor (dnes Maxim), která se specializovala na vývoj a výrobu síťových a teplotních integrovaných obvodů. Do historie se zapsala zejména svým digitálním protokolem 1-Wire, který funguje jako sběrnice a umožňuje sériové zapojit hromadu zařízení, které tomuto protokolu rozumí. Hlavní výhodou je to, že si sběrnice vystačí s jedním jediným signálovým vodičem.

Fanoušci Arduina velmi dobře znají především digitální teplotní senzor DS18B20, který komunikuje skrze 1-Wire a my si ho nyní zapojíme.

371163426
DS18B20 může mít hromadu podob. Takto vypadá ve schránce TO-92

Podle obrázku je patrné, že DS18B20 na první pohled vypadá naprosto identicky jako analogové čidlo TMP36 z předchozí kapitoly, ale uvnitř jeho černé hlavičky přitom na rozdíl od hloupého analogového čidla najdete sofistikovaný integrovaný obvod s vlastní logikou.

Podobnost je dána pouze tím, že obě čidla používají standardizované pouzdro TO-92, které může obsahovat prakticky jakoukoliv vhodnou součástku, pro kterou se tam najde místo.

Knihovna nám usnadní hromadu práce

Snímání komplexních informací z digitálních čidel už není tak jednoduché jako přečíst hodnotu z A/D převodníku. Digitální pin vrací buď logickou 1, nebo 0, což v praxi znamená, že je na něm zrovna buď vyšší (HIGH), nebo nižší (LOW) napětí. Aby tedy senzor předal nějaká data, musí je přeložit do dvojkové soustavy a poslat jako sled nul a jedniček.

Pokud bychom měli takovou komunikaci bez pomoci dekódovat, náš program by byl obrovský, a to se přitom jen chceme teploměru zeptat, jakou právě naměřil teplotu. Naštěstí máme po ruce knihovny – hotové kusy kódu, které tuto otrockou práci udělají za nás.

334061425
Arduino má vlastní správu knihoven ze svého vlastního katalogu

V tomto případě je k dispozici knihovna OneWire, která se stará o komunikaci na protokolu 1-Wire. Díky rozšířenosti čidla DS18B20 však existuje i knihovna pro práci přímo s tímto senzorem, kterou najdete na GitHubu.

Obě tyto knihovny stáhnete v balíčku ZIP, který pak můžete přímo nahrát do vývojového prostředí Arduina skrze jeho správu knihoven a nabídku Projekt → Přidat knihovnu → Přidat ZIP knihovnu. Poté obě najdete v seznamu knihoven a můžete je vložit přímo do kódu.

577379334
Ručně přidané knihovny v ZIP balíčku

Program se použitím obou knihoven poměrně nafoukne, takže je třeba brát zřetel i na to, že Arduino není váš stolní počítač, ale má jen pár kilobajtů paměti. Každý projekt ale můžete před nahráním do mikropočítače analyzovat a zjistíte, kolik prostředků nakonec zabere. Tato informace se zobrazí v černém stavovém pruhu ve spodní části okna.

Zapojení s pull-up rezistorem

Náš program bude opět s časovou prodlevou vypisovat teplotu. Tentokrát se díky použití knihoven ptáme přímo speciálního objektu, který reprezentuje naše senzory DS18B20. My máme jen jeden, čili se zeptáme na teplotu čidla s indexem 0. Kdybychom měli v obvodu zapojená třeba dvě čidla, to druhé bude mít index 1 a tak dále.

331903159
Díky použití knihoven pro digitální teploměr DS18B20 a jeho protokol 1-Wire je kód našeho programu stále jednoduchý

Při pohledu na schéma obvodu níže je patrné, že jsme použili novou součástku – 4k7 rezistor, který v tomto případě propojuje signální vodič s napájecím. Jedná se o tzv. pull-up rezistor, který se nám stará o to, aby na digitálním pinu 2, do kterého je signální vodič připojený, nevznikal žádný nahodilý šum, který by si mohl mikropočítač vyložit jako logickou 0, nebo 1.

683893269 294512401
Žlutý signálový vodič už nevede do analogového pinu A0, ale do digitálního pinu 2. Teploměr je zároveň napájený 5 V, přičemž tento vodič je s tím signálním propojený tzv. pull-up rezistorem 4k7 (4,7 kΩ).

Rezistor je naprosto kritická součástka, bez které se žádný začátečník neobejde, a jelikož může jejich odpor nabývat různých hodnot, nováček udělá nejlépe, pokud si koupí za pár korun celou sadu se všemi častými odpory – prodává je každý slušný elektroobchod.

Hned poté by si měl přečíst třeba článek Proč je u tlačítka rezistor na webu Arduino.cz, naučit se značení hodnot rezistorů a po večerech si pročítat 280stránkový Průvodce světem Arduina.

Kód programu

Nakonec pro celkový přehled opět kód celého programu. Zatímco knihovna OneWire se postará o komunikaci na protokolu 1-Wire, DallasTemperature se postará přímo o ovládání teploměru DS18B20, který tento protokol používá.

#include <OneWire.h>
#include <DallasTemperature.h>

// Zarizení 1-Wire je pripojene na digitalni pin 2
OneWire oneWire(2);

// Zarizeni 1-Wire je teplomer DS18B20 
DallasTemperature sensors(&oneWire);

void setup(void){
  // Nastaveni seriove linky
  Serial.begin(9600);
  while(!Serial){;}
  Serial.println("*** Ukazka digitalniho teplomeru DS18B20 ***");
  
  // Nastartovani teplotniho senzoru 
  sensors.begin();
}

void loop(void) {
  // Povel k zmereni teploty
  sensors.requestTemperatures();

  // Vypsani teploty ze senzoru s indexem 0
  Serial.print("Teplota: ");
  Serial.println(sensors.getTempCByIndex(0)); 

  // Pockej pet sekund a opakuj
  delay(5000);
}

Takže jsme zvládli základní demonstraci analogového a digitálního čidla. Teď se pojďme podívat na další – barometr, vlhkoměr a teploměr v jednom, který komunikuje na sběrnici I2C.

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,