재료

  • USB 케이블 1개
  • 점프 와이어 3개
  • 브래드 보드 1개
  • 아두이노 우노 1개
  • 온도 센서 1개

 이번 프로젝트에서는 온도 센서를 사용하여 현재 온도를 측정하여 출력해주는 온도계를 만들어보도록 하겠습니다. 이번 프로젝트에서 사용하게될 온도 센서는 약간의 오차(2%)는 발생할 수 있지만 0도에서 100도까지 측정이 가능하고 사용도 편리해서 프로젝트를 진행하시는 데 어려움이 없으실 거에요. 또한 기본 프로젝트에서 더 나아가서 응용 프로젝트에서는 LCD를 사용해서 현재 온도를 LCD에 출력하고, 현재 온도에 맞는 LED의 불을 켜보도록 합시다.



STEP1. 준비물

아두이노 보드, USB 케이블, 브래드 보드, 온도 센서(LM35DZ), 점프 와이어 3개


이번에 사용하게 될 온도 센서는 겉으로 보기에는 트랜지스터와 많이 닮았어요. 헷갈리기 쉬우니 주의해서 사용하도록 합시다.


STEP2. 회로도

                          

온도 센서는 다리가 3개인데 각각의 다리에 연결되어야하는 것이 다릅니다. 위의 그림을 참고해서 온도 센서를 연결해주세요.



STEP3. 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const int sensor=2;
int val=0;
float celsius=0, fahrenheit=0;
 
void setup()
{
  /*시리얼 통신을 열고 속도를 9600bps로 사용*/
  Serial.begin(9600);
}
 
void loop()
{
  val = analogRead(sensor);
  celsius = (val * 5.0 * 100.0) / 1024.0;
  fahrenheit= celsius * 9.0 / 5.0 + 32.0;
 
  Serial.print(celsius);
  Serial.println(" C");
  Serial.print(fahrenheit);
  Serial.println(" F");
  Serial.println("---------------------");
  delay(1000);
} 

온도를 계산하는 식은 온도 센서마다 달라요. 원하는 대로 온도가 측정되지 않았다면 다른 칩을 사용하고 있지는 않은지 확인하시고, 다른 칩이라면 맞는 식을 검색하셔서 사용하시면 됩니다.


STEP4. 결과 확인


위와 같이 회로를 연결해서 결과를 확인해보면,

위와 같은 결과를 확인할 수 있습니다.

손으로 센서를 감싸면 센서의 온도가 높아지는 것을 확인하실 수 있습니다.



STEP5. 응용

매번 시리얼 모니터를 통해서 온도를 확인하는 것은 불편하니, 이제는 온도 센서로 측정한 결과를 LCD에 출력하고 온도에 따라서 다른 LED가 켜지도록 해봅시다.

응용 프로젝트를 하기 위해서는추가로 준비물이 필요합니다. 저항 4개와, 가변 저항 1개, LED 3개, LCD 1개, 점프와이어를 많이 준비해주세요.

그런 후에 아래와 같이 회로에 LCD와 LED 3개를 추가로 연결해주세요.



그리고 코드를 다음과 같이 작성해서 업로드하시면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <LiquidCrystal.h>
 
const int sensor=2;
const int LED1=8; //RED
const int LED2=9; //YELLOW
const int LED3=10; //GREEN
LiquidCrystal lcd(12,11,5,4,3,2);
 
int val=0;
float celsius=0, fahrenheit=0;
 
void setup()
{
  /*시리얼 통신을 열고 속도를 9600bps로 사용*/
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
 
  lcd.begin(16,2);
  lcd.clear();
}
 
void loop()
{
  val = analogRead(sensor);
  celsius = (val * 5.0 * 100.0) / 1024.0;
  fahrenheit= celsius * 9.0 / 5.0 + 32.0;
 
  lcd.setCursor(0,0);
  lcd.print("Celsius : ");
  lcd.print(celsius);
  lcd.print(" C");
  lcd.setCursor(0,1);
  lcd.print(fahrenheit);
  lcd.print(" F");
  delay(1000);
 
  /*온도에 맞는 LED 켜기*/
  if(celsius<=10){ //GREEN
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, HIGH);
  }
  else if(celsius<25){ //YELLOW
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, LOW);
  }
  else{ //RED
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
  }
} 


현재 온도 측정 결과를 출력해주고, 온도에 따라 다른 LED가 켜지도록 만들 수 있습니다.

10도 이하일 때는 초록색 LED를, 10도에서 25도 사이에는 노란색 LED를, 25도 이상에는 빨간색 LED를 켜주도록 프로그래밍 되어 있어서 가만히 있을 때에는 현재 온도가 22도 정도되어서 노란색 LED가 켜져있지만 제가 손으로 감싸면 온도가 올라가서 빨간 불이 켜지는 것을 보실 수 있습니다.

훨씬 편리하고 예쁘죠?




댓글 0

MADE BY

김민정

사물인터넷, 아두이노