-
아두이노 레시피 : 온도센서 - 기본편아두이노 레시피 2025. 2. 23. 18:05
# Recipe 9. 방수 온도센서(모델명 : DS18 B20)
실험할 때, 나만의 온도계가 필요하진 않나요?
by Cytron Technologies YOUTUBE
안녕하세요~ 아두이노셰프입니다. 이번 주는 이벤트 느낌으로 조금은 어려울 수 있는 레시피들을 진행하고 있는데요. 오늘은 따라 하기에는 쉬운(그 원리는 어렵지만..ㅋ) 싱싱한 센서를 가져와봤어요. 바로 온도센서! 이 센서는 직접 물체의 표면에 닿아서 측정하는 센서예요. 그래서 온도변화에 민감하고 성능도 꽤 정밀하답니다.(오차±0.5°C) 제가 고등학교시절에 학술연구를 여러 진행했었는데 그때도 실험할 때 꽤 유용했던 친구예요. 그냥 붙여서 측정할 수 있는 일반센서 형식과 물에 넣어 측정하는 방수형 식이 있는데요. 이번엔 방수형 온도센서를 사용해 볼게요.(그냥 센서와 사용법이 똑같습니다. 그냥 방수포장한 거니까요ㅎ) 3D프린터 핫베드의 온도측정이나, 어항의 온도측정 등 다양하게 활용된답니다~ 여러분은 어디에 사용하실 건가요??
오늘의 재료 Ingredient
<메인 재료>
방수형 온도센서(모델명 : DS18 B20)
<그 외 재료>
아두이노 우노
수-수 점퍼케이블(4개)
브레드 보드
4.7kΩ 저항(1개)
메이킹 방법 Steps
Step 1. 선 연결하기 Wiring
a. 센서의 GND(검정)는 아두이노의 GND에,
b. 센서의 VCC(빨강)은 아두이노의 5V에,
c. 센서의 DQ(노랑)는 4.7kΩ 저항과 함께 아두이노의 5V에 연결해 줍니다.
(DQ핀이 1-WIRE통신을 지원하기 때문에 반드시 위의 그림처럼 저항을 연결해 주셔야 제대로 된 값이 나와요!)
1-WIRE통신은 아래 ‘과학으로 양념하기’에서 다뤄볼게요.
- - - - - - - - - -
Step 2. 라이브러리 포함하기 pre setting
코드를 동작시키려면 라이브러리를 설치해줘야 해요.
1. OneWire 라이브러리 설치
Sketch -> Include Library -> Manage Libraries에 들어가서 라이브러리 매니저를 실행해 줍니다.
검색창에 onewire를 검색해 주시고 설치해 주세요.(밑으로 내리다 보면 있을 거예요.)
2. Dallas Temperature 라이브러리 설치
검색창에 dallas를 검색하시면 'Dallas Temperature'가 있을 거예요. 설치해 주세요.
Step 3. 아두이노 코드 Code review
여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ
#include <OneWire.h> //1-WIRE통신을 위해 해당 라이브러리를 가져올게요. #include <DallasTemperature.h> //DS18B20모델을 사용하기 위한 온도센서 라이브러리에요. #define ONE_WIRE_BUS 2 //2번핀을 ONE_WIRE_BUS라고 부를게요. OneWire oneWire(ONE_WIRE_BUS); //2번핀을 1-WIRE통신이 가능하도록 만들게요. DallasTemperature sensors(&oneWire); //1-WIRE통신이 가능한 2번핀을 온도센서의 데이터핀으로 설정합니다. void setup(void) { sensors.begin(); // 센서 동작시킬게요. Serial.begin(9600); //모니터로 받아봐야하니 시리얼통신을 시작합니다. } void loop(void) { sensors.requestTemperatures(); //라이브러리에서 제공하는 함수에요. 센서에서 온도값을 받아옵니다. //받아온 온도값(섭씨)을 보기쉽게 시리얼모니터에 출력할게요. Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); //1-WIRE는 여러개의 센서 통신이 가능한데, 이 코드는 센서 1개의 값만 받아온다는 뜻이에요. Serial.print("º"); Serial.print("C | "); //받아온 온도값(화씨)를 보기쉽게 시리얼모니터에 출력할게요. Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0); //(섭씨 X 9)/5 + 32는 화씨입니다. Serial.print("º"); Serial.println("F"); delay(500); //센서가 값을 읽도록 0.5초만 기다릴게요. }
Step 4. 동작시키기 Working
● 코드를 아두이노 우노에 업로드해 주세요.(업로드 완료 후에도 USB선은 뽑지 않고 유지합니다.)
● 시리얼모니터를 열어서 값이 들어오는지 확인합니다.
● 얼음물이나 뜨거운 물에 넣어보세요. 아니면 입김을 불어 보세요. 어떻게 변하나요?
- - - - - - - - - -
오늘의 레시피는 여기까지입니다~ 더 깊은 맛을 원하시는 분은 아래 과학시즈닝을 참고해 주세요!
“과학으로 양념하기” Seasoning
센서에 대한 과학적 원리와 세부내용으로 레시피에 더 깊은 맛을 넣어봅시다.
- - - - - - - - - -
센서에 대하여
과학원리
(다른 온도센서와 비슷하게)
이 센서 안에는 온도변화에 따라
전압을 발생시키는 두 개의 소자가 들어있어요.
이 소자들 사이로 전기가 통과하는데,
온도에 따라 전압이 달라지고
이를 아두이노 같은 회로들이 감지하는 거예요.
동작원리
그런데 이 센서가 조금 특별한 게
1-WIRE 통신을 제공하는 센서라는 겁니다.
신호를 주고받으려면
일반적으로 두 개의 신호통로가 필요한데
이 1-WIRE통신은 한 개의 통로
즉 한 전기선으로 신호를 ‘주고’’받는’ 게
가능하도록 해줘요.
그리고 한 가지 더 특별한 점이 있는데
다중통신도 한 개의 신호선으로
가능하게 한다는 겁니다.
만약 여러분이 센서 10개를
동시에 써야 한다고 하면,
각각의 데이터선들을
아두이노의 핀에 연결해야겠죠?
그럼 10개의 I/O핀을 사용해야 되니까
통신선이 너무 많잖아요.
또한 아두이노의 I/O핀 개수를
넘어가는 센서들을 제어해야 한다면?
꽤 곤란할 거예요...
그런데 이 온도센서는 10개든 20개든
1개의 통신선으로 제어가 가능하답니다!
정말 말 그대로 1-WIRE 죠?
그래서 센서 네트워크를 만들 때,
이 1-WIRE통신이 가능한 센서를 사용하면
선 구성을 간단하고 효율적으로 할 수 있어요.
(다음에 기회가 되면 1-WIRE통신을 사용해서
여러 개의 센서를 동시에 제어하는 프로젝트도 해볼게요)
- - - - - - - - - -
코드의 동작 알고리즘
알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.
코드가 어떻게 동작되는지 알아볼까요?
오늘 코드의 진행절차는 간단합니다.
"읽는다." → "출력한다."
대신 값을 읽기 위해서 전처럼 단순히
analogRead나 DigitalRead함수를 사용하지 않고
라이브러리에서 제공하는
requestTemperatures()라는 함수를 사용해요.
라이브러리만 설치해 주면 간단하게 센서를 사용할 수 있어요.
너무 편하지 않나요?ㅎㅎ
- - - - - - - - - -
센서요약 카드
이름 : (방수) 온도센서
설명 : 물체의 온도를 측정하는 센서이다. 센서에 방수포장을 하여 액체의 온도도 측정할 수 있다. 1-Wire 통신을 지원함으로 여러 개의 센서를 동시에 효율적으로 제어할 수 있다. 온도측정범위는 -55°C 에서 125°C이며 정확도는±0.5°C이다.
센서의 구성 : GND, VCC, DQ(1-WIRE통신을 지원한다.) 핀으로 구성되어 있다.
'아두이노 레시피' 카테고리의 다른 글
아두이노 레시피 : LCD 모니터 - 기본편 (0) 2025.02.24 아두이노 레시피 : 초음파센서 - 기본편 (0) 2025.02.24 아두이노 레시피 : 블루투스 사용하기 - 기본편 (0) 2025.02.23 아두이노 레시피 : 온습도센서 사용하기 - 기본편 (0) 2025.02.23 아두이노 레시피 : 모터드라이버 사용하기 - 기초편 (0) 2025.02.22