LDR ile ATEŞLEME KONTROLÜ İÇİNDEKİLER 2 1.GİRİŞ 2.DONANIMSAL YAPI 3.YAZILIMSAL YAPI 4.EK 2 2 4 5 1 1.GİRİŞ Aydınlatma sistemlerinde, özellikle de yüksek gerilimle çalışan sokak aydınlatmalarında, lambanın yanmaya ilk başlatılması çok önemlidir. Çünkü lambanın içerisindeki gazın yeterli sıcaklığa ulaşabilmesi için, kısa bir süre çok yüksek gerilime maruz bırakılması gerekir. Bu işlem ateşleme (ignition) olarak adlandırılır. Genellikle bu tür sistemlerde karşılaşılan sorunlar ateşleme sisteminin düzgün çalışmamasından kaynaklanmaktadır. Bununla ilgili olarak hazırlanan bu yazılımda lambanın ateşlemeye başlayıp başlamadığını kontrol etmek amaçlanmıştır. Doğru sonuç alabilmek için de lamba üzerindeki ateşleme sırasında oluşan aydınlanma ölçülüp, değer ortam ışığına göre oluşturulan eşik değerin üzerine çıktığı zaman da ateşlemenin başarılı olduğu kabul edilmiştir. 2.DONANIMSAL YAPI Belirli zaman aralıklarında ortamdaki ışık şiddetini ölçen ve bu değer belirlenen bir referans değerinin üzerine çıktığında da ateşlemenin başarılı olduğu çıkışını veren bir devre tasarlanmak istenmiştir. Ayrıca test edilen ortamın her zaman aynı derecede ışığa sahip olamayacağı da düşünülerek testin daha kesin sonuç verebilmesi için, ortamın o anki ışık şiddetini kaydedip referans değerini ona göre ayarlayacak olan bir tuş da devre üzerine yerleştirilmiştir. Devrede ortamın ışık şiddetine göre değişken değerler alabilecek bir eleman olarak LDR kullanılmıştır. LDR’ler ışığın şiddetiyle ters orantılı olarak lineer bir şekilde direnç gösteren elemanlardır. Bu yöntemle ortamın ışık şiddetine göre bir direnç değeri belirlenecek ve bu değer lambanın ateşlenmesinden dolayı daha az ölçüldüğünde ateşlemenin yapıldığı anlaşılacaktır. 2 Şekil 1. Devrenin Proteus Çizimi Yukarıda özetlenen yapı Şekil 1’de oluşturulan devre ile gerçekleştirilmiştir. Butona basıldığında ortamın o anki değeri ölçülüp mikrodenetleyiciye yerleştirilen yazılım sayesinde kaydedilmektedir. LDR sayesinde de sürekli olarak ışık şiddetine göre bir değer mikrodenetleyiciye iletilmektedir. Sonucu görmek için 5 numaralı bacağa bağlanmış olan led kullanılmıştır. Şekil 2. Devrenin Çalışma Durumu 3 2.YAZILIMSAL YAPI Oldukça kısa ve fonksiyonel olan bu yazılım, interrupt mantığı kullanılarak hazırlanmış olup belirli zaman aralıklarında bir olmak üzere sürekli olarak mikrodenetleyicinin 4 ve 7 numaralı bacaklarından gelecek değerleri ölçmektedir. while(TRUE) { kalibrasyon=input(pin_a3); if(kalibrasyon==0) { ayarla(); } } ayarla() fonksiyonu ise karşılaştırılacak yeni değerin okunup referans değer olarak kaydedildiği fonksiyondur. void ayarla() { LDR_voltaj_adc=read_adc(); referans=LDR_voltaj_adc; } Programın asıl işlem yapan kısmı Timer0 kesmesinin kullanıldığı yerdir. Buna göre önceden hesaplanmış bir değere göre Timer0 kesmesi her aktif olduğunda, ADC den okuma ve karşılaştırma işlemini gerçekleştirmektedir. Buna göre de bir çıkış değeri üretilmektedir. İki okuma arasındaki süreyi değiştirebilmek için index değişkeni kullanılmıştır. void TIMER0_isr(void) { if (index>4) { 4 index=0; LDR_voltaj_adc=read_adc(); send=LDR_voltaj_adc; R_LDR=(1023*10 - LDR_voltaj_adc*11)/LDR_voltaj_adc; printf("\radc val=%lu\r",send); delay_ms(1); LDR_voltaj_adc2=read_adc(); fark=LDR_voltaj_adc - LDR_voltaj_adc2; if(LDR_voltaj_adc>referans) { durum=1; output_bit(PIN_A2,durum);; } else { durum=0; output_bit(PIN_A2,durum);; } } index++; } NOT: Yazılımın tamamı ekte verilmiştir. 4.EK //LDR ile ATEŞLEME KONTROLÜ #include <iso_dim.h> 5 int16 LDR_voltaj_adc,LDR_voltaj_adc2,referans=640,send;. int16 fark; float R_LDR; int1 kalibrasyon,durum=1; int index; #int_TIMER0 void TIMER0_isr(void) { if (index>4) { index=0; LDR_voltaj_adc=read_adc(); send=LDR_voltaj_adc; R_LDR=(1023*10 - LDR_voltaj_adc*11)/LDR_voltaj_adc; if(LDR_voltaj_adc>referans) { durum=1; output_bit(PIN_A2,durum); } else { durum=0; output_bit(PIN_A2,durum); } } index++; } void ayarla() { 6 LDR_voltaj_adc=read_adc(); referans=LDR_voltaj_adc; } void main() { setup_adc_ports(sAN0); setup_adc(ADC_CLOCK_INTERNAL); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit); //32.7 ms overflow setup_comparator(NC_NC); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); setup_oscillator(OSC_8MHZ); set_adc_channel(LDR_ch); delay_us(25); set_tris_a(0b101011); while(TRUE) { kalibrasyon=input(pin_a3); if(kalibrasyon==0) { ayarla(); } } } 7