본문 바로가기
Arduino&RasberryPi/Arduino Uno

15. Arduino - LM 35 온도 센서 사용법

by Rosmary 2019. 11. 13.
728x90
반응형

 

이번 포스팅은 LM35라는 모델명을 가지는 온도 센서 사용법에 대한 내용이다. 이전 포스팅과 다른 점은, 실습 및 결과 내용은 추가하지 않는다는 것이다. 아무래도, 스타터 키트의 온도 센서 자체가 저렴한 가격의 모델이다보니, 결과라고 출력하는 내용들이 상당히 신뢰성이 떨어진다(실내에서 온도를 측정하는데 값의 변동이 매우 심하다...). 따라서, 추후 조금 더 좋은 센서를 구매하게 되면, 해당 센서 모델로, 실습과 결과 내용을 포스팅 할 예정이다.

 

 

1. 온도 센서의 구조 및 원리

 

Arduino를 사용하여, Arduino 주변의 온도를 측정할 수 있는 온도 센서를 작동 시킬 수 있다. 온도 센서는 가변저항과 유사한 특성을 가지고 있기에, 온도 센서 역시 회로와 연결되는 단자를 3개나 가지고 있다. 하나는 전원 소스 핀과, 다른 하나는 GND와, 마지막 하나는 온도 센서의 저항을 거쳐 들어오는 전압 크기를 측정하는 핀과 연결된다. 

 

 

가변 저항과 마찬가지로, 가운데 단자는 전압 측정과 연관된 핀으로 연결되며, 평평한 부분을 정면으로 바라볼 때, 양 끝 중 좌측 핀은 전원 공급 핀, 다른 하나는 GND 핀과 연결하면 된다. 이러한 구조 덕에, 회로의 제작도 간단하게 진행할 수 있다. (주의해야 할 점은, 온도 센서가 역전류에 대한 처리가 되어 있지 않기 때문에, GND와 전원 핀을 거꾸로 연결시키면 엄청난 열이 발생한다는 것이다...)

 

 

온도 센서는 작동 원리에 따라 여러가지 방식이 존재한다. 바이메탈처럼, 열이 가해지면 모양이 변형되는 금속에 의해 분리되어 있던 금속 면이 접촉되어 전류가 흐르는 열전대 방식, 또는 특정 온도 이상에서 자성을 잃어버리는 특성을 가지는 자기 온도 센서 등이 있다. Arduino의 스타터 키트에서 사용하는 온도 센서인 LM35은, 온도 센서 중 가장 저렴한 모델이며, 이 부품은 주변 온도 변화에 따른 센서 내부 저항값의 변화를 이용하여 온도를 측정한다. 이러한 방식의 온도 센서를 금속 측온체 온도 센서라고 하고...

 

그렇기 때문에 서두에 언급했듯이, 이번 포스팅에서 사용하는 온도 센서는 가변 저항과 유사한 성질을 가진다.  주변의 온도에 따라 저항값이 달라지는, 일종의 가변 저항이라고 보면 되는데, 온도가 높을수록 저항값이 커지며, 반대로 온도가 낮을수록 자체 저항값이 작아진다.

 

온도가 높이 올라가더라도, 센서 내의 저항은 온도에 의해 손상받지(녹지)않아야 하기 때문에, 센서 내의 저항으로 백금이 많이 사용된다.(참고로 백금의 녹는점은 섭씨 1700도에 달한다)

 

***  스타터 키트의 온도 센서 모형과 유사한 형태의 부품이 하나 존재하는데, 온도센서보다 조금 더 크고, 부품 전체가 금속으로 이루어진 부품이 있다. 이것은 온도 센서가 아니라 적외선 수신 센서다(표면에 VS1838B라고 표시되어 있다). 참고로 이 부품 역시 GND와 전원 핀을 온도 센서와 동일하게 연결해야 하며, 반대로 연결하면 표면이 금방 뜨거워진다. 화상을 입을 수도 있으니 유의하자... 사실 필자는 적외선 수신 센서를 온도 센서로 착각하고 사용하는 바람에 포스팅이 조금 늦어졌다...

 

 

2. 온도와 센서로부터 측정되는 전압과의 관계

 

스타터 키트의 온도 센서인 LM35 센서의 사양을 간단하게 검색해보니, 다음과 같이 나타난다.

 

 

온도는 최저 영하 55도에서 최고 영상 150도까지라고 되어 있지만, 실제 측정 가능한 범위는 0도에서 100도까지다. 측정 가능한 온도와 일치하는 출력 전압값(Arduino의 입력 핀에서 읽어들이는 값)은 0V 에서 5V 사이로 표시된다. 0.01V 가 증가할 때마다, 1도가 증가하며 전압, 온도 두 인자 간의 일차 선형 방정식을 도출할 수 있다. 다음과 같이.

 

(1) T = 100 V (온도가 1도 오를 때, 전압은 0.01V 증가)

(2) 온도 센서의 전압 출력 값 Vout =  ( analogRead() 값  / 1024 ) * 5

(3) V = Vout 이므로,

 

=>  T = 100 Vout = 100 * ( 5  *  AnalogRead()값 / 1024 )

        = 500  *  AnalogRead()값  /  1024

 

 

따라서, 온도 센서를 사용하여 온도를 출력하기 위해서는 온도에 해당하는 변수 자료형을 float으로 설정해야 정확한 결과가 나타난다. LM 35의 경우, 실제 온도와 0.5도 정도의 오차가 존재하도록 설계되었다고 하니, 필자처럼 값이 요동치는 불량 제품이 아니라면, 실제 온도와 근사한 측정값을 얻을 수 있을 것이다.

 

***  필자는 analogRead()값이 지속적으로 변동되는 것 때문에, analogRead() 1000여개 값의 평균을 내어 온도를 출력하는 방법도 사용해보았지만, 롤러코스터를 타는 결과 값을 잡아내는 데에 실패했다... 저항 1개의 기본 회로 위에서 analogRead() 값이 잘 읽히는 걸로 봐서, Arduino나 회로의 문제는 절대 아니다.... 

 

싼 게 비지떡이라는 말이 생각난다. 아무래도 온도 센서는 조금 더 정밀하고 제 기능을 할 수 있는 좋은 녀석으로 다시 구매해야 할 듯 하다.

 

 

FIN.

반응형

댓글