프로그래밍 / C++ / 언리얼

Programming/Arduino

[Arduino] 아두이노 온도센서(LM35) 쉽게 사용하기

아트성 2020. 7. 23. 11:00

 

 

   온도센서의 개요

 

온도 센서(Temperature Sensor)란 쉽게 설명하면 온도의 변화에 응답하는 센서다.
온도센서는 열전도를 통해서 받은 에너지값을 전기신호로 바꾸어서 결과값을 나타내는 센서다. 온도에 따라 전위차가 변하므로써 대략 218K~423k까지 측정이 가능하다.
온도가 서서히 변하는 물체나 장치에 사용하는것은 문제가 되지않으나,  온도변화가 급격한 물체에 사용하는 것은 적합하지 않다.  또한 값이 선형적으로 변해 프로그램이 용이하다. 그래서 우리 실생활에 온도센서가 유용하게 쓰인다,  우리가 집안에 보일러를 틀때 목표온도를 설정하게되는데, 목표온도가 실내온도까지 도달하게되면 보일러의 가열이 멈추도록 설계가 되어있다. 보일러는 온도센서를 활용한 대표적인 사례이다, 이 뿐만 아니라 에어컨에도 온도센서가 쓰이는데 목표온도까지 실내가 어느정도 냉방이되면, 저전력 냉방으로 바뀌기도 한다. 또는 이런 냉난방기에 현재온도가 얼마인지 표시까지 하도록 도와준다. 우리 실생활에서 자주쓰이는 이 온도센서의 원리를 아두이노를 통해서 알아보도록 하자.

 

 

 

 

   예제실습 - 온도센서 작동확인

 

 

우선 온도센서는 주의해야할점이 있다. VCC와 그라운드를 반대로 연결시켜주면 쇼트가 나서 타버릴수 있으니 항상 극성을 잘 확인시켜주어야한다. 오른쪽 사진을 보면 온도센서(LM35)왼쪽핀이 5V 가운데가 OUTPUT, 오른쪽이 그라운드가 된다. 이핀을 각각 5V, 아날로그0번, GND에 연결시켜주도록 한다.

 

float temp;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int val = analogRead(A0);
  temp = val*0.48828125; //화씨 → 섭씨 변경
  Serial.print("Current Temperature : ");
  Serial.println(temp);
  delay(500);
}

 

아두이노 코드는 위와같다.

우리가 일반적으로 온도센서로부터 읽어들이는값은 화씨단위이다. 그래서 화씨온도를 섭씨온도로 바꿔줄 필요가 있다.

val이라는 정수형 지역변수를 설정해주어서 섭씨온도로 변경한 값을 temp라는 변수에다가 넣어주면 우리가 섭씨온도로 온도값을 읽어들일수가 있다. (화씨온도가 편하면 그대로 사용해도 무방하다.)

 

 

컴파일을 진행시키고 시리얼모니터를 키게되면, 온도값이 출력되는것을 확인 할 수있다. (Current Temperature : Value)

 

 

   예제실습 - RGB LED를 이용해서 온도에따라 색 변화시키기 

 

온도센서는 여러가지 응용이 가능하다. RGB LED로 온도에따라서 색이 변하는 회로를 구성할 수 있다.

조건은 아래와 같다. 온도가 일정 값까지 올라가게되면 색을 변하게 설정해준다.

 온도가 23이상 25미만이면 파란색불,  25이상 27도 미만이면 녹색불, 27이상이면 빨간색불을 켜도록 한다.

 

 

회로구성은 아까 구성했던 회로에다가 RGB LED를 추가하면된다. RGB LED는 총 4개의 핀으로 구성되어있고 3개의핀은 LED를 구성하는 핀이고, 1개의핀은 그라운드핀이다. R핀은 2번, G핀은 3번, B핀은 4번핀에다가 연결시켜주고, 나머지는 GND에다가 연결시켜주면된다. 

 

float temp;

void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  int val = analogRead(A0);
  temp = val * 0.48828125; //화씨 → 섭씨 변경
  Serial.print("Current Temperature : ");
  Serial.println(temp);
  if (temp >= 23 & temp < 25) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
  }
  else if (temp >= 25 & temp < 27) {
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
  }
  else if {temp >= 27
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  }
}

코드는 위와같다. 조건식은 온도가 낮아지면 파란색에 가깝게, 온도가 높아질수록 빨간색에 가깝게 if문을 활용해서 코드를 만들도록한다. 우리가 이 코드를 활용하면 전자온도계에 LED를 이용해서 시각적으로 나타낼 수 있다.

 

컴파일을 진행시키게 되면 온도가 올라감에따라 파란색 - 녹색 -빨간색 순으로 RGB LED의 색상이 변하는것을 확인할 수 있다. 

 

 

   예제실습 - 온도값을 LCD에 나타내기

 

 

우리가 LCD(16x2)센서를 이용해서 전자온도계를 만들 수 있다.  매번 시리얼 모니터로 확인하던것을 LCD에 나타내서 눈으로 보기 쉽게 나타낼 수 있다. 회로구성은 위와같다. 온도센서는 아까와 같이 연결시켜주면 된다. 

LCD(16x2) I2C타입은 총 4개의 핀으로 구성되어있다. VCC는 5V에 GND는 GND에 SDA는 아날로그 4번핀에 SCL은 아날로그5번핀에다가 차례로 연결시켜준다.

 

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
float temp;
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
  Serial.begin(9600);            
}


void loop()
{
  lcd.init();
  int val = analogRead(A0);
  temp = val*0.48828125;
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Temperature");
  lcd.setCursor(6,1);
  lcd.print(temp,1);
  lcd.setCursor(12,1);
  lcd.print("C");
  delay(1000);
}

 

코드는 위와같다. 우리가 LCD 16x2타입을 사용하기 위해서는 라이브러리를 설치해주어야한다. (라이브러리 설치하는 방법은 본문하단에 링크에 남겨둠.)

 

 

컴파일을 진행시키면 온도변화값이 LCD에 출력되는것을 확인 할 수있다.

각자 위의 RGB LED 예제와, LCD예제를 활용해서 멋진 전자온도계를 만들어 보도록 해보자.

반응형