ความปลอดภัยเป็นปัญหาสำคัญในชีวิตประจำวันของเราและการล็อกแบบดิจิทัลได้กลายเป็นส่วนสำคัญของระบบรักษาความปลอดภัยเหล่านี้ มีระบบรักษาความปลอดภัยหลายประเภทเพื่อรักษาความปลอดภัยให้กับสถานที่ของเรา ตัวอย่างบางส่วน ได้แก่ ระบบรักษาความปลอดภัยที่ใช้ PIR, ระบบรักษาความปลอดภัยที่ใช้ RFID, ระบบล็อคดิจิทัล, ระบบไบโอเมทริกซ์, การล็อกรหัสอิเล็กทรอนิกส์ ในโพสต์นี้ให้เราสร้างSecret Knock Detecting Door Lock โดยใช้ Arduinoซึ่งสามารถตรวจจับรูปแบบการเคาะของคุณที่ประตูและจะเปิดล็อคก็ต่อเมื่อรูปแบบการเคาะตรงกับรูปแบบที่ถูกต้องเท่านั้น สำหรับการสาธิตการทำงานที่เหมาะสมให้ตรวจสอบวิดีโอในตอนท้าย
ส่วนประกอบ:
- Arduino Uno
- ปุ่มกด
- Buzzer
- ตัวต้านทาน 1M
- อำนาจ
- การเชื่อมต่อสายไฟ
- กล่อง
- เซอร์โวมอเตอร์
คำอธิบายวงจร:
แผนภาพวงจรของเครื่องตรวจจับรูปแบบการเคาะนี้ง่ายมากซึ่งมี Arduino สำหรับควบคุมกระบวนการทั้งหมดของโครงการปุ่มกดกริ่งและเซอร์โวมอเตอร์ Arduino ควบคุมกระบวนการทั้งหมดเช่นการใช้รหัสผ่านจาก Buzzer หรือ Sensor เปรียบเทียบรูปแบบการขับ Servo เพื่อเปิดและปิดประตูและบันทึกรูปแบบไปยัง Arduino
ปุ่มกดเชื่อมต่อโดยตรงกับพิน D7 ของ Arduino เมื่อเทียบกับกราวด์ และออดเชื่อมต่อที่พินอะนาล็อก A0 ของ Arduino ที่เกี่ยวกับกราวด์และมีความต้านทาน 1M ระหว่าง A0 และกราวด์ด้วย Servo Motorยังเชื่อมต่อกับ PWM ขา D3 ของ Arduino
รูปแบบการให้อาหารใน Arduino:
ในวงจรนี้เราได้ใช้Buzzer หรือ Peizo Sensorเพื่อใช้รูปแบบอินพุตน็อคในระบบ ที่นี่เรากำลังใช้ปุ่มกดเพื่ออนุญาตให้รับอินพุตจากเซ็นเซอร์และบันทึกลงใน Arduino ระบบนี้ได้รับการออกแบบโดยใช้แนวคิดจากรูปแบบรหัสมอร์ส แต่ไม่เหมือนกันทุกประการ
ที่นี่เราได้ใช้กล่องการ์ดสำหรับการสาธิต ในการป้อนข้อมูลเราเคาะกระดานหลังจากกดปุ่มกด ที่นี่เราได้เคาะโดยคำนึงถึงช่วงเวลาที่ 500 มิลลิวินาที 500ms นี้เป็นเพราะเราได้แก้ไขในรหัสและรูปแบบการป้อนข้อมูลขึ้นอยู่กับมัน ช่วงเวลา 500ms นี้จะกำหนดอินพุตเป็น 1 หรือ 0 ตรวจสอบโค้ดด้านล่างเพื่อทำความเข้าใจสิ่งนี้
เมื่อเราเคาะ Arduino จะเริ่มตรวจสอบเวลาของการเคาะครั้งแรกถึงครั้งที่สองและวางไว้ในอาร์เรย์ ในระบบนี้เรากำลังเคาะ 6 ครั้ง หมายความว่าเราจะได้รับ 5 ช่วงเวลา
ตอนนี้เราตรวจสอบช่วงเวลาทีละช่วง ขั้นแรกให้ตรวจสอบช่วงเวลาระหว่างการเคาะครั้งแรกและการเคาะครั้งที่สองหากความแตกต่างของเวลาระหว่างสิ่งเหล่านี้น้อยกว่า 500 มิลลิวินาทีมันจะเป็น 0 และถ้ามากกว่า 500 มิลลิวินาทีจะเป็น 1 และจะถูกบันทึกลงในตัวแปร หลังจากนั้นเราจะตรวจสอบช่วงเวลาระหว่างการเคาะครั้งที่สองและการเคาะครั้งที่สามและอื่น ๆ
สุดท้ายเราจะได้ผลลัพธ์ 5 หลักในรูปแบบ 0 และ 1 (ไบนารี)
คำอธิบายการทำงาน:
การทำงานของโครงการ Smart Lock ที่ใช้ Knockนั้นง่ายมาก ก่อนอื่นเราต้องบันทึกรูปแบบในระบบ ดังนั้นเราต้องกดปุ่มกดค้างไว้จนกว่าเราจะเคาะ 6 ครั้ง ที่นี่ในโปรเจ็กต์นี้ฉันใช้ 6 Knock แต่ผู้ใช้อาจเปลี่ยนได้ตามต้องการ หลังจากเคาะหกครั้ง Arduino จะค้นหารูปแบบการเคาะและบันทึกใน EEPROM หลังจากบันทึกรูปแบบการป้อนข้อมูลแล้วให้กดและปล่อยปุ่มกดทันทีเพื่อรับอินพุตจากเซ็นเซอร์ไปยัง Arduino เพื่อเปิดล็อค ตอนนี้เราต้องเคาะ 6 ครั้ง หลังจากนั้น Arduino จะถอดรหัสและเปรียบเทียบกับรูปแบบที่บันทึกไว้ หากการแข่งขันเกิดขึ้น Arduino จะเปิดประตูโดยการขับเซอร์โวมอเตอร์
หมายเหตุ: เมื่อเรากดหรือกดปุ่มกด Arduino ค้างไว้เริ่มจับเวลา 10 วินาทีเพื่อเคาะทั้ง 6 ครั้ง หมายความว่าผู้ใช้ต้องเคาะภายในเวลา 10 วินาทีนี้ และผู้ใช้อาจเปิด Serial monitor เพื่อดูบันทึก
คำอธิบายการเขียนโปรแกรม:
ในโปรแกรมก่อนอื่นเรารวมไฟล์ส่วนหัวและกำหนดพินอินพุตและเอาต์พุตและกำหนดมาโครและตัวแปรที่ประกาศดังที่คุณเห็นในโค้ดเต็มในส่วนโค้ดด้านล่าง
หลังจากนี้ในฟังก์ชั่น การตั้งค่า เราจะให้ทิศทางไปยังพินที่กำหนดและเริ่มเซอร์โวมอเตอร์
การตั้งค่าเป็นโมฆะ () {pinMode (sw, INPUT_PULLUP); myServo.attach (เซอร์โวพิน); myServo.write (180); Serial.begin (9600); }
หลังจากนั้นเราจะป้อนข้อมูลและบันทึกรูปแบบการป้อนข้อมูลหรือเวลาเคาะในอาร์เรย์
ห่วงเป็นโมฆะ () {int i = 0; ถ้า (digitalRead (sw) == LOW) {Serial.println ("Start"); ล่าช้า (1,000); stt ยาว = มิลลิวินาที (); ในขณะที่ (มิลลิวินาที () <(stt + patternInputTime)) {int temp = analogRead (A0); if (temp> sensitive && flag == 0 && i <= patternLenth) {…. ปล….
หลังจากนั้นเราจะถอดรหัสรูปแบบการป้อนข้อมูล
สำหรับ (int i = 0; i
จากนั้นบันทึกหากยังคงกดปุ่มกด
ถ้า (digitalRead (sw) == 0) {สำหรับ (int i = 0; i
และถ้ายังไม่กดปุ่มกด Arduino จะเปรียบเทียบรูปแบบการถอดรหัสอินพุตกับรูปแบบที่บันทึกไว้
อื่น {if (knok == 1) {สำหรับ (int i = 0; i
หากรหัสผ่านใด ๆ ตรงกันเซอร์โวจะเปิดประตูมิฉะนั้นจะไม่มีอะไรเกิดขึ้น แต่ผู้ใช้อาจเห็นผลลัพธ์ผ่านจอภาพแบบอนุกรม
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("ยอมรับ"); myServo.write (openGate); ล่าช้า (5000); myServo.write (closeGate); } else Serial.println ("ถูกปฏิเสธ"); }
คุณสามารถตรวจสอบรหัสสมบูรณ์ด้านล่างด้วยการสาธิตวิดีโอ