KKM: DS18B20

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Uvod

DS18B20 je industrijski senzor temperature koji može mjeriti temperature od -55C do 125C. Preciznosti je +-0.5C te se nalazi u vodootpornom kučištu. Korištenje je super lako, sve što mu je potrebno je napajanje i jedna žica za komunikaciju.


 
Karakteristike:
• Napon: 3.3V - 5V
• Preciznost: ±0.5C
• Raspon mjerenja: -55C do +125C
• Duljina žica: 100cm
Metalno vodootporno kučište
za više, tu je datasheet.

Kako radi?

DS18B20 je digitalni senzor temperature. Unutar metalnog kučišta, nalazi se digitalni integrirani krug koji unutar sebe ima senzor temperature(o senzorima temperature neki drugi puta..), ROM memoriju u koju je spremljen unikatni ID te digitalne uređaje koji omogućuju komunikaciju putem samo jedne žice, tzv. OneWire. OneWire omogućuje i povezivanje više uređaja na jednu sabirnicu(koja se sastoji od samo jedne žice!) zahvaljujući unikavnim IDjevima unutar svakog senzora.
 
Sam senzor još je zanimljiv u nekim stvarima: može čitati temperaturu u preciznosti od 9-bita do 12-bita. Ima programibilni alarm u slučaju prekoračenja određene temperature(što znači da to ne morate implementirati na svom mikrokontroleru), u "standby" modu ne troši ništa struje, a može se napajati i parazitski(preko linije za komunikaciju!) - dakle, ne trebate uopće napajanje!

Kako povezati?

Senzor spajate na Croduino na sljedeći način:
Crvena žica - +5V/+3.3V
Crna žica - ground(gnd)
Bijela žica - D12(ili bilokoji drugi pin)
Potrebno je još na bijelu žicu staviti pull-up otpornik. Standardna vrijednost je 4.7K, a vrijednost možete smanjiti ukoliko želite senzor koristiti s duljim kablom.
 

Arduino library i kod

 
Library preuzmi ovdje. Radi se o OneWire biblioteci.
 
Ako ne znaš kako instalirati i koristiti libray, pogledaj tutorial.
 

#include "OneWire.h"

OneWire  ds(12);  //na pinu broj 12, moze bilokoji pin
//potreban pull-up otpornik od 4.7k ohm

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

void loop(void) {
  //svaku 1 sekundu temperaturu spremi u varijablu temperatura te ispisi
  //na Serial monitoru
  float temperatura = dohvatiTemperaturu();
  Serial.print("Temperatura: "); 
  Serial.print(temperatura, 2); //isprintaj varijablu na 2 decimale
  Serial.println("C");
  delay(1000);
}

//funkcija koja obavlja konverziju dobivenih podataka putem OneWire
//komunikacije u konkretnu temperaturu u celzijevim stupnjevima
float dohvatiTemperaturu() {
  byte zk;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
    ds.reset_search();
    return;
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
    return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);

  delay(100);

  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);

  for ( zk = 0; zk < 9; zk++) {
    data[zk] = ds.read();
  }

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }

  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;
    else if (cfg == 0x20) raw = raw << 2;
    else if (cfg == 0x40) raw = raw << 1;
  }

  return (float)raw / 16.0;
}

To je to! Imate vrijednost temperature u varijabli - sad je na Vama red da ukomponirate tu vrijednost u svoj projekt!

Leave a Reply