Varnost je glavna skrb v našem vsakdanjem življenju in digitalne ključavnice so postale pomemben del teh varnostnih sistemov. Za zaščito našega kraja je na voljo veliko vrst varnostnih sistemov. Nekateri primeri so varnostni sistem, ki temelji na PIR, varnostni sistem, ki temelji na RFID, sistem digitalnih ključavnic, sistemi z bio matriko, elektronska koda. V tem prispevku z Arduino zgradimo Skrivno ključavnico, ki zazna vrata, ki lahko zazna vzorec udarcev pred vrati in ključavnico odpre le, če se vzorec trkanja ujema s pravilnim vzorcem. Za pravilno delujočo predstavitev si oglejte video na koncu.
Sestavni deli:
- Arduino Uno
- Pritisni gumb
- Zvočni signal
- 1M upor
- Moč
- Priključne žice
- Škatla
- Servo motor
Pojasnilo vezja:
Shema vezja tega detektorja udarcev je zelo preprosta in vsebuje Arduino za nadzor celotnega procesa projekta, gumba, brenčača in servo motorja. Arduino nadzoruje celotne procese, kot je zajemanje gesla iz zvočnega signala ali senzorja, primerjanje vzorcev, pogon Servo za odpiranje in zapiranje vrat ter shranjevanje vzorca v Arduino.
Gumb je neposredno povezan z zatičem D7 Arduina glede na tla. In na analogni zatič A0 Arduina je priključen brenčač glede na zemljo in z 1M uporom med A0 in tlemi. Servomotor je tudi povezan s PWM pin D3 Arduino.
Vzorec trkanja v Arduino:
V tem vezju smo uporabili zvočni signal ali senzor Peizo za zajem vzorca vstopa v sistemu. Tu uporabljamo gumb s tipko, ki omogoča, da s senzorja vzamemo vhod in ga shranimo tudi v Arduino. Ta sistem je zasnovan tako, da vzame idejo iz vzorca Morsejeve abecede, vendar ni povsem podoben temu.
Tu smo za predstavitev uporabili kartonsko škatlo. Za sprejem vnosa po pritisku na tipko potrkamo ploščo. Tu smo trkali, če upoštevamo časovno obdobje, ki je 500ms. Ta 500 ms je zato, ker smo ga popravili v kodo, vnosni vzorec pa je odvisen od njega. To 500ms časovno obdobje bo opredelilo, ali je bil vnos 1 ali 0. Preverite spodnjo kodo, da to razumete.
Ko ga potrkamo, Arduino začne spremljati čas prvega udarca do drugega trkanja in ga postavi v niz. Tukaj v tem sistemu izvajamo 6 udarcev. To pomeni, da bomo dobili 5 časovnih obdobij.
Zdaj preverimo časovno obdobje enega za drugim. Najprej preverimo časovno obdobje med prvim in drugim trkom, če je časovna razlika med temi manj kot 500 ms enaka 0, če je večja od 500 ms pa 1 in bo shranjena v spremenljivko. Zdaj po njem preverimo časovno obdobje med drugim in tretjim trkom itd.
Končno bomo dobili 5-mestni izhod v obliki 0 in 1 (binarni).
Delovna razlaga:
Delo s projektom Smart Lock, ki temelji na Knocku, je preprosto. Najprej moramo shraniti vzorec v sistem. Torej moramo pritisniti in držati gumb, dokler ne potrkamo 6-krat. V tem projektu sem uporabil 6 udarcev, vendar jih lahko uporabnik spremeni, kot želi. Po šestkratnem trku Arduino najde vzorec trkanja in ga shrani v EEPROM. Potem, ko ste shranili vnosni vzorec, pritisnite in takoj spustite tipko za prevzem vhoda s senzorja v Arduino, da odprete ključavnico. Zdaj moramo potrkati 6-krat. Po njem ga Arduino dekodira in primerja s shranjenim vzorcem. Če pride do ujemanja, potem Arduino odpre vrata s pogonom na servo motor.
Opomba: ko pritisnemo ali pritisnemo in držimo tipko Arduino, zaženimo 10-sekundni časovnik, da prevzamemo vseh 6 udarcev. Pomeni, da mora uporabnik potrkati v teh 10 sekundah. In uporabnik lahko odpre serijski monitor, da si ogleda dnevnik.
Pojasnilo programiranja:
V program najprej vključimo glavo in določimo vhodni in izhodni pin ter definiramo makro in deklarirane spremenljivke, kot lahko vidite v celotni kodi v spodnjem odseku kode.
Po tem v nastavitveni funkciji damo smer določenemu zatiču in zaženemo servo motor.
void setup () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
Po njem vzamemo vnos in shranimo vnosni vzorec ali čas trkanja v matriko.
void loop () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("Start"); zamuda (1000); dolga stt = milis (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); če (temp> občutljivost && flag == 0 && i <= patternLenth) {…………..
Po njem dešifriramo vnosni vzorec
za (int i = 0; i
Nato shranite, če je gumb še vedno pritisnjen
if (digitalRead (sw) == 0) {for (int i = 0; i
Če gumba še vedno ne pritisnete, bo Arduino primerjal dekodirani vzorec s shranjenim vzorcem.
sicer {if (knok == 1) {for (int i = 0; i
Če se katero geslo ujema, potem Servo odprite vrata, sicer se ni zgodilo nič, vendar lahko uporabnik vidi rezultat preko serijskega monitorja.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Sprejeto"); myServo.write (openGate); zamuda (5000); myServo.write (closeGate); } else Serial.println ("Zavrnjeno"); }
Spodnjo celotno kodo lahko preverite z predstavitvenim videom.