Elektronik Devre Şemaları, Projeler, Bilgiler: Blog 320volt

PIC18F452-Lm35-Sicaklik-sensoru

Bundan yaklaşık 3-4 ay önce bir arkadaşa yaptığım devrenin dosyalarını üniversite, sınavlar…vs sebeplerden dolayı yeni paylaşabiliyorum :) . Grafik lcd ile pek çok devre geliştirmeme rağmen bu devrelerin hiç birini hayata geçirecek yeterli malzemeye ve vakte maalesef sahip olamadım. Önümüzde ki günlerde alacağım geliştirme kartı sayesinde epey rahat uygulama yapabilirim umarım. Eğer touch panel ve uygun grafik lcd bulabilirsem bu iki eleman üzerine küçük küçük uygulamalar ve yazılar hazırlamayı düşünüyorum.

İsis devre şeması

glcd_lm35_18f452a

Bu uygulama; grafik lcd ve LM35 sıcaklık sensörünün kullanımına dair 18F452 ile yapmış olduğum sıcaklık denetleyici bir devre. Devrede 5 adet LM35 sensöründen gelen analog değerler pic tarafından işlenerek grafik lcd de değerler gösterilmektedir. MODE tuşuna basılarak Q çıkışlarına ait sıcaklık aralığı belirlenir. Belirlenen aralıklarda sensör verileri değerlendirilerek ilgili çıkış aktif veya pasif yapılır. YUKARI ve AŞAĞI ok tuşları yardımıyla değrler ayarlanır.

Sıcaklık ayar ekranında MODE tuşuna basılarak değerler üzerinde gezilebilir. KAYDET kısmına gelindiğinde OK tuşuna basılarak değerler EEPROM ‘a kaydedilir. KAPAT seçeneği ise kaydetmeden çıkmak için kullanılır. Çıkışlara bağlı olan 12V röleler kullanılarak çıkışlar kontrol edilebilir.

İsis simülasyon görüntüsü

Devreyi gerçekte çalıştırmadığım için baskı devresini çizmedim ama buradan faydalanarak devreyi kuran herhangi bir arkadaş baskı devresini ve çalışır vaziyette ki devrenin fotoğraflarını bize gönderirse veya paylaşırsa bize olan borcunu fazlasıyla ödemiş olur. Saygılar herkese kolay gelsin.

Projenin isis ve yazılım dosyaları: pic18f452-lm35-sicaklik-denetleyicisi.zip

glcd_lm35_18f452a.c yazılım içeriği


/////////////////////////////////////////////////////////////////////
//    Proje:Sıcaklık Denetleyici                                   //
//    Açıklama:5 adet LM35 sensöründen gelen analog sıcaklık veri- //
//    si değerlendirilerek ortam sıcaklığının denetlenmesi         //
//    Yazan:Hasan ÜZÜLMEZ                                          //
//    Tarih:14.09.2009                                             //
//    http://320volt.com/                                          //
//                                                                 //
/////////////////////////////////////////////////////////////////////
#include <18f452.h>
#device adc=10

#device *=16
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //Reset when brownout detected
#FUSES NOPUT                    //No Power Up Timer
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=20Mhz)
#use fast_io(A)
#use fast_io(E)

#include 
#include 

#define mode pin_c0
#define yukari pin_c1
#define asagi pin_c2
#define ok pin_b6
#define role_1 pin_c3
#define role_2 pin_c4
#define role_3 pin_c5
#define role_4 pin_c6
#define role_5 pin_c7
#define power_led pin_b7
char t1[] = "S1:";
char t2[] = "S2:";
char t3[] = "S3:";
char t4[] = "S4:";
char t5[] = "S5:";

char Q1[] = "Q1:";
char Q2[] = "Q2:";
char Q3[] = "Q3:";
char Q4[] = "Q4:";
char Q5[] = "Q5:";

char t6[] = ">";
char t7[] = "KAYDET";
char t8[] = "KAPAT";
char t9[] = "KAYDEDiLiYOR...";

int8 a_s1,u_s1,a_s2,u_s2,a_s3,u_s3,a_s4,u_s4,a_s5,u_s5;

