- Bileşenler:
- Devre Açıklaması:
- Arduino'da Besleme Vuruntu Örüntüsü:
- Çalışma Açıklaması:
- Programlama Açıklaması:
Güvenlik, günlük hayatımızda önemli bir sorundur ve dijital kilitler bu güvenlik sistemlerinin önemli bir parçası haline gelmiştir. Yerimizi korumak için pek çok güvenlik sistemi vardır. Bazı örnekler PIR tabanlı Güvenlik Sistemi, RFID tabanlı Güvenlik Sistemi, Dijital Kilit Sistemi, biyo-matris sistemleri, Elektronik Kod kilididir. Bu yazıda, Arduino'yu kullanarak kapıdaki vuruşlarınızın şeklini algılayabilen ve yalnızca kapı vuruşu deseni doğru desenle eşleşirse kilidi açacak bir Gizli Vuruntu Algılama Kapı Kilidi oluşturalım. Doğru çalışan Demo için, sonunda Videoyu kontrol edin.
Bileşenler:
- Arduino Uno
- Butona basınız
- Buzzer
- 1M Direnç
- Güç
- Bağlantı telleri
- Kutu
- Servo Motor
Devre Açıklaması:
Bu Vuruntu Paterni Dedektörünün devre şeması, projenin tüm sürecini kontrol etmek için Arduino, buton, zil ve Servo Motor içeren çok basittir. Arduino, Buzzer veya Sensörden şifre alma, kalıpları karşılaştırma, kapıyı açıp kapatmak için Servo çalıştırma ve deseni Arduino'ya kaydetme gibi tüm işlemleri kontrol eder.
Basma düğmesi, toprağa göre doğrudan Arduino'nun D7 pinine bağlanır. Arduino'nun analog pini A0'a toprağa göre ve ayrıca A0 ile toprak arasına 1M dirençle bir zil bağlanır. Arduino'nun PWM pin D3'üne bir Servo motor da bağlanmıştır.
Arduino'da Besleme Vuruntu Örüntüsü:
Bu devrede, sistemde vuruş giriş desenini almak için Buzzer veya Peizo Sensör kullandık. Burada, sensörden girdi almaya ve bunu Arduino'ya kaydetmeye izin veren bir düğme kullanıyoruz. Bu sistem, Mors kodu kalıbından fikir alınarak tasarlanmıştır, ancak buna tam olarak benzemez.
Burada gösteri için bir karton kutu kullandık. Giriş almak için butona bastıktan sonra panoyu deviriyoruz. Burada 500ms'lik bir zaman dilimini aklımızda tutarak kapıyı çaldık. Bu 500ms, onu kodda sabitlemiş olmamız ve giriş modeline bağlı olmasıdır. Bu 500 ms'lik süre, girişin 1 veya 0 olduğunu belirleyecektir. Bu şeyi anlamak için aşağıdaki kodu kontrol edin.
Onu vurduğumuzda, Arduino ilk vuruşun zamanını ikinci vuruşa kadar izlemeye başlar ve bunu bir diziye koyar. İşte bu sistemde 6 vuruş alıyoruz. Bu, 5 zaman dilimi alacağımız anlamına gelir.
Şimdi zaman aralığını tek tek kontrol ediyoruz. İlk olarak, ilk vuruş ile ikinci vuruş arasındaki süreyi kontrol ederiz, eğer bunlar arasındaki zaman farkı 500ms'den az ise o zaman 0 olacak ve 500ms'den büyükse 1 olacak ve bir değişkene kaydedilecektir. Şimdi ondan sonra, ikinci vuruş ile üçüncü vuruş arasındaki süreyi kontrol ediyoruz.
Son olarak, 0 ve 1 formatında (ikili) 5 haneli çıktı alacağız.
Çalışma Açıklaması:
Çalışma Knock tabanlı Akıllı Kilit Projesi basittir. Öncelikle sisteme bir model kaydetmeliyiz. Bu yüzden 6 kez vurana kadar basmalı düğmeyi basılı tutmalıyız. İşte bu projede 6 vuruş kullandım ancak kullanıcı istediği gibi değiştirebilir. Altı kez vurduktan sonra, Arduino vuruş modelini bulur ve bunu EEPROM'a kaydeder. Şimdi, giriş modelini kaydettikten sonra, kilidi açmak için sensörden Arduino'ya giriş almak için düğmeye basın ve hemen bırakın. Şimdi 6 kez vurmalıyız. Ondan sonra, Arduino bunu çözer ve kaydedilen modelle karşılaştırır. Bir eşleşme olursa, Arduino servo motoru sürerek kapıyı açar.
Not: Basma düğmesine bastığımızda veya basılı tuttuğumuzda Arduino, 6 vuruşun tümünü almak için 10 saniyelik bir zamanlayıcı başlatır. Kullanıcının bu 10 saniye içinde vurması gerektiği anlamına gelir. Kullanıcı, günlüğü görmek için Seri monitörü açabilir.
Programlama Açıklaması:
Bir programda ilk olarak başlık dosyasını dahil ediyoruz ve aşağıdaki kod bölümünde Tam Kod bölümünde görebileceğiniz gibi giriş ve çıkış pinini tanımlıyor ve makro ve bildirilen değişkenleri tanımlıyoruz.
Bundan sonra kurulum fonksiyonunda tanımlı pime yön verip servo motoru çalıştırıyoruz.
geçersiz kurulum () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
Ondan sonra, girdi alır ve bir dizide girdi desenini veya vuruş süresini kaydederiz.
boşluk döngü () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("Başlat"); gecikme (1000); uzun stt = milis (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); eğer (temp> duyarlılık && bayrak == 0 && i <= patternLenth) {…………..
Ondan sonra, giriş modelini çözüyoruz
for (int i = 0; i
Ve sonra basma düğmesine hala basılıysa kaydedin
eğer (digitalRead (sw) == 0) {for (int i = 0; i
Ve basma düğmesine hala basılmadıysa, Arduino giriş kodu çözülmüş modeli kaydedilmiş modelle karşılaştıracaktır.
else {if (knok == 1) {for (int i = 0; i
Herhangi bir şifre eşleşirse, Servo kapıyı açar, aksi takdirde hiçbir şey olmaz ama kullanıcı seri monitör üzerinden sonucu görebilir.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Kabul Edildi"); myServo.write (openGate); gecikme (5000); myServo.write (closeGate); } else Serial.println ("Reddedildi"); }
Aşağıdaki kodun tamamını bir demo Video ile kontrol edebilirsiniz.