- Componentes Requeridos
- Descrição do Projeto:
- Módulo de impressão digital:
- Funcionamento do sistema de atendimento baseado em impressão digital
- Diagrama de circuito e descrição para projeto de sistema de atendimento por impressão digital
- Explicação do código:
Os sistemas de atendimento são sistemas comumente usados para marcar a presença em escritórios e escolas. Desde a marcação manual dos registros de presença até o uso de aplicativos de alta tecnologia e sistemas biométricos, esses sistemas melhoraram significativamente. Em nossos projetos anteriores, cobrimos alguns outros projetos de sistema de atendimento eletrônico usando microcontrolador RFID e AVR, 8051 e Raspberry Pi. Neste projeto, usamos o Módulo de impressão digital e o Arduino para obter e manter os dados e registros de atendimento. Ao usar o sensor de impressão digital, o sistema se tornará mais seguro para os usuários. As seções a seguir explicam os detalhes técnicos de como fazer um sistema de atendimento biométrico baseado em impressão digital usando o Arduino.
Componentes Requeridos
- Arduino -1
- Módulo de impressão digital -1
- Botão de pressão - 4
- LEDs -1
- 1K Resistor -2
- 2.2K resistor -1
- Poder
- Fios de conexão
- Caixa
- Buzzer -1
- 16x2 LCD -1
- Pão Tábua -1
- Módulo RTC -1
Descrição do Projeto:
Neste circuito do sistema de atendimento por impressão digital, usamos o módulo Sensor de Impressão Digitalpara autenticar uma pessoa ou funcionário verdadeiro ao inserir o dedo no sistema. Aqui, estamos usando 4 botões de pressão para registrar, Excluir, UP / Down. A tecla ENROLL e DEL possui recursos triplos. A chave ENROLL é usada para registrar uma nova pessoa no sistema. Portanto, quando o usuário deseja registrar um novo dedo, ele precisa pressionar a tecla ENROLL e o LCD pede o ID, onde o usuário deseja armazenar a imagem da impressão digital. Agora, se neste momento o usuário não quiser prosseguir, ele / ela pode pressionar a tecla REGISTRO novamente para voltar. Desta vez, a tecla ENROLL se comporta como a tecla Voltar, ou seja, a tecla ENROLL tem funções de registro e voltar. Além da chave de inscrição, também é usada para baixar dados de atendimento no monitor serial. Da mesma forma, a tecla DEL / OK também tem a mesma função dupla, como quando o usuário registra um novo dedo,em seguida, ele / ela precisa selecionar a identificação do dedo usando outras duas teclas, nomeadamente PARA CIMA e PARA BAIXO. Agora o usuário precisa pressionar a tecla DEL / OK (desta vez, esta tecla se comporta como OK) para prosseguir com o ID selecionado. E a tecla Del é usada para redefinir ou excluir dados da EEPROM do Arduino.
Módulo de impressão digital:
O módulo sensor de impressão digital captura a imagem da impressão digital e, em seguida, converte-a no modelo equivalente e salva-os em sua memória de acordo com a ID selecionada pelo Arduino. Todo o processo é comandado pelo Arduino como tirar uma imagem da impressão digital, convertê-la em modelos e armazená-la como ID etc. Você pode verificar mais alguns projetos usando o módulo de impressão digital:
Sistema de segurança baseado em impressão digital
Máquina de votação biométrica baseada em impressão digital
Aqui, adicionamos um LED amarelo que indica que o módulo de impressão digital está pronto para tirar uma imagem do dedo. Uma campainha também é usada para várias indicações. O Arduino é o principal componente deste sistema, ele é responsável pelo controle de todo o sistema.
Funcionamento do sistema de atendimento baseado em impressão digital
Trabalhando neste projeto de sistema de atendimento por impressão digitalé bastante simples. Em primeiro lugar, o usuário precisa registrar as impressões digitais do usuário com a ajuda de botões. Para fazer isso, o usuário precisa pressionar a tecla ENROLL e, em seguida, o LCD pede para inserir a ID da impressão digital para salvá-la na memória por nome de ID. Portanto, agora o usuário precisa inserir o ID usando as teclas UP / DOWN. Após selecionar o ID, o usuário precisa pressionar a tecla OK (tecla DEL). Agora o LCD pedirá para colocar o dedo sobre o módulo de impressão digital. Agora o usuário precisa colocar seu dedo sobre o módulo de impressão digital e, em seguida, o módulo obtém a imagem digital. Agora o LCD dirá para remover o dedo do módulo de impressão digital e novamente pedirá para colocar o dedo novamente. Agora o usuário precisa colocar o dedo novamente e o módulo pega uma imagem, converte-a em modelos e a armazena por ID selecionado na memória do módulo de impressão digital.Agora o usuário estará cadastrado e poderá alimentar o atendimento colocando o dedo sobre o módulo de impressão digital. Pelo mesmo método, todos os usuários serão cadastrados no sistema.
Agora, se o usuário deseja remover ou excluir qualquer um dos IDs armazenados ou impressão digital, ele / ela precisa pressionar a tecla DEL. Assim que a tecla de exclusão for pressionada, o LCD pedirá para selecionar a ID que precisa ser excluída. Agora o usuário precisa selecionar o ID e pressionar a tecla OK (mesma tecla DEL). Agora o LCD informará que a impressão digital foi excluída com sucesso.
Como funciona o atendimento neste projeto de sistema de atendimento por impressão digital:
Sempre que o usuário colocar o dedo sobre o módulo de impressão digital, o módulo de impressão digital captura a imagem do dedo e pesquisa se algum ID está associado a essa impressão digital no sistema. Se a identificação da impressão digital for detectada, o LCD mostrará Presença registrada e ao mesmo tempo a campainha emitirá um bipe e o LED apagará até que o sistema esteja pronto para receber entrada novamente.
Junto com o módulo de impressão digital, também usamos um módulo RTC para hora e data. A hora e a data estão funcionando continuamente no sistema. Portanto, o Arduino reserva a hora e a data sempre que um verdadeiro usuário coloca seu dedo sobre a impressão digital e salva-as na EEPROM no slot de memória alocado.
Aqui, criamos 5 espaços de usuário neste sistema por 30 dias. Ao pressionar o botão RESET no Arduino e logo em seguida a chave de registro será responsável por baixar os dados de atendimento através do monitor serial da memória EEPROM do Arduino.
Gerenciamento de memória:
Temos 1023 bytes de memória no Arduino UNO, dos quais temos 1018 bytes para armazenar dados e coletamos 5 dados de atendimento do usuário por 30 dias. E cada presença registrará a hora e a data, então isso se torna um dado de 7 bytes.
Portanto, a memória total necessária é
5 * 30 * 7 = 1050 então aqui precisamos de mais 32 bytes
Mas se usarmos 4 usuários, então exigimos
4 * 30 * 7 = 840
Aqui fizemos esta demonstração de projeto ocupando 5 usuários de memória. Com isso, não poderemos armazenar registros de 32 bytes ou 5 presenças do 5º usuário.
Você pode experimentá-lo por 4 usuários, alterando algumas linhas no código. Eu fiz os comentários no código onde as alterações são necessárias.
Diagrama de circuito e descrição para projeto de sistema de atendimento por impressão digital
O circuito deste projeto de sistema de atendimento baseado em impressão digital, conforme mostrado no diagrama acima, é bastante simples. Possui Arduino para controle de todo o processo do projeto, push button para cadastrar, deletar, selecionar IDs e para atendimento, buzzer para alerta, LEDs para indicação e LCD para instruir o usuário e mostrar as mensagens resultantes.
Conforme mostrado no diagrama de circuito, um botão de pressão é conectado diretamente ao pino A0 (ENROLL), A1 (DEL), A2 (UP), A3 (DOWN) do Arduino em relação ao solo e o LED amarelo é conectado no pino digital D7 do Arduino em relação ao aterramento por meio de um resistor de 1k. Rx e Tx do módulo de impressão digital conectados diretamente nos pinos Serial D2 e D3 (Software Serial) do Arduino. A alimentação 5v é usada para alimentar o módulo de impressão digital retirado da placa Arduino. Uma campainha também está conectada no pino A5. Um LCD 16x2 é configurado no modo de 4 bits e seus RS, EN, D4, D5, D6 e D7 são conectados diretamente no pino digital D13, D12, D11, D10, D9 e D8 do Arduino.
Explicação do código:
O código do sistema de atendimento por impressão digital para o arduino é fornecido nas seções subsequentes. Embora o código seja bem explicado com comentários, estamos discutindo aqui algumas partes importantes do código. Usamos a biblioteca de impressão digital para fazer a interface do módulo de impressão digital com a placa Arduino.
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. Depois disso, na função de configuração, damos a direção para definir o pino e iniciar o LCD e o módulo de impressão digital
Depois disso, temos que escrever código para baixar os dados de atendimento.
configuração vazia () {atraso (1000); lcd.begin (16,2); Serial.begin (9600); pinMode (inscrever-se, INPUT_PULLUP); pinMode (up, INPUT_PULLUP); pinMode (desativado, INPUT_PULLUP); pinMode (del, INPUT_PULLUP); pinMode (corresponder, INPUT_PULLUP); pinMode (buzzer, OUTPUT); pinMode (indFinger, OUTPUT); digitalWrite (campainha, LOW); if (digitalRead (matricular) == 0) {digitalWrite (campainha, HIGH); atraso (500); digitalWrite (campainha, LOW); lcd.clear (); lcd.print ("Aguarde"); lcd.setCursor (0,1); lcd.print ("Downloding Data");
Depois disso, temos que escrever o código para limpar os dados de atendimento da EEPROM.
if (digitalRead (del) == 0) {lcd.clear (); lcd.print ("Aguarde"); lcd.setCursor (0,1); lcd.print ("Reinicializando….."); para (int i = 1000; i <1005; i ++) EEPROM.write (i, 0); para (int i = 0; i <841; i ++) EEPROM.write (i, 0xff); lcd.clear (); lcd.print ("Reinicialização do sistema"); atraso (1000); }
Em seguida, iniciamos o módulo de impressão digital, apresentando mensagem de boas-vindas via LCD e também o módulo RTC iniciado.
Depois disso, na função de loop, lemos a hora RTC e a exibimos no LCD
void loop () {now = rtc.now (); lcd.setCursor (0,0); lcd.print ("Tempo->"); lcd.print (now.hour (), DEC); lcd.print (':'); lcd.print (now.minute (), DEC); lcd.print (':'); lcd.print (agora.segundo (), DEC); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Data->"); lcd.print (now.day (), DEC); lcd.print ('/'); lcd.print (now.month (), DEC); lcd.print ('/'); lcd.print (now.year (), DEC);
Depois disso, aguardar a impressão digital para obter entrada e comparar o ID da imagem capturada com IDs armazenados. Se ocorrer uma correspondência, prossiga para a próxima etapa. E verificar as chaves de registro também
resultado interno = getFingerprintIDez (); if (resultado> 0) {digitalWrite (indFinger, LOW); digitalWrite (campainha, ALTO); atraso (100); digitalWrite (campainha, LOW); lcd.clear (); lcd.print ("ID:"); lcd.print (resultado); lcd.setCursor (0,1); lcd.print ("Aguarde…"); atraso (1000); atendimento (resultado); lcd.clear (); lcd.print ("Presença"); lcd.setCursor (0,1); lcd.print ("Registado"); atraso (1000); digitalWrite (indFinger, HIGH); Retorna; }
A função void checkKeys () é usada para verificar se a tecla Inscrever ou DEL está pressionada ou não e o que fazer se pressionada. Se a tecla ENROLL pressionada, a função Enroll () é chamada e a tecla DEL pressionada, a função delete () é chamada.
A função void delet () é usada para inserir o ID a ser excluído e chamar a função uint8_t deleteFingerprint (uint8_t id) que excluirá o dedo dos registros.
A função fornecida é usada para tirar a imagem da impressão digital e convertê-la no modelo e salvar também por ID selecionado na memória do módulo de impressão digital.
uint8_t getFingerprintEnroll () {int p = -1; lcd.clear (); lcd.print ("ID do dedo:"); lcd.print (id); lcd.setCursor (0,1); lcd.print ("Coloque o dedo"); atraso (2000); enquanto (p! = FINGERPRINT_OK) {p = finger.getImage ();…………………
A função dada é usada para armazenar hora e data de atendimento no slot atribuído da EEPROM
anular atendimento (int id) {int user = 0, eepLoc = 0; if (id == 1) {eepLoc = 0; usuário = usuário1 ++; } else if (id == 2) {eepLoc = 210; usuário = usuário2 ++; } else if (id == 3)………….
A função dada é usada para buscar dados da EEPROM e enviar para o monitor serial
void download (int eepIndex) {if (EEPROM.read (eepIndex)! = 0xff) {Serial.print ("T->"); if (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++)); Serial.print (':'); if (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++));………….