• Yanıtla
  • Yeni Konu
  • Haber Ver
  • Okunmadı Say
  • Gönder
  • Yazdır
  • Favorilerime ekle
  • Yeni Anket

Gönderen Konu: Hareket Sensörlü Alarm Devresi  (Okunma sayısı 1823 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Hareket Sensörlü Alarm Devresi
« : 30 Mayıs 2018, 13:33:42 »
Video 1: Devrenin tamamlanmış haline ait video
Bu forum konusunda arduino ve PIR (hareket) sensörü kullanarak alarm devresi yapmayı öğreneceğiz. PIR sensörü hareket algıladığında isteğe bağlı olarak bir lambayı yakacağız ya da bir sirenin çalmasını sağlayacağız. Sistem aynı zamanda programda belirlediğimiz bir telefon numarasını otomatik arama yaparak daha önce kaydettiğimiz bir sesi dinletecektir.


Şema 1: ISIS devre şeması


Şema 2: ARES  baskı devre şeması

Ses kayıt modülünün kullanımı:

Kayıt modülüne besleme gerilimi uygulandıktan sonra REC butonu basılır ve telefon açıldığında dinletilmek istenen ses kayıt edilir. Modül maksimum 10 saniyelik bir ses kaydını alabilmektedir. REC butonu bırakıldığında kayıt işlemi tamamlanmış olur. Ses kaydının devamlı dinlenebilmesi için kayıt modülü üzerindeki kısa devre elemanı P-E konumunda olmalıdır.

PIR sensörü nedir?

Orjinal ismi Passive InfraRed Sensor  yani Pasif Kızılötesi Sensör olan bu ekipman objelerden yayılan kızılaltı (IR) ışın değişimini tespit etmek için bir Fresnel lens ve IR’ye duyarlı sensör yardımıyla, 6 metreye kadar mesafedeki hareketleri algılayabilir; ucuzdur, kullanımı kolaydır; alarm sistemleri, hareketle aktif olan ışıklar gibi uygulamalar için idealdir.

Sensörün başlığını açarsak üzerinde bulunan 3 bacağın ne ile alakalı bacaklar olduğunu görebiliriz. Üstten baktığımızda en soldaki pin TOPRAK, en sağdaki pin +VCC, ortadaki pin de DATA çıkışıdır. Hareket varken DATA çıkışı '1', yokken '0' olmaktadır.

PIR sensörleri bir mikrodenetleyiciye bağlı olmadan kendi başlarına çalışabilen elemanlardır. Bu sayede satın aldığımız PIR sensörünü önce kendimiz test edebiliriz. Sensörümüze verdiğimiz besleme ile DATA çıkışının ucuna bir LED bağlayarak çalışıp çalışmadığına bakabiliriz. Sensörün arkasında 2 adet trimer var ve bu test aşamasında trimerlerin değerlerini küçük bir tornavida ile değiştirerek istenilen hassasiyete ve  DATA çıkışının istenilen zaman kadar '1' olmasını sağlayabiliriz.

Arduino kodları:
Kod: [Seç]
int hareket_sensoru=A0;                    // A0 GİRİŞİNE HAREKET SENSÖRÜ İSMİ VERİLDİ
int lamba_rolesi=0;                        // D0 ÇIKIŞINA LAMBA RÖLESİ ADI VERİLDİ
int telefon_rolesi=1;                      // D1 ÇIKIŞINA TELEFON RÖLESİ ADI VERİLDİ
int ses_rolesi=2;                          // D2 ÇIKIŞINA SES RÖLESİ ADI VERİLDİ
int hareket_sensoru_durum=0;
void setup()
{
  pinMode(hareket_sensoru, INPUT);         // A0 PİNİ GİRİŞ YAPILDI
  pinMode(lamba_rolesi, OUTPUT);           // D0 PİNİ ÇIKIŞ YAPILDI
  pinMode(telefon_rolesi, OUTPUT);         // D1 PİNİ ÇIKIŞ YAPILDI 
  pinMode(ses_rolesi, OUTPUT);             // D2 PİNİ ÇIKIŞ YAPILDI
}

void loop()
{
// HAREKET ALGILANDI İSE ŞUNLARI YAP BAŞLADI
if (digitalRead(hareket_sensoru) == HIGH) // HAREKET ALGILANDI İSE ŞUNLARI YAP
   {
    hareket_sensoru_durum= digitalRead(A0);  // A0 GİRİŞİNDEKİ LOJİK SEVİYEYİ OKU
    digitalWrite(0, hareket_sensoru_durum);  // OKUNAN LOJİK SEVİYEYİ D0 ÇIKIŞINA AKTAR
    digitalWrite(1, HIGH);   // TELEFON AÇILDI
    delay(2000);
  // 0 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
  // 0 ÇEVİR BİTTİ

  // 5 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
  // 5 ÇEVİR BİTTİ   

  // 4 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);   
   
  // 4 ÇEVİR
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);   

  // 3 ÇEVİR
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);     

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
  // 4 ÇEVİR BİTTİ   

  // 4 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
    // 4 ÇEVİR BİTTİ

  // 2 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500); 
  // 2 ÇEVİR BİTTİ
 
  // 0 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);   
   
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
  // 0 ÇEVİR BİTTİ   

  // 1 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
  // 1 ÇEVİR BİTTİ   
 
  // 3 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);     

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
  // 3 ÇEVİR BİTTİ   

  // 8 ÇEVİR BAŞLADI
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);     

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);     

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);

    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(500);
    // 8 ÇEVİR BİTTİ

    // SES GÖNDERİLİYOR
    digitalWrite(2, HIGH);
    delay(30000);
    digitalWrite(2, LOW);  // SES KAPATILDI
    digitalWrite(1, LOW);  // TELEFON KAPANDI
    digitalWrite(0, LOW);  // LAMBA SÖNDÜRÜLDÜ
    }                     
