Trava Elétrica com Senha Acionada por Teclado de Membrana
Trava Elétrica com Senha Acionada por Teclado de Membrana
Os projetos com teclado e senha são bons para aprender e treinar o uso de arrays na programação do Arduino, um recurso importante para elaboração dos sketches quando se necessita trabalhar com coleções de variáveis. Uma array é uma coleção de variáveis do mesmo tipo, referenciada por um nome comum. Para acessar um elemento específico de uma array são utilizados índices. Deve-se ter em mente também que os elementos de uma array são armazenados de forma sequencial na memória.
Para o nosso projeto de uma trava elétrica com senha acionada por teclado de membrana, do ponto de vista do hardware, teremos como elementos principais um teclado de membrana 4x4, um display LCD 16x2, um módulo I2C, um modulo com 1 relé, uma trava elétrica do tipo solenoide e um microcontrolador Arduino Pro Mini. Usaremos também um protoboard, cabos jumpers e uma fonte de alimentação de 12 Volts CC / 2A. Com esses elementos desenvolveremos uma trava elétrica, liberada através de uma senha de quatro caracteres, digitada no teclado de membrana, sendo possível trocar essa senha, e com visualização da operação no display LCD 16x2. Os produtos podem ser facilmente adquirido na loja da Módulo Eletrônica em Campinas-SP ou acessando o link da loja na Internet (https://www.moduloeletronica.com.br/).
Figura 1: Trava Elétrica com Senha acionada por Teclado de Membrana1
O desenho apresentado na figura 1 mostra os detalhes da montagem do projeto da trava elétrica com senha, acionada por teclado de membrana. A seguir, faremos uma breve descrição de cada um dos elementos do projeto.
Arduino Pro Mini
Esta placa contém um microcontrolador ATmega328p, operando com tensão de entrada de 5 à 12 Vcc, com 14 portas digitais e 8 portas analógicas. Para mais detalhes sobre o Arduino Pro Mini leia o artigo Arduino ProMini: Tamanho é Documento.
Como não possui conector USB, o Pro Mini necessita de uma placa auxiliar FTDI232 para tornar possível a comunicação com o computador PC. Assim sendo, durante a etapa de desenvolvimento do projeto que, evidentemente, inclui a elaboração do sketch, o Arduino Pro Mini poderá funcionar plugado à placa FTDI232 (figura 2).
Figura 2: Arduino Pro Mini conectado ao computador PC através de uma placa FTDI232.
Nessa situação a alimentação de 5 Volts será fornecida através da placa FTDI232. Após a conclusão do projeto e do sketch correspondente, a placa FTDI232 poderá ser retirada e a alimentação fornecida através de uma fonte externa. Um detalhe importante, que vale relembrar, é que a alimentação do Arduino Pro Mini é feita através do pino Vcc somente quando se tem uma fonte regulada em + 5 Volts. Para tensões de alimentação maiores do que 5 Volts, até o máximo de 12 Volts CC, deve-se entrar com essa alimentação através do pino RAW.
Trava Elétrica Solenoide
Esta trava elétrica solenoide possui dimensões de 29 x 27 x 18 milímetros e opera com uma fonte de alimentação externa de 12 Volts, consumindo uma corrente de aproximadamente 1,3 A, quando acionada.
Figura 3: Trava Elétrica Solenoide
Teclado de Membrana 4x4
Figura 4: Teclado de Membrana 4x4
Linhas 1, 2, 3 e 4 foram conectados ao Arduino Pro Mini nos pinos digitais 9, 8, 7 e 6, respectivamente.
Colunas 5, 6, 7 e 8 foram conectados ao Arduino Pro Mini nos pinos digitais 5, 4, 3 e 2, respectivamente.
Modulo com 1 Relé
O pino de entrada, ou de sinal que aciona a bobina do módulo relé, foi conectado ao pino digital 10 do Arduino Pro Mini.
Figura 5: Módulo com 1 Relé
Os contatos NA (normalmente aberto) e COM (comum) do módulo relé foram usados para ligar e desligar a trava elétrica tipo solenoide.
Display LCD 16x2 e Módulo I2C
Os 16 pinos do display LCD 16x2 foram conectados diretamente aos pinos do barramento de comunicação serial do módulo I2C. Essa ligação pode ser feita usando um protoboard e uma barra de pinos, ou diretamente com cabos jumpers, como está ilustrado na figura 1. É possível também encontrar no mercado displays LCD e módulos I2C com os pinos do barramento já soldados. Isso, sem dúvida, simplifica a montagem dos projetos que usam esses componentes.
No presente projeto, o pino analógico 4 do Arduino Pro Mini foi conectado a linha SDA do barramento I2C do módulo e o pino analógico 5 do Arduino Pro Mini foi conectado a linha SCL do barramento I2C do módulo.
Basicamente, o barramento I2C usa uma linha de relógio serial (SCL ou Serial Clock Line) bidirecional e linhas seriais de dados (SDA ou Serial Data Lines). O módulo I2C trabalha com o conceito de mestre-escravo. O dispositivo mestre (Arduino) controla o barramento de comunicação I2C. Os dispositivos escravos podem receber ou transmitir dados para o mestre (Arduino). Cada dispositivo escravo tem seu próprio endereço de acesso.
O elemento principal do módulo I2C é o CI PCF8574, sendo importante notar os pontos A0, A1 e A2 usados para instalação de jumpers que definem o endereço do módulo. Para esse módulo I2C existem oito diferentes endereços, conforme apresentado na tabela 1, onde L indica que há jumper e H indica que não há jumper.
Tabela 1: Endereços do módulo I2C
Como não há jumpers em A0, A1 e A2, o endereço hexadecimal do módulo I2C que vamos considerar é o 0x27. Será necessário ainda utilizar a biblioteca <Wire.h>, responsável pela comunicação utilizando o protocolo I2C. Por sua vez, o controle do display LCD 16x2 será feito através da biblioteca LiquidCrystal_I2C.h, nomeada em sua nova versão com o nome Arduino-LiquidCrystal-I2C-library.
A biblioteca <Wire.h> é inclusa no IDE (instalada quando o IDE é baixado) estando, portanto, disponível para uso. Por sua vez, a biblioteca <LiquidCrystal_I2C.h> pode ser baixada acessando o seguinte link:
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/blob/master/LiquidCrystal_I2C.h
Monte cuidadosamente o seu projeto e veja o sketch que faz tudo isso funcionar!
********** ********** **********
// Teclado_DIG4_DoorLock_TrocaSenha_LCD #include <LiquidCrystal_I2C.h> #include <Wire.h> // Display LCD 16x2 no endereco 0x27 LiquidCrystal_I2C lcd(0x27, 16, 2); #include <Keypad.h> #include <EEPROM.h> char senha[4]; char senha_inicial[4],nova_senha[4]; int i=0; int rele = 10; char tecla=0; const byte linhas = 4; const byte colunas = 4; char TecladoMembrana[linhas][colunas] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; // byte row_pins[linhas] = {A0,A1,A2,A3}; // byte column_pins[colunas] = {A4,A5,3,2}; byte row_pins[linhas] = {9,8,7,6}; byte column_pins[colunas] = {5,4,3,2}; Keypad teclado = Keypad( makeKeymap(TecladoMembrana), row_pins, column_pins, linhas, colunas); void setup() { Wire.begin(); lcd.begin(); pinMode(rele, OUTPUT); lcd.print(" *- Modulo -* "); lcd.setCursor(0,1); lcd.print(" Eletronica "); delay(3000); lcd.clear(); lcd.print(" Entre a Senha"); lcd.setCursor(0,1); SENHAinicial(); } void loop() { digitalWrite(rele, HIGH); tecla = teclado.getKey(); if(tecla=='#') TrocaSenha(); if (tecla) { senha[i++]=tecla; lcd.print(tecla); } if(i==4) { delay(200); for(int j=0;j&amp;lt;4;j++) senha_inicial[j]=EEPROM.read(j); if(!(strncmp(senha, senha_inicial,4))) { lcd.clear(); lcd.print("Senha Aceita"); digitalWrite(rele, LOW); delay(2000); lcd.setCursor(0,1); lcd.print("Use # p/ mudar"); delay(2000); lcd.clear(); lcd.print("Entre a Senha"); lcd.setCursor(0,1); i=0; } else { digitalWrite(rele, HIGH); lcd.clear(); lcd.print("Senha Incorreta"); lcd.setCursor(0,1); lcd.print("Use # p/ mudar"); delay(2000); lcd.clear(); lcd.print("Entre a Senha"); lcd.setCursor(0,1); i=0; } } } void TrocaSenha() { int j=0; lcd.clear(); lcd.print("Senha Atual"); lcd.setCursor(0,1); while(j&amp;lt;4) { char key=teclado.getKey(); if(key) { nova_senha[j++]=key; lcd.print(key); } key=0; } delay(500); if((strncmp(nova_senha, senha_inicial, 4))) { lcd.clear(); lcd.print("Senha Incorreta"); lcd.setCursor(0,1); lcd.print("Tente Novamente"); delay(1000); } else { j=0; lcd.clear(); lcd.print("Nova Senha"); lcd.setCursor(0,1); while(j&amp;lt;4) { char key=teclado.getKey(); if(key) { senha_inicial[j]=key; lcd.print(key); EEPROM.write(j,key); j++; } } lcd.print(" Senha Okay "); delay(3000); } lcd.clear(); lcd.print("Entre a Senha"); lcd.setCursor(0,1); tecla=0; } void SENHAinicial() { for(int j=0;j&amp;lt;4;j++) EEPROM.write(j, j+49); for(int j=0;j&amp;lt;4;j++) senha_inicial[j]=EEPROM.read(j); }
********** ********** **********
O sketch funciona perfeitamente, mas pode ser aprimorado. Depois que compreender como o programa funciona tente melhora-lo como parte do seu aprendizado. Isso certamente vai ajudá-lo. Em caso de dúvidas, envie suas perguntas. De qualquer modo, em nosso próximo artigo será explicado o funcionamento do presente sketch. Continue nos seguindo no blog. Bem, é isso aí, até a próxima.

Haroldo Mamede Coutinho Simões
Engenheiro de telecomunicações e pós-graduado em gerenciamento de negócios, tendo trabalhado em empresas de médio e grande porte por mais de 30 anos, atuando em diferentes projetos e departamentos. É instrutor de treinamento, tendo ministrado workshops em várias empresas, professor universitário em cursos MBA presenciais e tutor de cursos à distância. É apaixonado por tecnologia, especialmente pela plataforma Arduino e tudo de positivo que ela pode fazer pelas pessoas quando dela se aproximam.
VEJA TAMBÉM
Regador automático de plantas com Arduino
Aprenda neste artigo, como automatizar a rega de suas plantas, utilizando o Arduino NANO. Este projeto, além do baixo custo, pode ser montado em menos de uma hora e irá garantir que as suas plantas sempre tenham água disponível, garantido um crescimento adequado e...
Datalogger com cartão SD. Registre: temperatura, umidade, luminosidade e tensão)
Neste post, vamos aprender a como montar datalogger, para registrar em um cartão SD, temperatura, umidade relativa, tensão e nível de luminosidade. Esse tipo de dispositivo é extremamente útil para fazer análises de fenômenos que dependem do tempo. Por exemplo,...
Fita de LEDs RGB endereçáveis WS2812B e a biblioteca fastLED
No post de hoje, vamos conhecer a fita de LEDs WS2812B endereçáveis e como utilizá-la com o Arduino UNO. Essa fita de LEDs se destaca, em relação as outras do mercado, pelo fato de que seus LEDs podem ser controlados de maneira individual, permitindo que o...
NEWSLETTER
Assine nossa newsletter e receba as novidades.
0 comentários