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.