// HAREKET ALGILANDI İSE ŞUNLARI YAP BİTTİ
   
}

Arduino kodları 2 (Alternatif kod olup önceki koda nazaran daha kısadır.)
Kod: [Seç]
int hareket_sensoru=A0;
int lamba_rolesi=0;
int telefon_rolesi=1;
int ses_rolesi=2; 
int hareket_sensoru_durum=0;
void setup() {
  pinMode(hareket_sensoru, INPUT);     
  pinMode(lamba_rolesi, OUTPUT);         
  pinMode(telefon_rolesi, OUTPUT);       
  pinMode(ses_rolesi, OUTPUT);  }
void loop()
{
if (digitalRead(hareket_sensoru) == HIGH)    {
    hareket_sensoru_durum= digitalRead(A0); 
    digitalWrite(0, hareket_sensoru_durum); 
    digitalWrite(1, HIGH); 
    delay(2000);
  for (int cevir = 1; cevir <= 10;  cevir ++) {
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);     
    for (int cevir = 1; cevir <= 5;  cevir ++) {
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);}
    delay(450);
    for (int cevir = 1; cevir <= 4;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);     
    for (int cevir = 1; cevir <= 4;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);   
    for (int cevir = 1; cevir <= 3;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);     
    for (int cevir = 1; cevir <= 4;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);   
     for (int cevir = 1; cevir <= 2;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);   
     for (int cevir = 1; cevir <= 10;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);   
     for (int cevir = 1; cevir <= 1;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);   
    for (int cevir = 1; cevir <= 3;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50);}
    delay(450);   
     for (int cevir = 1; cevir <= 8;  cevir ++) { 
    digitalWrite(1, LOW);
    delay(50);
    digitalWrite(1, HIGH);
    delay(50); }
    delay(450);   
    digitalWrite(2, HIGH);
    delay(30000);
    digitalWrite(2, LOW);
    digitalWrite(1, LOW); 
    digitalWrite(0, LOW);
    }
    }

İhtiyaç duyulması halinde konuya ait proteus ve arduino dosyalarını konu ekinden indirebilirsiniz.
Spina Bifida     temrinlerim.org     Robotik Center
MESLEĞE BAŞLANGIÇ: SENE 1983 CUMHURİYET ENDÜSTRİ MESLEK LİSESİ ELEKTRONİK BÖLÜMÜ BOLU