czwartek, 10 września 2015

[10] Arduino - Czujnik temperatury DS18B20

Tym razem zajmę się zaprogramowaniem czujnika temperatury DS18B20.

Opis.


DS18B20 jest to cyfrowy czujnik temperatury wyprodukowany przez firmę Dallas Semiconductor.

Rys. 1.1. Cyfrowy czujnik temperatury DS18B20 - wygląd zewnętrzny


Specyfikacja najważniejszych elementów wygląda następująco:

  • Zasilanie od 3 do 5,5 V
  • Zakres pomiarowy od - 55 st. C do 125 st. C
  • Dokładność +/- 0.5 st. C w zakresie -10 st. C do 85 st. C
  • Rozdzielczość: od 9 do 12 bitów
  • Obudowa THT TO92

Dokładność temperatury w deklarowanym zakresie temperaturowym, od -10st do +85st, z dokładnością do 0,5 st. Natomiast 2 st. C dla zakresu od -55 st. C do 125 st. C.

Jednym z ważniejszych ustawień termometru jest jego dokładność, którą można ustawić od 9 do 12 bitów. Co powoduje odpowiednio zmianę temperatury o 0,5 st. do 0,0625 st.

Podłączenie


Wyświetlacz LCD 2x16 z konwerterem LCM1602
VCC - 5V
GND - Masa
SCL - A5
SDA - A4

Przykład 1


W tym przykładzie zaprezentuje sposób pomiaru temperatury z wyświetlaniem danych na wyświetlaczu LCD 2x16.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
#define ONE_WIRE_BUS 2          //Linia danych podpięta jest pod pin 2 Ardiuno
OneWire oneWire(ONE_WIRE_BUS);
 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x27
 
DallasTemperature sensors(&oneWire);  //Przekazanie danych dotyczących One Wire do DallasTemperature
 
void setup(void)
{
  lcd.begin(16,2);
  lcd.backlight();       // Zalaczenie podwietlenia 
  //Serial.begin(9600);
  sensors.begin();      //Włączenie biblioteki
}
 
void loop(void)
{
  sensors.requestTemperatures();
  lcd.setCursor(0,0);
  lcd.print("Temp1:");
  lcd.setCursor(6,0); 
  lcd.print(sensors.getTempCByIndex(0));
}


Przykład 2


Drugi przykład działa na takiej samej zasadzie. Jedynym wyjątkiem jest obsługa dwóch czujników temperatury. Linia danych, dzięki zastosowaniu interfeju komunikacyjnego 1-Wire, została podłączona do tego samego pinu.

Aby całość działała poprawie wystarczy dodać następujące linie kodu w pętli loop():

  lcd.setCursor(0,1); 
  lcd.print("Temp2:");
  lcd.setCursor(6,1); 
  lcd.print(sensors.getTempCByIndex(1));
  delay(500);

W pierwszej linijce następuje zmiana pozycji kursora dla wyświetlacza, następnie wyświetlenie tekstu oraz ponowna zmiana położenia. Zostaje wyświetlona temperatura z czujnika o kolejnym indeksie (wcześniej wyświetlało z czujnika 0).