Etiketler: GLCD, grafik lcd, lm35, PIC18F452, sıcaklık denetleyicisi, Sıcaklık Sensörü

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ı

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(value u_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(value1 u_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(value2 u_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(value3 u_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(value4 u_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(); } } } }

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

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...

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

2×30 Volt 6 Amper Smps
AT89C51 Analog Saatin Grafik Lcd ile Gösterilmesi
Paralel port dijital analog çevirici ses çıkış tda7050
320volt.com © | Altyapı: Worpdress | Tema: Sleepy Blue’ WordPress Theme Tasarım: Eyoung | Çeviri ve Düzenleme 320volt.com
31/12/2009 17:15
ç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.
31/12/2009 17:30
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.
1/01/2010 02:33
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
3/02/2010 01:08
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