Skip to main content

Návod na zprovoznění DS18B20 – Arduino

Jedním z nejjednodušších a nejlevnějších způsobů, jak do projektu přidat snímání teploty, je použití teplotního čidla DS18B20. Tyto snímače jsou poměrně přesné a ke své činnosti. Snímač se obvykle dodává ve dvou provedeních. Jeden, který se dodává v pouzdře TO-92, vypadá přesně jako běžný tranzistor. Druhý ve stylu vodotěsné sondy, který může být užitečnější, když potřebujete měřit něco daleko, pod vodou nebo pod zemí. DS18B20 je teplotní senzor s 1vodičovým rozhraním vyráběný společností Dallas Semiconductor Corp. Unikátní rozhraní 1-Wire vyžaduje pouze jeden digitální pin pro obousměrnou komunikaci s mikrokontrolérem. Dokáže měřit teploty od -55 °C do +125 °C s přesností ±0,5 °C. Rozlišení teplotního čidla je uživatelsky konfigurovatelné na 9, 10, 11 nebo 12 bitů. Výchozí rozlišení při zapnutí je však 12 bitů (tj. přesnost 0,0625 °C).

Vlastnosti senzoru:

  • Napájení 3V až 5,5V
  • Spotřeba proudu 1mA
  • Teplotní rozsah -55 až 125°C
  • Přesnost ±0,5 °C
  • Rozlišení 9 až 12 bitů (volitelné)
  • Doba převodu < 750 ms

Zapojení senzoru.

Začněte připojením VDD k 5V pinu arduino a GND k GND. Dále připojte zbývající digitální signálový pin DQ k digitálnímu pinu 2 (můžete si vybrat i jiný pin) na Arduinu. Budete také muset přidat pull-up rezistor 4,7k mezi signálový a napájecí pin, aby byl přenos dat stabilní.

Dejte pozor, abyste DS18B20 zapojili správně. Pokud ho dáte špatně, bude se zahřívat a můžete ho zničit

Pokud používáte vodotěsnou verzi DS18B20, připojte červený vodič k 5V, černý se připojí k GND a žlutý (zelená či bílá) vodič jsou data, která jdou na digitální pin 2 na arduinu. Ještě musíte připojit pullup rezistor 4,7K z dat na 5V.

Ještě budeme potřebovat knihovny, které umožní ze senzorem komunikovat. Jedná se o DallasTemperature a OneWire

Čtení dat ze senzoru.

// senzor DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>

// nastavení čísla vstupního pinu
const int pinsenzoru = 2;
OneWire oneWireDS(pinsenzoru);
DallasTemperature senzords(&oneWireDS);

void setup(void) {
  Serial.begin(9600);
  senzords.begin();
}

void loop(void) {
  senzords.requestTemperatures();
//vypiste teplotu ve stupnich Celsia
  Serial.print("Teplota: ");
  Serial.print(senzords.getTempCByIndex(0));
  Serial.print((char)176);//ukazuje charakter stupnu
  Serial.print("C");
//vypiste teplotu ve Fahrenheitech
  Serial.print((senzords.getTempCByIndex(0) * 9.0) / 5.0 + 32.0);
  Serial.print((char)176);//ukazuje charakter stupnu
  Serial.println("F");
  delay(1000);
}

Další užitečné funkce v knihovně DallasTemperature.h

S objektem DallasTemperature lze použít několik užitečných funkcí.

Funkce setResolution() nastavuje rozlišení interního analogově-digitálního převodníku DS18B20 na 9, 10, 11 nebo 12 bitů, což odpovídá přírůstkům 0,5 °C, 0,25 °C, 0,125 °C a 0,0625 °C.
Funkce bool getWaitForConversion() vrací hodnotu příznaku waitForConversion. Může být užitečná, když chcete zkontrolovat, zda je převod teploty dokončen.
Funkce setHighAlarmTemp() & setLowAlarmTemp() nastavuje vnitřní alarmy vysoké a nízké teploty pro zařízení ve stupních Celsia. Platný rozsah je -55 až 125 °C
Funkce bool hasAlarm() vrací hodnotu true, pokud zařízení má stav alarmu, když teplota překročí nastavení vysoké a nízké teploty alarmu.