【 아두이노 센서#5】 TMP36 온도센서 #3 with LCD
지난 시간 TMP36 온도센서를 가지고 온도값을 시리얼 모니터로 확인하는 실습을 진행하였다. (바로가기 ☞ TMP36 온도센서 시리얼모니터 편)
이번 시간에는 지난시간에 이어서 센싱되는 온도값을 LCD 디스플레이 화면으로 출력해보는 실습을 진행 하려고 한다.
▶ 실험에 사용되는 온도센서 자료 ( TMP36 )
아래는 온도 값과 출력전압과의 상관관계를 나타낸 그래프이다.
예를 들어 TMP36센서는 주변 온도가 50도씨 일때 출력단자로 1.0V의 전압값을 출력한다는 뜻이다.
그래프특성을 살펴보고 자신이 사용하고자 하는 환경에 맞는 센서를 사용하면 되며, 통상적으로 활용 온도 범위가 넓은 TMP36센서를 많이 사용한다.
[ 실습에 사용될 RGB LED(3색LED) 구조 및 사양 ]
RGB LED 는 그림에서 보듯 3가지 색 LED가 한 몸체에 구성되어 있다고 이해하면 쉽다.
다만, 단자하나는 공통단자로 연결되어 있고, LED의 마이너스(-) 극이 공통단자로 되면 Common 케소드(음극), 플러스(+)극이 공통단자로 되면 Common 애노드(양극)이 된다. (통상적으로 부품의 다리 길이가 제일 긴 단자가 공통단자다)
따라서 부품을 사용하기전에 자신의 부품이 컴온 캐소드 타입인지? , 컴온 애노드 타입인지? 반드시 확인해야 하며, 단자의 색상 위치도 그림과 순서가 다를 수 있으니 멀티테스터기 혹은? 3V 정도의 낮은 전원을 가하여 색의 위치를 사전에 확인하면 좋을 것이다.
▶ 실습 목표 :
1. 온도 범위에 따라 LED의 색을 다르게 표시하라.
[예, 수치 값이 165 이하는 블루색, 165~175는 그린색, 그 이상은 레드색]
2. 온도(섭씨) 값을 LCD 화면으로 출력하라.
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
※ LCD 부분 연결은 위 회로도를 보며 연결하도록 한다.
▶ 프로그램 코드 및 설명 :
#include <LiquidCrystal.h> // LCD를 사용하기 위한 헤더파일
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD 핀 설정
const int RLED=9; // 빨간색 LED 상수형변수에 아두이노 9번 핀 할당
const int GLED=10; // 녹색 LED 상수형변수에 아두이노 10번 핀 할당
const int BLED=11; //파란색 LED 상수형변수에 아두이노 11번 핀 할당
const int TEMP=0; // 아날로그 입력 0번(A0) 핀 선언
const int LOWER_BOUND=162; // 온도 하한 값을 정의 함
const int UPPER_BOUND=168; // 온도 상한 값을 정의 함
int val=0; // 온도 센서의 현재 값을 저장하는 변수 선언
byte SpecialChar1[8] = { B00010, B00101, B00101, B00010,
B00000, B00000, B00000, B00000 };
void setup() {
Serial.begin(9600);
pinMode(RLED, OUTPUT); // RLED를 출력으로 지정
pinMode(GLED, OUTPUT); // GLED를 출력으로 지정
pinMode(BLED, OUTPUT); // BLED를 출력으로 지정
Serial.begin(9600);
pinMode(RLED, OUTPUT); // RLED를 출력으로 지정
pinMode(GLED, OUTPUT); // GLED를 출력으로 지정
pinMode(BLED, OUTPUT); // BLED를 출력으로 지정
lcd.begin(16,2);
lcd.clear();
lcd.createChar(1,SpecialChar1);
}
void loop() {
val=analogRead(TEMP);
Serial.println(val);
float mVoltage = val*5000.0/1024.0;
float TempDotC = (mVoltage - 500) / 10.0;
Serial.print(TempDotC); Serial.println("℃\n");
lcd.setCursor(0,0);
lcd.print("Tmp36 Sensor !");
lcd.setCursor(0,1);
lcd.print("Temp:");
lcd.print(TempDotC);
lcd.write(1);
lcd.print("C");
delay(500);
if(val < LOWER_BOUND) { // 경계 값 비교
digitalWrite(RLED,HIGH);
digitalWrite(GLED,HIGH);
digitalWrite(BLED, HIGH); } // 켜려고 하는 LED에 HIGH 값 지정
else if (val>UPPER_BOUND) {//상위 경계선값 이상이면 Red LED ON
digitalWrite(RLED,HIGH);
digitalWrite(GLED, LOW);
digitalWrite(BLED, LOW); }
else { // 경계선 사이 값이라면 Green LED On
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
digitalWrite(BLED, LOW); }
}
175 값 이상이면 ‘레드 LED ON’
165~175 사이 값이면 ‘그린 LED ON’
※위의 섭씨온도식에서
▶ 실행 결과 :
(영상은 고화질로 설정하고 전체화면으로 보세요)
'아두이노 > 2. 아두이노센서' 카테고리의 다른 글
【 아두이노 센서#7】 I2C LCD로 TMP36 온도센서값 출력하기 #3 (0) | 2018.12.11 |
---|---|
【 아두이노 센서#6】 I2C (Inter Integrated Circuit) 통신 (0) | 2018.12.10 |
【 아두이노 센서#4】 TMP36 온도센서 #2 ( 시리얼 모니터) (0) | 2018.12.06 |
【 아두이노 센서#3】 TMP36 온도센서 #1 (0) | 2018.12.05 |
【 아두이노 센서#2 】 적외선(근접)센서 TCRT5000 #2 (0) | 2018.12.04 |