char sa_s1[2],su_s1[2],sa_s2[2],su_s2[2],sa_s3[2],su_s3[2],sa_s4[2],su_s4[2],sa_s5[2],su_s5[2];
char yazi[5];
char yazi1[5];
char yazi2[5];
char yazi3[5];
char yazi4[5];
int8 tab;
unsigned long int temperature;
float value;
unsigned long int temperature1;
float value1;
unsigned long int temperature2;
float value2;
unsigned long int temperature3;
float value3;
unsigned long int temperature4;
float value4;

void eeprom_oku(){
a_s1=read_eeprom(0);
delay_us(50);
u_s1=read_eeprom(5);
delay_us(50);
a_s2=read_eeprom(10);
delay_us(50);
u_s2=read_eeprom(15);
delay_us(50);
a_s3=read_eeprom(20);
delay_us(50);
u_s3=read_eeprom(25);
delay_us(50);
a_s4=read_eeprom(30);
delay_us(50);
u_s4=read_eeprom(35);
delay_us(50);
a_s5=read_eeprom(40);
delay_us(50);
u_s5=read_eeprom(45);
}
void tab_yerlestir(){
switch(tab){
case 1:
glcd_rect(80,16,120,30,no,off);
glcd_rect(20,0,42,12,no,on);
break;
case 2:
glcd_rect(20,0,42,12,no,off);
glcd_rect(54,0,76,12,no,on);
break;
case 3:
glcd_rect(54,0,76,12,no,off);
glcd_rect(20,13,42,25,no,on);
break;
case 4:
glcd_rect(20,13,42,25,no,off);
glcd_rect(54,13,76,25,no,on);
break;
case 5:
glcd_rect(54,13,76,25,no,off);
glcd_rect(20,26,42,38,no,on);
break;
case 6:
glcd_rect(20,26,42,38,no,off);
glcd_rect(54,26,76,38,no,on);
break;
case 7:
glcd_rect(54,26,76,38,no,off);
glcd_rect(20,39,42,51,no,on);
break;
case 8:
glcd_rect(20,39,42,51,no,off);
glcd_rect(54,39,76,51,no,on);
break;
case 9:
glcd_rect(54,39,76,51,no,off);
glcd_rect(20,52,42,63,no,on);
break;
case 10:
glcd_rect(20,52,42,63,no,off);
glcd_rect(54,52,76,63,no,on);
break;
case 11:
glcd_rect(54,52,76,63,no,off);
glcd_rect(80,1,125,15,no,on);
break;
case 12:
glcd_rect(80,1,125,15,no,off);
glcd_rect(80,16,120,30,no,on);
break;
}
}
void sicaklik_oku(){
   set_adc_channel( 0 );
   temperature = read_adc();
   value = (temperature*0.1)-0.2;
   //value=(0.0048828125*temperature)*1000;
   //value=(value/10)+2;
   set_adc_channel( 1 );
   temperature1 = read_adc();
   value1 = (temperature1*0.1)-0.2;

   set_adc_channel( 2 );
   temperature2 = read_adc();
   value2 = (temperature2*0.1)-0.2;

   set_adc_channel( 4 );
   temperature3 = read_adc();
   value3 = (temperature3*0.1)-0.2;

   set_adc_channel( 5 );
   temperature4 = read_adc();
   value4 = (temperature4*0.1)-0.2;
}
void sicaklik_yaz(){
   glcd_text57(20,7,yazi,1,OFF);
   sprintf(yazi,"%4.1f",value);
   glcd_text57(20,7,yazi,1,ON);

   glcd_text57(20,28,yazi1,1,Off);
   sprintf(yazi1,"%4.1f",value1);
   glcd_text57(20,28,yazi1,1,ON);

   glcd_text57(20,49,yazi2,1,off);
   sprintf(yazi2,"%4.1f",value2);
   glcd_text57(20,49,yazi2,1,ON);

   glcd_text57(85,7,yazi3,1,off);
   sprintf(yazi3,"%4.1f",value3);
   glcd_text57(85,7,yazi3,1,ON);

   glcd_text57(85,28,yazi4,1,off);
   sprintf(yazi4,"%4.1f",value4);
   glcd_text57(85,28,yazi4,1,ON);
   delay_ms(200);

   if(value>=a_s1 && value<=u_s1){
   output_high(role_1);
   glcd_circle(71,54,5,yes,on);
   }
   if(valueu_s1){
   output_low(role_1);
   glcd_circle(71,54,5,yes,off);
   glcd_circle(71,54,5,no,on);
   }
   if(value1>=a_s2 && value1<=u_s2){
   output_high(role_2);
   glcd_circle(83,54,5,yes,on);
   }
   if(value1u_s2){
   output_low(role_2);
   glcd_circle(83,54,5,yes,off);
   glcd_circle(83,54,5,no,on);
   }
   if(value2>=a_s3 && value2<=u_s3){
   output_high(role_3);
   glcd_circle(95,54,5,yes,on);
   }
   if(value2u_s3){
   output_low(role_3);
   glcd_circle(95,54,5,yes,off);
   glcd_circle(95,54,5,no,on);
   }
   if(value3>=a_s4 && value3<=u_s4){
   output_high(role_4);
   glcd_circle(107,54,5,yes,on);
   }
   if(value3u_s4){
   output_low(role_4);
   glcd_circle(107,54,5,yes,off);
   glcd_circle(107,54,5,no,on);
   }
   if(value4>=a_s5 && value4<=u_s5){
   output_high(role_5);
   glcd_circle(119,54,5,yes,on);
   }
   if(value4u_s5){
   output_low(role_5);
   glcd_circle(119,54,5,yes,off);
   glcd_circle(119,54,5,no,on);
   }
}
void main()
{
   setup_psp(psp_disabled);
   setup_spi(spi_ss_disabled);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(t1_disabled);
   setup_timer_2(t2_disabled,0,1);
   setup_adc_ports(ANALOG_RA3_REF);
   setup_adc(adc_clock_internal);
   setup_ccp1(ccp_off);
   setup_ccp2(ccp_off);
   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
      SET_TRIS_A(0b00001111);
      SET_TRIS_B(0b11000000);
      SET_TRIS_E(0b00000111);
      SET_TRIS_C(0b00000111);
      SET_TRIS_D(0b11111111);
      output_c(0b00000111);
      output_high(power_led);
delay_us(20);
glcd_init(on);
delay_ms(1250);
goster:
 glcd_text57(2,7,t1,1,ON);
 glcd_text57(2,28,t2,1,ON);
 glcd_text57(2,49,t3,1,ON);
 glcd_text57(67,7,t4,1,ON);
 glcd_text57(67,28,t5,1,ON);
eeprom_oku();
while(1)
{
glcd_rect(0,0,127,63,NO,ON);
glcd_line(64,0,64,63,yes);
glcd_line(0,21,127,21,yes);
glcd_line(0,42,127,42,yes);
sicaklik_oku();
sicaklik_yaz();

if(input(mode)==0){
glcd_fillscreen(no);
glcd_text57(2,3,Q1,1,on);
glcd_text57(2,16,Q2,1,on);
glcd_text57(2,29,Q3,1,on);
glcd_text57(2,42,Q4,1,on);
glcd_text57(2,55,Q5,1,on);
glcd_text57(47,3,t6,1,ON);
glcd_text57(47,16,t6,1,ON);
glcd_text57(47,29,t6,1,ON);
glcd_text57(47,42,t6,1,ON);
glcd_text57(47,55,t6,1,ON);

glcd_text57(85,5,t7,1,ON);
glcd_text57(85,20,t8,1,ON);

sprintf(sa_s1,"%02d",a_s1);
glcd_text57(25,3,sa_s1,1,on);
sprintf(su_s1,"%02d",u_s1);
glcd_text57(60,3,su_s1,1,on);

sprintf(sa_s2,"%02d",a_s2);
glcd_text57(25,16,sa_s2,1,on);
sprintf(su_s2,"%02d",u_s2);
glcd_text57(60,16,su_s2,1,on);

sprintf(sa_s3,"%02d",a_s3);
glcd_text57(25,29,sa_s3,1,on);
sprintf(su_s3,"%02d",u_s3);
glcd_text57(60,29,su_s3,1,on);

sprintf(sa_s4,"%02d",a_s4);
glcd_text57(25,42,sa_s4,1,on);
sprintf(su_s4,"%02d",u_s4);
glcd_text57(60,42,su_s4,1,on);

sprintf(sa_s5,"%02d",a_s5);
glcd_text57(25,55,sa_s5,1,on);
sprintf(su_s5,"%02d",u_s5);
glcd_text57(60,55,su_s5,1,on);
glcd_rect(20,0,42,12,no,on);
while(1){
if(input(mode)==0){

if(tab==13){
tab=0;
}
tab=tab+1;
tab_yerlestir();
glcd_text57(80,55,yazi,1,off);
delay_ms(200);

}
if(input(yukari)==0){
switch(tab){
case 1:
sprintf(sa_s1,"%02d",a_s1);
glcd_text57(25,3,sa_s1,1,off);
if(a_s1<100){
a_s1=a_s1+1;
}
if(a_s1==100){
a_s1=0;
}
sprintf(sa_s1,"%02d",a_s1);
glcd_text57(25,3,sa_s1,1,on);
break;
case 2:
sprintf(su_s1,"%02d",u_s1);
glcd_text57(60,3,su_s1,1,off);
if(u_s1<100){
u_s1=u_s1+1;
}
if(u_s1==100){
u_s1=0;
}
sprintf(su_s1,"%02d",u_s1);
glcd_text57(60,3,su_s1,1,on);
break;
case 3:
sprintf(sa_s2,"%02d",a_s2);
glcd_text57(25,16,sa_s2,1,off);
if(a_s2<100){
a_s2=a_s2+1;
}
if(a_s2==100){
a_s2=0;
}
sprintf(sa_s2,"%02d",a_s2);
glcd_text57(25,16,sa_s2,1,on);
break;
case 4:
sprintf(su_s2,"%02d",u_s2);
glcd_text57(60,16,su_s2,1,off);
if(u_s2<100){
u_s2=u_s2+1;
}
if(u_s2==100){
u_s2=0;
}
sprintf(su_s2,"%02d",u_s2);
glcd_text57(60,16,su_s2,1,on);
break;
case 5:
sprintf(sa_s3,"%02d",a_s3);
glcd_text57(25,29,sa_s3,1,off);
if(a_s3<100){
a_s3=a_s3+1;
}
if(a_s3==100){
a_s3=0;
}
sprintf(sa_s3,"%02d",a_s3);
glcd_text57(25,29,sa_s3,1,on);
break;
case 6:
sprintf(su_s3,"%02d",u_s3);
glcd_text57(60,29,su_s3,1,off);
if(u_s3<100){
u_s3=u_s3+1;
}
if(u_s3==100){
u_s3=0;
}
sprintf(su_s3,"%02d",u_s3);
glcd_text57(60,29,su_s3,1,on);
break;
case 7:
sprintf(sa_s4,"%02d",a_s4);
glcd_text57(25,42,sa_s4,1,off);
if(a_s4<100){
a_s4=a_s4+1;
}
if(a_s4==100){
a_s4=0;
}
sprintf(sa_s4,"%02d",a_s4);
glcd_text57(25,42,sa_s4,1,on);
break;
case 8:
sprintf(su_s4,"%02d",u_s4);
glcd_text57(60,42,su_s4,1,off);
if(u_s4<100){
u_s4=u_s4+1;
}
if(u_s4==100){
u_s4=0;
}
sprintf(su_s4,"%02d",u_s4);
glcd_text57(60,42,su_s4,1,on);
break;
case 9:
sprintf(sa_s5,"%02d",a_s5);
glcd_text57(25,55,sa_s5,1,off);
if(a_s5<100){
a_s5=a_s5+1;
}
if(a_s5==100){
a_s5=0;
}
sprintf(sa_s5,"%02d",a_s5);
glcd_text57(25,55,sa_s5,1,on);
break;
case 10:
sprintf(su_s5,"%02d",u_s5);
glcd_text57(60,55,su_s5,1,off);
if(u_s5<100){
u_s5=u_s5+1;
}
if(u_s5==100){
u_s5=0;
}
sprintf(su_s5,"%02d",u_s5);
glcd_text57(60,55,su_s5,1,on);
break;}
delay_ms(150);
tab_yerlestir();
}
if(input(asagi)==0){
switch(tab){
case 1:
sprintf(sa_s1,"%02d",a_s1);
glcd_text57(25,3,sa_s1,1,off);
if(a_s1>=0){
a_s1=a_s1-1;
}
if(a_s1==0){
a_s1=99;
}
sprintf(sa_s1,"%02d",a_s1);
glcd_text57(25,3,sa_s1,1,on);
break;
case 2:
sprintf(su_s1,"%02d",u_s1);
glcd_text57(60,3,su_s1,1,off);
if(u_s1>=0){
u_s1=u_s1-1;
}
if(u_s1==0){
u_s1=99;
}
sprintf(su_s1,"%02d",u_s1);
glcd_text57(60,3,su_s1,1,on);
break;
case 3:
sprintf(sa_s2,"%02d",a_s2);
glcd_text57(25,16,sa_s2,1,off);
if(a_s2>=0){
a_s2=a_s2-1;
}
if(a_s2==0){
a_s2=99;
}
sprintf(sa_s2,"%02d",a_s2);
glcd_text57(25,16,sa_s2,1,on);
break;
case 4:
sprintf(su_s2,"%02d",u_s2);
glcd_text57(60,16,su_s2,1,off);
if(u_s2>=0){
u_s2=u_s2-1;
}
if(u_s2==0){
u_s2=99;
}
sprintf(su_s2,"%02d",u_s2);
glcd_text57(60,16,su_s2,1,on);
break;
case 5:
sprintf(sa_s3,"%02d",a_s3);
glcd_text57(25,29,sa_s3,1,off);
if(a_s3>=0){
a_s3=a_s3-1;
}
if(a_s3==0){
a_s3=99;
}
sprintf(sa_s3,"%02d",a_s3);
glcd_text57(25,29,sa_s3,1,on);
break;
case 6:
sprintf(su_s3,"%02d",u_s3);
glcd_text57(60,29,su_s3,1,off);
if(u_s3>=0){
u_s3=u_s3-1;
}
if(u_s1==0){
u_s3=99;
}
sprintf(su_s3,"%02d",u_s3);
glcd_text57(60,29,su_s3,1,on);
break;
case 7:
sprintf(sa_s4,"%02d",a_s4);
glcd_text57(25,42,sa_s4,1,off);
if(a_s4>=0){
a_s4=a_s4-1;
}
if(a_s4==0){
a_s4=99;
}
sprintf(sa_s4,"%02d",a_s4);
glcd_text57(25,42,sa_s4,1,on);
break;
case 8:
sprintf(su_s4,"%02d",u_s4);
glcd_text57(60,42,su_s4,1,off);
if(u_s4>=0){
u_s4=u_s4-1;
}
if(u_s4==0){
u_s4=99;
}
sprintf(su_s4,"%02d",u_s4);
glcd_text57(60,42,su_s4,1,on);
break;
case 9:
sprintf(sa_s5,"%02d",a_s5);
glcd_text57(25,55,sa_s5,1,off);
if(a_s5>=0){
a_s5=a_s5-1;
}
if(a_s5==0){
a_s5=99;
}
sprintf(sa_s5,"%02d",a_s5);
glcd_text57(25,55,sa_s5,1,on);
break;
case 10:
sprintf(su_s5,"%02d",u_s5);
glcd_text57(60,55,su_s5,1,off);
if(u_s5>=0){
u_s5=u_s5-1;
}
if(u_s5==0){
u_s5=99;
}
sprintf(su_s5,"%02d",u_s5);
glcd_text57(60,55,su_s5,1,on);
break;}
delay_ms(150);
tab_yerlestir();
}
  if(input(ok)==0 && tab<=10){
   tab=0;
   glcd_fillscreen(no);
   goto goster;
   }
  if(input(ok)==0 && tab==12){         //Kapat Butonu
   glcd_fillscreen(no);
   goto goster;
   }
  if(input(ok)==0 && tab==11){         //Kaydet Butonu
   glcd_fillscreen(no);
   glcd_text57(5,20,t9,1,on);
   glcd_rect(5,30,120,35,no,on);
   write_eeprom(0,a_s1);
   delay_us(20);
   write_eeprom(5,u_s1);
   glcd_rect(6,31,29,34,yes,on);
   delay_ms(70);
   write_eeprom(10,a_s2);
   delay_us(20);
   write_eeprom(15,u_s2);
   glcd_rect(30,31,53,34,yes,on);
   delay_ms(70);
   write_eeprom(20,a_s3);
   delay_us(20);
   write_eeprom(25,u_s3);
   glcd_rect(54,31,77,34,yes,on);
   delay_ms(70);
   write_eeprom(30,a_s4);
   delay_us(20);
   write_eeprom(35,u_s4);
   glcd_rect(78,31,101,34,yes,on);
   delay_ms(70);
   write_eeprom(40,a_s5);
   delay_us(20);
   write_eeprom(45,u_s5);
   glcd_rect(102,31,119,34,yes,on);
   delay_ms(400);
   tab=0;
   glcd_fillscreen(no);
   goto goster;
 }
  sicaklik_oku();
}
}
}
}


