Başa dön
arduino alarm sistemi

Arduino Güvenlik ve Alarm Sistemi – Şifreli Ev Kapı Kilidi Projesi Yapımı

Merhaba arkadaşlar, bugünkü yazımız da Arduino Güvenlik ve Alarm Sistemi – Şifreli Ev Kapı Kilidi Projesi nasıl yapılır birlikte öğreneceğiz. Arduino projemiz ile ilgili aşağıdaki videoyu izleyerek ve aşağıdaki makalemizi okuyarak konuyu iyice öğrenebilirsiniz.
 

Alarm Sistemi Projesi Genel Bakış


Arduino güvenlik ve alarm sistemi projemiz de A düğmesine bastıktan sonra alarm 10 saniye içinde devreye girer. Nesneleri tespit etmek için ultrasonik mesafe sensörü hc-sr04 kullanır ve sensör bir şeyi algıladığında alarm sesi devreye girer. Alarmı durdurmak için 4 basamaklı bir şifre girmemiz gerekir. Önceden ayarlanmış parola 1234’tür ve tabi ki değiştirebilme olanağımız vardır.

 

B düğmesine basarak devam etmek için önce mevcut şifreyi girmemiz gerekmektedir. Şifre değiştirme menüsüne girip 4 haneli şifreyi giriyoruz. Şifre değiştirildikten sonra, alarmı bir sonraki açışımızda yalnızca yeni şifreyi girerek durdurabiliriz. Yanlış bir şifre girersek tekrar denememiz gereken bir mesaj alırız.

 

Arduino Alarm Sistemi Şifreli Kapı Kilidi Yapımı Gerekli Malzemeleri


Şimdi arduino ile harekete duyarlı güvenlik sistemi yapımı projesi için gerekli malzemeleri görelim. Bir Arduino Mega, Ultrasonik sensör, 16×2 LCD ekran, Buzzer ve 4 x 4 tuş takımına ihtiyacımız var.

Arduino Alarm Projesi Malzemeleri

Bu Arduino Projesi için ihtiyaç duyduğunuz bileşenleri aşağıdaki bağlantılardan alabilirsiniz:

 

Arduino ile Harekete Duyarlı Güvenlik Sistemi Yapımı Devre Şeması


Arduino Alarm Sistemi Devre Şeması

Buzzer sesli uyarıcı için sadece bir tane pine, bir tane de PWM desteğine ihtiyacımız var.  4×4 tuş takımında 8 pin bulunur, bunlardan 4’ü satırlar için, 4’ü tuş takımının sütunları için. Her düğme aslında basıldığında bir satır ile sütun arasında kısa devre yapan bir düğme anahtarıdır.

4x4 Tuş Takımı Devre Şeması

Örneğin, membran tuş takımı çalışma mantığı şu şekildedir. Satır 1 satırını düşük ve tüm sütun satırlarını yüksek olarak ayarlarsak, 3 numaralı düğmeye bastığımız zaman, iki satır arasındaki kısa devre nedeniyle sütun 3 satırı düşük olacak. Böyle bir durumda, 3 numaralı düğmeye basıldığını kayıt altınabiliriz. Üstteki resimde mantık olarak anlatılmaya çalışıyor. Resimden yararlanabilirsiniz.

 

Arduino Alarm Sistemi Kaynak Kodu


Şimdi Arduino kodunu görelim. Kod biraz uzun olduğu ve daha iyi anlaşılması için, programın kaynak kodunu bölümlerin açıklamalarıyla birlikte bölümlere ayıralım. Yazının sonunda kaynak kodun tamamını bulabilirsiniz.

16×2 LCD için standart LiquidCrystal kütüphanesini ve ayrıca eklenmesi gereken Keypad kütüphanesini dahil etmemiz gerekir. Daha sonra buzzer ve ultrasonik sensörün pinlerini tanımlayalım, program için gerekli bazı değişkenleri tanımlamamız, tuş takımının tuşlarını tanımlamamız ve ayrıca tuş takımı ve LCD için iki nesne oluşturmamız gerekir.

 

#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
#include <Keypad.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg =0;
String password="1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad
byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS); 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 
void setup() { 
  lcd.begin(16,2); 
  pinMode(buzzer, OUTPUT); // Set buzzer as an output
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}

