Zamek szyfrowy z klawiaturą 4×4

Zamek szyfrowy z klawiaturą 4×4

Witam.
Na wstępie chciałbym się ze wszystkimi przywitać, bo jestem tu nowym użytkownikiem. Nie posiadam talentu do pisania artykułów także z góry przepraszam jeśli czegoś nie zrozumiecie, pytajcie w komentarzach.
W mojej głowie zrodził się pomysł na wykonanie panelu sterowania otwieraniem uliczki, oraz otwieraniem/zamykaniem/zatrzymaniem bramy wjazdowej.
obsługa tych czynności powinna być chroniona hasłem, w moim przypadku jest to 5 prawie dowolnych znaków z 16 (pomijając *, spełnia ona inne istotne zadanie, ale o tym później).

Tak więc do wykonania swojego projektu zaprzągłem:
-klonu Arduino Mini Pro 5v 16Mhz,
-klawiaturę 4×4,
-dwa moduły przekaźnika,
-buzzer,
-1 diodę (moja jest akurat czerwona),
-1 rezystor 560Ohm (taki akurat miałem pod ręką) podłączony w szeregu z diodą.

Tak wygląda układ po zmontowaniu

Zamek_szyfrowy_bb

Pin P1 jest pinem wspólnym do sterowania bramy, po zwarciu któregoś z pinów od 2 do 4 następuje reakcja.
Dla P2 jest to otwieranie, P3 zamykanie, P4 zatrzymanie ruchu bramy
Piny te są podłączone do odpowiednich wyprowadzeń które posiada mój napęd do bramy.

Natomiast na pin P6 podane jest 12V+, które po załączeniu przekaźnika jest przekazywane na pin P5 i następuje otwarcie elektrycznego rygla furtki.

Buzzer sygnalizuje naciśnięcie przycisku oraz poprawność lub nie wpisanego szyfru, natomiast dioda zapala się po wpisaniu poprawnego szyfru i sygnalizuje dostęp do sterowania ww. urządzeniami, które odbywa się poprzez przyciśnięcie któregoś z przycisków, ja wykorzystałem A-otwarcie furtki, B-otwarcie bramy, C-zamknięcie bramy, D-zatrzymanie bramy.
Kod programu nie jest w pełni mojego autorstwa, oczywiście autor zezwolił na jego modyfikacje i publikację. Nieco go przerobiłem, i dodałem troszkę smaczków.
Program po uruchomieniu sprawdza czy w pamięci eeprom zapisany jest szyfr, jeśli go nie ma wywołuje funkcję która po wpisaniu szyfru zapisuje go w pamięci, dzięki czemu jest on nieulotny. Jeśli kod jest zapisany w pamięci to program przechodzi do funkcji która sczytuje wpisywany ciąg znaków, jeśli jest on identyczny jak ten w pamięci to zostaje wywołana funkcja umożliwiająca nam sterowanie pracą urządzeń, zapala się dioda podłączona do pinu nr 13, na czas około 30sekund, po tym czasie od nowa należy wprowadzić szyfr, a dioda oczywiście gaśnie. Jeśli wpisany kod jest kodem specjalnym (służącym do zmiany szyfru), funkcja wymazuje aktualny szyfr i wymaga wprowadzenia nowego szyfru.

Teraz czas na moje lekkie usprawnienia

  1. Na wprowadzenie szyfru składającego się z 5 znaków mamy około 15 sekund, od momentu wciśnięcia pierwszego klawisza. Po tym czasie, aktualnie wprowadzany szyfr zostanie wymazany, co zasygnalizuje dioda oraz buzzer, i należy go wprowadzić od nowa.
Przydatne gdyby ktoś przez przypadek lub celowo prędzej wcisnął np. jeden znak, po wprowadzeniu 4 z pięciu znaków szyfru program wyrzucił by po prostu że szyfr jest błędny. (chyba zrozumiecie o co mi chodzi) ;).

2.Jeśli się pomylimy podczas wprowadzania szyfru możemy wcisnąć magiczną gwiazdkę (tak to właśnie jej istotne zadanie), która wymazuje aktualnie wprowadzany szyfr i możemy go wprowadzić od nowa.
Te opcję dodałem po tym jak zamontowałem już całość w miejscu docelowym, z uwagi na to że użytkownicy inni niż ja mogli by mieć problem ze sterowaniem furtką, czy bramą.

Program bd, zapewne dalej przeze mnie modyfikowany i usprawniany, w przyszłości mam zamiar dołączyć automatyczne zapalanie lampek oświetlających drogę od furtki do domu po otwarciu furtki, jak i zapalanie oświetlenia we wjeździe po otwarciu bramy. Pewnie coś jeszcze wpadnie mi do głowy.

Teraz pora na kod, z programowaniem nie miałem żadnego problemu, składnia arduino bardzo mi odpowiada, po bojach z Bascomem i C dla AVR. Ten język który wydaje się być identyczny jak C++, jest tym czego szukałem.

