반응형

 【 아두이노 센서#13】 TC74 온도센서 활용하기 1 




 이번 시간은 I2C 통신 방식을 이용하는 TC74 온도 센서에 대해 다루어 보고자 한다. TMP36온도센서와 차이점은 직접적으로 섭씨온도 값을 얻어 낼수 있고 동일 회로에서 다수개의 TC74 온도센서를 활용 할 수 있다는 장점이 있다. 


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


《 DIP 타입 


《 SMD 타입




[ TC74 상세 스팩 ]




[ TC74 고유 주소 파악하기 ]



위 제조사에서 제공하는 스팩을 보면 " Address Options : " 이라는 것이 있다. 

만약 구입한 온도센서 모델이 아래 이미지 처럼 " TC74A0 " 라고 되어 있을 경우,

" A0 = 1001 000 "  이라고 되어 있는데,  이를 2진수 값으로 생각하고( 1001000 ),   

10진 값으로 계산 해보면 ,

  =  1x 2^6 + 1x 2^3   

  = 1 x 64  + 1 x 8

  = 72     가 된다.


즉 10진값 '72' 가 이 센서의 고유 주소가 된다. 

16진 값으로는 0x48 이 된다.     이주소를 기억했다가 프로그래밍의 해당부분에 입력하면 된다. 




--------------------------------------------------


만약 구입한 온도센서 모델이 아래 이미지 처럼 " TC74A5 " 라고 되어 있을 경우,

위의 상세 스팩을 참고하면 " A0 = 1001 000 "  이라고 되어 있는데,  이를 2진 값으로 생각하고( 1001101 ),   

10진 값으로 계산 해보면 ,

  =  (1 x 2^6) + (1 x 2^3) + (1 x 2^2)  +  (1 x 2^0)   

  = 1 x 64  + 1 x 8 + 1 x 4 + 1 x 1

  = 77  이 된다.


즉 10진값 '77'  혹은 16진값으로 0x4D가 이 센서의 고유 주소가 된다. 







I2C 통신을 위해서는 SDA핀과 SCL(SCLK)핀에 풀업 저항을 달아서 연결해야 통신이 제대로 이루어 진다.   (풀업 저항 값으로는 4.7K가 적당하며,  여의치 않을 경우 1K~10KΩ 사이의 저항값 사용가능)




▶ 실습 목표 :  


1. TC74 센서의 온도 값을 시리얼 모니터로 출력해 보자.


2. I2C 통신기능에 대해 익혀본다.


▶ 실습 회로도면 :

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





※ 일반적으로 TC74 를 구입할 때 주소를 구분해서 구매할 필요는 없으나, 

하나의 시스템에서 여러개의 온도센서를 가지고 활용하려 할 때는 고유주소가 다른 센서를 사용해야 각각의 제어가 가능하니 참조하길 바란다. 




▶ 실습 절차  : 

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

2. L기본적으로 I2C 통신을 위한 PIN(SDA, SCL)에는 풀업 저항을 달아 주어야 통신이 잘 이루어 진다.  

3.연결이 완성되면 프로그램을 아두이노 보드에 로딩시키고 시리얼 모니터 창을 열어 출력값을 확인 해본다. 

4.손가락으로 잡아보면 천천히 온도값이 올라가는 것을 확인 할 수 있다. 기타 온도 변화를 빠르게 확인 하는 방법으로 센서를 냉동실에 1분 가량 잠시 넣어 두었다가 다시 연결하여 측정해보면 영하에서 부터 상온까지 서서히 올라가는 것을 관찰 할 수 있으며, 인두기 혹은 히터를 이용해볼 수도 있다.  



▶ 프로그램 코드 및 설명 : 


  // I2C 온도 센서(TC74A0-5.0VAT) 이용하기

  // I2C 온도 센서에서 값을 읽어 시리얼 포트로 출력하기

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

  //I2C 센서 ID10진수로 저장한 temp_address 변수 선언

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

void setup()  {

  Serial.begin(9600);

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

}

void loop() {

             // I2C 센서의 주소와 통신을 개시하는 요청 전송

  Wire.beginTransmission(temp_address);

            // I2C 센서의 0번 레지스터를 읽겠다는 명령을 쓰기 모드에서 전송

  Wire.write(0);

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

    // 지정된 주소의 I2C 센서에서 1바이트 값을 읽음

  Wire.requestFrom(temp_address, 1);

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

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

           // 섭씨를 화씨로 변환(소수점 반올림)

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

       // 시리얼 포트로 섭씨온도와 화씨온도 출력

  Serial.print(c);

  Serial.print("C ");

  Serial.print(f);

  Serial.println("F");

  delay(500);  

  }



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

3. TC74 온도 센서는 기본적으로 섭씨 온도값을 출력 하므로 화씨 온도값을 출력하고자 한다면, 썹씨를 화씨로 변환하는 공식을 사용하면 쉽게 출력 할 수 있다. 

4. 시리얼 모니터 실행시 에러가 난다면, 프로그램상의 통신 속도(9600)와 시리얼 모니터 창의 설정 속도가 일치하는지 확인 해야 한다. 


※ 섭씨온도를 화씨온도로 변환 하는 식  [  (섭씨 x 9.0) / 5.0 + 32.0  ] 



▶ 실행 결과 :

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




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


I2C 스캐너 프로그램  :  

I2Cscaner.ino



반응형