Introduction: LM35 Temperature Sensor Simulation
Simulation of a temperature sensor LM35 using proteus and MicroC
Video details at Youtube
Step 1: Connecting the Components
I used Proteus 8.0 to simulate the LM35 temperature sensor with micro controller PIC16f887
and a 16x2 LCD , all the connection are shown in the figure.
the LM35 ca be used in a range of -55 to 150 Celsius
but for now we are interested int the range of 2 to 150 Celsius with a 0.5 degree error.
Part list from amazon:
Step 2: Coding
I used MicroC to program and compile the following code:
//4/2018
//subscribe for more on youtube at: Circuitalist
///LCD pin
sbit LCD_RS at RB6_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB1_bit;
sbit LCD_RS_Direction at TRISB6_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB1_bit;
//**********************************
unsigned int adc_rd; // 10 bit for 16f887
char *txt; //pointeur texte
long tlong;
float val;
char tempval[4];
float temp;
void main() {
INTCON = 0; //ALL INTERRUPT DISABLE
ANSEL = 0X01; // PIN RA0 CONFIGURED AS ANALOG
ANSELH = 0; // Configure other ANALOG pins as digital I/O
C1ON_BIT = 0; //Disable comparators
C2ON_BIT = 0; //Disable comparators TRISA.RA0 = 1;
TRISB = 0 ;
LCD_init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
////////////////////////////StartUp
txt = "Circuitalist";
Lcd_Out(1, 1, txt);
txt = "Temp. Sensor";
Lcd_Out(2, 1, txt);
delay_ms(1500);
///////////////////////////
Lcd_Cmd(_LCD_CLEAR);
while(1) {
adc_rd = ADC_read(0);
val = (adc_rd * 5000.0)/1023.0; //Convert to mV resolution
temp = val/10.0 ; //convert mV to celsius
if (temp<=12){
FloatToStr(temp,tempval);
Lcd_Out(1,1,"Thx for watching");
LCD_Out(1,7,tempval);
Lcd_Out(1,16,"C");
Lcd_Out(2,1,"Subscribe....");
}
if (temp>12 & temp <=25){
FloatToStr(temp,tempval);
Lcd_Out(1,1,"Temp= ");
LCD_Out(1,7,tempval);
Lcd_Out(1,16,"C");
Lcd_Out(2,1,"Warm");
}
if (temp>25){
FloatToStr(temp,tempval);
Lcd_Out(1,1,"Temp= ");
LCD_Out(1,7,tempval);
Lcd_Out(1,16,"C");
Lcd_Out(2,1,"Hot ");
}
}
}
Step 3: Finally
if everything goes right you should see results on the LCD.
check my youtube video Circuitalist