Benzer Yazılar
Bilgisayar kontrollü kayan yazı sıcaklık nem tarih saat

Bilgisayar kontrollü kayan yazı sıcaklık nem tarih saat

Hazırlayan: Atila ULUDAĞ – Bilgisayar kontrollü kayan yazı uygulaması PIC18F452 SHT11 DS1302 , MAX485 74HC595 (satır tarama) entegreleri üzerine...

Glcd göstergeli pil ölçüm devresi pic16f877 proton adc

Glcd göstergeli pil ölçüm devresi pic16f877 proton adc

Uygulamadaki Amaç: Pildeki gerilimin PIC MCU ADC kanalından okunulup GLCD (KS108) ekranında Bar olarak gösterimi.Bu uygulama ile 0…5v arasınra gerilimler...

Proton glcd resim basma uygulaması

Proton glcd resim basma uygulaması

GLCD 3 RESİM BASMA UYGULAMASIBir önceki yazımda (Protonda glcd’ye giriş grafik lcd uygulamaları ) protonda grafik lcd üzerinde yazı karakterleri...

makas
direnc-net

Yorumlar

  • Nedret Diyor ki:

    çok güzel bir çalışma bizlerle paylaştığınız için teşekkür ederim fakat ben aynı devrenin ”PT-100” ile olanını arıyorum sizde mevcutsa acaba bana gönderebilirmisiniz.

  • Konyalı Diyor ki:

    Teşekkür ederim ancak PT-100 ile hiç devre yapmadım sanırım oda analog bir çıkış üretiyor sensör hakkında bilgi verirseniz yardımcı olabilirim.

  • mjdt Diyor ki:

    güzel çalışma elinize sağlık
    bu aralar c diline merak sardım örneğiniz sayesinde biraz daha bilgi sahibi oldum çalışmalarınızın devamı diliyorum.
    saygılar

  • veli işisağ Diyor ki:

    Merhaba,
    arabamdaki manuel klimayı otomatik hale getirmek istiyorum ama sadece sıcaklık ayarı kısmını, yani tamamen otomatik klima haline getirmek mümkün değil tabi.

    bir potansiyo metre ile verilen set değeri araç içine yerleştirilen bir ısı algılayıcısından gelen sıcaklık bilgisi ile karşılaştırılacak. aradaki farka göre bir motor sağa veya sola döndürülerek soğuk sıcak hava karışımını ayarlayan klepenin posizyonu değiştirilecek. ayrıca ikinci ısı sensörü de ızgaraya yerleştirilerek çıkan ısı gözlenecek. buna göre program daha verimli çalıştırılabilir. daha detaylar var ama burada uzun süreceği için geçiyorum.
    Ücreti karşılığı bu işi yapan bir devre yaptırmak istiyorum. Bana yardımcı olabilirmisiniz.
    iyi günler
    veli işisağ
    veliisisag@yahoo.com

lutfen-dikkat

320volt.com © | Altyapı: Worpdress | Tema: Sleepy Blue’ WordPress Theme Tasarım: Eyoung | Çeviri ve Düzenleme 320volt.com