Şifreli kasa projesi, 4x4 keypad ile girilen şifreyi Arduino'da kayıtlı şifreyle karşılaştırır; şifre doğruysa servo motor kilit dilini çekerek kapağı açar, yanlışsa buzzer uyarır. 16x2 LCD ekran girilen haneleri yıldız olarak gösterir ve 3 yanlış denemeden sonra kasa 30 saniye kilitlenir.
Kumbaranızı ya da küçük eşyalarınızı şifreyle açılan bir kutuda saklamak ister misiniz? Bu projede Arduino Uno, 4x4 tuş takımı (keypad), servo motor ve LCD ekranla şifreli bir kasa maketi yapıyoruz. Doğru şifrede kilit açılıyor, yanlış şifrede buzzer uyarıyor, üç yanlış denemede kasa bir süre kendini kilitliyor. Proje ortaokul ve lise kodlama dersleri, TÜBİTAK 4006 bilim fuarları ve meslek lisesi atölyeleri için uygundur.
Şifreli kasa nedir?
Şifreli kasa, kapağı yalnızca doğru sayı dizisi girildiğinde açılan, kilidi elektronik bir devre tarafından kontrol edilen bir saklama kutusudur. Gerçek kasalarda kilit dilini güçlü bir motor ya da solenoid hareket ettirir ve gövde çelikten yapılır.
Maketimizde keypad şifreyi alır, Arduino Uno karşılaştırır, SG90 servo motor kilit dili görevi görür, 16x2 I2C LCD bilgi verir ve pasif buzzer ses çıkarır. Sistem bir eğitim maketidir; değerli eşyaları korumak için yeterli güvenliği sağlamaz.
Hangi malzemeler gerekir?
Şifreli kasa için Arduino Uno, 4x4 keypad, SG90 servo, I2C arayüzlü 16x2 LCD, pasif buzzer ve jumper kablolar yeterlidir. Kasa gövdesi için kapaklı bir karton ya da ince kontrplak kutu kullanılır.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino Uno R3 (CH340, USB kablolu) | 1 | Şifreyi karşılaştırır, kilidi yönetir |
| 4x4 buton keypad | 1 | Şifre girişi (16 tuş, 8 pin) |
| Tower Pro SG90 servo motor | 1 | Kilit dilini 0° ile 90° arasında çevirir |
| 16x2 I2C LCD ekran | 1 | Mesajları ve yıldızları gösterir |
| Pasif buzzer 17 mm | 1 | Tuş sesi, onay ve hata uyarısı |
| 140 parça kutulu jumper kablo seti | 1 | Bağlantılar |
Arduino IDE'de Kütüphane Yöneticisi'nden "Keypad" (Mark Stanley, Alexander Brevig) ve "LiquidCrystal I2C" kütüphanelerini kurun. Servo kütüphanesi IDE ile birlikte gelir.
Devre nasıl bağlanır?
Keypad'in 8 ucu D9'dan D2'ye sırayla bağlanır; servo sinyali D10'a, pasif buzzer D11'e, LCD ise A4 (SDA) ve A5 (SCL) pinlerine bağlanır. Bağlantı sırasında USB kablosu takılı olmasın.
- Keypad'i tuşlar size bakacak şekilde tutun. Soldaki ilk dört uç satırlardır (R1-R4), sağdaki dört uç sütunlardır (C1-C4).
- Satırlar: R1 → D9, R2 → D8, R3 → D7, R4 → D6.
- Sütunlar: C1 → D5, C2 → D4, C3 → D3, C4 → D2.
- Servo: kahverengi → GND, kırmızı → 5V, turuncu (sinyal) → D10.
- Pasif buzzer: artı → D11, eksi → GND.
- LCD: GND → GND, VCC → 5V, SDA → A4, SCL → A5.
- USB kablosunu takıp kodu yükleyin ve her tuşta LCD'ye yıldız geldiğini kontrol edin.
Bir tuşa basıldığında yanlış rakam görünüyorsa satır ve sütun kabloları yer değiştirmiştir. Keypad'in iç yapısını ve tarama yöntemini 4x4 keypad Arduino bağlantısı yazısında anlattık.
Şifreli kasa kodu nasıl çalışır?
Kod basılan rakamları bir metinde toplar, # tuşuna basılınca bu metni kayıtlı şifreyle karşılaştırır; eşleşirse servoyu 90°'ye çevirip kilidi açar, eşleşmezse hata sayısını bir artırır.
#include <Keypad.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte SATIR = 4, SUTUN = 4;
char tuslar[SATIR][SUTUN] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte satirPin[SATIR] = {9, 8, 7, 6};
byte sutunPin[SUTUN] = {5, 4, 3, 2};
Keypad tus = Keypad(makeKeymap(tuslar), satirPin, sutunPin, SATIR, SUTUN);
LiquidCrystal_I2C lcd(0x27, 16, 2); // ekran yoksa 0x3F deneyin
Servo kilit;
const String SIFRE = "1234";
const byte SERVO_PIN = 10, BUZZER = 11;
const int KILITLI = 0, ACIK = 90;
String giris = "";
byte hata = 0;
void ekran(const char* mesaj) {
lcd.clear();
lcd.print(mesaj);
lcd.setCursor(0, 1);
lcd.print("Sifre: ");
}
void setup() {
kilit.attach(SERVO_PIN);
kilit.write(KILITLI);
lcd.init();
lcd.backlight();
ekran("Kasa kilitli");
}
void loop() {
char t = tus.getKey();
if (!t) return;
tone(BUZZER, 2000, 40); // tuş sesi
if (t == 'A') { kilit.write(KILITLI); giris = ""; ekran("Kasa kilitli"); return; }
if (t == '*') { giris = ""; ekran("Silindi"); return; }
if (t == '#') {
if (giris == SIFRE) {
kilit.write(ACIK);
hata = 0;
ekran("Acildi! A=kilit");
tone(BUZZER, 1500, 300);
} else {
hata++;
ekran("Yanlis sifre");
tone(BUZZER, 400, 600);
if (hata >= 3) { // 3 hata: 30 s bekle
lcd.clear();
lcd.print("30 sn bekleyin");
delay(30000);
hata = 0;
ekran("Kasa kilitli");
}
}
giris = "";
return;
}
if (t >= '0' && t <= '9' && giris.length() < 8) {
giris += t;
lcd.print('*'); // rakam yerine yıldız
}
}
Şifreyi değiştirmek için SIFRE satırındaki "1234" yerine kendi şifrenizi yazıp kodu yeniden yükleyin. Servo ve tone farklı zamanlayıcılar kullandığı için birlikte sorunsuz çalışır.
Tuşların görevleri nelerdir?
Rakam tuşları şifreyi yazar, # onaylar, * siler ve A kasayı yeniden kilitler; B, C ve D tuşları bu sürümde boştur ve geliştirme için ayrılmıştır.
| Tuş | Görev | LCD'de görünen | Ses |
|---|---|---|---|
| 0-9 | Şifre hanesi ekler (en çok 8) | * | Kısa bip (2.000 Hz) |
| # | Şifreyi onaylar | Acildi! ya da Yanlis sifre | 1.500 Hz onay / 400 Hz hata |
| * | Girilen haneleri siler | Silindi | Kısa bip |
| A | Kasayı kilitler (servo 0°) | Kasa kilitli | Kısa bip |
| 3 yanlış deneme | Girişi 30 saniye kapatır | 30 sn bekleyin | 400 Hz uzun ton |
Kasa kutusu nasıl yapılır?
Kasa, kapaklı bir kutunun ön duvarına keypad ve LCD, iç duvarına ise kilit dili olarak çalışan servo yerleştirilerek yapılır.
- Keypad'in yapışkan sırtını kutunun ön yüzüne yapıştırın; kablo şeridini bir yarıktan içeri geçirin.
- LCD için ön yüzde 7x2,5 cm civarında bir pencere açın ve ekranı içeriden sabitleyin.
- Servoyu kutunun iç yan duvarına, kolu kapağın iç kenarına denk gelecek şekilde yapıştırın.
- Kapağın iç yüzüne küçük bir tahta parçası ya da karton tırnak yapıştırın. Servo 0°'deyken kol tırnağın altına girip kapağı tutmalı, 90°'de serbest bırakmalıdır.
- Arduino ve kabloları kutunun arka bölmesine yerleştirin; USB kablosu için arkadan bir delik açın.
Servonun yerine daha güçlü bir kilit isterseniz solenoid kilit Arduino bağlantısı yazısındaki 12V solenoid kilidi inceleyebilirsiniz; bu durumda röle ya da MOSFET ve ayrı bir adaptör gerekir.
Hangi güvenlik kurallarına dikkat edilmeli?
Kasa USB'den ya da kalem pilden 5-6 V ile çalıştığı için güvenlidir; yine de şu kurallara uyun:
- Devreyi bilgisayarın USB çıkışından, USB powerbank'tan ya da en çok 12V'luk bir adaptörden besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
- Projeyi öğretmen ya da yetişkin gözetiminde kurun; kutuyu keserken maket bıçağını yetişkin yardımıyla kullanın.
- Elektrik kesilirse servo son konumunda kalır. Kasanın arkasında, tornavidayla açılabilen bir acil durum kapağı bırakın.
- Servo kolunun arasına parmağınızı sokmayın; kapak kapanırken kola zorla bastırmayın, servonun dişlileri kırılabilir.
- Kasaya ilaç, para ya da değerli eşya koymayın; bu bir eğitim maketidir.
Ödevinizi nasıl sunarsınız?
Ödevinizi, kasayı canlı olarak açıp kapatarak, yanlış şifre ve kilitlenme durumlarını göstererek sunabilirsiniz.
- Problem: "Mekanik anahtar kaybolabilir; şifreyle açılan bir kilit nasıl yapılır?"
- Gösteri: Doğru şifreyle açın, yanlış şifreyi üç kez deneyip 30 saniyelik kilitlenmeyi gösterin.
- Hesap: 4 haneli şifrede 10 × 10 × 10 × 10 = 10.000 olasılık vardır. 3 denemede bir 30 saniye beklemeyle hepsini denemek en az 100.000 saniye, yani 27 saatten uzun sürer.
- Rapor: Bağlantı şemasını, kodun akış şemasını ve tuş tablosunu ekleyin.
- Geliştirme: Şifreyi EEPROM'a kaydedip keypad'den değiştirme, RFID kart ya da parmak izi ile açma önerin.
Sık sorulan sorular
Elektrik kesilince şifre silinir mi?
Hayır, bu koddaki şifre programın içine yazıldığı için elektrik kesilince silinmez. Arduino yeniden başladığında kasa "Kasa kilitli" ekranıyla açılır ve servo 0°'ye döner. Şifreyi keypad'den değiştirmek isterseniz yeni şifreyi Arduino'nun EEPROM belleğine kaydetmeniz gerekir; EEPROM'daki veri de elektrik kesilince kaybolmaz.
Keypad tuşları yanlış rakam veriyorsa ne yapmalıyım?
Yanlış rakam genellikle satır ve sütun kablolarının sırasının karışmasından kaynaklanır. Önce yalnızca keypad'i bağlayıp tuşları Seri Monitör'e yazdıran kısa bir test kodu çalıştırın. Rakamlar ters ya da kaymış geliyorsa koddaki satirPin ve sutunPin dizilerinin sırasını değiştirin. Kabloları yeniden takmaktan genellikle daha kolaydır.
Servo kapağı tutmaya yetmiyorsa ne yapmalıyım?
SG90 küçük bir servodur; kapağı yalnızca hafif kutularda tutabilir. Kolu kısaltın, çünkü kısa kol daha fazla kuvvet uygular. Tırnağı kolun ucuna değil, servo miline daha yakın bir noktaya denk getirin; aynı servo, mile yakın noktada daha büyük kuvvet uygular. Daha sağlam bir kilit için metal dişli MG90S servo ya da solenoid kilit kullanılabilir.
Arduino servo dönerken neden yeniden başlıyor?
Servo hareket ederken kısa süreli yüksek akım çeker ve USB'nin gerilimi anlık düşer; bu da Arduino'nun yeniden başlamasına yol açabilir. Servoyu 4 kalem pilden (6 V) besleyin ve pilin eksisini Arduino GND'sine bağlayın. Servonun sinyal kablosu yine D10'da kalır.
Özet
- Şifreli kasa, keypad ile girilen şifreyi karşılaştırıp servo kilidi açan bir Arduino projesidir.
- Bağlantı: keypad satırları D9-D6, sütunları D5-D2; servo D10, buzzer D11, LCD A4 ve A5.
- # onaylar, * siler, A kasayı kilitler; LCD rakamları yıldız olarak gösterir.
- 3 yanlış denemeden sonra giriş 30 saniye kapanır; 10.000 şifreyi denemek 27 saatten uzun sürer.
- Elektrik kesilince servo son konumunda kalır; acil durum kapağı bırakın.
- Devreyi USB ya da pille, 220V kullanmadan ve yetişkin gözetiminde çalıştırın.