dodaję fotki ;)

Tak wygląda panel, trochę brudny.
20151124_121216

A elektronika trafiła do takiej oto puszki zewnętrznej.
20151124_121229

Przy najbliższych pracach modernizacyjnych planuję pochować przewody, a panel zostanie wymieniony na inną obudowę.

Pozdrawiam :)

Ocena: 4.67/5 (głosów: 33)

Podobne posty

25 komentarzy do “Zamek szyfrowy z klawiaturą 4×4

    • No to Andrzyju odpowie Ci Jyndrek z Podhala i pomimo tego, że sam mówię gwarą to jednak wiem takie rzeczy jak to, że pisze/mówi się sczytać. Jeśli zaś nie jesteś pewny a tym bardziej jeśli chcesz kogoś poprawiać to lepiej to wcześniej sprawdzić. Tak więc s piszemy przed spółgłoskami bezdźwięcznymi: p, f, t, k, c, cz, ch tak jak np. sczerstwieć, sczesać, sczernieć.

      Odpowiedz
  • “Przydatne gdyby ktoś przez przypadek lub celowo prędzej wcisnął np. jeden znak, po wprowadzeniu 4 z pięciu znaków szyfru program wyrzucił by po prostu że szyfr jest błędny. (chyba zrozumiecie o co mi chodzi)”
    Staram się, ale nie potrafię zrozumieć o co chodzi.

    A tzw. “język Arduino” to po prostu zwykły C++ z automatycznie dołączanymi bibliotekami autorstwa Arduino.

    Jeszcze się przyczepię błędów językowych (bo jestem wrednym człowiekiem). A resztę to już można chyba tylko pochwalić ;-)

    Odpowiedz
  • Dlaczego nie używasz pętli oraz funkcji? np to->

    digitalWrite(13,LOW);
    delay(400);
    digitalWrite(13,HIGH);
    delay(400);
    digitalWrite(13,LOW);
    delay(400);
    digitalWrite(13,HIGH);
    delay(400);
    digitalWrite(13,LOW);

    można było śmiało zapisać w pętli…

    a to ->
    digitalWrite(A0,LOW);delay(3000);digitalWrite(A0,HIGH);

    Jako że używasz tego w kilku miejscach można było zmienić w funkcję. Przy większych projektach oszczędność pamięci zwiększy oraz podniesie czytelność kodu.

    if A,B,C itd powinno być switch, ale if też może być, chodź switch albo else if było by szybsze;)

    const float <- tam na pewno trzeba float? jest tam konieczna liczba zmiennoprzecinkowa? Jeżeli nie to float jest piekielnie wolne, zmien na int albo unsigned int, na AVR (arduino) float jest kilka tysięcy razy wolniejszy od int'a oraz pożera kilka kb flasch'a.

    A co do EEPROM to można odczytywać w nieskończoność, ograniczona jest tylko ilość zapisów, jedyne ograniczenie z odczytem to szybkość – SRAM jest o wiele szybszy od EEPROM.

    Odpowiedz
    • Podczas pisania kodu robiłem wszystko w taki sposób, jaki przyszło mi do głowy, a później gdy już działało to nie analizowalem kodu. Z pewnością zostanie to zmiene przy nastepnej modernizacji, a ta już wkrótce ;)

      Odpowiedz
  • Dzięki! Po prostu idealnie w czas – dzisiaj przyszły do mnie takie klawiaturki(tylko bez linii ABCD), zastanawiam się, jak są podłączone te piny i jak je odczytać, a tu na majsterkowie jak na tacy podane :D

    Odpowiedz
  • Schemat pochodzi z Fritzingu. Fot nie ma z uwagi na to że montaż odbył się w godzinach późno po południowych i w takich też wracam do domu, w związku z czym zdjęcia byłyby kiepskiej jakości. Postaram się je zrobić w weekend.

    @edit 13:35 dodałem fotki

    Odpowiedz
  • Super sprawa, na tym panelu do wprowadzania danych jest tyle miejsca, że fajnie byłoby jeszcze dołożyć możliwość autoryzacji za pomocą RFID.
    Opcja z zapalaniem ścieżki po otwarciu furtki też spoko – szczególnie, że nie jest tak skomplikowane jak to co Już zrobiłeś.

    Odpowiedz
  • Patrząc na kod, widzę że kod jest forumowego belfra w głównej mierze. Zapomniałeś dodać że to nie ty jesteś autorem. Jesteś autorem tylko dodatków do kodu zamka.

    Odpowiedz
    • “Kod programu nie jest w pełni mojego autorstwa, oczywiście autor zezwolił na jego modyfikacje i publikację. Nieco go przerobiłem, i dodałem troszkę smaczków.”
      Czytanie nie boli, ale aby zrozumieć co się czyta to niektórzy muszą się troszkę wysilić ;)

      Odpowiedz

Odpowiedz

anuluj

Masz uwagi?