LM35 (Precision Centigrade Temperature Sensors)
온도를 측정하기 위한 반도체 센서로 온도에 비례하는 전압을 읽어 온도로 환산하여 온도를 표시 할 수 있다.
LM35는 아래 그림과 같이 3 개의 핀으로 이루어진 소자로 전원선 2 개와 출력 신호선 1 개로 이루어져있어 다루기 편리하여 Analog Input
연습을 위하서도 유용하게 사용가능하다.
ref) http://www.ti.com/lit/ds/symlink/lm35.pdf
온도(C) = 측정전압(mV) / 10
온도센서 LM35를 사용하여 온도를 측정하기 위한 회로
아래 코드는 LM35를 사용하여 온도를 읽기위한 프로그램으로 PIC16F18345의 RA2에 LM35의 출력 핀을 연결하고 100 개의 ADC 값을 읽고 평균 값을 구하여 온도로 환산하였다. 그리고 계산한 온도 결과 값을 LCD 화면에 표시하도록 하였다.
위 프로그램을 사용한 결과
ref) http://www.ti.com/lit/ds/symlink/lm35.pdf
온도(C) = 측정전압(mV) / 10
온도센서 LM35를 사용하여 온도를 측정하기 위한 회로
아래 코드는 LM35를 사용하여 온도를 읽기위한 프로그램으로 PIC16F18345의 RA2에 LM35의 출력 핀을 연결하고 100 개의 ADC 값을 읽고 평균 값을 구하여 온도로 환산하였다. 그리고 계산한 온도 결과 값을 LCD 화면에 표시하도록 하였다.
//* **************************************************************************** // // LM35 - 20x04 LCD // // PIC16F18345, LM35 (0.01V/degC) // //* **************************************************************************** #include <16f18345.h> #device ADC=10 #fuses HS,NOMCLR #use delay (clock = 20000000) //*** Declear Pin for UART Communication *************************************** #pin_select U1TX = PIN_B7 #pin_select U1RX = PIN_B5 #use rs232 (baud=19200, parity=N, xmit=PIN_B7, rcv=PIN_B5) void main (void) { int8 idx_avg ; int16 adc_value, volt_mv ; int32 sum_value ; float temp ; delay_ms (1000) ; printf ("$#BL_100;") ; printf ("$#CLR_LCD;") ; printf ("$1,1,** LM-35 Test **;") ; delay_ms (1) ; setup_adc_ports (sAN2, VSS_FVR) ; setup_vref (VREF_ON | VREF_ADC_1v024) ; setup_adc (ADC_CLOCK_INTERNAL) ; set_adc_channel (2) ; while (1) { sum_value = 0 ; for (idx_avg = 0;idx_avg <= 99;idx_avg++) { sum_value = sum_value + read_adc () ; } adc_value = sum_value / 100 ; volt_mv = (float)adc_value * (1024. / 1023.) ; temp = (float)volt_mv / 10 ; //* volt_mv = 0mV + 10.0mV/C printf ("$4,3,Outp: %ld mV ;", volt_mv) ; printf ("$4,4,Temp: %4.1f C ;", temp) ; delay_ms (100) ; } } //******************************************************************************
LM35, C Source Code
위 프로그램을 사용한 결과