[WAT-S032]중요한 아두이노 센서키트 32번째 [18B20 온도 센서]

[WAT-S032] 18B20 온도 센서 모듈

본 제품은 [WAT-SK114]중요한 아두이노 센서키트(초급) 중 32번째 모듈로 18B20 온도 센서 모듈입니다.

핀 번호

번호 핀명 I/O 기능
1 G GROUND GROUND
2 R VCC VCC
3 Y Signal Out 센서 디지털 출력

WAT-Arduino128 예제

핀 연결
번호 I/O WAT-Arduino128
 1 G GROUND
 2 R 5V
3 Y PA0

소스코드

최신 소스코드는 [파일]=>[예제]=> [WhiteAT]=> [Sensor37] => [32_18B20] 에 있으며
라이브러리는 아두이노 개발환경  을 참조하세요

/*
 중요한 아두이노 센서키트 37종 예제 중 32 번째
 WAT-Arduino128 과 18B20 온도 센서 예제입니다.

 WAT-Arduino128 : https://kit128.com/goods/view?no=64
 37종 센서: https://kit128.com/goods/view?no=114

 출처: http://whiteat.com/Arduino
*/ 

#include <OneWire.h>
 
// DS18S20 Temperature chip i/o
OneWire ds(PA0); // on pin 10

// 프로그램 시작 - 초기화 작업
void setup()
{
 Serial.begin(115200); // 시리얼 통신 초기화
 Serial.println("Arduino Examples - 18B20 Temperature Sensor");
 Serial.println(" https://docs.whiteat.com/?p=1292");
}

int temperature = 0;
void loop(void) {
 byte i;
 byte present = 0;
 byte data[12];
 byte addr[8];

 ds.reset_search();
 if (!ds.search(addr)) {
 Serial.print("No more addresses.\n");
 ds.reset_search();
 return;
 }

 // Serial.print("R=");
 // for( i = 0; i < 8; i++) {
 // Serial.print(addr[i], HEX);
 // Serial.print(" ");
 // }

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

 if (addr[0] == 0x28) {
 // Serial.println("Device is a DS18B20 family device.");
 }
 else {
 Serial.print("Device family is not recognized: 0x");
 Serial.println(addr[0], HEX);
 return;
 }

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

 delay(1000); // maybe 750ms is enough, maybe not
 // we might do a ds.depower() here, but the reset will take care of it.

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

 // Serial.print("P=");
 // Serial.print(present,HEX);
 // Serial.print(" ");
 for (i = 0; i < 9; i++) { // we need 9 bytes
 data[i] = ds.read();
 // Serial.print(data[i], HEX);
 // Serial.print(" ");
 }
 temperature = (data[1] << 8) + data[0];
 temperature = (6 * temperature) + temperature / 4; // multiply by (100 * 0.0625) or 6.25

 Serial.print("T=");
 Serial.print(temperature / 100); Serial.print("."); Serial.println(temperature % 100);

 // Serial.print(" CRC=");
 // Serial.print( OneWire::crc8( data, 8), HEX);
 // Serial.println();
}
결과 화면

현재 온도가 출력됩니다. 중간에 입김을 불었더니 31도까지 올라갔습니다.

Arduino UNO R3 예제

핀 연결
번호 I/O UNO R3
 1 G GROUND
 2 R 5V
3 Y 2

 

소스코드

최신 소스코드는 [파일]=>[예제]=> [WhiteAT UNO]=> [Sensor37] => [32_18B20] 에 있으며
라이브러리는 아두이노 개발환경  을 참조하세요

/*
 중요한 아두이노 센서키트 37종 예제 중 32 번째
 UNO 와 18B20 온도 센서 예제입니다.

 37종 센서: https://kit128.com/goods/view?no=114
 UNO R3 : https://kit128.com/goods/view?no=337
 출처: http://whiteat.com/Arduino
*/ 

#include <OneWire.h>
 
// DS18S20 Temperature chip i/o
OneWire ds(2); // on pin 10

// 프로그램 시작 - 초기화 작업
void setup()
{
 Serial.begin(115200); // 시리얼 통신 초기화
 Serial.println("Arduino Examples - 18B20 Temperature Sensor");
 Serial.println(" https://docs.whiteat.com/?p=1292");
}

int temperature = 0;
void loop(void) {
 byte i;
 byte present = 0;
 byte data[12];
 byte addr[8];

 ds.reset_search();
 if (!ds.search(addr)) {
 Serial.print("No more addresses.\n");
 ds.reset_search();
 return;
 }

 // Serial.print("R=");
 // for( i = 0; i < 8; i++) {
 // Serial.print(addr[i], HEX);
 // Serial.print(" ");
 // }

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

 if (addr[0] == 0x28) {
 // Serial.println("Device is a DS18B20 family device.");
 }
 else {
 Serial.print("Device family is not recognized: 0x");
 Serial.println(addr[0], HEX);
 return;
 }

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

 delay(1000); // maybe 750ms is enough, maybe not
 // we might do a ds.depower() here, but the reset will take care of it.

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

 // Serial.print("P=");
 // Serial.print(present,HEX);
 // Serial.print(" ");
 for (i = 0; i < 9; i++) { // we need 9 bytes
 data[i] = ds.read();
 // Serial.print(data[i], HEX);
 // Serial.print(" ");
 }
 temperature = (data[1] << 8) + data[0];
 temperature = (6 * temperature) + temperature / 4; // multiply by (100 * 0.0625) or 6.25

 Serial.print("T=");
 Serial.print(temperature / 100); Serial.print("."); Serial.println(temperature % 100);

 // Serial.print(" CRC=");
 // Serial.print( OneWire::crc8( data, 8), HEX);
 // Serial.println();
}
결과 화면

현재 온도가 출력됩니다. 중간에 입김을 불었더니 31도까지 올라갔습니다.

 

제품 구매

[WAT-SK114]중요한 아두이노 센서키트(초급)은 https://kit128.com/goods/view?no=114 에서
[WAT-S032] 18B20 온도 센서 모듈은 https://kit128.com/goods/view?no=432 에서 구매하실 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다