반응형

【 아두이노 센서#15】 TC74 센서 74HC595 응용회로 실습


 지난 시간 I2C 통신 방식을 이용하는 LCD에 TC74 온도 센서의 온도 값을 표시해 보았다.(TC74 to i2c LCD강좌 보기)  

 이번 시간은 지난시간 활용 했던 시프트 레지스터(74HC595)를 이용해서 TC74센서의 온도 값을 레벨미터 형태로 표시해볼 것이다. 


▶ 선수 학습 :

  1. 시프트 레지스터 실습  강좌보기클릭☜

  2. TC74온도 센서 활용하기1  강좌보기클릭☜



▶ 실습에 사용되는 온도센서 자료 ( TC74 ) 


《 DIP 타입 





▶ 실습 목표 :  


1. TC74 센서의 온도 값을 8bit 레벨값(LED)으로 표시할 수 있다. 


2. 시프트 레지스터를 온도센서와 결합해보는 활용법을 익힐 수 있다. 


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)





▶ 실습 절차  : 

1. 위 회로를 보고 각 부품과 보드를 연결한다. 

2. 위에 있는 것과 같은 작은 브레드보드를 사용할 경우, 부품 배치 할 공간이 협소할 수 있으니 공간을 미리 잘 확인할 필요 있다.

3.LSB(하위비트)와 MSB(상위비트) 위치를 확인하며 조립한다. 

4.다수의 선을 연결 할 때 헷갈리지 않도록 색으로 구분 해놓았으니 참조해서 조립한다. 


▶ 프로그램 코드 및 설명 : 


/*  l2C 온도 센서 값을 읽어 LED 막대 그래프로 표시 하기  */

#include <Wire.h   // I2C 라이브러리 삽입

const int SER=8;

const int LATCH=9;    // LATCH 핀과 LATCH 상수 정의

const int CLK=10;       // Clock 핀과 CLK 상수 정의

int temp_address=72;   // 제조회사 제공 고정값

int vals[8]={1,3,7,15,31,63,127,255}; //그래프로 표시할 LED배열선언

void setup()  {

 Serial.begin(9600);

 lcd.begin();      lcd.clear();

 Wire.begin();               // I2C Wire 객체 시작

 pinMode(SER, OUTPUT);

 pinMode(LATCH, OUTPUT);

 pinMode(CLK, OUTPUT);

}


void loop() {

 Wire.beginTransmission(temp_address); // I2C 센서와 통신 개시

 Wire.write(0); //센서의 0번 레지스터를 읽겠다는 명령(쓰기모드)

 Wire.endTransmission();  // 전송 완료(0값 전송 종료)

 Wire.requestFrom(temp_address, 1);    // 1바이트 값을 읽음

 while(Wire.available()==0);     // 응답이 올 때까지 대기

 int c=Wire.read();      // 온도를 읽어 변수 c에 저장

 int f=round(c*9.0/5.0 +32.0);

 int graph=map(c, 24, 31, 0,7);     // 그래프 패턴 설정

 graph=constrain(graph,0,7); 

 digitalWrite(LATCH, LOW);          // LATCHLOW 입력

 shiftOut(SER, CLK, MSBFIRST, vals[graph]);    // 데이터 전송

 digitalWrite(LATCH, HIGH);        // LATCHHIGH 입력

 Serial.print(c);

 Serial.print("C, ");

 Serial.print(f);

 Serial.println("F. ");

 delay(500);  

}


1. 온도가 올라갈수록 LED 레벨이 높아지도록 프로그래밍 한다.


2. I2C온도 센서를 이용하기 위해서는 <Wire.h> 파일을 선언해야 한다. 만약 헤더파일이 없을 경우 라이브러리 관리창에서 검색하여 추가해 준다.
3. 본인이 가지고 있는 온도 센서의 라벨을 확인하여 고유주소를 정확하게 적어 놓는다. 
 만약 센서가 "TC74A0" 일 경우 int temp_address = 72; 라고 적는다. 

4. LED 레벨미터는 각 비트의 LED만 켜면 되기 때문에 각 비트에 해당하는 값만 미리 배열로 선언해두어 출력하면 간단히 구현할 수 있다.
( "int vals[8]={1,3,7,15,31,63,127,255};  " ) 

5. 주변 온도 환경에 맞추어 레벨미터 값을 8개의 LED 레벨값으로 맵핑한다. ( int graph=map(c, 24, 31, 0,7);  즉, 24도~31도의 온도값을 0~7, 8개의 LED로 치환시킨다(맵핑)  )



▶ 실행 결과 :

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




▶ 아두이노 파일(다운) :

TC74TempLEDmeter.ino



I2C 스캐너 프로그램 :  

 I2Cscaner.ino



반응형