Bloqueio de combinação incomum no Arduino

O Arduino é o melhor sistema para copiar qualquer equipamento. A maioria das idéias não teria sido possível sem ela. Por um longo tempo, houve uma idéia: criar um bloqueio de combinação especial para o arduino. Para abri-lo, você precisa pressionar uma certa tecla. Nesse caso, a trava não deve abrir, mesmo se você souber o botão certo. Para abri-lo, é necessário suportar determinados intervalos usando a memória muscular. Um criminoso assim não será capaz de cometer. Mas isso é apenas uma teoria.

Para montá-lo, você precisa usar um dispositivo especial de pulsos retangulares, além de vários contadores e um monte. Mas o dispositivo acabado teria grandes dimensões gerais e seria inconveniente de usar. Como regra, esses pensamentos assombram. O primeiro passo na realização de um sonho foi a criação de um programa para o Arduino. Servirá como uma fechadura de combinação. Para abri-lo, você precisará pressionar não uma tecla, mas várias, e fazê-lo simultaneamente. O esquema final é assim:

Fechadura de combinação

A qualidade da imagem não é a melhor, mas a conexão é feita no solo, D3, D5, D7, D9 e D11.

O código é apresentado abaixo:

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;







muito tempo sem sinal = 0; // não esqueça tudo o que leva um valor millis ()







temperatura longa não assinada = 0; // armazenar por muito tempo não assinado







byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // códigos realmente







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







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







byte k = 0;







 







configuração nula () {







pinMode (ina, INPUT_PULLUP); // 3 entradas conectadas aos botões







pinMode (inb, INPUT_PULLUP);







pinMode (inc, INPUT_PULLUP);







pinMode (ledPin, OUTPUT); // LED embutido no 13º pino







pinMode (7, SAÍDA);







pinMode (11, SAÍDA);







digitalWrite (7, BAIXO); // substitua a terra







digitalWrite (11, BAIXO);







tempo = milis (); // necessário para contar o tempo







}







 







void blinktwice () {// LED piscando duas vezes







digitalWrite (ledPin, HIGH);







atraso (100);







digitalWrite (ledPin, LOW);







atraso (100);







digitalWrite (ledPin, HIGH);







atraso (100);







digitalWrite (ledPin, LOW);







atraso (200);







}







 







loop vazio () {







se (k == 0) {







blinktwice (); // solicitação de código







}







se (k == 8) {







digitalWrite (ledPin, HIGH);







atraso (3000);







k é 0;







}







a = leitura digital (ina); // lê os níveis de sinal dos botões - pressionado / não pressionado







b = leitura digital (inb);







c = leitura digital (inc);







atraso (100); // next if - proteção contra falsos positivos, você não pode usar







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







if (a == keya [k]) {







if (b == chaveb [k]) {







if (c == keyc [k]) {







 







k ++;







}







}







}







}







se (k == 1) {







if (d == 0) {







tempo = milis ();







d ++;







}







}







temp = milis ();







temp = temp - tempo;







if (temp> 10000) {







k é 0;







d é 0;







tempo = milis ();







}







}




Para evitar perguntas desnecessárias sobre o código, alguns pontos devem ser esclarecidos. A função de configuração é usada para atribuir portas. A próxima função é Input_Pullup, necessária para aumentar a tensão do pino em 5 V. Isso é feito usando um resistor. Devido a isso, vários curtos-circuitos não ocorrerão. Para maior comodidade, é recomendável usar a função blinktwice. Em geral, ao criar vários programas, você precisa tentar outras funções.

Depois que as funções são atribuídas, o sinal é lido pelas portas. Se o botão for pressionado, será indicado pelo número 1 e, se não for - 2. Em seguida, uma análise de todos os valores. Por exemplo, houve uma combinação de 0,1,1. Isso significa que a primeira tecla é pressionada e as outras duas não. Se todos os valores forem verdadeiros, a condição 8 também será verdadeira. Isso é evidenciado por um LED aceso no painel frontal. Em seguida, você precisa inserir um código específico que servirá para abrir a porta.

Os últimos elementos de código são usados ​​para redefinir os valores do contador. Essa função é executada se mais de 10 segundos se passaram desde o último pressionamento de tecla.Sem esse código, você poderia passar por todas as opções possíveis, embora existam muitas. Depois de criar este dispositivo, você precisa testá-lo.

 

(3 votos)
Carregando...

Adicione um comentário