Kurulum bölümünde sadece LCD’yi başlatmamız, buzzer ve ultrasonik sensör için pin modlarını tanımlamamız gerekir.

Döngü bölümünde, önce alarmın aktif olup olmadığını kontrol ederim. Eğer alarm aktif değilse, LCD’de iki seçenek sunan programın ana ekranını açacağız, alarmı aktif hale getirmek için A ve şifreyi değiştirmek için B. Daha sonra myKeypad.getKey () işlevini kullanarak, tuş takımından hangi düğmeye basıldığını okuduk ve eğer bu tuş A ise, zil 200 milisaniyelik bir ses üretecek ve activateAlarm değişkeni devreye girmiş olacak.

 

if (!alarmActivated) {
    if (screenOffMsg == 0 ){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("A - Activate");
      lcd.setCursor(0,1);
      lcd.print("B - Change Pass");
      screenOffMsg = 1;
    }
    keypressed = myKeypad.getKey();
     if (keypressed =='A'){        //If A is pressed, activate the alarm
      tone(buzzer, 1000, 200);
      activateAlarm = true;            
    }

 

Bu durumda LCD’de “Alarm devreye girecek” mesajını yazdıracağız ve bir süre döngüsü kullanarak alarm devreye girmeden önce 9 saniyelik bir geri sayım yapacağız. Ardından “Alarm Aktif” mesajı görünecek ve alarm cihazımız ile karşısındaki nesnelere olan ilk mesafeyi ölçeceğiz.

 

if (activateAlarm) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Alarm will be");
    lcd.setCursor(0,1);
    lcd.print("activated in");
   
    int countdown = 9; // 9 seconds count down before activating the alarm
    while (countdown != 0) {
      lcd.setCursor(13,1);
      lcd.print(countdown);
      countdown--;
      tone(buzzer, 700, 100);
      delay(1000);
    }
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Alarm Activated!");
    initialDistance = getDistance();
    activateAlarm = false;
    alarmActivated = true;
  }

Bir sonraki adım, ultrasonik mesafe sensörünün sürekli olarak ölçülen mesafenin başlangıç ​​mesafesinden daha küçük olup olmadığını, 10 cm’lik bir değerle düzeltilip düzeltilmediğini kontrol etmesi ve eğer doğruysa sensörün önüne bir cismin ortaya çıktı demektir. etkinleştirilecek. Tone () işlevi buzzer’ı etkinleştirecek ve enterPassword () özel işlevi çağrılacaktır.

 

if (alarmActivated == true){
      currentDistance = getDistance() + 10;
      if ( currentDistance < initialDistance) {
        tone(buzzer, 1000); // Send 1KHz sound signal 
        lcd.clear();
        enterPassword();
      }
    }

Bu özel fonksiyon, alarmın aktif olduğunu ve alarmı durdurmak için bir şifre girmemiz gerektiğini belirten bir mesaj gösterir. Bu yüzden bir sonraki döngüyü kullanarak tuş takımında bir düğmeye basıp basmadığımızı sürekli olarak kontrol ediyoruz ve her tuşa basıldığında tempPassword değişkenine ekleniyor. Eğer 4’ten fazla rakam girersek veya # düğmesine basarsak, önceden girilmiş rakamlar silinir, böylece baştan tekrar yazabiliriz.

 

void enterPassword() {
  int k=5;
  tempPassword = "";
  activated = true;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" *** ALARM *** ");
  lcd.setCursor(0,1);
  lcd.print("Pass>");
      while(activated) {
      keypressed = myKeypad.getKey();
      if (keypressed != NO_KEY){
        if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || keypressed == '9' ) {
          tempPassword += keypressed;
          lcd.setCursor(k,1);
          lcd.print("*");
          k++;
        }
      }
      if (k > 9 || keypressed == '#') {
        tempPassword = "";
        k=5;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(" *** ALARM *** ");
        lcd.setCursor(0,1);
        lcd.print("Pass>");
      }
      if ( keypressed == '*') {
        if ( tempPassword == password ) {
          activated = false;
          alarmActivated = false;
          noTone(buzzer);
          screenOffMsg = 0; 
        }
        else if (tempPassword != password) {
          lcd.setCursor(0,1);
          lcd.print("Wrong! Try Again");
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print(" *** ALARM *** ");
          lcd.setCursor(0,1);
          lcd.print("Pass>");
        }
      }    
    }
}

