Devre Şeması:
Duman sensörünün çıkışını lojik olarak düşünebiliriz. Yani duman algılandığında lojik-1 normal durumda lojik-0 dır. Bunu proteus programında bir switch kullanarak sağladık.
PROGRAM C KODU
/**********************************************************************************
******************* DUMAN & KAÇAK GAZ ALGILAMA PROJESİ ************************
*************************** MUSTAFA AKBAŞ *********************************
**********************************************************************/
#include <16f628A.h>
#fuses NOPROTECT,NOBROWNOUT,NOLVP,NOMCLR,NOPUT,NOCPD,NOWDT,INTRC_IO
#use delay(clock=4000000) // Çalışma frekansı 4MHz
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#include <benim_lcd.c> //benim-lcd kütüphanesi çağırılıyor
#include <TONES.c>
int k,i; // i ve k isimli byte cinsinden değişken belirleniyor
//=====================================================================
void main() //Ana Program başlangıcı
{
set_tris_a(0xff); // A portu komple giriş
set_tris_b(0x00); // B portu komple çıkış
//***********************************
k=0; //k değişkeninin içeriği sıfırlanıyor
delay_ms(300); // 300ms gecikme
lcd_hazirla(); //LCD hazırlanıyor (benim.LCDkütüphanesine gidiyor, imleç 1.satır 1. sütuna konumlanıyor)
printf(lcd_veri," FIRAT "); //Tırnak içindekiler LCD ekranda yazılıyor
lcd_imlec(2,1); //İmleç 2. satırın birinci sütununa konumlanıyor
printf(lcd_veri," UNIVERSITESI"); //Tırnak içindekiler LCD ekranda yazılıyor
delay_ms(2000); //1 sn. gecikme
lcd_komut(0x01); //LCD temizleyip ve imleç 1. satır 1.sütuna konumalnıyor
printf(lcd_veri," YANGIN ALARMI"); //Tırnak içindekiler LCD ekranda yazılıyor
lcd_imlec(2,1); //İmleç 2. satırın birinci sütununa konumlanıyor
printf(lcd_veri," PROJESI"); //Tırnak içindekiler LCD ekranda yazılıyor
delay_ms(2000); //1 sn. gecikme
lcd_komut(0x01); //LCD temizleyip ve imleç 1. satır 1.sütuna konumalnıyor
printf(lcd_veri,"MUSTAFA AKBAS"); //Tırnak içindekiler LCD ekranda yazılıyor
delay_ms(2000); //1 sn. gecikme
lcd_komut(0x01); //LCD temizleyip ve imleç 1. satır 1.sütuna konumalnıyor
printf(lcd_veri," HAZIR...."); //Tırnak içindekiler LCD ekranda yazılıyor
//*****************************************************
basla:
if(input(pin_a4)) // Butona basıldımı
{
output_high(pin_b0); // B0 high, yani röle çeker
delay_ms(1000); // 1 sn bekle
output_low(pin_b0); //B0 low yani röle bırakır
}
if (!input(pin_a0)) // A0 low olmuşsa yani 1 Nolu bölgede yangın varsa
{
k=1;
goto alarm; // Alarm'a git
}
if (!input(pin_a1)) // A1 low olmuşsa yani 2 nolu bölgede yangın varsa
{
k=2;
goto alarm;
}
goto basla; //Başla'ya git
//****************************************
alarm:
lcd_komut(0x01);// displayi sil ve 1.satır - 1.sutuna getir
printf(lcd_veri," YANGIN VAR.!!!!!!");
lcd_imlec(2,1);
printf(lcd_veri,"\%d NOLU BOLGE",k);
if(input(pin_a4))// A4 high olmuşsa yani reset butonuna basılmışsa
{
output_high(pin_b0); // B0 high, yani röle çeker
lcd_komut(0x01);// displayi sil ve 1.satır - 1.sutuna getir
printf(lcd_veri,"RESETLENIYOR...");
delay_ms(1500);
lcd_komut(0x01);// displayi sil ve 1.satır - 1.sutuna getir
printf(lcd_veri," HAZIR....");
output_low(pin_b0); //B0 low, yani röle bırakır
goto basla;
}
else //A4 high olmamışsa yani reset butonuna basılmamışsa
{
generate_tone(800,1000); //800Hz 1sn süreyle ses çıkarır
delay_ms(500); //500 ms bekle
goto alarm;
}
}
Proje dosyalarını buradan indirebilirsiniz...
paylaşımınız için teşekkür ederim.
YanıtlaSilduman sensörü olarak kullandığınız sensörün adı nedir?