Arduino ile Keypad ve Kapı Şifresi Kontrolü

Herkese Merhaba,

3 yıl aradan sonra tozlu raflardan ekipmanlarımı çıkardım ve kurcalarken sizler için bir uygulama yaptım. Daha önceden aldığım ama hiç kullanmadığım bir Keypad ile bina girişlerinde bulunan kapı kontrolünü arduino ile yaptım. Kapı olarak servo, açık ve kapalı olduğunu anlamak için kırmızo ve led kullanıldı. Burada kodlar arasında gerekli açıklamaları yaptım ve devrenin çalışma prensibinin videosunu alttaki linkten ulaşabilirsiniz. 

A tuşuna Kapı Aç, B tuşuna Kapıyı Kapat, # (Kare) tuşu ile şifre giriş başlangıcını belirttim. Burada parola olarak 1234 belirledim. # tuşuna basıldıktan sonra 1234 şifresi girildiği anda kapı açılır ve yeşil led 2 saniye boyunca yanar. Şifrenin yanlış olması durumunda kapı kitlenir ve 2 saniye boyunca kırmızı led yanar.

Burada 4×4 bir keypad kullandım, elinizde 3×4 de olabilir. o zaman numRows = 4 , numCols = 3 değişkenlerini ve keymap adındaki 2 boyutlu dizideki tuş dilimini düzenlemeniz gerekmektedir.

Keypad i şekildeki tuttuğunuzda soldan itibaren bacak bağlantılarını 2,3,4,5,6,7,8,9 nolu arduinonun girişlerine bağlamanız gerekmektedir.

10 numaralı arduino çıkışını servo motor kontrolü için, 11 ve 12 nolu çıkışları led kontrolü için kullanılmıştır.

Buradaki önemli noktalardan biri keypad kütüphanesinin Ardunio IDE sinin içerisinde olmamasıdır. Bunu dışardan kendimiz eklememiz gerekiyor. Buradan indirdiğimiz Keypad kütüphanesini çıkartın  ve libraries klasörü içerisine atınız. Bu IDE nin kurulduğu yerde yer almaktadır. Bende c:\program files\arduino\libraries yolunun altında yer almaktaydı orayı kopyalayıp kullanmaya devam ettim.

Aşağıdaki devre şemasını ve kodları izleyerek rahatlıkla yapabilirsiniz.

İyi geliştirmeler 🙂

 

Devre Şeması:

 

Arduino Kodları:


#include <Keypad.h>  // keypad kütüphanesi, kendimiz import ediyoruz.
#include <Servo.h>   // servo kütüphanesi

int ledPinOpen=11;      // yeşil led
int ledPinClose=12;     // kırmızı led
const byte numRows= 4;  // keypad satır sayısı
const byte numCols= 4;  // keypad sütün sayısı
int control = 0;
int counter = 0;
String enter_password;     // girilen şifreyi tutar
String password = "#1234"; // kendimizin belirlediği şifre

Servo myservomotor;

// keypad tuş yapısını oluşturuyoruz
char keymap[numRows][numCols]= 
{
{'1', '2', '3', 'A'}, 
{'4', '5', '6', 'B'}, 
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

// bağlantı bacaklarını belirliyoruz
byte rowPins[numRows] = {2,3,4,5}; 
byte colPins[numCols]= {6,7,8,9}; 

// keypad i set ediyoruz
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

void setup()
{
  Serial.begin(9600);
  myservomotor.attach(10);      // 10.bacak servo çıkışı
  myservomotor.write(0);        // ilk etapta açısını 0 olarak set ediyoruz
  pinMode(ledPinOpen,OUTPUT);   // led pinlerini çıkış olarak belitliyoruz
  pinMode(ledPinClose,OUTPUT);  
}

void loop()
{
  char keypressed = myKeypad.getKey();  // keypadden gelen değer
  if (keypressed != NO_KEY) {
    Serial.print(keypressed);
    // # tuşuna basıldı ise control 1 olur password kontrole geçer
    if(keypressed == '#') {  
      control = 1;
    }
    // Kapıyı Aç
    if(keypressed == 'A') { 
      for(int value = 0; value < 90; value++) {
        myservomotor.write(value);
        digitalWrite(ledPinOpen,1); 
        digitalWrite(ledPinClose,0);
      }
    }
    // Kapıyı Kapat
    if(keypressed == 'B') {
      for(int value = 90; value > 1; value–){
        myservomotor.write(value);
        digitalWrite(ledPinOpen,0); 
        digitalWrite(ledPinClose,1); 
      }
    }
    // # tuşuna basıldı ise gerekli kontrolleri yap
    if(control == 1){
      enter_password = enter_password + keypressed;
      counter++;
      Serial.print("sifre " + enter_password );
      // password doğru ise
      if(enter_password == password) {
        Serial.print("kapı açıldı");
        for(int value = 0; value < 90; value++) {
          myservomotor.write(value);
        }
        digitalWrite(ledPinOpen,1); 
        digitalWrite(ledPinClose,0);
        delay(2000);  // gecikme
        digitalWrite(ledPinOpen,0); 
        enter_password = "";
        control = 0;
        counter = 0;
      }
      // password yanlış veya 4 den fazla girildi ise
      else if ((enter_password != password) && (counter > 4) ) {
        Serial.print("hatalı giriş");
        for(int value = 90; value > 1; value–){
          myservomotor.write(value);
        }
        digitalWrite(ledPinOpen,0); 
        digitalWrite(ledPinClose,1);
        delay(2000);
        digitalWrite(ledPinClose,0);
        enter_password = "";
        control = 0;
        counter = 0;
      }
    }
  }
}

Devre tasarım videosu:

Bir yorum bırakın

This site uses Akismet to reduce spam. Learn how your comment data is processed.