디지털 온도 센서
- 온도 센서로는 DS18B20 센서를 사용한다.
- 55 ℃ ~ +125℃, 정확도 ±0.5℃ (-10 ℃ ~ +85℃내)이다.
디지털 온도 센서는 I2C 통신을 이용하여 온도 값을 받아들여며, 온도 센서에 있는 DS18B20 모듈을 사용하므로 라이브러리가 필요하다.
센서 핀 | 아두이노 핀 |
- | GND |
+ | 5V |
S | D2 |
라이브러리 다운
아두이노 > 툴 > 라이브러리 관리
위와 같은 경로로 들어가면 라이브러리 매니저 화면이 뜨는데, 이때 18B20을 검색한다.
해당 라이브러리를 다운하면 <OneWire.h> 라이브러리를 전체 다운로드 할 것인지 뜨는데 이때 ALL DOWMLOAD를 누른다.
oneWire 라이브러리는 온도를 측정할 때 추가해야 하는 라이브러리로 디지털 온도 센서, 방수형 온도 센서와 같은 센서에서 사용할 수 있다. 그러면 아래의 TMP 헤더 파일을 이용한 온도 파악 코드를 작성할 준비가 끝난다.
코드
#include <OneWire.h> //디지털 온도 센서를 사용하기 위한 라이브러리
OneWire ds(2); //2번 핀에 연결된 OneWire 개체 설정
void setup() {
Serial.begin(9600); //시리얼 통신 속도를 9600으로 설정
}
void loop() {
byte i;
byte present = 0;
byte data[12]; //data 저장 공간 설정
byte addr[8]; //addr 저장 공간 설정
float Temp; //Temp 변수 설정
if (!ds.search(addr)) {
ds.reset_search();
return;
}
//no more sensors on chain, reset search
ds.reset();
ds.select(addr);
ds.write(0x44,1); //start conversion, with parasite power on at the end
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (i = 0; i < 9; i++) {
data[i] = ds.read();
}
Temp=(data[1]<<8)+data[0];
Temp=Temp/16;
Serial.print("C=");
Serial.print(Temp);
Serial.print(", ");
//섭씨 온도 출력
Temp=Temp*1.8+32; //섭씨를 화씨로 변환
Serial.print("F=");
Serial.print(Temp);
Serial.println(" ");
//화씨 온도 출력
}
코드 설명
OneWire ds(2); //2번 핀에 연결된 OneWire 개체 설정 |
oneWire 라이브러리의 객체를 설정해야 합니다. 2번 줄의 코드와 같이 'oneWire ds(2): 와 같이 객체를 설정하면서 디지털 온도 센서와 연결된 핀을 작성하여 설정하도록 합니다.
ds.reset(); ds.select(addr); ds.write(0x44,1); //start conversion, with parasite power on at the end delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad |
위 과정은 디지털 온도 센서 값을 읽어 오는 코드로 입력된 아날로그 신호를 디지털 신호로 변경(conversion)을 한다.
for (i = 0; i < 9; i++) { data[i] = ds.read(); } Temp=(data[1]<<8)+data[0]; Temp=Temp/16; |
for 구문을 이용해 센서에서 읽어 들인 값을 data 배열 안에 저장하도록 설정하는 코드이며 'for(i= 0; i <9: it+){datalil = dt.read(:)'의 코드는 센서에서 읽어 들인 값을 data 배열 안에 저장하도록 설정한다.
아래의 수식은 섭씨온도값 형식으로 계산하기 위한 코드이다.
Temp=(data[1]<<8)+data[0]; Temp=Temp/16; |
아래 코드는 시리얼 모니터를 통해 섭씨온도를 출력하고 화씨온도를 계산하여 출력하는 과정이다.
Serial.print("C="); Serial.print(Temp); Serial.print(", "); //섭씨 온도 출력 Temp=Temp*1.8+32; //섭씨를 화씨로 변환 Serial.print("F="); Serial.print(Temp); Serial.println(" "); //화씨 온도 출력 |
'Arduino > [2] Arduino Module' 카테고리의 다른 글
[Arduino Module] #21. 조이스틱 모듈 (0) | 2024.04.01 |
---|---|
[Arduino Module] #20. 적외선 발광/수광 모듈 (1) | 2024.03.26 |
[Arduino Module] #18. 아날로그 온도센서 모듈 (1) | 2024.03.25 |
[Arduino Module] #17. 사운드 센서 (1) | 2024.03.11 |
[Arduino Module] #16. 디지털 온도 습도 센서 (0) | 2024.03.11 |