반응형

 【 아두이노 센서#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 부분 연결은 위 회로도를 보며 연결하도록 한다.


▶ 실습 절차  : 

1. 안정적으로 사용하기 위해서는 LED 공통단자에 220Ω정도의 저항을 
 달아 준다.

2.LED 3개를 사용 하여 회로를 구성하여도 무방하며이때에도 각각 
 저항을 연결해주는 것이 좋다.

3.실습에 사용되는 LCD는 16열 2행(16by2)LCD로서 기본적으로 가장 
 많이 사용되던 형태이다. 16핀 중에서 주요 제어 라인을 아두이노
 포트로 직접 제어를 하는 형태이다.

4. 만약, LCD로 출력이 잘 되지 않을 경우 먼저 시리얼모니터로 
 데이터 출력을 점검해보고 이상이 없다면 LCD 연결라인이나 LCD관련 프로그램 부분을 살펴보면 좋을 것이다. (다음 실습에서 사용하기 편리한 I2C 타입의 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,  B00101B00101, B00010,

 B00000B00000B00000B00000   };

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);   } //  켜려고 하는 LEDHIGH 값 지정

  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);    }    

}   


1.TMP 36 온도 센서를 이용해서 온도값에 따른 RGB LED의 색을 
 다르게출력 해보는 실습이다.
2.Common Anode 타입의 RGB LED는 공통단자를 V+ 연결 하기 
 때문에 LED를 On 하기 위해서는 입력단자 LOW신호가 들어가야 한다.

3.온도 변화에 따른 LED 색을 다르게 표시하기 위해  TMP36의 출력 
 값을 측정하여 경계값을 설정한다
  예165  이하면  블루 LED ON’     
  175 
값 이상이면  레드 LED ON’ 
  165~175 
사이 값이면  그린 LED ON’

4. 정상 동작이 되면 온도 변환 공식을 이용하여 섭씨온도로 
변환하여 시리얼 모니터를 통해 화면에 표시하는 프로그램을 다음 
과제로 진행해 본다.


※위의 섭씨온도식에서 






▶ 실행 결과 :

 (영상은 고화질로 설정하고 전체화면으로 보세요)





반응형