- Các thành phần:
- Giải thích mạch:
- Mô hình Feeding Knocking trong Arduino:
- Giải thích làm việc:
- Giải thích lập trình:
Bảo mật là một mối quan tâm lớn trong cuộc sống hàng ngày của chúng ta và khóa kỹ thuật số đã trở thành một phần quan trọng của các hệ thống an ninh này. Có nhiều loại hệ thống an ninh có sẵn để đảm bảo vị trí của chúng tôi. Một số ví dụ là Hệ thống an ninh dựa trên PIR, Hệ thống bảo mật dựa trên RFID, Hệ thống khóa kỹ thuật số, hệ thống ma trận sinh học, khóa mã điện tử. Trong bài đăng này, hãy để chúng tôi xây dựng Khóa cửa phát hiện tiếng gõ bí mật bằng Arduino có thể phát hiện kiểu gõ cửa của bạn và sẽ chỉ mở khóa nếu kiểu gõ khớp với kiểu chính xác. Để Demo hoạt động tốt, hãy kiểm tra Video ở cuối.
Các thành phần:
- Arduino Uno
- Nút ấn
- Buzzer
- Điện trở 1M
- Quyền lực
- Kết nối dây
- Cái hộp
- Động cơ Servo
Giải thích mạch:
Sơ đồ mạch của Knocking Pattern Detector này rất đơn giản, chứa Arduino để điều khiển toàn bộ quá trình của dự án, nút nhấn, bộ rung và Động cơ Servo. Arduino kiểm soát các quy trình hoàn chỉnh như lấy mẫu mật khẩu Buzzer hoặc Cảm biến, so sánh các mẫu, điều khiển Servo để mở và đóng cổng và lưu mẫu vào Arduino.
Nút nhấn được kết nối trực tiếp với chân D7 của Arduino đối với mặt đất. Và một bộ rung được kết nối tại chân A0 tương tự của Arduino đối với mặt đất và với điện trở 1M giữa A0 và mặt đất. Một động cơ Servo cũng được kết nối với chân PWM D3 của Arduino.
Mô hình Feeding Knocking trong Arduino:
Trong mạch này, chúng tôi đã sử dụng Buzzer hoặc Peizo Sensor để lấy mẫu đầu vào tiếng gõ trong hệ thống. Ở đây chúng tôi đang sử dụng một nút nhấn để cho phép lấy đầu vào từ cảm biến và cũng lưu dữ liệu đó vào Arduino. Hệ thống này được thiết kế bằng cách lấy ý tưởng từ mẫu mã Morse nhưng không hoàn toàn giống với mẫu mã đó.
Ở đây chúng tôi đã sử dụng một hộp bảng thẻ để trình diễn. Để lấy đầu vào, chúng ta gõ qua bảng sau khi nhấn nút nhấn. Ở đây chúng tôi đã gõ bằng cách ghi nhớ một khoảng thời gian là 500ms. 500ms này là do chúng tôi đã sửa nó trong mã và mẫu đầu vào tùy thuộc vào nó. Khoảng thời gian 500ms này sẽ xác định đầu vào là 1 hoặc 0. Kiểm tra mã bên dưới để hiểu điều này.
Khi chúng ta gõ nó, Arduino bắt đầu theo dõi thời gian của lần gõ đầu tiên đến lần gõ thứ hai và đưa nó vào một mảng. Ở đây trong hệ thống này, chúng tôi đang thực hiện 6 nút. Nó có nghĩa là chúng ta sẽ nhận được 5 khoảng thời gian.
Bây giờ chúng ta kiểm tra từng khoảng thời gian một. Đầu tiên, chúng tôi kiểm tra khoảng thời gian giữa lần gõ đầu tiên và lần gõ thứ hai nếu chênh lệch thời gian giữa hai lần này nhỏ hơn 500ms thì nó sẽ là 0 và nếu lớn hơn 500ms thì nó sẽ là 1 và nó sẽ được lưu vào một biến. Bây giờ sau khi nó, chúng tôi kiểm tra khoảng thời gian giữa lần gõ thứ hai và lần gõ thứ ba, v.v.
Cuối cùng, chúng ta sẽ nhận được đầu ra 5 chữ số ở định dạng 0 và 1 (nhị phân).
Giải thích làm việc:
Hoạt động của Dự án Khóa thông minh dựa trên Knock rất đơn giản. Đầu tiên chúng ta phải lưu một mẫu trong hệ thống. Vì vậy, chúng ta phải nhấn và giữ nút nhấn cho đến khi chúng ta gõ 6 lần. Ở đây trong dự án này, tôi đã sử dụng 6 nút bấm nhưng người dùng có thể thay đổi nó theo ý muốn. Sau sáu lần gõ, Arduino tìm thấy kiểu gõ và lưu vào EEPROM. Bây giờ sau khi lưu mẫu đầu vào, hãy nhấn và thả ngay nút ấn để lấy đầu vào từ cảm biến đến Arduino để mở khóa. Bây giờ chúng ta phải gõ 6 lần. Sau đó, Arduino giải mã nó và so sánh với mẫu đã lưu. Nếu khớp xảy ra thì Arduino mở cổng bằng cách điều khiển động cơ servo.
Lưu ý: khi chúng ta nhấn hoặc nhấn và giữ nút nhấn, Arduino bắt đầu hẹn giờ 10 giây để thực hiện tất cả 6 lần gõ. Có nghĩa là người dùng cần phải gõ trong khoảng thời gian 10 giây này. Và người dùng có thể mở Serial monitor để xem nhật ký.
Giải thích lập trình:
Trong một chương trình, trước hết chúng ta bao gồm tệp tiêu đề và xác định chân đầu vào và đầu ra và xác định macro và các biến đã khai báo như bạn có thể thấy trong phần Mã đầy đủ trong mã bên dưới.
Sau đó, trong chức năng thiết lập , chúng tôi cung cấp hướng cho chân xác định và khởi động động cơ servo.
void setup () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
Sau đó, chúng tôi lấy đầu vào và lưu mẫu nhập hoặc thời gian gõ vào một mảng.
void loop () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("Bắt đầu"); chậm trễ (1000); stt dài = millis (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); if (temp> độ nhạy && flag == 0 && i <= patternLenth) {…………..
Sau đó, chúng tôi giải mã mẫu đầu vào
for (int i = 0; i
Và sau đó lưu nếu vẫn nhấn nút nhấn
if (digitalRead (sw) == 0) {for (int i = 0; i
Và nếu nút nhấn vẫn không được nhấn thì Arduino sẽ so sánh mẫu đã giải mã đầu vào với mẫu đã lưu.
else {if (knok == 1) {for (int i = 0; i
Nếu bất kỳ mật khẩu nào khớp, thì Servo mở cổng nếu không thì không có gì xảy ra nhưng người dùng có thể thấy kết quả qua màn hình nối tiếp.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Được chấp nhận"); myServo.write (openGate); chậm trễ (5000); myServo.write (closeGate); } else Serial.println ("Bị từ chối"); }
Bạn có thể kiểm tra mã hoàn chỉnh bên dưới bằng Video giới thiệu.