Şifreli Kilit Uygulaması

Görseldeki uygulamada tuş takımından doğru şifre girildiğinde step motor 90 °C’lik dönüş yapar. Geçerli ve geçersiz şifreler için farklı ses sinyalleri verir.

#include <Keypad.h> //Tuş takımı kütüphanesi.

byte hane = 0;
char sifre[] = "123ABC"; // Kullanılacak şifre.
char giris[sizeof(sifre)]; //Şifre uzunluğu kadar dizi oluştur.
const byte buzzer = 1; // Buzzer pini.

//---Tuş takımı ayarları.---
const byte satir = 4; //Dört satır.
const byte sutun = 4; //Dört sütün.
char tusDizilimi[satir][sutun] = {//Tuş takımındaki sebollerin dizilimini tanımlama.
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPinleri[satir] = {9, 8, 7, 6};
//{R1, R2, R3, R4} Satır pinlerinin Arduino pinlerine bağlantısı.
byte sutunPinleri[sutun] = {5, 4, 3, 2};
//{C1, C2, C3, C4} Sütün pinlerinin Arduino pinlerine bağlantısı.

//tusTakimi adında nesne oluşturma.
Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);

void setup() {
  pinMode(buzzer, OUTPUT); // Buzzer.
  pinMode(10, OUTPUT); // Step motor pinleri.
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

  Serial.begin(9600);
  Serial.println("Lütfen şifrenizi giriniz: ");
}

void loop() {
  char tus = tusTakimi.waitForKey(); //Tuşa basılana kadar bekle.
  Serial.print(tus); //Basılan tuşu ekrana yazdır.
  giris[hane] = tus; //Sırayla her tuşu giris dizisine yükle.
  hane++;

  if (hane == sizeof(sifre) - 1) { //Şifre uzunluğu kadar tuşa basıldığında...
    if (!strcmp(giris, sifre)) { //İki diziyi karşılaştır. Şifre doğruysa yapılacaklar...
      Serial.println("\nŞifre doğru. Kapı açıldı");
      digitalWrite(buzzer, 1); // Buzzer bir saniye çalar.
      delay(1000);
      digitalWrite(buzzer, 0);
      stepMotor(); // Step motor çalıştıran fonksiyonu çağır.
      Serial.println("Lütfen şifrenizi giriniz: ");
    }
    else { //Şifre yanlışsa yapılacaklar...
      Serial.println("\nŞifre yanlış. Lütfen tekrar deneyiniz.");
      digitalWrite(buzzer, 1); // Geçersiz kart için buzzer sesi.
      delay(200);
      digitalWrite(buzzer, 0);
      delay(200);
      digitalWrite(buzzer, 1);
      delay(200);
      digitalWrite(buzzer, 0);
    }
    hane = 0;
  }
}

void stepMotor() { // Step motor Yaklaşık 90° döner.
  int x, adimSayisi = 500, sure = 2;

  for (x = 0; x < adimSayisi / 4; x++) {
    for (byte i = 10; i <= 13; i++) { //Sağa dön.
      digitalWrite(i, 1);
      delay(sure);
      digitalWrite(i, 0);
    }
  }
  delay(1000); // Kapı açık kalma süresi.
  for (x = 0; x < adimSayisi / 4; x++) {
    for (byte i = 13; i >= 10; i--) { //Sola dön.
      digitalWrite(i, 1);
      delay(sure);
      digitalWrite(i, 0);
    }
  }
}

#include <Keypad.h> // Tuş takımı kütüphanesi. V3.1.1
#include <Servo.h> // Dahili Servo kütüphanesi v1.1.8

Servo servo; // servo isimli nesne oluşturuldu.

const byte buzzer = 1, yesilLED = 10, kirmiziLED = 11;
byte hane = 0;
char sifre[] = "123ABC"; // Kullanılacak şifre.
char giris[sizeof(sifre)]; //Şifre uzunluğu kadar dizi oluştur.

//---Tuş takımı ayarları.---
const byte satir = 4; //Dört satır.
const byte sutun = 4; //Dört sütün.
char tusDizilimi[satir][sutun] = {//Tuş takımındaki sebollerin dizilimini tanımlama.
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPinleri[satir] = {9, 8, 7, 6};
//{R1, R2, R3, R4} Satır pinlerinin Arduino pinlerine bağlantısı.
byte sutunPinleri[sutun] = {5, 4, 3, 2};
//{C1, C2, C3, C4} Sütün pinlerinin Arduino pinlerine bağlantısı.

//tusTakimi adında nesne oluşturma.
Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);

void setup() {
  pinMode(buzzer, OUTPUT);
  pinMode(yesilLED, OUTPUT);
  pinMode(kirmiziLED, OUTPUT);
  servo.attach(12); // Servo motor 12d numaralı PWM çıkışına bağlı.
  Serial.begin(9600);
  Serial.println("Lütfen şifrenizi giriniz: ");
}

