작은항해자의 항해

온도센서 DS18B20 본문

IT 이야기/IOT 센서

온도센서 DS18B20

작은항해자 2018. 7. 11. 16:29

DS18B20 온도 센서




DS18B20은 한개의 핀으로 온도값을 읽어들일수 있는 센서.

4.7K의 저항이 필요.


기본 반도체형과 방수케이블형 두 종류가 판매되고 있다.


측정온도 : -55°C to +125°C.

정확도 : ±0.5°C

사용전압 : 3.0V ~ 5.5V


1-와이어 통신을 사용하며 1:n의 마스터 - 슬레이브 구조를 가지며, 각각의 슬레이브 장치를 구별하기 위해 소프트웨어 주소를 사용한다.

1-와이어 통신을 사용하기 위해서는 "OneWire" 라이브러리를 설치하여야 한다. 

OneWire LivraryOneWire-master.zip


Dallas Library 지원 디바이스는 DS18B20 을 지원한다. OneWire단독 사용보다 쉽게 프로그래밍이 가능하다.

Dallas temperature Control Arduino LibraryArduino-Temperature-Control-Library-master.zip


* 참고동영상 : 김규호 박사의 IOT길라잡이 강의 제 12강 DS18B20 온도센서 실전 프로그램(심화)


Source Code - OneWire Library 사용

 #include <OneWire.h>  //라이브러리

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin);  // on digital pin 2

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

void loop(void) {
 float temperature = getTemp();
 Serial.println(temperature);
 
 delay(100); //just here to slow down the output so it is easier to read
 
}


float getTemp(){
 //returns the temperature from one DS18S20 in DEG Celsius

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
     //no more sensors on chain, reset search
     ds.reset_search();
     return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
     Serial.println("CRC is not valid!");
     return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
     Serial.print("Device is not recognized");
     return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr);    
 ds.write(0xBE); // Read Scratchpad

 
 for (int i = 0; i < 9; i++) { // we need 9 bytes
   data[i] = ds.read();
 }
 
 ds.reset_search();
 
 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB); //using two's compliment
 float TemperatureSum = tempRead / 16;
 
 return TemperatureSum;
 
} 

[출처] DS18B20 디지털 온도계 사용하기 [아두이노 강좌]|작성자 오픈랩 


Source Code - Dalla  Library 사용

01.#include <OneWire.h>
02.#include <DallasTemperature.h>
03. 
04.// Data wire is plugged into pin 2 on the Arduino
05.#define ONE_WIRE_BUS 2
06. 
07.// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
08.OneWire oneWire(ONE_WIRE_BUS);
09. 
10.// Pass our oneWire reference to Dallas Temperature.
11.DallasTemperature sensors(&oneWire);
12. 
13.void setup(void)
14.{
15.// start serial port
16.Serial.begin(9600);
17.Serial.println("Dallas Temperature IC Control Library Demo");
18. 
19.// Start up the library
20.sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
21.}
22. 
23. 
24.void loop(void)
25.{
26.// call sensors.requestTemperatures() to issue a global temperature
27.// request to all devices on the bus
28.Serial.print("Requesting temperatures...");
29.sensors.requestTemperatures(); // Send the command to get temperatures
30.Serial.println("DONE");
31. 
32.Serial.print("Temperature for Device 1 is: ");
33.Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
34. 
35.

} 





[다중연결을 위한 그림]




Doc

 - DS18B20 Datasheet : DS18B20.pdf

 - Waterproof DS18B20 Digital Temperature SensorDFRobot DFR0198.zip

 - mbed Example

 - Bilder Tutorial

 - Dallas Temperature Control Library Doc

 - Adafruits Raspberry Pi DS18B20adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf


1-Wire Information

Wikipedia explains 1-wire protocol

Tom Boyd explains 1-wire protocol

Dallas Temperature Control Library

Arduino's OneWire page (warning: has buggy version)

Weather Toys - community using 1-wire devices.



'IT 이야기 > IOT 센서' 카테고리의 다른 글

NDVI 카메라  (0) 2019.01.15
SHT10 토양 온습도 센서  (0) 2019.01.14
AM2305 온습도 센서  (0) 2019.01.14
Weather Station  (0) 2019.01.11
AM2302/DHT22 디지털 온습도 센서  (0) 2019.01.11