LDR ile ATEŞLEME KONTROLÜ

advertisement
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
Download