Niezwykły zamek szyfrowy w Arduino

Arduino to najlepszy system do kopiowania dowolnego sprzętu. Bez niej większość pomysłów nie byłaby możliwa. Od dawna istnieje taki pomysł: stworzyć specjalny zamek szyfrowy dla arduino. Aby go otworzyć, musisz przytrzymać określony klawisz. W takim przypadku zamek nie powinien się otworzyć, nawet jeśli znasz odpowiedni przycisk. Aby go otworzyć, konieczne jest wytrzymanie określonych odstępów czasu przy użyciu pamięci mięśniowej. Taki przestępca nie będzie mógł popełnić. Ale to tylko teoria.

Aby go złożyć, musisz użyć specjalnego urządzenia prostokątnych impulsów, a także kilku liczników i stosu. Ale gotowe urządzenie miałoby duże gabaryty i byłoby niewygodne w użyciu. Z reguły takie myśli nawiedzają. Pierwszym krokiem w realizacji marzenia było stworzenie programu dla Arduino. Będzie służyć jako zamek szyfrowy. Aby go otworzyć, musisz nacisnąć nie jeden klawisz, ale kilka, i zrobić to jednocześnie. Gotowy schemat wygląda następująco:

Zamek szyfrowy

Jakość obrazu nie jest najlepsza, ale połączenie jest wykonane z ziemią, D3, D5, D7, D9 i D11.

Kod jest przedstawiony poniżej:

const int ina = 3;







const int inb = 5;







const int inc = 9;







const int ledPin = 13;







int i = 1000;







bajt a = 0;







bajt b = 0;







bajt c = 0;







bajt d = 0;







długi czas bez znaku = 0; // nie zapomnij wszystkiego, co wymaga wartości millis ()







bez znaku długa temperatura = 0; // przechowuj długo bez znaku







bajt keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kody faktycznie







bajt keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};







byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};







bajt k = 0;







 







void setup () {







pinMode (ina, INPUT_PULLUP); // 3 wejścia podłączone do przycisków







pinMode (inb, INPUT_PULLUP);







pinMode (inc, INPUT_PULLUP);







pinMode (ledPin, OUTPUT); // wbudowana dioda LED na 13 styku







pinMode (7, WYJŚCIE);







pinMode (11, WYJŚCIE);







digitalWrite (7, LOW); // zastąp ziemię







digitalWrite (11, LOW);







czas = millis (); // trzeba liczyć czas







}







 







void blinktwice () {// podwójna migająca dioda LED







digitalWrite (ledPin, HIGH);







opóźnienie (100);







digitalWrite (ledPin, LOW);







opóźnienie (100);







digitalWrite (ledPin, HIGH);







opóźnienie (100);







digitalWrite (ledPin, LOW);







opóźnienie (200);







}







 







void loop () {







jeśli (k == 0) {







blinktwice (); // monit o kod







}







jeśli (k == 8) {







digitalWrite (ledPin, HIGH);







opóźnienie (3000);







k oznacza 0;







}







a = digitalRead (ina); // odczyt poziomów sygnałów z przycisków - wciśnięty / nie wciśnięty







b = digitalRead (inb);







c = digitalRead (inc);







opóźnienie (100); // next if - ochrona przed fałszywymi alarmami, których nie można użyć







if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {







if (a == keya [k]) {







if (b == keyb [k]) {







if (c == keyc [k]) {







 







k ++;







}







}







}







}







jeśli (k == 1) {







jeśli (d == 0) {







czas = millis ();







d ++;







}







}







temp = millis ();







temp = temp - czas;







jeśli (temp> 10000) {







k oznacza 0;







d oznacza 0;







czas = millis ();







}







}




Aby uniknąć niepotrzebnych pytań dotyczących kodu, należy wyjaśnić niektóre punkty. Funkcja konfiguracji służy do przypisywania portów. Następną funkcją jest Input_Pullup, który jest niezbędny do zwiększenia napięcia pinu o 5 V. Odbywa się to za pomocą rezystora. Z tego powodu nie wystąpią różne zwarcia. Dla wygody zaleca się korzystanie z funkcji blinktwice. Ogólnie rzecz biorąc, tworząc różne programy, musisz wypróbować inne funkcje.

Po przypisaniu funkcji sygnał jest odczytywany z portów. Jeśli przycisk zostanie naciśnięty, będzie oznaczony numerem 1, a jeśli nie - 2. Następnie analiza wszystkich wartości. Na przykład istniała taka kombinacja jak 0,1,1. Oznacza to, że pierwszy klawisz jest wciśnięty, a pozostałe dwa nie. Jeśli wszystkie wartości są prawdziwe, wówczas warunek 8 również jest spełniony. Świadczą o tym zapalone diody LED na panelu przednim. Następnie musisz wprowadzić określony kod, który posłuży do otwarcia drzwi.

Ostatnie elementy kodu służą do resetowania wartości liczników. Taka funkcja jest wykonywana, jeśli od ostatniego naciśnięcia klawisza upłynęło więcej niż 10 sekund.Bez tego kodu możesz przejść przez wszystkie możliwe opcje, chociaż jest ich wiele. Po utworzeniu tego urządzenia musisz je przetestować.

 

(3 głosów)
Ładowanie ...

Dodaj komentarz