• 디지털 온도센서 DS18B20

디지털 온도센서 DS18B20

1,500 1,500
배송정보
3,200원 (조건부배송) 지역별 추가배송 주문시결제(선결제)
택배 / 방문수령

아두이노와 로봇컨트롤러에 많이 사용하는 디지털 온도센서 DS18B20 입니다. 

 

 

 

IMG_20200714_194015_081546.jpg
IMG_20200714_194021_081546.jpg

상상보드에서는 엔트리 블록코딩으로 사용이 가능하고 아두이노 스케치에서 사용 가능합니다. 

 

블로거님들 자료 입니다.

https://blog.naver.com/machiavelian/221559540272

https://webnautes.tistory.com/631
 

 

온도센서의 종류는 많이 있습니다.

CDS처럼 아날로그로 읽어서 온도 값으로 계산하는 센서부터 다양한 디지털 데이터로 온도 값을 전달하는 방식이 있습니다.

온도센서를 선택함에 있어 가격과 온도센서의 측정 범위, 정밀도, 오차를 검토하여 선택하게 됩니다.

이번에 사용하는 DS18B20은 디지털 온도 센서이며 스펙은 다음과 같습니다.

- 허용 전압 입력 : 3.0-5.5V

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

- 정밀도 : ±0.5° C ( -10° C to +85° C 범위 내)

-

아날로그 센서의 경우 측정 과정에서 전원 노이즈로 인하여 오차가 발생하거나 정밀도가 1도 이상인 경우가 있어 이보다 정밀한 DS18B20 모듈을 사용합니다.

#define DS18S20_PIN 8 // 연결포트 define OneWire ds(DS18S20_PIN); // 온도센서 포트 설정 ‘DS18S20 ‘ 대신 ‘8’ 을 적어도 됩니다. 위의 define은 컴파일을 하면 DS18S20 ‘ 대신 ‘8’ 로 변경하여 컴파일 합니다. ///////////// setup() 함수는 기존 그대로 둡니다. void loop(){ float temperature = getTemp(); // 온도 값을 읽어서 temperature 변수를 만들고 저장합니다. Serial.println(temperature); // 온도 값을 시리얼로 출력 합니다. delay(500); } float getTemp(){ 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; }

온도를 읽어오는 getTemp() 함수를 직접 코딩하였고 라이브러리를 통해 사용하는 방법도 있습니다.

검색하여 알아봅시다.

온도에 따라 LED 제어하기

void loop(){ float temperature = getTemp(); if(temperature < 25){ // 25도 보다 작으면 strip.setPixelColor(0, strip.Color(0,0,100)); // blue led 켜기 strip.show(); } else{ // 25도 보다 크면 strip.setPixelColor(0, strip.Color(100,0,0)); // red led 켜기 strip.show(); } Serial.println(temperature); delay(100); }

온도에 따라 LED 제어하기 2

void loop(){ float temperature = getTemp(); if(temperature < 25){ strip.setPixelColor(0, strip.Color(0,0,100)); strip.show(); } else{ uint8_t brightness = map(temperature, 25 , 40, 10, 255); // 온도 값을 10 ~ 255로 변환 strip.setPixelColor(0, strip.Color(brightness,0,0)); strip.show(); } Serial.println(temperature); delay(100); }

map 함수를 적용하여 25도에서 온도가 올라갈수록 빨간색을 더 밝게 하였습니다.

이처럼 센서 값에 따라 LED를 제어했지만 LED가 아닌 에어컨이나 히터를 제어하면 설정한 온도로 제어하는 시스템을 만들 수가 있습니다.

 

비밀번호 인증

비밀번호를 입력해 주세요.

확인