Menü
Kapat
Giriş Yap Kayıt Ol
Şifremi Unuttum
Kapat
Sepetim
11.08.2023

Arduino ile Keypad Tuş Takımı Kullanımı / Akıllı Kilit Projesi

Bu blog yazımızda, Arduino ile keypad tuş takımı nasıl kullanılır bunu inceleyeceğiz. Öncelikle keypad Arduino'ya nasıl bağlanır, nasıl çalışır konularına değineceğiz. Ardından 2x16 lcd ekran ile kullanımına, son olarak ise 5v'luk bir röle ile birlikte kullanılıp akıllı kilit oluşturma projesinden bahsedeceğiz.
 
Bu örnekte 4X4 matris membran tuş takımı kullanacağız, ancak 3X4 matris tuş takımları için de kod ve bağlantı şemaları var. Membran tarzı tuş takımları çoğu proje için idealdir. Çünkü incedirler ve arka kısımlarındaki yapışkanlı yüzey sayesinde bir çok yere adapte edilebilirler.
 

Keypad Arduino Bağlantı Şeması

Çoğu membran tuş takımı için pin düzeni aşağıdaki gibidir.
arduino keypad kullanımı
 
3X4 veya 4X4 tuş takımlarını Arduino'nuza bağlamak için aşağıdaki bağlantıları kullanabilirsiniz.
 
arduino keypad kullanımı
 

Keypad Tuş Takımı Kütüphane

Mark Stanley ve Alexander Brevig'in Keypad kütüphanesini kullanacağız. Bu kütüphane pimleri ayarlamaya ve farklı sütunları ve satırları yoklamaya özen gösterir. Kütüphaneyi buraya tıklayarak indirebilirsiniz.
 

Arduino Keypad Kodları

Tuş Takımı kitaplığı yüklendikten sonra, 4X4 tuş takımı kullanıyorsanız bu kodu Arduino'ya yükleyebilirsiniz:
 
#include
 
const byte ROWS = 4; 
const byte COLS = 4; 
 
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
byte rowPins[ROWS] = {9, 8, 7, 6}; 
byte colPins[COLS] = {5, 4, 3, 2}; 
 
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 
 
void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
  }
}
 
3X4 tuş takımı kullanıyorsanız, bu kodu kullanabilirsiniz:
#include
 
const byte ROWS = 4; 
const byte COLS = 3; 
 
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
 
byte rowPins[ROWS] = {9, 8, 7, 6}; 
byte colPins[COLS] = {5, 4, 3}; 
 
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 
 
void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
  }
}
 
Yukarıdaki koddaki 3 ve 4 satırları tuş takımındaki satır ve sütun sayısını belirler.
 
6-11. Satırlar, tuş takımında belirli bir düğmeye basıldığında hangi karakterlerin yazdırılacağını tanımlar. Karakterler tıpkı tuş takımında göründükleri gibi düzenlenir. Tuş takımınızın farklı bir düzeni varsa, bir düğmeye bastığınızda hangi karakterlerin yazdırılacağını tanımlayabilirsiniz. Örneğin, tuş takımınızın solda sağ yerine bir harf sütunu olduğunu varsayalım. Bunu şu şekilde değiştirirsiniz:

Arduino Keypad LCD Ekran Uygulaması

Şimdi basılan tuşların LCD'ye nasıl yazdıracağımızı göreceğiz. 4X4 tuş takımlarında 8 pin ve 3X4 tuş takımlarında 7 pin kullanılır. Bu çok fazla kablo gerektirdiğinden bu projede i2c bağlantılı bir lcd ekran kullanmak çok daha iyi olacaktır.
 
Arduino'da I2C özellikli bir LCD kullanmak için Marco Schwartz tarafından geliştirilen LiquidCrystal I2C kütüphanesini kurmanız gerekir.
 

Keypad ve Lcd Bağlantı Şeması

Aşağıda yer alan bağlantı şeması ile, keypad ve lcd ekran Arduino'ya bağlanabilir.
arduino keypad lcd pinout
 
Yazılım:
#include  
#include
#include
 
const byte ROWS = 4;
const byte COLS = 4;
 
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
 
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
 
LiquidCrystal_I2C lcd(0x21, 16, 2);  
 
void setup(){
  lcd.backlight();
  lcd.init(); 
}
 
void loop(){
  char customKey = customKeypad.getKey();
  if (customKey){
    lcd.clear();
    lcd.setCursor(0, 0); 
    lcd.print(customKey);
  }
}
 
20'nci satırdaki LCD'nizin I2C adresini eklemeniz gerekir:
 
LiquidCrystal_I2C lcd (0x21, 16, 2);
 
LCD'imin I2C adresi 0x21, ancak muhtemelen farklı olacak. LCD'nizin I2C adresi veri sayfasında sağlanmalıdır, ancak değilse, bu I2C_Scanner'ı çalıştırarak bulabilirsiniz.
 

Arduino Şifreli Kilit Uygulaması

Bir tuş takımının en kullanışlı uygulamalarından biri, tuşlu giriş için kullanılmasıdır. Bir şifre ayarlayabilir ve Arduino'nun şifre doğruysa bir röleyi veya başka bir modülü etkinleştirmesini sağlayabilirsiniz. Aşağıdaki kod, şifre doğru girildiğinde 5V'luk bir röleyi etkinleştirir:
 
#include  
#include
#include
 
#define Password_Length 8 
 
int signalPin = 12;
 
char Data[Password_Length]; 
char Master[Password_Length] = "123A456"; 
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
 
const byte ROWS = 4;
const byte COLS = 4;
 
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
 
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
 
LiquidCrystal_I2C lcd(0x21, 16, 2);  
 
void setup(){
  lcd.init(); 
  lcd.backlight();
  pinMode(signalPin, OUTPUT);
}
 
void loop(){
 
  lcd.setCursor(0,0);
  lcd.print("Enter Password:");
 
  customKey = customKeypad.getKey();
  if (customKey){
    Data[data_count] = customKey; 
    lcd.setCursor(data_count,1); 
    lcd.print(Data[data_count]); 
    data_count++; 
    }
 
  if(data_count == Password_Length-1){
    lcd.clear();
 
    if(!strcmp(Data, Master)){
      lcd.print("Correct");
      digitalWrite(signalPin, HIGH); 
      delay(5000);
      digitalWrite(signalPin, LOW);
      }
    else{
      lcd.print("Incorrect");
      delay(1000);
      }
    
    lcd.clear();
    clearData();  
  }
}
 
void clearData(){
  while(data_count !=0){
    Data[data_count--] = 0; 
  }
  return;
}
 
123A456 metnini kendi şifrenizle değiştirerek 10. satırdaki şifreyi değiştirebilirsiniz:
 
char Master [Password_Length] = "123A456”;
 
Parola uzunluğunun 5. satırda ayarlanması gerekir:
 
#define Password_Length 8
 
Yukarıdaki örnekteki şifre sadece 7 karakter uzunluğundadır, ancak dizenin sonuna boş bir karakter eklenmiş olduğundan şifre uzunluğu aslında 7'den büyüktür. Örneğin, şifreniz 5 karakter uzunluğundaysa, şifre uzunluğu için 6 girersiniz.
 
Röleyi etkinleştiren çıkış pimi 7. hatta tanımlanır:
 
int sinyalPin = 12;
 
Her şeyi Arduino'ya bağladıktan sonra, aşağıdaki gibi bir devreye sahip olacaksınız:
arduino keypad kilit