void loop() {
  char tus = tusTakimi.waitForKey(); //Tuşa basılana kadar bekle.
  Serial.print(tus); //Basılan tuşu ekrana yazdır.
  giris[hane] = tus; //Sırayla her tuşu giris dizisine yükle.
  hane++;

  if (hane == sizeof(sifre) - 1) { //Şifre uzunluğu kadar tuşa basıldığında...
    if (!strcmp(giris, sifre)) { //İki diziyi karşılaştır. Şifre doğruysa yapılacaklar...
      Serial.println("\nŞifre doğru. Kapı açıldı");
      digitalWrite(yesilLED, 1); // Yeşil LED'i yak.
      digitalWrite(buzzer, 1); // Buzzer bir saniye çalar.
      delay(1000);
      digitalWrite(buzzer, 0);
      digitalWrite(yesilLED, 0); // Yeşil LED'i söndür.
      kapiAc(); // kapiAc fonksiyonunu çağır.
      Serial.println("Lütfen şifrenizi giriniz: ");
    }
    else { //Şifre yanlışsa yapılacaklar...
      Serial.println("\nŞifre yanlış. Lütfen tekrar deneyiniz.");
      digitalWrite(kirmiziLED, 1); // Kırmızı LED'i yak.
      digitalWrite(buzzer, 1); // Geçersiz şifre için buzzer sesi.
      delay(200);
      digitalWrite(buzzer, 0);
      delay(200);
      digitalWrite(buzzer, 1);
      delay(200);
      digitalWrite(buzzer, 0);
      digitalWrite(kirmiziLED, 0); // Kırmızı LED'i söndür.
    }
    hane = 0;
  }
}

void kapiAc() {
  servo.write(90); //Servo motoru 180 dereceye getirir.
  delay(3000);
  servo.write(0); //Servo motoru 0 dereceye getirir.
  delay(1000);
}

Benzer Temrinler & Yazılar

  • Analog Giriş-Çıkış Uygulaması

    Görseldeki devrede potansiyometre 10 bitlik analog girişe bağlıyken LED 8 bitlik PWM çıkışına bağlıdır. Potansiyometreden alınan 0 -1023 arası değer doğrudan PWM çkışına verilirse(analogWrite(3, pot)) 8 bitlik PWM çıkışı potansiyometrenin bir tam dönüşünde dört tur dönecektir. map(pot, 0, 1023, 0, 255) fonksiyonu pot değişkeninden gelen 0 -1023 aralığını 0-255 aralığına eşler. void setup() {  Serial.begin(9600);…

  • Çizgi İzleyen Robot Uygulaması

    Görseldeki Sparkfun TB6612fng motor sürücü kartı pin yapısı verilmiştir. Görseldeki çizgi izleyen robot devresinde Sparkfun TB6612fng (kırmızı renkli PCB) motor sürücü kartı kullanılmıştır. Pololu TB6612fng entegresini kullanan yeşil renkli PCB kartın boyutları ve pin yerleşim düzeni farklıdır. Çizgi izleyen robot programı L298N motor sürücüsüyle de kullanılabilir. VCC: 5 V besleme.GND: Topraklama pini.VM: Motor besleme girişi…

  • Reed Switch’le Dijital Giriş Uygulaması

    Görselde kullanılan reed röle modülüne mıknatıs yaklaştırıldığında veya manyetik alan içine girdiğinde D0 çıkışı lojik 1 olmaktadır. Modül üzerinde besleme (5 V), GND ve D0 dijital çıkışpini yer almaktadır. Mıknatıs yaklaştırıldığında D0 pininden 5 V (1) çıkış vermektedir ve aynı zamanda üzerindeki LED de yanmaktadır. Bazı modüllerde A0 analog çıkış pini de bulunmaktadır. const byte…

  • Hareket Sensörü Uygulaması

    Maddeler sahip oldukları ısıdan dolayı insanların görebileceği ışık aralığının altında kızılötesi ışıkyayar. Normal sıcaklığındaki insan vücudu (36,5 °C) 10 mikrometre dalga boyunda ışıma yapar.Hareket sensörü bulunduğu ortamdaki kızılötesi ışık dalgalarını içindeki özel kristal malzemeyle(piroelektrik sensör) elektriğe dönüştürür. Ortamdaki kızılötesi ışık miktarı sabitken bir canlı ortama girdiğinde kızılötesi ışık miktarında artış olur. Hareket sensörü bu artışı…

  • Kesme Uygulaması

    Görseldeki programda ana döngüde blink uygulaması çalışırken butona basıldığında kesme aktifedilmekte ve haricî LED anında yanmaktadır. Haricî LED’in sönme komutu ise ana döngüde verildiğinden sönme işlemi ana programda icra edilen komut satırına bağlı olarak 0 ile 2 saniyearasında süre alır. const byte dahiliLED = 13; const byte hariciLED = 12; const byte kesmePini = 2;…

  • Engelden Kaçan Robot Uygulaması

    Engelden kaçan robotta engelleri algılamak için ultrasonik sensör kullanılmaktadır GörseldekiUltrasonik sensörden gelen bilgilerle mesafe hesaplanır. Mesafe 30 cm’nin altına indiğinde motor tarafından sürücüye sol tekerleği geriye döndürme bilgisi gönderilmektedir. 30 cm üzerindekitüm mesafe ölçümlerinde tekerlekler ileri yönde döndürülecek şekilde motor sürücüye bilgi gönderilmektedir. Taslaktaki “hiz=255;” değeri düz gitme ve dönüş için farklı değerlere ayarlanarakrobot yavaşlatılabilir….

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.