18-2 Grupo 1

Murilo Barbosa dos Santos RA 0040961713053

Ronie Fernando de Oliveira RA 0040961813042

### **Resumo**

Projeto de um protótipo de trava de segurança automatizado usando Arduino com motor servo e teclado de membrana.

### **Software / Materiais utilizados**

* Arduino IDE
* Arduino Genuino UNO
* Protoboard
* LEDs azul e vermelho
* Cabos jumper (conectores)
* Sensor Piezo-Elétrico
* Micro Servo 9g SG90 TowerPro
* Teclado numérico de membrana 3x4 (Keypad)
* Cabo USB 2.0

**Metodologia**

Foi utilizado o micro controlador Arduino UNO para fazer a comunicação entre um motor servo e um teclado de membrana utilizando um programa específico, com LEDs e sons sinalizando os comandos executados. O usuário faz o input de uma senha pré-estabelecida no teclado para o motor servo girar 90 graus em sentido anti-horário. O Arduino é alimentado através de uma porta USB de 5V1A. A conexão também é feita utilizando um cabo USB.

**Desenvolvimento**

No nosso projeto usamos apenas os componentes disponibilizados pelo professor Perroti, portanto a construção do mesmo foi relativamente simples, montamos os componentes que seriam usados como mostrado na figura abaixo: fizemos uma pequeno esquema de fechadura aberta e fechadura fechada.

depois baixamos a biblioteca Keypad e a biblioteca Password na IDE do arduino para que o teclado de membrana funcionasse corretamente.

Após carregar o código na placa, o servo motor vai se posicionar em 0º e isto representa fechadura trancada. O LED vermelho se manterá aceso enquanto o servo motor estiver em 0º. Após pressionar a sequência no teclado matricia l e a mesma ser validada pelo Arduino ou sea corresponder ao laço condicional true("1345"), o servo irá se mover para 90º, o que representa a fechadura destrancada. O LED vermelho irá apagar e o LED Azul irá se manter aceso e ira produzir um efeito sonoro enquanto o servo estiver em 90º, se a senha for incorreta o led vermelho ira acender e o piezo eletrico produzira um efeito sonoro com uma frequencia e ritmo diferente

Se o servo estiver na posição “Abrir porta”, ao pressionar “ \* ” ou “ # ” o servo irá retornar para a posição “Fechar porta”, o LED verde irá apagar e o LED vermelho vai acender. Caso a senha digitada seja diferente da senha correta, o servo irá manter a sua posição atual.

**#include <Password.h> // BIBIOTLECA PARA UTILIZAÇÃO DE SENHA**

> **#include <Keypad.h> // BIBLIOTECA PARA UTILIZAÇÃO DE TECLADO**
>
>

> **#include <Servo.h> // BIBLIOTECA PARA UTILIZAÇÃO DE SERVO MOTOR**
>
>

> **Servo motorServo; //OBJETO DO TIPO SERVO**
>
>

> **Password senha = Password( "3355" ); //OBJETO DO TIPO PASSWORD, SET DE SENHA**
>
>

> **int piezoPin = 9; // PINO QUE ESTA CONECTADO O PIEZOELETRICO**
>
>

> **const byte LINS = 4; //NUMERO DE LINHAS DO TECLADO**
>
>

> **const byte COLS = 3; //NUMERO DE COLUNAS DO TECLADO**
>
>

> **char teclado[LINS][COLS] = { //RECONHECIMENTO DE NUMEROS E CARECTERES DO TECLADO**
>
>

> **{'1','2','3'},**
>
>

> **{'4','5','6'},**
>
>

> **{'7','8','9'},**
>
>

> **{'\*','0','#'}**
>
>

> **};**
>
>

> **byte linPins[LINS] = { 8, 7, 6, 5 }; // PINOS DE CONEXAO DAS LINHAS DO TECLADO**
>
>

> **byte colPins[COLS] = { 4, 3, 2 }; //PINOS DE CONEXAO DAS COLUNAS DO TECLADO**
>
>

> **Keypad keypad = Keypad( makeKeymap(teclado), linPins, colPins, LINS, COLS );//AS VARIAVEIS linPins E colPins RECEBERÃO O VALOR DE LEITURA DOS PINOS DAS LINHAS E COLUNAS RESPECTIVAMENTE**
>
>

>
> const int ledVermelho = 12; //PINO EM QUE ESTÁ CONECTADO O LED VERMELHO
>
>

> const int ledAzul = 13; //PINO EM QUE ESTÁ CONECTADO O LED AZUL
>
>

