Temperatūras mērīšana, izmantojot LM35 termosensoru


Šoreiz, izmantojot mikrokontrolleri (ATmega328P), tika izveidota elektriskā principiālā shēma, kura paredzēta iekštelpu temperatūras mērīšanai (no 0 °C līdz 150 °C ). Temperatūra uz 16x2 simbolu displeja tiek attēlota gan Celsija skalā, gan Fārenheita skalā, gan Kelvina skalā.


1.1.att. Termometra elektriskā principiālā shēma



#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include<avr/io.h>  
#include<util/delay.h>  
#include <avr/interrupt.h>
#include "lcd.h"



unsigned int Read_ADC();
void Init_ADC(); 

int main(){  

unsigned int ACP_vertiba=0, temp_Celsius=0,temp_Fahrenheit=0,temp_Kelvin=0;

DDRB=0x0F;  
DDRD=0xFF;
DDRC=0x00;

InitLCD();
_delay_ms(500); 
LCDClear();
_delay_ms(500);  
Init_ADC();  

while(1){  
_delay_ms(3000);
LCDClear();
ACP_vertiba = Read_ADC();  
_delay_ms(20); 
temp_Celsius = (ACP_vertiba/2.05); // 1 °C = 2.05 
temp_Fahrenheit = (ACP_vertiba/2.05)*1.8+32;
temp_Kelvin = (ACP_vertiba/2.05)+273.15;
_delay_ms(20); 

LCDWriteStringXY(3,0,"Temperatura");
LCDWriteStringXY(8,1," oC");
if(temp_Celsius>99){
LCDWriteIntXY(5,1,temp_Celsius,3);
}
else{
LCDWriteIntXY(5,1,temp_Celsius,2);
}

_delay_ms(3000);
LCDClear();
LCDWriteStringXY(3,0,"Temperatura");
LCDWriteStringXY(8,1," oF");
if(temp_Fahrenheit>99){
LCDWriteIntXY(5,1,temp_Fahrenheit,3);
}
else{
LCDWriteIntXY(5,1,temp_Fahrenheit,2);
}
_delay_ms(3000);
LCDClear();
LCDWriteStringXY(3,0,"Temperatura");
LCDWriteStringXY(8,1," K");
if(temp_Kelvin>99){
LCDWriteIntXY(5,1,temp_Kelvin,3);
}
else{
LCDWriteIntXY(5,1,temp_Kelvin,2);
}

return 0;  
}  




 void Init_ADC(){  

 ADMUX=(1<<REFS0);  
   ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);  
}  
unsigned int Read_ADC(){
 
ADMUX|=0x00;
ADCSRA|=(1<<ADSC);
_delay_ms(1);                  
while(!(ADCSRA&(1<<ADSC)));
ADCSRA|=(1<<ADIF);
return ADCW;

}


1.2.att. Temperatūras attēlošana pēc Kelvina skalas

1.3.att. Temperatūras attēlošana pēc Fārenheita skalas

1.4.att. Temperatūras attēlošana pēc Celsija skalas


UZ SĀKUMU