[아두이노야 놀자]<10>온도 센서로 디지털 온도계 만들기

에어컨이나 제습기에는 실내 온도가 표시됩니다. 어떻게 온도를 측정할까요? 안에 온도계가 들어있을까요? 사실 우리가 흔히 아는 온도계와는 다른 온도계가 있습니다. 바로 '온도 센서'입니다. 온도 센서로 무엇을 만들 수 있을까요?

온도 센서는 일상에서도 다양하게 쓰이지만 안전 분야에서 활약하기도 합니다. 대표적으로 화재경보기가 있습니다. 온열기, 인덕션 등에서 작동을 강제로 정지하고 컴퓨터, 스마트폰에서는 과열을 방지하기 위해 성능을 제한하기도 합니다. 온도 센서 덕분에 가능한 일입니다. 그런 전자 제품 안에 온도계를 넣을 수는 없으니까요.

온도 센서 TMP36.
<온도 센서 TMP36.>

이 사진은 TMP36입니다. 우리가 사용할 온도 센서입니다. 굉장히 작고 간단해보이지만 -40도부터 150도까지 측정 가능합니다. 그리고 이 센서로 받는 전기 신호를 섭씨온도로 변환하기 위한 계산이 필요합니다. 과정은 조금 복잡한데 쉽게 정리한 공식을 사용하겠습니다. 준비물은 아두이노(UNO)와 USB 케이블, 브레드 보드 각 1개씩과 전선 3개 정도입니다.

[그림 1] 왼쪽 다리부터 순서대로 5V, A0, GND.
<[그림 1] 왼쪽 다리부터 순서대로 5V, A0, GND.>

먼저 [그림 1]처럼 조립해야 합니다. 다음 온도계에 온도 센서로 측정한 값을 표현하도록 엔트리 코딩을 합니다. 우선 온도계 오브젝트를 추가합니다. 기존에 있던 엔트리봇은 왼쪽의 눈을 클릭해 모양을 숨깁니다.

[그림 2] 오브젝트 구성과 변수 추가.
<[그림 2] 오브젝트 구성과 변수 추가.>

그리고 [그림 2]와 같이 '볼트'와 '온도' 변수를 추가합니다. 이제 온도 센서 값을 미리 정리된 공식을 통해 섭씨 온도 단위로 변환해야 합니다.

[그림 3] 온도 센서 값을 섭씨온도로 변환.
<[그림 3] 온도 센서 값을 섭씨온도로 변환.>

[그림 3]과 같이 엔트리가 0~5볼트 값을 0~1023으로 자동으로 변환합니다. 사용할 공식은 볼트를 기준으로 하므로, 다시 0~5의 값으로 되돌려야 합니다. 그래서 해당 아날로그 센서값에 1024(최대값)을 나누고 다시 5를 곱해줍니다.

하드웨어 카테고리에 범위를 지정해주는 블록이 이미 있지만, 소수점이 사라지기 때문에 이렇게 직접 계산해야 합니다. 볼트값에 0.5를 빼고, 그 값에 100을 곱해주면 섭씨 온도로 변환이 완료됩니다. 이렇게 계산한 값을 '온도' 변수에 넣어줍니다.

[그림 4] 온도 값만큼 이동해 펜으로 그리기.
<[그림 4] 온도 값만큼 이동해 펜으로 그리기.>

다음 온도를 온도계 위에 표시해야 합니다. 붓의 굵기를 정하고 그리기를 시작합니다. [그림 4]와 같이 기존의 위치에서 '온도'값 만큼 위로 이동한 뒤 그린 선을 지우고 또 그리기를 시작하는 것을 계속 반복합니다.

[그림 5] 원래 위치로 돌아오기.
<[그림 5] 원래 위치로 돌아오기.>

마지막으로 [그림 5]처럼 원래 위치에서 계속 선을 그릴 수 있도록 원래 위치로 돌아오는 코드를 따로 만듭니다. 엔트리는 같은 블록이 나란히 있으면 모두 합쳐서 처리하기 때문에 처음 위치와 '온도'값만큼 위의 위치를 왕복하기 위해 이렇게 따로 코드를 만들어야 합니다.

김지원 커넥트재단 연구원

위방향 화살표