Öte yandan, * düğmesine basarsak, o anda girilen şifrenin başlangıçta ayarlanan şifreyle aynı olup olmadığını kontrol ederiz. Bu doğruysa, alarm devre dışı bırakılır, sesli ikaz sesi kesilir ve ana ekrana geri döneriz. Ancak şifreyi yanlış girersek “Yanlış! Tekrar Dene! ” Mesajı görünecek ve tekrar doğru şifreyi girmemiz gerekecektir.

Şifreyi değiştirmek için benzer bir yöntem daha gösterelim. Burada önce yeni bir şifre belirleyebilmek için mevcut şifreyi girmemiz gerekiyor.

 

else if (keypressed =='B') {
     lcd.clear();
     int i=1;
     tone(buzzer, 2000, 100);
     tempPassword = "";
     lcd.setCursor(0,0);
     lcd.print("Current Password");
     lcd.setCursor(0,1);
     lcd.print(">");
     passChangeMode = true;
     passChanged = true;   
     while(passChanged) {      
     keypressed = myKeypad.getKey();
     if (keypressed != NO_KEY){
       if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
           keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
           keypressed == '8' || keypressed == '9' ) {
        tempPassword += keypressed;
        lcd.setCursor(i,1);
        lcd.print("*");
        i++;
        tone(buzzer, 2000, 100);
       }
     }
     if (i > 5 || keypressed == '#') {
       tempPassword = "";
       i=1;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Current Password");
       lcd.setCursor(0,1);
       lcd.print(">"); 
     }
     if ( keypressed == '*') {
       i=1;
       tone(buzzer, 2000, 100);
       if (password == tempPassword) {
         tempPassword="";
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("Set New Password");
         lcd.setCursor(0,1);
         lcd.print(">");
         while(passChangeMode) {
           keypressed = myKeypad.getKey();
           if (keypressed != NO_KEY){
             if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                 keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                 keypressed == '8' || keypressed == '9' ) {
               tempPassword += keypressed;
               lcd.setCursor(i,1);
               lcd.print("*");
               i++;
               tone(buzzer, 2000, 100);
             }
           }
           if (i > 5 || keypressed == '#') {
             tempPassword = "";
             i=1;
             tone(buzzer, 2000, 100);
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("Set New Password");
             lcd.setCursor(0,1);
             lcd.print(">");
           }
           if ( keypressed == '*') {
             i=1;
             tone(buzzer, 2000, 100);
             password = tempPassword;
             passChangeMode = false;
             passChanged = false;
             screenOffMsg = 0;
           }            
         }
       }
     }
   }
  }

 

İşte Arduino Alarm Sisteminin tam kaynak kodu:

