Hindi pangkaraniwang lock ng kumbinasyon sa Arduino

Ang Arduino ay ang pinakamahusay na sistema para sa pagkopya ng anumang kagamitan. Karamihan sa mga ideya ay hindi magiging posible kung wala siya. Sa loob ng mahabang panahon nagkaroon ng gayong ideya: upang lumikha ng isang espesyal na lock ng kumbinasyon para sa arduino. Upang buksan ito, kailangan mong hawakan ang isang tiyak na susi. Sa kasong ito, ang lock ay hindi dapat buksan, kahit na alam mo ang tamang pindutan. Upang mabuksan ito, kinakailangan upang mapaglabanan ang ilang mga agwat gamit ang memorya ng kalamnan. Ang nasabing kriminal ay hindi magagawang gumawa. Ngunit ito ay teorya lamang.

Upang tipunin ito kailangan mong gumamit ng isang espesyal na aparato ng mga hugis-parihaba na pulses, pati na rin ang ilang mga counter at isang magbunton. Ngunit ang natapos na aparato ay magkakaroon ng malalaking pangkalahatang sukat at magiging mahirap magamit. Bilang isang patakaran, ang gayong mga saloobin ay pinagmumultuhan. Ang unang hakbang sa pagsasakatuparan ng isang panaginip ay ang paglikha ng isang programa para sa Arduino. Ito ay magsisilbing isang lock ng kumbinasyon. Upang mabuksan ito, kakailanganin mong pindutin ang hindi isang susi, ngunit marami, at gawin ito nang sabay-sabay. Ang natapos na pamamaraan ay ganito:

Lock lock

Ang kalidad ng larawan ay hindi ang pinakamahusay, ngunit ang koneksyon ay ginawa sa lupa, D3, D5, D7, D9 at D11.

Ang code ay ipinakita sa ibaba:

const int ina = 3;







const int inb = 5;







const int inc = 9;







const int ledPin = 13;







int i = 1000;







byte a = 0;







byte b = 0;







byte c = 0;







byte d = 0;







hindi naka-lock na mahabang oras = 0; // huwag kalimutan ang lahat ng nangangailangan ng isang millis () na halaga







unsigned long temp = 0; // store sa hindi naka -ignign na mahaba







byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // mga code talaga







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







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







byte k = 0;







 







walang pag-setup () {







pinMode (ina, INPUT_PULLUP); // 3 input na konektado sa mga pindutan







pinMode (inb, INPUT_PULLUP);







pinMode (inc, INPUT_PULLUP);







pinMode (ledPin, OUTPUT); // built-in na LED sa ika-13 na pin







pinMode (7, OUTPUT);







pinMode (11, OUTPUT);







digitalWrite (7, LOW); // palitan ang mundo







digitalWrite (11, LOW);







oras = millis (); // kinakailangan upang mabilang oras







}







 







walang bisa blinktwice () {// double flashing LED







digitalWrite (ledPin, HIGH);







pagkaantala (100);







digitalWrite (ledPin, LOW);







pagkaantala (100);







digitalWrite (ledPin, HIGH);







pagkaantala (100);







digitalWrite (ledPin, LOW);







pagkaantala (200);







}







 







walang bisa na loop () {







kung (k == 0) {







blinktwice (); // prompt para sa code







}







kung (k == 8) {







digitalWrite (ledPin, HIGH);







pagkaantala (3000);







k ay 0;







}







isang = digitalRead (ina); // basahin ang mga antas ng signal mula sa mga pindutan - pinindot / hindi pinindot







b = digitalRead (inb);







c = digitalRead (inc);







pagkaantala (100); // susunod kung - proteksyon laban sa mga maling positibo, hindi mo magagamit







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







kung (isang == keya [k]) {







kung (b == keyb [k]) {







kung (c == keyc [k]) {







 







k ++;







}







}







}







}







kung (k == 1) {







kung (d == 0) {







oras = millis ();







d ++;







}







}







temp = millis ();







temp = temp - oras;







kung (temp> 10000) {







k ay 0;







d ay 0;







oras = millis ();







}







}




Upang maiwasan ang mga hindi kinakailangang mga katanungan tungkol sa code, ang ilang mga puntos ay dapat na linawin. Ang pag-setup ng function ay ginagamit upang magtalaga ng mga port. Ang susunod na pag-andar ay Input_Pullup, na kinakailangan upang madagdagan ang boltahe ng pin sa pamamagitan ng 5 V. Ginagawa ito gamit ang isang risistor. Dahil dito, hindi magaganap ang iba't ibang mga maikling circuit. Para sa kaginhawaan, inirerekumenda na gamitin ang function ng blinktwice. Sa pangkalahatan, kapag lumilikha ng iba't ibang mga programa, kailangan mong subukan ang iba pang mga pag-andar.

Matapos magtalaga ng mga pag-andar, ang signal ay binabasa mula sa mga port. Kung ang pindutan ay pinindot, pagkatapos ito ay ipahiwatig ng numero 1, at kung hindi - 2. Susunod, ang lahat ng mga halaga ay nasuri. Halimbawa, mayroong tulad ng isang pagsasama bilang 0,1,1. Nangangahulugan ito na ang unang susi ay pinindot at ang iba pang dalawa ay hindi. Kung ang lahat ng mga halaga ay totoo, kung gayon ang kondisyon 8 ay totoo rin. Ito ay napatunayan ng isang litaw na LED sa front panel. Susunod, kailangan mong magpasok ng isang tukoy na code na magsisilbi upang buksan ang pinto.

Ang mga huling elemento ng code ay ginagamit upang i-reset ang mga halaga ng counter. Ang ganitong pag-andar ay isinasagawa kung higit sa 10 segundo ang lumipas mula noong huling keystroke.Kung wala ang code na ito, maaari mong dumaan ang lahat ng mga posibleng pagpipilian, kahit na maraming mga ito. Matapos lumikha ng aparatong ito, kailangan mong subukan ito.

 

(3 boto)
Naglo-load ...

Magdagdag ng komento