- Componentes:
- Explicação do circuito:
- Feeding Knocking Pattern no Arduino:
- Explicação de trabalho:
- Explicação de programação:
A segurança é uma grande preocupação em nossa vida cotidiana, e as travas digitais se tornaram uma parte importante desses sistemas de segurança. Existem muitos tipos de sistemas de segurança disponíveis para proteger nosso lugar. Alguns exemplos são sistema de segurança baseado em PIR, sistema de segurança baseado em RFID, sistema de bloqueio digital, sistemas de biomatriz, bloqueio de código eletrônico. Neste post, vamos construir uma fechadura secreta para detecção de batidas usando o Arduino, que pode detectar o padrão de suas batidas na porta e só abrirá a fechadura se o padrão de batida corresponder ao padrão correto. Para a demonstração de funcionamento adequada, verifique o Vídeo no final.
Componentes:
- Arduino Uno
- Botão de apertar
- Buzzer
- Resistor 1M
- Poder
- Fios de conexão
- Caixa
- Servo motor
Explicação do circuito:
O diagrama de circuito deste Detector de Padrão de Batida é muito simples e contém Arduino para controlar todo o processo do projeto, botão, campainha e servo motor. O Arduino controla os processos completos, como pegar a senha do Buzzer ou Sensor, comparar padrões, dirigir o Servo para abrir e fechar o portão e salvar o padrão no Arduino.
O botão de pressão está diretamente conectado ao pino D7 do Arduino em relação ao aterramento. E um buzzer é conectado no pino analógico A0 do Arduino em relação ao aterramento e com uma resistência de 1M entre A0 e o aterramento também. Um servo motor também é conectado ao pino PWM D3 do Arduino.
Feeding Knocking Pattern no Arduino:
Neste circuito, usamos Buzzer ou Peizo Sensor para obter o padrão de entrada de detonação no sistema. Aqui, estamos usando um botão de pressão para permitir a entrada do sensor e também salvá-la no Arduino. Este sistema é projetado tendo a ideia do padrão de código Morse, mas não exatamente semelhante a este.
Aqui, usamos uma caixa de papelão para demonstração. Para receber a entrada, derrubamos a placa após pressionar o botão. Aqui batemos, mantendo em mente um período de tempo de 500 ms. Esses 500ms são porque nós o corrigimos no código e o padrão de entrada depende disso. Este período de 500ms definirá que a entrada foi 1 ou 0. Verifique o código abaixo para entender isso.
Quando batemos nele, o Arduino começa a monitorar o tempo da primeira batida até a segunda batida e coloca isso em um array. Aqui neste sistema, estamos levando 6 pancadas. Isso significa que teremos 5 períodos de tempo.
Agora verificamos o período de tempo um por um. Em primeiro lugar, verificamos o período de tempo entre a primeira e a segunda batida se a diferença de tempo entre estes menos os 500ms então será 0 e se for maior que 500ms será 1 e será salvo em uma variável. Agora, depois disso, verificamos o período de tempo entre a segunda e a terceira batida e assim por diante.
Finalmente, obteremos uma saída de 5 dígitos no formato 0 e 1 (binário).
Explicação de trabalho:
Trabalhar com o projeto Smart Lock baseado em Knock é simples. Primeiro, temos que salvar um padrão no sistema. Portanto, temos que apertar e segurar o botão até bater 6 vezes. Aqui neste projeto, usei 6 batidas, mas o usuário pode alterar como quiser. Após seis batidas, o Arduino encontra o padrão de batidas e salva-o na EEPROM. Agora, depois de salvar o padrão de entrada, pressione e solte imediatamente o botão para levar a entrada do sensor para o Arduino para abrir a fechadura. Agora temos que bater 6 vezes. Depois disso, o Arduino o decodifica e compara com o padrão salvo. Se ocorrer uma correspondência, o Arduino abre o portão acionando o servo motor.
Nota: quando pressionamos ou pressionamos e seguramos o botão Arduino inicia um cronômetro de 10 segundos para receber todas as 6 batidas. Significa que o usuário precisa bater dentro desse tempo de 10 segundos. E o usuário pode abrir o monitor serial para ver o log.
Explicação de programação:
Em um programa, em primeiro lugar, incluímos o arquivo de cabeçalho e definimos o pino de entrada e saída e definimos a macro e as variáveis declaradas, como você pode ver na seção Código completo na seção de código abaixo.
Depois disso, na função de configuração , damos direção ao pino definido e iniciamos o servo motor.
void setup () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
Depois disso, pegamos a entrada e salvamos o padrão de entrada ou o tempo de batida em um array.
loop vazio () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("Iniciar"); atraso (1000); stt longo = milis (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); if (temp> sensibilidade && flag == 0 && i <= patternLenth) {…………..
Depois disso, decodificamos o padrão de entrada
para (int i = 0; i
E então salve se o botão ainda estiver pressionado
if (digitalRead (sw) == 0) {for (int i = 0; i
E se o botão ainda não estiver pressionado, o Arduino comparará o padrão decodificado de entrada com o padrão salvo.
else {if (knok == 1) {for (int i = 0; i
Se houver correspondência de alguma senha, o Servo abre o portão, caso contrário nada aconteceu, mas o usuário pode ver o resultado no monitor serial.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Aceito"); myServo.write (openGate); atraso (5000); myServo.write (closeGate); } else Serial.println ("Rejeitado"); }
Você pode verificar o código completo abaixo com um vídeo de demonstração.