/*
* Arduino Güvenlik ve Alarm Sistemi
*
* Hayalet ve Yap,
* hayaletveyap.com
*
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
#include <Keypad.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg =0;
String password="1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad
byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS); 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 
void setup() { 
 lcd.begin(16,2); 
 pinMode(buzzer, OUTPUT); // Set buzzer as an output
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}
void loop() {
 if (activateAlarm) {
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Alarm will be");
   lcd.setCursor(0,1);
   lcd.print("activated in");
  
   int countdown = 9; // 9 seconds count down before activating the alarm
   while (countdown != 0) {
     lcd.setCursor(13,1);
     lcd.print(countdown);
     countdown--;
     tone(buzzer, 700, 100);
     delay(1000);
   }
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Alarm Activated!");
   initialDistance = getDistance();
   activateAlarm = false;
   alarmActivated = true;
 }
 if (alarmActivated == true){
     currentDistance = getDistance() + 10;
     if ( currentDistance < initialDistance) {
       tone(buzzer, 1000); // Send 1KHz sound signal 
       lcd.clear();
       enterPassword();
     }
   }
 if (!alarmActivated) {
   if (screenOffMsg == 0 ){
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("A - Activate");
     lcd.setCursor(0,1);
     lcd.print("B - Change Pass");
     screenOffMsg = 1;
   }
   keypressed = myKeypad.getKey();
    if (keypressed =='A'){        //If A is pressed, activate the alarm
     tone(buzzer, 1000, 200);
     activateAlarm = true;            
   }
   else if (keypressed =='B') {
     lcd.clear();
     int i=1;
     tone(buzzer, 2000, 100);
     tempPassword = "";
     lcd.setCursor(0,0);
     lcd.print("Current Password");
     lcd.setCursor(0,1);
     lcd.print(">");
     passChangeMode = true;
     passChanged = true;   
     while(passChanged) {      
     keypressed = myKeypad.getKey();
     if (keypressed != NO_KEY){
       if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
           keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
           keypressed == '8' || keypressed == '9' ) {
        tempPassword += keypressed;
        lcd.setCursor(i,1);
        lcd.print("*");
        i++;
        tone(buzzer, 2000, 100);
       }
     }
     if (i > 5 || keypressed == '#') {
       tempPassword = "";
       i=1;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Current Password");
       lcd.setCursor(0,1);
       lcd.print(">"); 
     }
     if ( keypressed == '*') {
       i=1;
       tone(buzzer, 2000, 100);
       if (password == tempPassword) {
         tempPassword="";
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("Set New Password");
         lcd.setCursor(0,1);
         lcd.print(">");
         while(passChangeMode) {
           keypressed = myKeypad.getKey();
           if (keypressed != NO_KEY){
             if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                 keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                 keypressed == '8' || keypressed == '9' ) {
               tempPassword += keypressed;
               lcd.setCursor(i,1);
               lcd.print("*");
               i++;
               tone(buzzer, 2000, 100);
             }
           }
           if (i > 5 || keypressed == '#') {
             tempPassword = "";
             i=1;
             tone(buzzer, 2000, 100);
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("Set New Password");
             lcd.setCursor(0,1);
             lcd.print(">");
           }
           if ( keypressed == '*') {
             i=1;
             tone(buzzer, 2000, 100);
             password = tempPassword;
             passChangeMode = false;
             passChanged = false;
             screenOffMsg = 0;
           }            
         }
       }
     }
   }
  }
}
}
void enterPassword() {
 int k=5;
 tempPassword = "";
 activated = true;
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print(" *** ALARM *** ");
 lcd.setCursor(0,1);
 lcd.print("Pass>");
     while(activated) {
     keypressed = myKeypad.getKey();
     if (keypressed != NO_KEY){
       if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
           keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
           keypressed == '8' || keypressed == '9' ) {
         tempPassword += keypressed;
         lcd.setCursor(k,1);
         lcd.print("*");
         k++;
       }
     }
     if (k > 9 || keypressed == '#') {
       tempPassword = "";
       k=5;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print(" *** ALARM *** ");
       lcd.setCursor(0,1);
       lcd.print("Pass>");
     }
     if ( keypressed == '*') {
       if ( tempPassword == password ) {
         activated = false;
         alarmActivated = false;
         noTone(buzzer);
         screenOffMsg = 0; 
       }
       else if (tempPassword != password) {
         lcd.setCursor(0,1);
         lcd.print("Wrong! Try Again");
         delay(2000);
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print(" *** ALARM *** ");
         lcd.setCursor(0,1);
         lcd.print("Pass>");
       }
     }    
   }
}
// Custom function for the Ultrasonic sensor
long getDistance(){
 //int i=10;
 
 //while( i<=10 ) {
 // Clears the trigPin
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 // Sets the trigPin on HIGH state for 10 micro seconds
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 // Reads the echoPin, returns the sound wave travel time in microseconds
 duration = pulseIn(echoPin, HIGH);
 // Calculating the distance
 distance = duration*0.034/2;
 //sumDistance += distance;
 //}
 //int averageDistance= sumDistance/10;
 return distance;
}

 

Son dokunuş


Projeyi bitirmek için, içinde tüm bileşenleri yerleştirdiğimiz kompakt plastik bir proje kutusu kullanabilirsiniz.

Arduino Alarm Sistemi Kurulumu

Umarım bu ilginç arduino projesinden hoşlanmışsınızdır 🙂

 

Diğer Güncel Teknoloji Haberlerimiz için BURAYA TIKLAYABİLİRSİNİZ.

Sizde Robotlara ve Maker’lığa Meraklıysanız, Robotik Marketimiz ROBOCOMBO‘yu Ziyaret Edebilirsiniz.

 

Okuduğunuz İçin Teşekkürler.

 
Kaynak: howtomechatronics.com/projects/arduino-security-alarm-system-project/