- Składniki:
- Objaśnienie obwodu:
- Wzorzec karmienia pukania w Arduino:
- Objaśnienie robocze:
- Objaśnienie programowania:
Bezpieczeństwo jest głównym problemem w naszym codziennym życiu, a zamki cyfrowe stały się ważną częścią tych systemów zabezpieczeń. Dostępnych jest wiele rodzajów systemów bezpieczeństwa, które zabezpieczają nasze miejsce. Niektóre przykłady to system bezpieczeństwa oparty na PIR, system bezpieczeństwa oparty na RFID, system cyfrowego zamka, systemy bio-matrycowe, elektroniczny zamek szyfrowy. W tym poście zbudujmy tajny zamek wykrywający pukanie za pomocą Arduino, który może wykryć wzór pukania do drzwi i otworzy zamek tylko wtedy, gdy wzór pukania pasuje do prawidłowego wzoru. Aby sprawdzić, czy Demo działa poprawnie, sprawdź wideo na końcu.
Składniki:
- Arduino Uno
- Naciśnij przycisk
- Brzęczyk
- Rezystor 1 M.
- Moc
- Przewody łączące
- Pudełko
- Siłownik
Objaśnienie obwodu:
Schemat obwodu tego wykrywacza wzorców pukania jest bardzo prosty i zawiera Arduino do sterowania całym procesem projektu, przycisk, brzęczyk i silnik serwo. Arduino kontroluje kompletne procesy, takie jak pobieranie hasła z Buzzera lub czujnika, porównywanie wzorców, sterowanie serwomechanizmem w celu otwierania i zamykania bramy oraz zapisywanie wzoru w Arduino.
Przycisk jest bezpośrednio podłączony do pinu D7 Arduino względem masy. A brzęczyk jest podłączony do analogowego pinu A0 Arduino względem masy, a także z rezystancją 1M między A0 a masą. Serwomotor jest również połączony z PWM sworznia D3 Arduino.
Wzorzec karmienia pukania w Arduino:
W tym obwodzie użyliśmy Buzzera lub Peizo Sensor, aby uzyskać wzór wejścia stukowego w systemie. Tutaj używamy przycisku, aby umożliwić pobranie danych wejściowych z czujnika, a także zapisać je w Arduino. Ten system został zaprojektowany w oparciu o wzorzec kodu Morse'a, ale nie jest do końca podobny.
Tutaj użyliśmy kartonowego pudełka do demonstracji. Aby przyjąć dane wejściowe, po naciśnięciu przycisku przewracamy planszę. Tutaj zapukaliśmy, pamiętając o okresie czasu, który wynosi 500 ms. To 500 ms jest spowodowane tym, że naprawiliśmy to w kodzie i od niego zależy wzorzec wejściowy. Ten okres 500 ms zdefiniuje wartość wejściową 1 lub 0. Sprawdź poniższy kod, aby zrozumieć tę rzecz.
Kiedy pukamy, Arduino zaczyna monitorować czas od pierwszego pukania do drugiego i umieszcza go w tablicy. Tutaj, w tym systemie, mamy 6 uderzeń. Oznacza to, że otrzymamy 5 okresów czasu.
Teraz sprawdzamy przedział czasu jeden po drugim. Najpierw sprawdzamy okres czasu między pierwszym a drugim stuknięciem, jeśli różnica czasu między nimi jest mniejsza niż 500 ms, to będzie 0, a jeśli będzie większa niż 500 ms, będzie równa 1 i zostanie zapisana w zmiennej. Teraz po tym sprawdzamy okres między drugim a trzecim pukaniem i tak dalej.
Na koniec otrzymamy 5-cyfrowe dane wyjściowe w formacie 0 i 1 (binarne).
Objaśnienie robocze:
Działanie projektu Smart Lock opartego na Knock jest proste. Najpierw musimy zapisać wzór w systemie. Musimy więc wcisnąć i przytrzymać przycisk, aż zapukamy 6 razy. Tutaj w tym projekcie użyłem 6 uderzeń, ale użytkownik może to zmienić, jak chce. Po sześciokrotnym pukaniu Arduino znajduje wzór pukania i zapisuje go w pamięci EEPROM. Teraz po zapisaniu wzorca wejściowego naciśnij i natychmiast zwolnij przycisk pobierania danych z czujnika do Arduino, aby otworzyć zamek. Teraz musimy zapukać 6 razy. Następnie Arduino dekoduje go i porównuje z zapisanym wzorem. Jeśli dojdzie do dopasowania, Arduino otwiera bramę, napędzając silnik serwo.
Uwaga: po naciśnięciu lub naciśnięciu i przytrzymaniu przycisku Arduino uruchamia 10-sekundowy licznik czasu, aby wziąć wszystkie 6 uderzeń. Oznacza, że użytkownik musi zapukać w ciągu tych 10 sekund. Użytkownik może otworzyć monitor szeregowy, aby wyświetlić dziennik.
Objaśnienie programowania:
W programie przede wszystkim dołączamy plik nagłówkowy i definiujemy pin wejściowy i wyjściowy oraz definiujemy makro i zadeklarowane zmienne, jak widać w sekcji Pełny kod w kodzie poniżej.
Następnie w funkcji setup podajemy kierunek zdefiniowanemu pinowi i uruchamiamy serwomotor.
void setup () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
Następnie pobieramy dane wejściowe i zapisujemy wzorzec wejściowy lub czas pukania w tablicy.
void loop () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("Start"); opóźnienie (1000); long stt = millis (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); if (temp> czułość && flag == 0 && i <= patternLenth) {…………..
Następnie dekodujemy wzorzec wejściowy
dla (int i = 0; i
A następnie zapisz, jeśli przycisk jest nadal wciśnięty
if (digitalRead (sw) == 0) {for (int i = 0; i
A jeśli przycisk nie jest nadal wciśnięty, Arduino porówna zdekodowany wzór wejściowy z zapisanym wzorem.
else {if (knok == 1) {for (int i = 0; i
Jeśli jakieś hasło pasuje, to Servo otwiera bramę, w przeciwnym razie nic się nie stało, ale użytkownik może zobaczyć wynik na monitorze szeregowym.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Zaakceptowano"); myServo.write (openGate); opóźnienie (5000); myServo.write (closeGate); } else Serial.println ("Odrzucono"); }
Możesz sprawdzić pełny kod poniżej za pomocą wideo demonstracyjnego.