> void setup(){
>
>

> Serial.begin(9600);
>
>

> pinMode(ledVermelho, OUTPUT);
>
>

> pinMode(ledAzul, OUTPUT);
>
>

> keypad.addEventListener(keypadEvent); //ADICIONA UM EVENTO DE KEYPAD
>
>

>
>
>
>
>

> motorServo.attach(11); //PINO DE CONTROLE DO SERVO MOTOR
>
>

> setFechadura(true); //ESTADO INICIAL DA FECHADURA (TRANCADA)
>
>

> }
>
>

>
>
>
>
>

> void loop(){
>
>

> keypad.getKey();//REALIZA LEITURA DAS TECLAS PRESSIONADAS
>
>

> }
>
>

> void keypadEvent(KeypadEvent eKey){   // INICIA EVENTO QUANDO UMA TECLA É PRESSIONADA
>
>

> switch (keypad.getState()){
>
>

> case PRESSED:  // VERIFICA CONDICAO DA TECLA PRESSIONADA
>
>

> Serial.print("Digite: ");
>
>

> Serial.println(eKey);
>
>

> switch (eKey){
>
>

> case '\*':   // \* ENVIA AS TECLAS DIGITADAS ANTERIORMENTE PARA VALIDAÇÃO
>
>

> checkSenha();
>
>

> break;
>
>

> case '#': // # LIMPA SENHA DIGITA E TRANCA A FECHADURA
>
>

> senha.reset();
>
>

> setFechadura(true);
>
>

> break;
>
>

> default:
>
>

> senha.append(eKey);
>
>

> }
>
>

> }
>
>

> }
>
>

> void checkSenha(){  //VERIFICA INFORMACAO DIGITADA COM SENHA JA GRAVADA
>
>

> if (senha.evaluate()){
>
>

> Serial.println("Sucesso");
>
>

> delay(100);
>
>

> setup();
>
>

> setFechadura(false);
>
>

> delay(100);
>
>

> }
>
>

> else{  //  SE SENHA FOR ERRADA APRESENTA SINAL SONORO E RESET INFORMACAO DIGITADA
>
>

> setup();
>
>

> Serial.println("Error!");
>
>

> setFechadura(true);
>
>

> delay(100);
>
>

> tone(piezoPin, 4000, 300);
>
>

> delay(350);
>
>

> tone(piezoPin, 4000, 300);
>
>

> delay(350);
>
>

> tone(piezoPin, 4000, 300);
>
>

> senha.reset();
>
>

> }
>
>

> }
>
>

> void setFechadura(int locked){ //TRATANDO O ESTADO DA FECHADURA
>
>

> if (locked){ //SE FECHADURA TRANCADA, FAZ
>
>

> digitalWrite(ledVermelho, HIGH);// LED VERMELHO ACENDE
>
>

> digitalWrite(ledAzul, LOW);// LED AZUL APAGA
>
>

> motorServo.write(10); //POSIÇÃO DO SERVO FICA EM 0º (FECHADURA TRANCADA)
>
>

> tone(piezoPin, 2000, 300);
>
>

> delay(350);
>
>

> tone(piezoPin, 2000, 300);
>
>

> delay(350);
>
>

> tone(piezoPin, 2000, 300);
>
>

> }
>
>

> else{ //SENÃO, FAZ
>
>

> digitalWrite(ledAzul, HIGH);// LED AZUL ACENDE
>
>

> digitalWrite(ledVermelho, LOW);// LED VERMELHO APAGA
>
>

> motorServo.write(90);// SERVO GIRA A 90º (FECHADURA DESTRANCADA)
>
>

> tone(piezoPin, 3000, 1000);
>
>

> delay(1050);
>
>

> tone(piezoPin, 3000, 1000);
>
>

> delay(1050);
>
>

> tone(piezoPin, 3000, 1000);
>
>

> }
>
>

> }
>
>

### **Resultados**

Com base nos objetivos determinados pelo grupo, os resultados obtidos foram satisfatórios, com um protótipo funcional de uma trava automatizada a ser usada com uma barreira de segurança adequada para a maioria dos casos.

Uma melhoria a ser destacada seria a substituição do motor servo por uma fechadura solenoide para melhor aproveitamento do projeto em portas e cofres físicos de pequeno porte.

No seguinte vídeo podemos conferir o resultado final do protótipo:

### **Conclusão**

Pode-se concluir que os objetivos propostos foram alcançados e que o protótipo oferece uma base sólida de funcionamento a ser aperfeiçoado e expandido por outros grupos futuramente. Como propostas de melhorias estão a troca do motor servo por uma trava elétrica solenoide e a adição de novos módulos que visem aumentar ainda mais a segurança, como sensores de presença e alarmes preventivos.

Em suma esse foi um projeto de grande aprendizado para todos os envolvidos, que não possuíam nenhum tipo de experiencia prévia de automação e micro controladores Arduino. Sem dúvidas todo o conhecimento a nível de hardware e software aprendidos e executados nesse projeto foi muito importante e será aproveitado nos meios acadêmicos e/ou profissionais no futuro.